2004-09-09 16:41:05 +04:00
|
|
|
/*=========================================================================
|
|
|
|
|
|
|
|
Program: CMake - Cross-Platform Makefile Generator
|
|
|
|
Module: $RCSfile$
|
|
|
|
Language: C++
|
|
|
|
Date: $Date$
|
|
|
|
Version: $Revision$
|
|
|
|
|
|
|
|
Copyright (c) 2002 Kitware, Inc. All rights reserved.
|
|
|
|
See Copyright.txt or http://www.cmake.org/HTML/Copyright.html for details.
|
|
|
|
|
|
|
|
This software is distributed WITHOUT ANY WARRANTY; without even
|
|
|
|
the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
|
|
|
|
PURPOSE. See the above copyright notices for more information.
|
|
|
|
|
|
|
|
=========================================================================*/
|
|
|
|
|
|
|
|
#ifndef cmCTestTestHandler_h
|
|
|
|
#define cmCTestTestHandler_h
|
|
|
|
|
|
|
|
|
2005-01-27 19:43:22 +03:00
|
|
|
#include "cmCTestGenericHandler.h"
|
2005-06-07 17:06:38 +04:00
|
|
|
#include <cmsys/RegularExpression.hxx>
|
2004-09-09 16:41:05 +04:00
|
|
|
|
|
|
|
class cmMakefile;
|
|
|
|
|
|
|
|
/** \class cmCTestTestHandler
|
|
|
|
* \brief A class that handles ctest -S invocations
|
|
|
|
*
|
|
|
|
*/
|
2005-01-27 19:43:22 +03:00
|
|
|
class cmCTestTestHandler : public cmCTestGenericHandler
|
2004-09-09 16:41:05 +04:00
|
|
|
{
|
|
|
|
public:
|
2005-06-17 21:04:56 +04:00
|
|
|
cmTypeMacro(cmCTestTestHandler, cmCTestGenericHandler);
|
2004-09-09 16:41:05 +04:00
|
|
|
|
2005-01-27 23:54:47 +03:00
|
|
|
/**
|
2004-09-09 16:41:05 +04:00
|
|
|
* The main entry point for this class
|
|
|
|
*/
|
2005-01-27 23:54:47 +03:00
|
|
|
int ProcessHandler();
|
2004-09-09 16:41:05 +04:00
|
|
|
|
2005-01-27 23:54:47 +03:00
|
|
|
/**
|
2004-11-13 17:55:31 +03:00
|
|
|
* When both -R and -I are used should te resulting test list be the
|
|
|
|
* intersection or the union of the lists. By default it is the
|
|
|
|
* intersection.
|
|
|
|
*/
|
|
|
|
void SetUseUnion(bool val) { m_UseUnion = val; }
|
|
|
|
|
2005-01-27 23:54:47 +03:00
|
|
|
/**
|
|
|
|
* This method is called when reading CTest custom file
|
|
|
|
*/
|
2004-11-13 17:55:31 +03:00
|
|
|
void PopulateCustomVectors(cmMakefile *mf);
|
|
|
|
|
2004-09-09 16:41:05 +04:00
|
|
|
///! Control the use of the regular expresisons, call these methods to turn
|
|
|
|
///them on
|
|
|
|
void UseIncludeRegExp();
|
|
|
|
void UseExcludeRegExp();
|
|
|
|
void SetIncludeRegExp(const char *);
|
|
|
|
void SetExcludeRegExp(const char *);
|
|
|
|
|
|
|
|
|
|
|
|
///! pass the -I argument down
|
|
|
|
void SetTestsToRunInformation(const char*);
|
|
|
|
|
2005-01-27 23:54:47 +03:00
|
|
|
cmCTestTestHandler();
|
2004-09-09 16:41:05 +04:00
|
|
|
|
2005-06-07 17:06:38 +04:00
|
|
|
/*
|
|
|
|
* Add the test to the list of tests to be executed
|
|
|
|
*/
|
|
|
|
bool AddTest(const std::vector<std::string>& args);
|
|
|
|
|
2005-09-07 07:31:41 +04:00
|
|
|
/*
|
|
|
|
* Set tests properties
|
|
|
|
*/
|
|
|
|
bool SetTestsProperties(const std::vector<std::string>& args);
|
|
|
|
|
2004-09-09 16:41:05 +04:00
|
|
|
struct cmCTestTestResult
|
|
|
|
{
|
|
|
|
std::string m_Name;
|
|
|
|
std::string m_Path;
|
|
|
|
std::string m_FullCommandLine;
|
|
|
|
double m_ExecutionTime;
|
|
|
|
int m_ReturnValue;
|
|
|
|
int m_Status;
|
|
|
|
std::string m_CompletionStatus;
|
|
|
|
std::string m_Output;
|
|
|
|
std::string m_RegressionImages;
|
|
|
|
int m_TestCount;
|
|
|
|
};
|
|
|
|
|
2005-06-17 21:04:56 +04:00
|
|
|
void Initialize();
|
|
|
|
|
2005-01-28 00:49:10 +03:00
|
|
|
protected:
|
|
|
|
struct cmCTestTestProperties
|
|
|
|
{
|
|
|
|
cmStdString m_Name;
|
|
|
|
cmStdString m_Directory;
|
2005-06-07 17:06:38 +04:00
|
|
|
std::vector<std::string> m_Args;
|
2005-01-28 00:49:10 +03:00
|
|
|
bool m_IsInBasedOnREOptions;
|
2005-09-07 07:31:41 +04:00
|
|
|
bool m_WillFail;
|
2005-01-28 00:49:10 +03:00
|
|
|
};
|
|
|
|
|
|
|
|
|
2005-01-27 23:54:47 +03:00
|
|
|
virtual int PreProcessHandler();
|
|
|
|
virtual int PostProcessHandler();
|
|
|
|
virtual void GenerateTestCommand(std::vector<const char*>& args);
|
|
|
|
int ExecuteCommands(std::vector<cmStdString>& vec);
|
|
|
|
|
|
|
|
double m_ElapsedTestingTime;
|
|
|
|
|
2004-09-09 16:41:05 +04:00
|
|
|
typedef std::vector<cmCTestTestResult> tm_TestResultsVector;
|
|
|
|
tm_TestResultsVector m_TestResults;
|
|
|
|
|
2005-01-27 23:54:47 +03:00
|
|
|
std::vector<cmStdString> m_CustomTestsIgnore;
|
|
|
|
std::string m_StartTest;
|
|
|
|
std::string m_EndTest;
|
|
|
|
bool m_MemCheck;
|
|
|
|
|
|
|
|
private:
|
|
|
|
enum { // Program statuses
|
|
|
|
NOT_RUN = 0,
|
|
|
|
TIMEOUT,
|
|
|
|
SEGFAULT,
|
|
|
|
ILLEGAL,
|
|
|
|
INTERRUPT,
|
|
|
|
NUMERICAL,
|
|
|
|
OTHER_FAULT,
|
|
|
|
FAILED,
|
|
|
|
BAD_COMMAND,
|
|
|
|
COMPLETED
|
|
|
|
};
|
2004-09-09 16:41:05 +04:00
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Generate the Dart compatible output
|
|
|
|
*/
|
2005-01-27 23:54:47 +03:00
|
|
|
virtual void GenerateDartOutput(std::ostream& os);
|
2004-09-09 16:41:05 +04:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Run the test for a directory and any subdirectories
|
|
|
|
*/
|
|
|
|
void ProcessDirectory(std::vector<cmStdString> &passed,
|
2005-01-27 23:54:47 +03:00
|
|
|
std::vector<cmStdString> &failed);
|
2004-11-13 17:55:31 +03:00
|
|
|
|
2004-09-09 16:41:05 +04:00
|
|
|
|
|
|
|
typedef std::vector<cmCTestTestProperties> tm_ListOfTests;
|
|
|
|
/**
|
|
|
|
* Get the list of tests in directory and subdirectories.
|
|
|
|
*/
|
2005-06-07 17:06:38 +04:00
|
|
|
void GetListOfTests();
|
2004-09-09 16:41:05 +04:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Find the executable for a test
|
|
|
|
*/
|
|
|
|
std::string FindTheExecutable(const char *exe);
|
|
|
|
|
|
|
|
const char* GetTestStatus(int status);
|
|
|
|
void ExpandTestsToRunInformation(int numPossibleTests);
|
|
|
|
|
|
|
|
std::vector<cmStdString> m_CustomPreTest;
|
|
|
|
std::vector<cmStdString> m_CustomPostTest;
|
|
|
|
|
2005-01-26 19:13:12 +03:00
|
|
|
int m_CustomMaximumPassedTestOutputSize;
|
|
|
|
int m_CustomMaximumFailedTestOutputSize;
|
|
|
|
|
2004-09-09 16:41:05 +04:00
|
|
|
std::vector<int> m_TestsToRun;
|
|
|
|
|
|
|
|
bool m_UseIncludeRegExp;
|
|
|
|
bool m_UseExcludeRegExp;
|
|
|
|
bool m_UseExcludeRegExpFirst;
|
|
|
|
std::string m_IncludeRegExp;
|
|
|
|
std::string m_ExcludeRegExp;
|
2005-06-07 17:06:38 +04:00
|
|
|
cmsys::RegularExpression m_IncludeTestsRegularExpression;
|
|
|
|
cmsys::RegularExpression m_ExcludeTestsRegularExpression;
|
2004-09-09 16:41:05 +04:00
|
|
|
|
|
|
|
std::string GenerateRegressionImages(const std::string& xml);
|
|
|
|
|
2005-01-26 19:13:12 +03:00
|
|
|
//! Clean test output to specified length
|
|
|
|
bool CleanTestOutput(std::string& output, size_t length);
|
|
|
|
|
2004-09-09 16:41:05 +04:00
|
|
|
std::string TestsToRunString;
|
2004-11-13 17:55:31 +03:00
|
|
|
bool m_UseUnion;
|
2005-06-07 17:06:38 +04:00
|
|
|
tm_ListOfTests m_TestList;
|
2005-07-03 06:30:37 +04:00
|
|
|
cmsys::RegularExpression m_DartStuff;
|
2005-08-18 21:50:16 +04:00
|
|
|
|
2005-08-19 00:17:18 +04:00
|
|
|
std::ostream* m_LogFile;
|
2004-09-09 16:41:05 +04:00
|
|
|
};
|
|
|
|
|
|
|
|
#endif
|