ENH: Add logging of tests while running. This way you can actually see the output as it goes
This commit is contained in:
parent
a1e4c4f1df
commit
d278cde9e7
|
@ -1791,7 +1791,7 @@ void cmCTest::GenerateDartBuildOutput(std::ostream& os,
|
||||||
|
|
||||||
void cmCTest::ProcessDirectory(cmCTest::tm_VectorOfStrings &passed,
|
void cmCTest::ProcessDirectory(cmCTest::tm_VectorOfStrings &passed,
|
||||||
cmCTest::tm_VectorOfStrings &failed,
|
cmCTest::tm_VectorOfStrings &failed,
|
||||||
bool memcheck)
|
bool memcheck, std::ostream* logfile)
|
||||||
{
|
{
|
||||||
// does the DartTestfile.txt exist ?
|
// does the DartTestfile.txt exist ?
|
||||||
if(!cmSystemTools::FileExists("DartTestfile.txt"))
|
if(!cmSystemTools::FileExists("DartTestfile.txt"))
|
||||||
|
@ -1831,7 +1831,7 @@ void cmCTest::ProcessDirectory(cmCTest::tm_VectorOfStrings &passed,
|
||||||
if (cmSystemTools::FileIsDirectory(nwd.c_str()))
|
if (cmSystemTools::FileIsDirectory(nwd.c_str()))
|
||||||
{
|
{
|
||||||
cmSystemTools::ChangeDirectory(nwd.c_str());
|
cmSystemTools::ChangeDirectory(nwd.c_str());
|
||||||
this->ProcessDirectory(passed, failed, memcheck);
|
this->ProcessDirectory(passed, failed, memcheck, logfile);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// return to the original directory
|
// return to the original directory
|
||||||
|
@ -1984,11 +1984,33 @@ void cmCTest::ProcessDirectory(cmCTest::tm_VectorOfStrings &passed,
|
||||||
std::cout << "Memory check command: " << memcheckcommand << std::endl;
|
std::cout << "Memory check command: " << memcheckcommand << std::endl;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if ( logfile )
|
||||||
|
{
|
||||||
|
*logfile << "Command: ";
|
||||||
|
tm_VectorOfStrings::size_type ll;
|
||||||
|
for ( ll = 0; ll < arguments.size()-1; ll ++ )
|
||||||
|
{
|
||||||
|
*logfile << "\"" << arguments[ll] << "\" ";
|
||||||
|
}
|
||||||
|
*logfile
|
||||||
|
<< std::endl
|
||||||
|
<< "Directory: " << cmSystemTools::GetCurrentWorkingDirectory() << std::endl
|
||||||
|
<< "Output:" << std::endl
|
||||||
|
<< "----------------------------------------------------------"
|
||||||
|
<< std::endl;
|
||||||
|
}
|
||||||
int res = 0;
|
int res = 0;
|
||||||
if ( !m_ShowOnly )
|
if ( !m_ShowOnly )
|
||||||
{
|
{
|
||||||
res = this->RunTest(arguments, &output, &retVal);
|
res = this->RunTest(arguments, &output, &retVal, logfile);
|
||||||
}
|
}
|
||||||
|
if ( logfile )
|
||||||
|
{
|
||||||
|
*logfile
|
||||||
|
<< "----------------------------------------------------------"
|
||||||
|
<< std::endl << std::endl;
|
||||||
|
}
|
||||||
|
|
||||||
clock_finish = cmSystemTools::GetTime();
|
clock_finish = cmSystemTools::GetTime();
|
||||||
|
|
||||||
cres.m_ExecutionTime = (double)(clock_finish - clock_start);
|
cres.m_ExecutionTime = (double)(clock_finish - clock_start);
|
||||||
|
@ -2196,8 +2218,14 @@ int cmCTest::TestDirectory(bool memcheck)
|
||||||
cmCTest::tm_VectorOfStrings failed;
|
cmCTest::tm_VectorOfStrings failed;
|
||||||
int total;
|
int total;
|
||||||
|
|
||||||
|
std::ofstream ofs;
|
||||||
|
std::ofstream *olog = 0;
|
||||||
|
if ( this->OpenOutputFile("Temporary", (memcheck?"LastMemCheck.xml":"LastTest.log"), ofs) )
|
||||||
|
{
|
||||||
|
olog = &ofs;
|
||||||
|
}
|
||||||
m_StartTest = ::CurrentTime();
|
m_StartTest = ::CurrentTime();
|
||||||
this->ProcessDirectory(passed, failed, memcheck);
|
this->ProcessDirectory(passed, failed, memcheck, olog);
|
||||||
m_EndTest = ::CurrentTime();
|
m_EndTest = ::CurrentTime();
|
||||||
|
|
||||||
total = int(passed.size()) + int(failed.size());
|
total = int(passed.size()) + int(failed.size());
|
||||||
|
@ -2933,7 +2961,8 @@ int cmCTest::RunMakeCommand(const char* command, std::string* output,
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
int cmCTest::RunTest(std::vector<const char*> argv, std::string* output, int *retVal)
|
int cmCTest::RunTest(std::vector<const char*> argv, std::string* output, int *retVal,
|
||||||
|
std::ostream* log)
|
||||||
{
|
{
|
||||||
if(cmSystemTools::SameFile(argv[0], m_CTestSelf.c_str()))
|
if(cmSystemTools::SameFile(argv[0], m_CTestSelf.c_str()))
|
||||||
{
|
{
|
||||||
|
@ -2946,9 +2975,17 @@ int cmCTest::RunTest(std::vector<const char*> argv, std::string* output, int *re
|
||||||
args.push_back(argv[i]);
|
args.push_back(argv[i]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if ( *log )
|
||||||
|
{
|
||||||
|
*log << "* Run internal CTest" << std::endl;
|
||||||
|
}
|
||||||
std::string oldpath = cmSystemTools::GetCurrentWorkingDirectory();
|
std::string oldpath = cmSystemTools::GetCurrentWorkingDirectory();
|
||||||
|
|
||||||
*retVal = inst.Run(args, output);
|
*retVal = inst.Run(args, output);
|
||||||
|
if ( *log )
|
||||||
|
{
|
||||||
|
*log << output->c_str();
|
||||||
|
}
|
||||||
cmSystemTools::ChangeDirectory(oldpath.c_str());
|
cmSystemTools::ChangeDirectory(oldpath.c_str());
|
||||||
|
|
||||||
if(m_Verbose)
|
if(m_Verbose)
|
||||||
|
@ -2987,6 +3024,11 @@ int cmCTest::RunTest(std::vector<const char*> argv, std::string* output, int *re
|
||||||
std::cout.write(data, length);
|
std::cout.write(data, length);
|
||||||
std::cout.flush();
|
std::cout.flush();
|
||||||
}
|
}
|
||||||
|
if ( log )
|
||||||
|
{
|
||||||
|
log->write(data, length);
|
||||||
|
log->flush();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
cmsysProcess_WaitForExit(cp, 0);
|
cmsysProcess_WaitForExit(cp, 0);
|
||||||
|
@ -4405,7 +4447,7 @@ int cmCTest::RunCMakeAndTest(std::string* outstring)
|
||||||
out << m_TestCommandArgs[k] << " ";
|
out << m_TestCommandArgs[k] << " ";
|
||||||
}
|
}
|
||||||
out << "\n";
|
out << "\n";
|
||||||
int runTestRes = this->RunTest(testCommand, &outs, &retval);
|
int runTestRes = this->RunTest(testCommand, &outs, &retval, 0);
|
||||||
if(runTestRes != cmsysProcess_State_Exited || retval != 0)
|
if(runTestRes != cmsysProcess_State_Exited || retval != 0)
|
||||||
{
|
{
|
||||||
out << "Test failed to run.\n";
|
out << "Test failed to run.\n";
|
||||||
|
|
|
@ -95,7 +95,8 @@ public:
|
||||||
*/
|
*/
|
||||||
void ProcessDirectory(tm_VectorOfStrings &passed,
|
void ProcessDirectory(tm_VectorOfStrings &passed,
|
||||||
tm_VectorOfStrings &failed,
|
tm_VectorOfStrings &failed,
|
||||||
bool memcheck);
|
bool memcheck,
|
||||||
|
std::ostream* logfile);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Find the executable for a test
|
* Find the executable for a test
|
||||||
|
@ -359,7 +360,8 @@ private:
|
||||||
|
|
||||||
//! Run command specialized for tests. Returns process status and retVal is
|
//! Run command specialized for tests. Returns process status and retVal is
|
||||||
// return value or exception.
|
// return value or exception.
|
||||||
int RunTest(std::vector<const char*> args, std::string* output, int *retVal);
|
int RunTest(std::vector<const char*> args, std::string* output, int *retVal,
|
||||||
|
std::ostream* logfile);
|
||||||
|
|
||||||
std::string GenerateRegressionImages(const std::string& xml);
|
std::string GenerateRegressionImages(const std::string& xml);
|
||||||
const char* GetTestStatus(int status);
|
const char* GetTestStatus(int status);
|
||||||
|
|
Loading…
Reference in New Issue