| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130 | /* Distributed under the OSI-approved BSD 3-Clause License.  See accompanying   file Copyright.txt or https://cmake.org/licensing for details.  */#ifndef cmCTestRunTest_h#define cmCTestRunTest_h#include "cmConfigure.h" // IWYU pragma: keep#include <memory>#include <set>#include <stddef.h>#include <string>#include <vector>#include "cmCTestTestHandler.h"#include "cmDuration.h"#include "cmProcess.h"class cmCTest;class cmCTestMultiProcessHandler;/** \class cmRunTest * \brief represents a single test to be run * * cmRunTest contains the information related to running a single test */class cmCTestRunTest{public:  explicit cmCTestRunTest(cmCTestMultiProcessHandler& multiHandler);  void SetNumberOfRuns(int n) { this->NumberOfRunsLeft = n; }  void SetRunUntilFailOn() { this->RunUntilFail = true; }  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; }  void AddFailedDependency(const std::string& failedTest)  {    this->FailedDependencies.insert(failedTest);  }  std::string GetProcessOutput() { return this->ProcessOutput; }  cmCTestTestHandler::cmCTestTestResult GetTestResults()  {    return this->TestResult;  }  // Read and store output.  Returns true if it must be called again.  void CheckOutput(std::string const& line);  // launch the test process, return whether it started correctly  bool StartTest(size_t completed, 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();  bool StartAgain(size_t completed);  void StartFailure(std::string const& output);  cmCTest* GetCTest() const { return this->CTest; }  std::string& GetActualCommand() { return this->ActualCommand; }  const std::vector<std::string>& GetArguments() { return this->Arguments; }  void FinalizeTest();  bool TimedOutForStopTime() const { return this->TimeoutIsForStopTime; }private:  bool NeedsToRerun();  void DartProcessing();  void ExeNotFound(std::string exe);  bool ForkProcess(cmDuration testTimeOut, bool explicitTimeout,                   std::vector<std::string>* environment,                   std::vector<size_t>* affinity);  void WriteLogOutputTop(size_t completed, size_t total);  // Run post processing of the process output for MemCheck  void MemCheckPostProcess();  // Returns "completed/total Test #Index: "  std::string GetTestPrefix(size_t completed, size_t total) const;  cmCTestTestHandler::cmCTestTestProperties* TestProperties;  bool TimeoutIsForStopTime = false;  // Pointer back to the "parent"; the handler that invoked this test run  cmCTestTestHandler* TestHandler;  cmCTest* CTest;  std::unique_ptr<cmProcess> TestProcess;  std::string ProcessOutput;  // The test results  cmCTestTestHandler::cmCTestTestResult TestResult;  cmCTestMultiProcessHandler& MultiTestHandler;  int Index;  std::set<std::string> FailedDependencies;  std::string StartTime;  std::string ActualCommand;  std::vector<std::string> Arguments;  bool RunUntilFail;  int NumberOfRunsLeft;  bool RunAgain;  size_t TotalNumberOfTests;};inline int getNumWidth(size_t n){  int w = 1;  while (n >= 10) {    n /= 10;    ++w;  }  return w;}#endif
 |