mirror of
https://github.com/Kitware/CMake.git
synced 2026-01-16 19:50:30 -06:00
Merge topic 'serverFixTestDiscovery'
fe2c2b0f server: ctestInfo fix to return all tests
Acked-by: Kitware Robot <kwrobot@kitware.com>
Merge-request: !1479
This commit is contained in:
@@ -656,25 +656,8 @@ Each project object can have the following keys:
|
||||
|
||||
"name"
|
||||
contains the (sub-)projects name.
|
||||
"targets"
|
||||
contains a list of build system target objects.
|
||||
|
||||
Target objects define individual build targets for a certain configuration.
|
||||
|
||||
Each target object can have the following keys:
|
||||
|
||||
"name"
|
||||
contains the name of the target.
|
||||
"type"
|
||||
defines the type of build of the target. Possible values are
|
||||
"STATIC_LIBRARY", "MODULE_LIBRARY", "SHARED_LIBRARY", "OBJECT_LIBRARY",
|
||||
"EXECUTABLE", "UTILITY" and "INTERFACE_LIBRARY".
|
||||
"fullName"
|
||||
contains the full name of the build result (incl. extensions, etc.).
|
||||
"hasEnabledTests"
|
||||
true if testing is enabled for this target.
|
||||
"ctestInfo"
|
||||
contains a list of test objects for this target.
|
||||
contains a list of test objects.
|
||||
|
||||
Each test object can have the following keys:
|
||||
|
||||
|
||||
@@ -3335,13 +3335,6 @@ cmGlobalGenerator* cmMakefile::GetGlobalGenerator() const
|
||||
return this->GlobalGenerator;
|
||||
}
|
||||
|
||||
void cmMakefile::GetTestNames(std::vector<std::string>& testNames)
|
||||
{
|
||||
for (const auto& iter : Tests) {
|
||||
testNames.push_back(iter.first);
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef CMAKE_BUILD_WITH_CMAKE
|
||||
cmVariableWatch* cmMakefile::GetVariableWatch() const
|
||||
{
|
||||
@@ -3677,6 +3670,16 @@ cmTest* cmMakefile::GetTest(const std::string& testName) const
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
void cmMakefile::GetTests(const std::string& config,
|
||||
std::vector<cmTest*>& tests)
|
||||
{
|
||||
for (auto generator : this->GetTestGenerators()) {
|
||||
if (generator->TestsForConfig(config)) {
|
||||
tests.push_back(generator->GetTest());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void cmMakefile::AddCMakeDependFilesFromUser()
|
||||
{
|
||||
std::vector<std::string> deps;
|
||||
|
||||
@@ -616,11 +616,6 @@ public:
|
||||
cmMessenger* GetMessenger() const;
|
||||
cmGlobalGenerator* GetGlobalGenerator() const;
|
||||
|
||||
/**
|
||||
* Get all the test names this makefile knows about
|
||||
*/
|
||||
void GetTestNames(std::vector<std::string>& testNames);
|
||||
|
||||
/**
|
||||
* Get all the source files this makefile knows about
|
||||
*/
|
||||
@@ -643,6 +638,11 @@ public:
|
||||
*/
|
||||
cmTest* GetTest(const std::string& testName) const;
|
||||
|
||||
/**
|
||||
* Get all tests that run under the given configuration.
|
||||
*/
|
||||
void GetTests(const std::string& config, std::vector<cmTest*>& tests);
|
||||
|
||||
/**
|
||||
* Return a location of a file in cmake or custom modules directory
|
||||
*/
|
||||
|
||||
@@ -91,7 +91,6 @@ static const std::string kWATCHED_DIRECTORIES_KEY = "watchedDirectories";
|
||||
static const std::string kWATCHED_FILES_KEY = "watchedFiles";
|
||||
static const std::string kHAS_INSTALL_RULE = "hasInstallRule";
|
||||
static const std::string kINSTALL_PATHS = "installPaths";
|
||||
static const std::string kHAS_ENABLED_TESTS = "hasEnabledTests";
|
||||
static const std::string kCTEST_NAME = "ctestName";
|
||||
static const std::string kCTEST_COMMAND = "ctestCommand";
|
||||
static const std::string kCTEST_INFO = "ctestInfo";
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -34,6 +34,16 @@ void cmTestGenerator::Compute(cmLocalGenerator* lg)
|
||||
this->LG = lg;
|
||||
}
|
||||
|
||||
bool cmTestGenerator::TestsForConfig(const std::string& config)
|
||||
{
|
||||
return this->GeneratesForConfig(config);
|
||||
}
|
||||
|
||||
cmTest* cmTestGenerator::GetTest() const
|
||||
{
|
||||
return this->Test;
|
||||
}
|
||||
|
||||
void cmTestGenerator::GenerateScriptConfigs(std::ostream& os, Indent indent)
|
||||
{
|
||||
// Create the tests.
|
||||
|
||||
@@ -30,6 +30,11 @@ public:
|
||||
|
||||
void Compute(cmLocalGenerator* lg);
|
||||
|
||||
/** Test if this generator installs the test for a given configuration. */
|
||||
bool TestsForConfig(const std::string& config);
|
||||
|
||||
cmTest* GetTest() const;
|
||||
|
||||
protected:
|
||||
void GenerateScriptConfigs(std::ostream& os, Indent indent) override;
|
||||
void GenerateScriptActions(std::ostream& os, Indent indent) override;
|
||||
|
||||
Reference in New Issue
Block a user