| /*============================================================================ |
| CMake - Cross Platform Makefile Generator |
| Copyright 2000-2009 Kitware, Inc., Insight Software Consortium |
| |
| Distributed under the OSI-approved BSD License (the "License"); |
| see accompanying file Copyright.txt for details. |
| |
| This software is distributed WITHOUT ANY WARRANTY; without even the |
| implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. |
| See the License for more information. |
| ============================================================================*/ |
| #ifndef cmCTestRunTest_h |
| #define cmCTestRunTest_h |
| |
| #include <cmStandardIncludes.h> |
| #include <cmCTestTestHandler.h> |
| #include <cmProcess.h> |
| |
| /** \class cmRunTest |
| * \brief represents a single test to be run |
| * |
| * cmRunTest contains the information related to running a single test |
| */ |
| class cmCTestRunTest |
| { |
| public: |
| cmCTestRunTest(cmCTestTestHandler* handler); |
| ~cmCTestRunTest(); |
| |
| void SetTestProperties(cmCTestTestHandler::cmCTestTestProperties * prop) |
| { this->TestProperties = prop; } |
| |
| cmCTestTestHandler::cmCTestTestProperties * GetTestProperties() |
| { return this->TestProperties; } |
| |
| void SetIndex(int i) { this->Index = i; } |
| |
| int GetIndex() { return this->Index; } |
| |
| std::string GetProcessOutput() { return this->ProcessOutput; } |
| |
| bool IsStopTimePassed() { return this->StopTimePassed; } |
| |
| cmCTestTestHandler::cmCTestTestResult GetTestResults() |
| { return this->TestResult; } |
| |
| // Read and store output. Returns true if it must be called again. |
| bool CheckOutput(); |
| |
| // Compresses the output, writing to CompressedOutput |
| void CompressOutput(); |
| |
| //launch the test process, return whether it started correctly |
| bool StartTest(size_t total); |
| //capture and report the test results |
| bool EndTest(size_t completed, size_t total, bool started); |
| //Called by ctest -N to log the command string |
| void ComputeArguments(); |
| |
| void ComputeWeightedCost(); |
| private: |
| void DartProcessing(); |
| void ExeNotFound(std::string exe); |
| // Figures out a final timeout which is min(STOP_TIME, NOW+TIMEOUT) |
| double ResolveTimeout(); |
| bool ForkProcess(double testTimeOut, bool explicitTimeout, |
| std::vector<std::string>* environment); |
| void WriteLogOutputTop(size_t completed, size_t total); |
| //Run post processing of the process output for MemCheck |
| void MemCheckPostProcess(); |
| |
| cmCTestTestHandler::cmCTestTestProperties * TestProperties; |
| //Pointer back to the "parent"; the handler that invoked this test run |
| cmCTestTestHandler * TestHandler; |
| cmCTest * CTest; |
| cmProcess * TestProcess; |
| //If the executable to run is ctest, don't create a new process; |
| //just instantiate a new cmTest. (Can be disabled for a single test |
| //if this option is set to false.) |
| //bool OptimizeForCTest; |
| |
| bool UsePrefixCommand; |
| std::string PrefixCommand; |
| |
| std::string ProcessOutput; |
| std::string CompressedOutput; |
| double CompressionRatio; |
| //The test results |
| cmCTestTestHandler::cmCTestTestResult TestResult; |
| int Index; |
| std::string StartTime; |
| std::string ActualCommand; |
| std::vector<std::string> Arguments; |
| bool StopTimePassed; |
| }; |
| |
| inline int getNumWidth(size_t n) |
| { |
| int numWidth = 1; |
| if(n >= 10) |
| { |
| numWidth = 2; |
| } |
| if(n >= 100) |
| { |
| numWidth = 3; |
| } |
| return numWidth; |
| } |
| |
| #endif |
| |