ENH: Add support for shrinking the output of the test
This commit is contained in:
parent
f7063fc661
commit
f6cd83d6f3
@ -198,6 +198,9 @@ cmCTestTestHandler::cmCTestTestHandler()
|
|||||||
m_UseIncludeRegExp = false;
|
m_UseIncludeRegExp = false;
|
||||||
m_UseExcludeRegExp = false;
|
m_UseExcludeRegExp = false;
|
||||||
m_UseExcludeRegExpFirst = false;
|
m_UseExcludeRegExpFirst = false;
|
||||||
|
|
||||||
|
m_CustomMaximumPassedTestOutputSize = 1 * 1024;
|
||||||
|
m_CustomMaximumFailedTestOutputSize = 300 * 1024;
|
||||||
}
|
}
|
||||||
|
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
@ -218,6 +221,12 @@ void cmCTestTestHandler::PopulateCustomVectors(cmMakefile *mf)
|
|||||||
cmCTest::PopulateCustomVector(mf,
|
cmCTest::PopulateCustomVector(mf,
|
||||||
"CTEST_CUSTOM_MEMCHECK_IGNORE",
|
"CTEST_CUSTOM_MEMCHECK_IGNORE",
|
||||||
m_CustomMemCheckIgnore);
|
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_Output = output;
|
||||||
cres.m_ReturnValue = retVal;
|
cres.m_ReturnValue = retVal;
|
||||||
cres.m_CompletionStatus = "Completed";
|
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;
|
||||||
|
}
|
||||||
|
|
||||||
|
@ -189,6 +189,9 @@ private:
|
|||||||
std::vector<cmStdString> m_CustomTestsIgnore;
|
std::vector<cmStdString> m_CustomTestsIgnore;
|
||||||
std::vector<cmStdString> m_CustomMemCheckIgnore;
|
std::vector<cmStdString> m_CustomMemCheckIgnore;
|
||||||
|
|
||||||
|
int m_CustomMaximumPassedTestOutputSize;
|
||||||
|
int m_CustomMaximumFailedTestOutputSize;
|
||||||
|
|
||||||
std::string m_StartTest;
|
std::string m_StartTest;
|
||||||
std::string m_EndTest;
|
std::string m_EndTest;
|
||||||
double m_ElapsedTestingTime;
|
double m_ElapsedTestingTime;
|
||||||
@ -212,6 +215,9 @@ private:
|
|||||||
bool ProcessMemCheckPurifyOutput(const std::string& str,
|
bool ProcessMemCheckPurifyOutput(const std::string& str,
|
||||||
std::string& log, int* results);
|
std::string& log, int* results);
|
||||||
|
|
||||||
|
//! Clean test output to specified length
|
||||||
|
bool CleanTestOutput(std::string& output, size_t length);
|
||||||
|
|
||||||
std::string TestsToRunString;
|
std::string TestsToRunString;
|
||||||
bool m_UseUnion;
|
bool m_UseUnion;
|
||||||
};
|
};
|
||||||
|
Loading…
x
Reference in New Issue
Block a user