ENH: Add support for shrinking the output of the test

This commit is contained in:
Andy Cedilnik 2005-01-26 11:13:12 -05:00
parent f7063fc661
commit f6cd83d6f3
2 changed files with 83 additions and 0 deletions

View File

@ -198,6 +198,9 @@ cmCTestTestHandler::cmCTestTestHandler()
m_UseIncludeRegExp = false;
m_UseExcludeRegExp = false;
m_UseExcludeRegExpFirst = false;
m_CustomMaximumPassedTestOutputSize = 1 * 1024;
m_CustomMaximumFailedTestOutputSize = 300 * 1024;
}
//----------------------------------------------------------------------
@ -218,6 +221,12 @@ void cmCTestTestHandler::PopulateCustomVectors(cmMakefile *mf)
cmCTest::PopulateCustomVector(mf,
"CTEST_CUSTOM_MEMCHECK_IGNORE",
m_CustomMemCheckIgnore);
cmCTest::PopulateCustomInteger(mf,
"CTEST_CUSTOM_MAXIMUM_PASSED_TEST_OUTPUT_SIZE",
m_CustomMaximumPassedTestOutputSize);
cmCTest::PopulateCustomInteger(mf,
"CTEST_CUSTOM_MAXIMUM_FAILED_TEST_OUTPUT_SIZE",
m_CustomMaximumFailedTestOutputSize);
}
@ -647,6 +656,15 @@ void cmCTestTestHandler::ProcessDirectory(std::vector<cmStdString> &passed,
}
}
if ( cres.m_Status == cmCTestTestHandler::COMPLETED )
{
this->CleanTestOutput(output, static_cast<size_t>(m_CustomMaximumPassedTestOutputSize));
}
else
{
this->CleanTestOutput(output, static_cast<size_t>(m_CustomMaximumFailedTestOutputSize));
}
cres.m_Output = output;
cres.m_ReturnValue = retVal;
cres.m_CompletionStatus = "Completed";
@ -1640,3 +1658,62 @@ void cmCTestTestHandler::SetTestsToRunInformation(const char* in)
}
}
bool cmCTestTestHandler::CleanTestOutput(std::string& output, size_t remove_threshold)
{
if ( remove_threshold == 0 )
{
return true;
}
if ( output.find("CTEST_FULL_OUTPUT") != output.npos )
{
return true;
}
cmOStringStream ostr;
std::string::size_type cc;
std::string::size_type skipsize;
int inTag = 0;
int skipped = 0;
for ( cc = 0; cc < output.size(); cc ++ )
{
int ch = output[cc];
if ( ch < 0 || ch > 255 )
{
break;
}
if ( ch == '<' )
{
inTag = 1;
}
if ( !inTag )
{
int notskip = 0;
// Skip
if ( skipsize < remove_threshold )
{
ostr << static_cast<char>(ch);
notskip = 1;
}
skipsize ++;
if ( notskip && skipsize >= remove_threshold )
{
skipped = 1;
}
}
else
{
ostr << static_cast<char>(ch);
}
if ( ch == '>' )
{
inTag = 0;
}
}
if ( skipped )
{
ostr << "..." << std::endl << "The rest of the test output was removed since it exceeds the threshold of "
<< remove_threshold << " characters." << std::endl;
}
output = ostr.str();
return true;
}

View File

@ -189,6 +189,9 @@ private:
std::vector<cmStdString> m_CustomTestsIgnore;
std::vector<cmStdString> m_CustomMemCheckIgnore;
int m_CustomMaximumPassedTestOutputSize;
int m_CustomMaximumFailedTestOutputSize;
std::string m_StartTest;
std::string m_EndTest;
double m_ElapsedTestingTime;
@ -212,6 +215,9 @@ private:
bool ProcessMemCheckPurifyOutput(const std::string& str,
std::string& log, int* results);
//! Clean test output to specified length
bool CleanTestOutput(std::string& output, size_t length);
std::string TestsToRunString;
bool m_UseUnion;
};