diff options
-rw-r--r-- | Source/CTest/cmCTestTestHandler.cxx | 93 | ||||
-rw-r--r-- | Tests/RunCMake/CTestCommandLine/RunCMakeTest.cmake | 32 | ||||
-rw-r--r-- | Tests/RunCMake/CTestCommandLine/Subdirectories-stdout.txt | 8 |
3 files changed, 78 insertions, 55 deletions
diff --git a/Source/CTest/cmCTestTestHandler.cxx b/Source/CTest/cmCTestTestHandler.cxx index 75777ab..5a3a8d0 100644 --- a/Source/CTest/cmCTestTestHandler.cxx +++ b/Source/CTest/cmCTestTestHandler.cxx @@ -81,6 +81,42 @@ public: cmCTestTestHandler* TestHandler; }; +bool ReadSubdirectory(std::string fname, cmExecutionStatus& status) +{ + if (!cmSystemTools::FileExists(fname)) { + // No subdirectory? So what... + return true; + } + bool readit = false; + { + cmWorkingDirectory workdir(fname); + if (workdir.Failed()) { + status.SetError("Failed to change directory to " + fname + " : " + + std::strerror(workdir.GetLastResult())); + return false; + } + const char* testFilename; + if (cmSystemTools::FileExists("CTestTestfile.cmake")) { + // does the CTestTestfile.cmake exist ? + testFilename = "CTestTestfile.cmake"; + } else if (cmSystemTools::FileExists("DartTestfile.txt")) { + // does the DartTestfile.txt exist ? + testFilename = "DartTestfile.txt"; + } else { + // No CTestTestfile? Who cares... + return true; + } + fname += "/"; + fname += testFilename; + readit = status.GetMakefile().ReadDependentFile(fname); + } + if (!readit) { + status.SetError(cmStrCat("Could not find include file: ", fname)); + return false; + } + return true; +} + bool cmCTestSubdirCommand(std::vector<std::string> const& args, cmExecutionStatus& status) { @@ -98,35 +134,7 @@ bool cmCTestSubdirCommand(std::vector<std::string> const& args, fname = cmStrCat(cwd, '/', arg); } - if (!cmSystemTools::FileIsDirectory(fname)) { - // No subdirectory? So what... - continue; - } - bool readit = false; - { - cmWorkingDirectory workdir(fname); - if (workdir.Failed()) { - status.SetError("Failed to change directory to " + fname + " : " + - std::strerror(workdir.GetLastResult())); - return false; - } - const char* testFilename; - if (cmSystemTools::FileExists("CTestTestfile.cmake")) { - // does the CTestTestfile.cmake exist ? - testFilename = "CTestTestfile.cmake"; - } else if (cmSystemTools::FileExists("DartTestfile.txt")) { - // does the DartTestfile.txt exist ? - testFilename = "DartTestfile.txt"; - } else { - // No CTestTestfile? Who cares... - continue; - } - fname += "/"; - fname += testFilename; - readit = status.GetMakefile().ReadDependentFile(fname); - } - if (!readit) { - status.SetError(cmStrCat("Could not load include file: ", fname)); + if (!ReadSubdirectory(std::move(fname), status)) { return false; } } @@ -144,32 +152,7 @@ bool cmCTestAddSubdirectoryCommand(std::vector<std::string> const& args, std::string fname = cmStrCat(cmSystemTools::GetCurrentWorkingDirectory(), '/', args[0]); - if (!cmSystemTools::FileExists(fname)) { - // No subdirectory? So what... - return true; - } - bool readit = false; - { - const char* testFilename; - if (cmSystemTools::FileExists("CTestTestfile.cmake")) { - // does the CTestTestfile.cmake exist ? - testFilename = "CTestTestfile.cmake"; - } else if (cmSystemTools::FileExists("DartTestfile.txt")) { - // does the DartTestfile.txt exist ? - testFilename = "DartTestfile.txt"; - } else { - // No CTestTestfile? Who cares... - return true; - } - fname += "/"; - fname += testFilename; - readit = status.GetMakefile().ReadDependentFile(fname); - } - if (!readit) { - status.SetError(cmStrCat("Could not find include file: ", fname)); - return false; - } - return true; + return ReadSubdirectory(std::move(fname), status); } class cmCTestAddTestCommand : public cmCTestCommand diff --git a/Tests/RunCMake/CTestCommandLine/RunCMakeTest.cmake b/Tests/RunCMake/CTestCommandLine/RunCMakeTest.cmake index 4b654f8..7da95a2 100644 --- a/Tests/RunCMake/CTestCommandLine/RunCMakeTest.cmake +++ b/Tests/RunCMake/CTestCommandLine/RunCMakeTest.cmake @@ -85,6 +85,38 @@ subdirs() endfunction() run_BadCTestTestfile() +function(run_Subdirectories) + set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/Subdirectories) + set(RunCMake_TEST_NO_CLEAN 1) + file(REMOVE_RECURSE "${RunCMake_TEST_BINARY_DIR}") + file(MAKE_DIRECTORY "${RunCMake_TEST_BINARY_DIR}") + file(MAKE_DIRECTORY "${RunCMake_TEST_BINARY_DIR}/add_subdirectory") + file(MAKE_DIRECTORY "${RunCMake_TEST_BINARY_DIR}/add_subdirectory/sub") + file(MAKE_DIRECTORY "${RunCMake_TEST_BINARY_DIR}/subdirs") + file(MAKE_DIRECTORY "${RunCMake_TEST_BINARY_DIR}/subdirs/sub") + file(WRITE "${RunCMake_TEST_BINARY_DIR}/CTestTestfile.cmake" " +add_subdirectory(add_subdirectory) +subdirs(subdirs) +") + file(WRITE "${RunCMake_TEST_BINARY_DIR}/add_subdirectory/CTestTestfile.cmake" " +add_test(add_subdirectory \"${CMAKE_COMMAND}\" -E echo add_subdirectory) +add_subdirectory(sub) +") + file(WRITE "${RunCMake_TEST_BINARY_DIR}/add_subdirectory/sub/CTestTestfile.cmake" " +add_test(add_subdirectory.sub \"${CMAKE_COMMAND}\" -E echo add_subdirectory.sub) +") + file(WRITE "${RunCMake_TEST_BINARY_DIR}/subdirs/CTestTestfile.cmake" " +add_test(subdirs \"${CMAKE_COMMAND}\" -E echo subdirs) +subdirs(sub) +") + file(WRITE "${RunCMake_TEST_BINARY_DIR}/subdirs/sub/CTestTestfile.cmake" " +add_test(subdirs.sub \"${CMAKE_COMMAND}\" -E echo subdirs.sub) +") + + run_cmake_command(Subdirectories ${CMAKE_CTEST_COMMAND} -N) +endfunction() +run_Subdirectories() + function(run_MergeOutput) set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/MergeOutput) set(RunCMake_TEST_NO_CLEAN 1) diff --git a/Tests/RunCMake/CTestCommandLine/Subdirectories-stdout.txt b/Tests/RunCMake/CTestCommandLine/Subdirectories-stdout.txt new file mode 100644 index 0000000..770609a --- /dev/null +++ b/Tests/RunCMake/CTestCommandLine/Subdirectories-stdout.txt @@ -0,0 +1,8 @@ +^Test project [^ +]*/Tests/RunCMake/CTestCommandLine/Subdirectories + Test #1: add_subdirectory + Test #2: add_subdirectory\.sub + Test #3: subdirs + Test #4: subdirs\.sub ++ +Total Tests: 4$ |