diff options
Diffstat (limited to 'Source/CTest/cmCTestRunTest.h')
-rw-r--r-- | Source/CTest/cmCTestRunTest.h | 112 |
1 files changed, 112 insertions, 0 deletions
diff --git a/Source/CTest/cmCTestRunTest.h b/Source/CTest/cmCTestRunTest.h new file mode 100644 index 0000000..476f3e1 --- /dev/null +++ b/Source/CTest/cmCTestRunTest.h @@ -0,0 +1,112 @@ +/*============================================================================ + 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 + |