summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBill Hoffman <bill.hoffman@kitware.com>2017-09-06 16:03:40 (GMT)
committerBrad King <brad.king@kitware.com>2017-09-08 14:02:39 (GMT)
commita6e32eb0c26277c71c586aba457df5daaf2a71ba (patch)
tree8bc7b58fc6ae9598bfdf4c5edcbb3589062b52de
parentd4f58a9cd8e3709a0cb176814226da324b17e0fe (diff)
downloadCMake-a6e32eb0c26277c71c586aba457df5daaf2a71ba.zip
CMake-a6e32eb0c26277c71c586aba457df5daaf2a71ba.tar.gz
CMake-a6e32eb0c26277c71c586aba457df5daaf2a71ba.tar.bz2
CTest: Split out labels and subproject labels in summary output
This commit splits out the reporting of labels and labels used for sub projects. If a label is a sub project label it will not be included in the label summary. To implement this the commit creates PrintLabelOrSubprojectSummary which is able to do the work of both PrintLabelSummary and PrintSubprojectSummary avoiding code duplication.
-rw-r--r--Source/CTest/cmCTestTestHandler.cxx133
-rw-r--r--Source/CTest/cmCTestTestHandler.h3
-rw-r--r--Tests/RunCMake/ctest_labels_for_subprojects/CTestConfigCTestScript-stdout.txt3
-rw-r--r--Tests/RunCMake/ctest_labels_for_subprojects/CTestScriptVariable-stdout.txt3
-rw-r--r--Tests/RunCMake/ctest_labels_for_subprojects/CTestScriptVariableCommandLine-stdout.txt3
-rw-r--r--Tests/RunCMake/ctest_labels_for_subprojects/ModuleVariableCTestConfig-stdout.txt3
-rw-r--r--Tests/RunCMake/ctest_labels_for_subprojects/ModuleVariableCTestConfigNoSummary-stdout.txt1
7 files changed, 49 insertions, 100 deletions
diff --git a/Source/CTest/cmCTestTestHandler.cxx b/Source/CTest/cmCTestTestHandler.cxx
index 18d9346..24c1857 100644
--- a/Source/CTest/cmCTestTestHandler.cxx
+++ b/Source/CTest/cmCTestTestHandler.cxx
@@ -535,14 +535,13 @@ int cmCTestTestHandler::ProcessHandler()
<< static_cast<int>(percent + .5f) << "% tests passed, "
<< failed.size() << " tests failed out of " << total
<< std::endl);
-
- if (!this->CTest->GetLabelsForSubprojects().empty() &&
- this->CTest->GetSubprojectSummary()) {
- this->PrintSubprojectSummary();
- } else if (this->CTest->GetLabelSummary()) {
- this->PrintLabelSummary();
+ if ((!this->CTest->GetLabelsForSubprojects().empty() &&
+ this->CTest->GetSubprojectSummary())) {
+ this->PrintLabelOrSubprojectSummary(true);
+ }
+ if (this->CTest->GetLabelSummary()) {
+ this->PrintLabelOrSubprojectSummary(false);
}
-
char realBuf[1024];
sprintf(realBuf, "%6.2f sec", clock_finish - clock_start);
cmCTestOptionalLog(this->CTest, HANDLER_OUTPUT,
@@ -620,96 +619,32 @@ int cmCTestTestHandler::ProcessHandler()
return 0;
}
-void cmCTestTestHandler::PrintLabelSummary()
-{
- cmCTestTestHandler::ListOfTests::iterator it = this->TestList.begin();
- std::map<std::string, double> labelTimes;
- std::map<std::string, int> labelCounts;
- std::set<std::string> labels;
- // initialize maps
- std::string::size_type maxlen = 0;
- for (; it != this->TestList.end(); ++it) {
- cmCTestTestProperties& p = *it;
- if (!p.Labels.empty()) {
- for (std::vector<std::string>::iterator l = p.Labels.begin();
- l != p.Labels.end(); ++l) {
- if ((*l).size() > maxlen) {
- maxlen = (*l).size();
- }
- labels.insert(*l);
- labelTimes[*l] = 0;
- labelCounts[*l] = 0;
- }
- }
- }
- cmCTestTestHandler::TestResultsVector::iterator ri =
- this->TestResults.begin();
- // fill maps
- for (; ri != this->TestResults.end(); ++ri) {
- cmCTestTestResult& result = *ri;
- cmCTestTestProperties& p = *result.Properties;
- if (!p.Labels.empty()) {
- for (std::vector<std::string>::iterator l = p.Labels.begin();
- l != p.Labels.end(); ++l) {
- labelTimes[*l] += result.ExecutionTime;
- ++labelCounts[*l];
- }
- }
- }
- // now print times
- if (!labels.empty()) {
- cmCTestOptionalLog(this->CTest, HANDLER_OUTPUT, "\nLabel Time Summary:",
- this->Quiet);
- }
- for (std::set<std::string>::const_iterator i = labels.begin();
- i != labels.end(); ++i) {
- std::string label = *i;
- label.resize(maxlen + 3, ' ');
-
- char buf[1024];
- sprintf(buf, "%6.2f sec", labelTimes[*i]);
-
- std::ostringstream labelCountStr;
- labelCountStr << "(" << labelCounts[*i] << " test";
- if (labelCounts[*i] > 1) {
- labelCountStr << "s";
- }
- labelCountStr << ")";
-
- cmCTestOptionalLog(this->CTest, HANDLER_OUTPUT, "\n"
- << label << " = " << buf << " "
- << labelCountStr.str(),
- this->Quiet);
- if (this->LogFile) {
- *this->LogFile << "\n" << *i << " = " << buf << "\n";
- }
- }
- if (!labels.empty()) {
- if (this->LogFile) {
- *this->LogFile << "\n";
- }
- cmCTestOptionalLog(this->CTest, HANDLER_OUTPUT, "\n", this->Quiet);
- }
-}
-
-void cmCTestTestHandler::PrintSubprojectSummary()
+void cmCTestTestHandler::PrintLabelOrSubprojectSummary(bool doSubProject)
{
+ // collect subproject labels
std::vector<std::string> subprojects =
this->CTest->GetLabelsForSubprojects();
-
- cmCTestTestHandler::ListOfTests::iterator it = this->TestList.begin();
std::map<std::string, double> labelTimes;
std::map<std::string, int> labelCounts;
std::set<std::string> labels;
- // initialize maps
std::string::size_type maxlen = 0;
- for (; it != this->TestList.end(); ++it) {
+ // initialize maps
+ for (cmCTestTestHandler::ListOfTests::iterator it = this->TestList.begin();
+ it != this->TestList.end(); ++it) {
cmCTestTestProperties& p = *it;
for (std::vector<std::string>::iterator l = p.Labels.begin();
l != p.Labels.end(); ++l) {
+ // first check to see if the current label is a subproject label
+ bool isSubprojectLabel = false;
std::vector<std::string>::iterator subproject =
std::find(subprojects.begin(), subprojects.end(), *l);
if (subproject != subprojects.end()) {
+ isSubprojectLabel = true;
+ }
+ // if we are doing sub projects and this label is one, then use it
+ // if we are not doing sub projects and the label is not one use it
+ if ((doSubProject && isSubprojectLabel) ||
+ (!doSubProject && !isSubprojectLabel)) {
if ((*l).size() > maxlen) {
maxlen = (*l).size();
}
@@ -719,26 +654,32 @@ void cmCTestTestHandler::PrintSubprojectSummary()
}
}
}
- cmCTestTestHandler::TestResultsVector::iterator ri =
- this->TestResults.begin();
// fill maps
- for (; ri != this->TestResults.end(); ++ri) {
+ for (cmCTestTestHandler::TestResultsVector::iterator ri =
+ this->TestResults.begin();
+ ri != this->TestResults.end(); ++ri) {
cmCTestTestResult& result = *ri;
cmCTestTestProperties& p = *result.Properties;
for (std::vector<std::string>::iterator l = p.Labels.begin();
l != p.Labels.end(); ++l) {
- std::vector<std::string>::iterator subproject =
- std::find(subprojects.begin(), subprojects.end(), *l);
- if (subproject != subprojects.end()) {
+ // only use labels found in labels
+ if (labels.find(*l) != labels.end()) {
labelTimes[*l] += result.ExecutionTime;
++labelCounts[*l];
}
}
}
+ // if no labels are found return and print nothing
+ if (labels.empty()) {
+ return;
+ }
// now print times
- if (!labels.empty()) {
+ if (doSubProject) {
cmCTestOptionalLog(this->CTest, HANDLER_OUTPUT,
"\nSubproject Time Summary:", this->Quiet);
+ } else {
+ cmCTestOptionalLog(this->CTest, HANDLER_OUTPUT, "\nLabel Time Summary:",
+ this->Quiet);
}
for (std::set<std::string>::const_iterator i = labels.begin();
i != labels.end(); ++i) {
@@ -754,7 +695,6 @@ void cmCTestTestHandler::PrintSubprojectSummary()
labelCountStr << "s";
}
labelCountStr << ")";
-
cmCTestOptionalLog(this->CTest, HANDLER_OUTPUT, "\n"
<< label << " = " << buf << " "
<< labelCountStr.str(),
@@ -763,13 +703,12 @@ void cmCTestTestHandler::PrintSubprojectSummary()
*this->LogFile << "\n" << *i << " = " << buf << "\n";
}
}
- if (!labels.empty()) {
- if (this->LogFile) {
- *this->LogFile << "\n";
- }
- cmCTestOptionalLog(this->CTest, HANDLER_OUTPUT, "\n", this->Quiet);
+ if (this->LogFile) {
+ *this->LogFile << "\n";
}
+ cmCTestOptionalLog(this->CTest, HANDLER_OUTPUT, "\n", this->Quiet);
}
+
void cmCTestTestHandler::CheckLabelFilterInclude(cmCTestTestProperties& it)
{
// if not using Labels to filter then return
diff --git a/Source/CTest/cmCTestTestHandler.h b/Source/CTest/cmCTestTestHandler.h
index 965552c..4c5b55f 100644
--- a/Source/CTest/cmCTestTestHandler.h
+++ b/Source/CTest/cmCTestTestHandler.h
@@ -232,8 +232,7 @@ private:
*/
virtual void GenerateDartOutput(cmXMLWriter& xml);
- void PrintLabelSummary();
- void PrintSubprojectSummary();
+ void PrintLabelOrSubprojectSummary(bool isSubProject);
/**
* Run the tests for a directory and any subdirectories
diff --git a/Tests/RunCMake/ctest_labels_for_subprojects/CTestConfigCTestScript-stdout.txt b/Tests/RunCMake/ctest_labels_for_subprojects/CTestConfigCTestScript-stdout.txt
index ae00e51..e3be144 100644
--- a/Tests/RunCMake/ctest_labels_for_subprojects/CTestConfigCTestScript-stdout.txt
+++ b/Tests/RunCMake/ctest_labels_for_subprojects/CTestConfigCTestScript-stdout.txt
@@ -4,4 +4,7 @@ Subproject Time Summary:
MyExperimentalFeature += +[0-9.]+ sec \(5 tests\)
MyProductionCode += +[0-9.]+ sec \(1 test\)
+
+Label Time Summary:
+NotASubproject += +[0-9.]+ sec \(6 tests\)
++
Total Test time \(real\) = +[0-9.]+ sec
diff --git a/Tests/RunCMake/ctest_labels_for_subprojects/CTestScriptVariable-stdout.txt b/Tests/RunCMake/ctest_labels_for_subprojects/CTestScriptVariable-stdout.txt
index ae00e51..e3be144 100644
--- a/Tests/RunCMake/ctest_labels_for_subprojects/CTestScriptVariable-stdout.txt
+++ b/Tests/RunCMake/ctest_labels_for_subprojects/CTestScriptVariable-stdout.txt
@@ -4,4 +4,7 @@ Subproject Time Summary:
MyExperimentalFeature += +[0-9.]+ sec \(5 tests\)
MyProductionCode += +[0-9.]+ sec \(1 test\)
+
+Label Time Summary:
+NotASubproject += +[0-9.]+ sec \(6 tests\)
++
Total Test time \(real\) = +[0-9.]+ sec
diff --git a/Tests/RunCMake/ctest_labels_for_subprojects/CTestScriptVariableCommandLine-stdout.txt b/Tests/RunCMake/ctest_labels_for_subprojects/CTestScriptVariableCommandLine-stdout.txt
index a78a99a..20c6c86 100644
--- a/Tests/RunCMake/ctest_labels_for_subprojects/CTestScriptVariableCommandLine-stdout.txt
+++ b/Tests/RunCMake/ctest_labels_for_subprojects/CTestScriptVariableCommandLine-stdout.txt
@@ -3,4 +3,7 @@
Subproject Time Summary:
MyThirdPartyDependency += +[0-9.]+ sec \(1 test\)
+
+Label Time Summary:
+NotASubproject += +[0-9.]+ sec \(1 test\)
++
Total Test time \(real\) = +[0-9.]+ sec
diff --git a/Tests/RunCMake/ctest_labels_for_subprojects/ModuleVariableCTestConfig-stdout.txt b/Tests/RunCMake/ctest_labels_for_subprojects/ModuleVariableCTestConfig-stdout.txt
index 01851fd..bec6b14 100644
--- a/Tests/RunCMake/ctest_labels_for_subprojects/ModuleVariableCTestConfig-stdout.txt
+++ b/Tests/RunCMake/ctest_labels_for_subprojects/ModuleVariableCTestConfig-stdout.txt
@@ -3,4 +3,7 @@
Subproject Time Summary:
MySubproject += +[0-9.]+ sec \(2 tests\)
+
+Label Time Summary:
+NotASubproject += +[0-9.]+ sec \(1 test\)
++
Total Test time \(real\) = +[0-9.]+ sec
diff --git a/Tests/RunCMake/ctest_labels_for_subprojects/ModuleVariableCTestConfigNoSummary-stdout.txt b/Tests/RunCMake/ctest_labels_for_subprojects/ModuleVariableCTestConfigNoSummary-stdout.txt
index 0209bfe..1ac5530 100644
--- a/Tests/RunCMake/ctest_labels_for_subprojects/ModuleVariableCTestConfigNoSummary-stdout.txt
+++ b/Tests/RunCMake/ctest_labels_for_subprojects/ModuleVariableCTestConfigNoSummary-stdout.txt
@@ -1,7 +1,6 @@
67% tests passed, 1 tests failed out of 3
+
Label Time Summary:
-MySubproject += +[0-9.]+ sec \(2 tests\)
NotASubproject += +[0-9.]+ sec \(1 test\)
+
Total Test time \(real\) = +[0-9.]+ sec