diff options
author | Brad King <brad.king@kitware.com> | 2017-11-27 13:51:10 (GMT) |
---|---|---|
committer | Kitware Robot <kwrobot@kitware.com> | 2017-11-27 13:51:35 (GMT) |
commit | 0c1912e3e58bebe9eb7c6dcac7a478dc607dba66 (patch) | |
tree | 752993eb08fdc42731d2d635c596ad4572cef5d0 /Source/cmServerProtocol.cxx | |
parent | b1d3fb7fba735d829c2cd655830161871827d82e (diff) | |
parent | fe2c2b0ffb567ca7d51036c69845091f70736a50 (diff) | |
download | CMake-0c1912e3e58bebe9eb7c6dcac7a478dc607dba66.zip CMake-0c1912e3e58bebe9eb7c6dcac7a478dc607dba66.tar.gz CMake-0c1912e3e58bebe9eb7c6dcac7a478dc607dba66.tar.bz2 |
Merge topic 'serverFixTestDiscovery'
fe2c2b0f server: ctestInfo fix to return all tests
Acked-by: Kitware Robot <kwrobot@kitware.com>
Merge-request: !1479
Diffstat (limited to 'Source/cmServerProtocol.cxx')
-rw-r--r-- | Source/cmServerProtocol.cxx | 91 |
1 files changed, 19 insertions, 72 deletions
diff --git a/Source/cmServerProtocol.cxx b/Source/cmServerProtocol.cxx index aae0a9d..7a7080b 100644 --- a/Source/cmServerProtocol.cxx +++ b/Source/cmServerProtocol.cxx @@ -771,10 +771,10 @@ static void DumpBacktraceRange(Json::Value& result, const std::string& type, } } -static Json::Value DumpCTestInfo(const std::string& name, cmTest* testInfo) +static Json::Value DumpCTestInfo(cmTest* testInfo) { Json::Value result = Json::objectValue; - result[kCTEST_NAME] = name; + result[kCTEST_NAME] = testInfo->GetName(); // Concat command entries together. After the first should be the arguments // for the command @@ -801,76 +801,17 @@ static Json::Value DumpCTestInfo(const std::string& name, cmTest* testInfo) return result; } -static Json::Value DumpCTestTarget(cmGeneratorTarget* target, - const std::string& config) +static void DumpMakefileTests(cmMakefile* mf, const std::string& config, + Json::Value* result) { - cmLocalGenerator* lg = target->GetLocalGenerator(); - const cmState* state = lg->GetState(); - - const cmStateEnums::TargetType type = target->GetType(); - const std::string typeName = state->GetTargetTypeName(type); - - Json::Value ttl = Json::arrayValue; - ttl.append("EXECUTABLE"); - ttl.append("STATIC_LIBRARY"); - ttl.append("SHARED_LIBRARY"); - ttl.append("MODULE_LIBRARY"); - ttl.append("OBJECT_LIBRARY"); - ttl.append("UTILITY"); - ttl.append("INTERFACE_LIBRARY"); - - if (!hasString(ttl, typeName) || target->IsImported()) { - return Json::Value(); - } - - Json::Value result = Json::objectValue; - result[kNAME_KEY] = target->GetName(); - result[kTYPE_KEY] = typeName; - - if (type == cmStateEnums::INTERFACE_LIBRARY) { - return result; - } - result[kFULL_NAME_KEY] = target->GetFullName(config); - - if (target->Makefile->IsOn("CMAKE_TESTING_ENABLED")) { - result[kHAS_ENABLED_TESTS] = true; - std::vector<std::string> CTestNames; - - Json::Value testInfo = Json::arrayValue; - std::vector<std::string> testNames; - target->Makefile->GetTestNames(testNames); - for (auto& name : testNames) { - auto test = target->Makefile->GetTest(name); - if (test != nullptr) { - testInfo.append(DumpCTestInfo(name, test)); - } - } - result[kCTEST_INFO] = testInfo; - } - - return result; -} - -static Json::Value DumpCTestTargetsList( - const std::vector<cmLocalGenerator*>& generators, const std::string& config) -{ - Json::Value result = Json::arrayValue; - - std::vector<cmGeneratorTarget*> targetList; - for (const auto& lgIt : generators) { - auto list = lgIt->GetGeneratorTargets(); - targetList.insert(targetList.end(), list.begin(), list.end()); - } - std::sort(targetList.begin(), targetList.end()); - - for (cmGeneratorTarget* target : targetList) { - Json::Value tmp = DumpCTestTarget(target, config); + std::vector<cmTest*> tests; + mf->GetTests(config, tests); + for (auto test : tests) { + Json::Value tmp = DumpCTestInfo(test); if (!tmp.isNull()) { - result.append(tmp); + result->append(tmp); } } - - return result; } static Json::Value DumpCTestProjectList(const cmake* cm, @@ -884,11 +825,17 @@ static Json::Value DumpCTestProjectList(const cmake* cm, Json::Value pObj = Json::objectValue; pObj[kNAME_KEY] = projectIt.first; - // All Projects must have at least one local generator - assert(!projectIt.second.empty()); + Json::Value tests = Json::arrayValue; - // Project structure information: - pObj[kTARGETS_KEY] = DumpCTestTargetsList(projectIt.second, config); + // Gather tests for every generator + for (const auto& lg : projectIt.second) { + // Make sure they're generated. + lg->GenerateTestFiles(); + cmMakefile* mf = lg->GetMakefile(); + DumpMakefileTests(mf, config, &tests); + } + + pObj[kCTEST_INFO] = tests; result.append(pObj); } |