diff options
author | Kyle Edwards <kyle.edwards@kitware.com> | 2019-06-27 20:38:19 (GMT) |
---|---|---|
committer | Brad King <brad.king@kitware.com> | 2019-10-02 13:33:54 (GMT) |
commit | bb4a1410592342a824b1dd755b7ca8897deac65c (patch) | |
tree | 9131b8f3b5e531a9fb5471a0b77e9d0b121f5f00 /Tests | |
parent | a1f78a481c8cbda1f0c8503c4d661c3c3ddf00a6 (diff) | |
download | CMake-bb4a1410592342a824b1dd755b7ca8897deac65c.zip CMake-bb4a1410592342a824b1dd755b7ca8897deac65c.tar.gz CMake-bb4a1410592342a824b1dd755b7ca8897deac65c.tar.bz2 |
CTest: Add lexer for PROCESSES property
Diffstat (limited to 'Tests')
-rw-r--r-- | Tests/CMakeLib/CMakeLists.txt | 4 | ||||
-rw-r--r-- | Tests/CMakeLib/testCTestProcesses.cxx | 137 |
2 files changed, 140 insertions, 1 deletions
diff --git a/Tests/CMakeLib/CMakeLists.txt b/Tests/CMakeLib/CMakeLists.txt index 204810e..abb258b 100644 --- a/Tests/CMakeLib/CMakeLists.txt +++ b/Tests/CMakeLib/CMakeLists.txt @@ -2,10 +2,12 @@ include_directories( ${CMAKE_CURRENT_BINARY_DIR} ${CMake_BINARY_DIR}/Source ${CMake_SOURCE_DIR}/Source + ${CMake_SOURCE_DIR}/Source/CTest ) set(CMakeLib_TESTS testArgumentParser.cxx + testCTestProcesses.cxx testGeneratedFileStream.cxx testRST.cxx testRange.cxx @@ -41,7 +43,7 @@ configure_file(${CMAKE_CURRENT_SOURCE_DIR}/testXMLParser.h.in create_test_sourcelist(CMakeLib_TEST_SRCS CMakeLibTests.cxx ${CMakeLib_TESTS}) add_executable(CMakeLibTests ${CMakeLib_TEST_SRCS}) -target_link_libraries(CMakeLibTests CMakeLib) +target_link_libraries(CMakeLibTests CMakeLib CTestLib) set_property(TARGET CMakeLibTests PROPERTY C_CLANG_TIDY "") set_property(TARGET CMakeLibTests PROPERTY CXX_CLANG_TIDY "") diff --git a/Tests/CMakeLib/testCTestProcesses.cxx b/Tests/CMakeLib/testCTestProcesses.cxx new file mode 100644 index 0000000..acf4f67 --- /dev/null +++ b/Tests/CMakeLib/testCTestProcesses.cxx @@ -0,0 +1,137 @@ +/* Distributed under the OSI-approved BSD 3-Clause License. See accompanying + file Copyright.txt or https://cmake.org/licensing for details. */ + +#include <iostream> +#include <string> +#include <vector> + +#include "cmCTestTestHandler.h" + +struct ExpectedParseResult +{ + std::string String; + bool ExpectedReturnValue; + std::vector<std::vector<cmCTestTestHandler::cmCTestTestResourceRequirement>> + ExpectedValue; +}; + +static const std::vector<ExpectedParseResult> expectedResults{ + /* clang-format off */ + { "threads:2", true, { + { { "threads", 2, 1 } }, + } }, + { "3,threads:2", true, { + { { "threads", 2, 1 } }, + { { "threads", 2, 1 } }, + { { "threads", 2, 1 } }, + } }, + { "3,threads:2,gpus:4", true, { + { { "threads", 2, 1 }, { "gpus", 4, 1 } }, + { { "threads", 2, 1 }, { "gpus", 4, 1 } }, + { { "threads", 2, 1 }, { "gpus", 4, 1 } }, + } }, + { "2,threads:2;gpus:4", true, { + { { "threads", 2, 1 } }, + { { "threads", 2, 1 } }, + { { "gpus", 4, 1 } }, + } }, + { "threads:2;2,gpus:4", true, { + { { "threads", 2, 1 } }, + { { "gpus", 4, 1 } }, + { { "gpus", 4, 1 } }, + } }, + { "threads:2;gpus:4", true, { + { { "threads", 2, 1 } }, + { { "gpus", 4, 1 } }, + } }, + { "1,threads:2;0,gpus:4", true, { + { { "threads", 2, 1 } }, + } }, + { "1,_:1", true, { + { { "_", 1, 1 } }, + } }, + { "1,a:1", true, { + { { "a", 1, 1 } }, + } }, + { "2", true, { + {}, + {}, + } }, + { "1;2,threads:1", true, { + {}, + { { "threads", 1, 1 } }, + { { "threads", 1, 1 } }, + } }, + { "1,,threads:1", true, { + { { "threads", 1, 1 } }, + } }, + { ";1,threads:1", true, { + { { "threads", 1, 1 } }, + } }, + { "1,threads:1;", true, { + { { "threads", 1, 1 } }, + } }, + { "1,threads:1,", true, { + { { "threads", 1, 1 } }, + } }, + { "threads:1;;threads:2", true, { + { { "threads", 1, 1 } }, + { { "threads", 2, 1 } }, + } }, + { "1,", true, { + {}, + } }, + { ";", true, {} }, + { "", true, {} }, + { ",", false, {} }, + { "1,0:1", false, {} }, + { "1,A:1", false, {} }, + { "1,a-b:1", false, {} }, + { "invalid", false, {} }, + { ",1,invalid:1", false, {} }, + { "1,1", false, {} }, + { "-1,invalid:1", false, {} }, + { "1,invalid:*", false, {} }, + { "1,invalid:-1", false, {} }, + { "1,invalid:-", false, {} }, + { "1,invalid:ab2", false, {} }, + { "1,invalid :2", false, {} }, + { "1, invalid:2", false, {} }, + { "1,invalid:ab", false, {} }, + /* clang-format on */ +}; + +bool TestExpectedParseResult(const ExpectedParseResult& expected) +{ + std::vector<std::vector<cmCTestTestHandler::cmCTestTestResourceRequirement>> + result; + bool retval; + if ((retval = cmCTestTestHandler::ParseProcessesProperty( + expected.String, result)) != expected.ExpectedReturnValue) { + std::cout << "ParseProcessesProperty(\"" << expected.String + << "\") returned " << retval << ", should be " + << expected.ExpectedReturnValue << std::endl; + return false; + } + + if (result != expected.ExpectedValue) { + std::cout << "ParseProcessesProperty(\"" << expected.String + << "\") did not yield expected set of processes" << std::endl; + return false; + } + + return true; +} + +int testCTestProcesses(int /*unused*/, char* /*unused*/ []) +{ + int retval = 0; + + for (auto const& expected : expectedResults) { + if (!TestExpectedParseResult(expected)) { + retval = 1; + } + } + + return retval; +} |