CMake/Source/cmCTest.h

235 lines
5.3 KiB
C
Raw Normal View History

2001-08-23 19:12:19 +04:00
/*=========================================================================
Program: CMake - Cross-Platform Makefile Generator
2001-08-23 19:12:19 +04:00
Module: $RCSfile$
Language: C++
Date: $Date$
Version: $Revision$
Copyright (c) 2002 Kitware, Inc., Insight Consortium. All rights reserved.
See Copyright.txt or http://www.cmake.org/HTML/Copyright.html for details.
2001-08-23 19:12:19 +04:00
2002-01-21 23:30:43 +03:00
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.
2001-08-23 19:12:19 +04:00
=========================================================================*/
2003-02-11 05:52:01 +03:00
#ifndef cmCTest_h
#define cmCTest_h
2001-08-23 19:12:19 +04:00
#include "cmStandardIncludes.h"
2002-05-22 17:47:41 +04:00
2002-12-17 05:19:21 +03:00
class cmCTest
2001-08-23 19:12:19 +04:00
{
public:
/**
* Initialize and finalize testing
*/
void Initialize();
void Finalize();
/**
* Process the tests. This is the main routine. The execution of the
* tests should look like this:
*
* ctest foo;
* foo.Initialize();
* // Set some things on foo
* foo.ProcessTests();
* foo.Finalize();
*/
int ProcessTests();
/**
* Try to build the project
*/
int BuildDirectory();
/**
* Try to run tests of the project
*/
int TestDirectory();
2002-12-09 06:36:54 +03:00
/**
* Try to get coverage of the project
*/
int CoverageDirectory();
/**
* Do revision control update of directory
*/
int UpdateDirectory();
2001-08-23 19:12:19 +04:00
/**
* Do configure the project
*/
int ConfigureDirectory();
2003-01-07 07:13:15 +03:00
/**
* Do submit testing results
*/
int SubmitResults();
std::string GetSubmitResultsPrefix();
/**
* Check if CTest file exists
*/
bool CTestFileExists(const std::string& filename);
2001-08-23 19:12:19 +04:00
/**
* Run the test for a directory and any subdirectories
*/
void ProcessDirectory(std::vector<std::string> &passed,
std::vector<std::string> &failed);
2001-08-23 19:12:19 +04:00
/**
* Find the executable for a test
*/
2003-03-20 00:11:19 +03:00
std::string FindTheExecutable(const char *exe);
2001-08-23 19:12:19 +04:00
/**
* Set the cmake test
*/
bool SetTest(const char*);
2003-02-11 05:52:01 +03:00
/**
* Set the cmake test mode (experimental, nightly, continuous).
*/
void SetTestModel(int mode)
{
m_TestModel = mode;
}
std::string GetTestModelString();
2001-08-23 19:12:19 +04:00
/**
* constructor
*/
2002-12-17 05:19:21 +03:00
cmCTest();
bool m_UseIncludeRegExp;
std::string m_IncludeRegExp;
bool m_UseExcludeRegExp;
bool m_UseExcludeRegExpFirst;
std::string m_ExcludeRegExp;
2001-08-30 00:42:03 +04:00
std::string m_ConfigType;
bool m_Verbose;
bool m_DartMode;
bool m_ShowOnly;
2003-02-11 05:52:01 +03:00
enum {
EXPERIMENTAL,
NIGHTLY,
CONTINUOUS
};
2001-08-23 19:12:19 +04:00
private:
enum {
2003-02-11 07:19:01 +03:00
FIRST_TEST = 0,
UPDATE_TEST = 1,
2003-03-20 00:35:02 +03:00
START_TEST = 2,
CONFIGURE_TEST = 3,
BUILD_TEST = 4,
TEST_TEST = 5,
COVERAGE_TEST = 6,
PURIFY_TEST = 7,
SUBMIT_TEST = 8,
ALL_TEST = 9,
LAST_TEST = 10
};
struct cmCTestTestResult
{
std::string m_Name;
std::string m_Path;
std::string m_FullCommandLine;
double m_ExecutionTime;
int m_ReturnValue;
std::string m_CompletionStatus;
std::string m_Output;
2003-08-09 02:28:03 +04:00
std::string m_RegressionImages;
};
2002-10-09 06:00:11 +04:00
struct cmCTestBuildErrorWarning
{
bool m_Error;
int m_LogLine;
std::string m_Text;
std::string m_SourceFile;
std::string m_SourceFileTail;
int m_LineNumber;
std::string m_PreContext;
std::string m_PostContext;
};
2003-02-07 08:09:24 +03:00
// Some structures needed for cvs update
struct StringPair :
public std::pair<std::string, std::string>{};
struct UpdateFiles : public std::vector<StringPair>{};
struct AuthorsToUpdatesMap :
public std::map<std::string, UpdateFiles>{};
2002-12-09 06:36:54 +03:00
struct cmCTestCoverage
{
cmCTestCoverage()
{
2003-04-08 02:21:04 +04:00
m_AbsolutePath = "";
2002-12-09 06:36:54 +03:00
m_FullPath = "";
m_Covered = false;
m_Tested = 0;
m_UnTested = 0;
m_Lines.clear();
m_Show = false;
2002-12-09 06:36:54 +03:00
}
2003-04-08 02:21:04 +04:00
std::string m_AbsolutePath;
2002-12-09 06:36:54 +03:00
std::string m_FullPath;
bool m_Covered;
int m_Tested;
int m_UnTested;
std::vector<int> m_Lines;
bool m_Show;
2002-12-09 06:36:54 +03:00
};
typedef std::vector<cmCTestTestResult> tm_TestResultsVector;
typedef std::map<std::string, std::string> tm_DartConfigurationMap;
2002-12-09 06:36:54 +03:00
typedef std::map<std::string, cmCTestCoverage> tm_CoverageMap;
tm_TestResultsVector m_TestResults;
std::string m_ToplevelPath;
tm_DartConfigurationMap m_DartConfiguration;
int m_Tests[LAST_TEST];
std::string m_CurrentTag;
2002-10-09 06:00:11 +04:00
std::string m_StartBuild;
std::string m_EndBuild;
std::string m_StartTest;
std::string m_EndTest;
2002-10-09 06:00:11 +04:00
2003-02-11 17:19:36 +03:00
int m_TestModel;
2003-02-11 05:52:01 +03:00
2003-08-04 06:36:17 +04:00
int m_TimeOut;
2002-10-09 06:00:11 +04:00
/**
* Generate the Dart compatible output
*/
2003-08-09 02:28:03 +04:00
void GenerateDartTestOutput(std::ostream& os);
2002-10-09 06:00:11 +04:00
void GenerateDartBuildOutput(std::ostream& os,
std::vector<cmCTestBuildErrorWarning>);
2002-12-09 06:36:54 +03:00
bool OpenOutputFile(const std::string& path,
const std::string& name, std::ofstream& stream);
std::string MakeXMLSafe(const std::string&);
2003-04-02 18:19:45 +04:00
std::string MakeURLSafe(const std::string&);
bool RunMakeCommand(const char* command, std::string* output,
int* retVal, const char* dir, bool verbose, int timeout, std::ofstream& ofs);
2003-08-09 02:28:03 +04:00
std::string GenerateRegressionImages(const std::string& xml);
2001-08-23 19:12:19 +04:00
};
2003-02-11 05:52:01 +03:00
#endif