|
|
@@ -181,6 +181,7 @@ bool cmCTestRunTest::EndTest(size_t completed, size_t total, bool started)
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
+ std::ostringstream outputStream;
|
|
|
if (res == cmProcess::State::Exited) {
|
|
|
bool success = !forceFail &&
|
|
|
(retVal == 0 ||
|
|
|
@@ -196,36 +197,36 @@ bool cmCTestRunTest::EndTest(size_t completed, size_t total, bool started)
|
|
|
} else if ((success && !this->TestProperties->WillFail) ||
|
|
|
(!success && this->TestProperties->WillFail)) {
|
|
|
this->TestResult.Status = cmCTestTestHandler::COMPLETED;
|
|
|
- cmCTestLog(this->CTest, HANDLER_OUTPUT, " Passed ");
|
|
|
+ outputStream << " Passed ";
|
|
|
} else {
|
|
|
this->TestResult.Status = cmCTestTestHandler::FAILED;
|
|
|
- cmCTestLog(this->CTest, HANDLER_OUTPUT, "***Failed " << reason);
|
|
|
+ outputStream << "***Failed " << reason;
|
|
|
outputTestErrorsToConsole = this->CTest->OutputTestOutputOnTestFailure;
|
|
|
}
|
|
|
} else if (res == cmProcess::State::Expired) {
|
|
|
- cmCTestLog(this->CTest, HANDLER_OUTPUT, "***Timeout ");
|
|
|
+ outputStream << "***Timeout ";
|
|
|
this->TestResult.Status = cmCTestTestHandler::TIMEOUT;
|
|
|
outputTestErrorsToConsole = this->CTest->OutputTestOutputOnTestFailure;
|
|
|
} else if (res == cmProcess::State::Exception) {
|
|
|
outputTestErrorsToConsole = this->CTest->OutputTestOutputOnTestFailure;
|
|
|
- cmCTestLog(this->CTest, HANDLER_OUTPUT, "***Exception: ");
|
|
|
+ outputStream << "***Exception: ";
|
|
|
this->TestResult.ExceptionStatus =
|
|
|
this->TestProcess->GetExitExceptionString();
|
|
|
switch (this->TestProcess->GetExitException()) {
|
|
|
case cmProcess::Exception::Fault:
|
|
|
- cmCTestLog(this->CTest, HANDLER_OUTPUT, "SegFault");
|
|
|
+ outputStream << "SegFault";
|
|
|
this->TestResult.Status = cmCTestTestHandler::SEGFAULT;
|
|
|
break;
|
|
|
case cmProcess::Exception::Illegal:
|
|
|
- cmCTestLog(this->CTest, HANDLER_OUTPUT, "Illegal");
|
|
|
+ outputStream << "Illegal";
|
|
|
this->TestResult.Status = cmCTestTestHandler::ILLEGAL;
|
|
|
break;
|
|
|
case cmProcess::Exception::Interrupt:
|
|
|
- cmCTestLog(this->CTest, HANDLER_OUTPUT, "Interrupt");
|
|
|
+ outputStream << "Interrupt";
|
|
|
this->TestResult.Status = cmCTestTestHandler::INTERRUPT;
|
|
|
break;
|
|
|
case cmProcess::Exception::Numerical:
|
|
|
- cmCTestLog(this->CTest, HANDLER_OUTPUT, "Numerical");
|
|
|
+ outputStream << "Numerical";
|
|
|
this->TestResult.Status = cmCTestTestHandler::NUMERICAL;
|
|
|
break;
|
|
|
default:
|
|
|
@@ -234,16 +235,18 @@ bool cmCTestRunTest::EndTest(size_t completed, size_t total, bool started)
|
|
|
this->TestResult.Status = cmCTestTestHandler::OTHER_FAULT;
|
|
|
}
|
|
|
} else if ("Disabled" == this->TestResult.CompletionStatus) {
|
|
|
- cmCTestLog(this->CTest, HANDLER_OUTPUT, "***Not Run (Disabled) ");
|
|
|
+ outputStream << "***Not Run (Disabled) ";
|
|
|
} else // cmProcess::State::Error
|
|
|
{
|
|
|
- cmCTestLog(this->CTest, HANDLER_OUTPUT, "***Not Run ");
|
|
|
+ outputStream << "***Not Run ";
|
|
|
}
|
|
|
|
|
|
passed = this->TestResult.Status == cmCTestTestHandler::COMPLETED;
|
|
|
char buf[1024];
|
|
|
sprintf(buf, "%6.2f sec", this->TestProcess->GetTotalTime().count());
|
|
|
- cmCTestLog(this->CTest, HANDLER_OUTPUT, buf << "\n");
|
|
|
+ outputStream << buf << "\n";
|
|
|
+
|
|
|
+ cmCTestLog(this->CTest, HANDLER_OUTPUT, outputStream.str());
|
|
|
|
|
|
if (outputTestErrorsToConsole) {
|
|
|
cmCTestLog(this->CTest, HANDLER_OUTPUT, this->ProcessOutput << std::endl);
|
|
|
@@ -689,6 +692,8 @@ bool cmCTestRunTest::ForkProcess(cmDuration testTimeOut, bool explicitTimeout,
|
|
|
|
|
|
void cmCTestRunTest::WriteLogOutputTop(size_t completed, size_t total)
|
|
|
{
|
|
|
+ std::ostringstream outputStream;
|
|
|
+
|
|
|
// if this is the last or only run of this test
|
|
|
// then print out completed / total
|
|
|
// Only issue is if a test fails and we are running until fail
|
|
|
@@ -696,37 +701,32 @@ void cmCTestRunTest::WriteLogOutputTop(size_t completed, size_t total)
|
|
|
// got for run until pass. Trick is when this is called we don't
|
|
|
// yet know if we are passing or failing.
|
|
|
if (this->NumberOfRunsLeft == 1) {
|
|
|
- cmCTestLog(this->CTest, HANDLER_OUTPUT,
|
|
|
- std::setw(getNumWidth(total)) << completed << "/");
|
|
|
- cmCTestLog(this->CTest, HANDLER_OUTPUT,
|
|
|
- std::setw(getNumWidth(total)) << total << " ");
|
|
|
+ outputStream << std::setw(getNumWidth(total)) << completed << "/";
|
|
|
+ outputStream << std::setw(getNumWidth(total)) << total << " ";
|
|
|
}
|
|
|
// if this is one of several runs of a test just print blank space
|
|
|
// to keep things neat
|
|
|
else {
|
|
|
- cmCTestLog(this->CTest, HANDLER_OUTPUT,
|
|
|
- std::setw(getNumWidth(total)) << " "
|
|
|
- << " ");
|
|
|
- cmCTestLog(this->CTest, HANDLER_OUTPUT,
|
|
|
- std::setw(getNumWidth(total)) << " "
|
|
|
- << " ");
|
|
|
+ outputStream << std::setw(getNumWidth(total)) << " ";
|
|
|
+ outputStream << std::setw(getNumWidth(total)) << " ";
|
|
|
}
|
|
|
|
|
|
if (this->TestHandler->MemCheck) {
|
|
|
- cmCTestLog(this->CTest, HANDLER_OUTPUT, "MemCheck");
|
|
|
+ outputStream << "MemCheck";
|
|
|
} else {
|
|
|
- cmCTestLog(this->CTest, HANDLER_OUTPUT, "Test");
|
|
|
+ outputStream << "Test";
|
|
|
}
|
|
|
|
|
|
std::ostringstream indexStr;
|
|
|
indexStr << " #" << this->Index << ":";
|
|
|
- cmCTestLog(this->CTest, HANDLER_OUTPUT,
|
|
|
- std::setw(3 + getNumWidth(this->TestHandler->GetMaxIndex()))
|
|
|
- << indexStr.str());
|
|
|
- cmCTestLog(this->CTest, HANDLER_OUTPUT, " ");
|
|
|
+ outputStream << std::setw(3 + getNumWidth(this->TestHandler->GetMaxIndex()))
|
|
|
+ << indexStr.str();
|
|
|
+ outputStream << " ";
|
|
|
+
|
|
|
const int maxTestNameWidth = this->CTest->GetMaxTestNameWidth();
|
|
|
std::string outname = this->TestProperties->Name + " ";
|
|
|
outname.resize(maxTestNameWidth + 4, '.');
|
|
|
+ outputStream << outname;
|
|
|
|
|
|
*this->TestHandler->LogFile << this->TestProperties->Index << "/"
|
|
|
<< this->TestHandler->TotalNumberOfTests
|
|
|
@@ -754,7 +754,8 @@ void cmCTestRunTest::WriteLogOutputTop(size_t completed, size_t total)
|
|
|
*this->TestHandler->LogFile << this->ProcessOutput << "<end of output>"
|
|
|
<< std::endl;
|
|
|
|
|
|
- cmCTestLog(this->CTest, HANDLER_OUTPUT, outname.c_str());
|
|
|
+ cmCTestLog(this->CTest, HANDLER_OUTPUT, outputStream.str());
|
|
|
+
|
|
|
cmCTestLog(this->CTest, DEBUG,
|
|
|
"Testing " << this->TestProperties->Name << " ... ");
|
|
|
}
|