Browse Source

GoogleTest: Add test case for XML_OUTPUT_DIR

Alexander Stein 5 years ago
parent
commit
0001339a6f

+ 4 - 0
Tests/RunCMake/GoogleTest/GoogleTestXML-result-check.cmake

@@ -0,0 +1,4 @@
+set(RESULT_FILE "${RunCMake_TEST_BINARY_DIR}/GoogleTestXML.Foo.xml")
+if(NOT EXISTS ${RESULT_FILE})
+  set(RunCMake_TEST_FAILED "Result XML file ${RESULT_FILE} was not created")
+endif()

+ 11 - 0
Tests/RunCMake/GoogleTest/GoogleTestXML.cmake

@@ -0,0 +1,11 @@
+project(test_include_dirs)
+include(CTest)
+include(GoogleTest)
+
+enable_testing()
+
+add_executable(xml_output xml_output.cpp)
+gtest_discover_tests(
+  xml_output
+  XML_OUTPUT_DIR ${CMAKE_BINARY_DIR}
+)

+ 28 - 0
Tests/RunCMake/GoogleTest/RunCMakeTest.cmake

@@ -78,4 +78,32 @@ function(run_GoogleTest)
   )
 endfunction()
 
+function(run_GoogleTestXML)
+  # Use a single build tree for a few tests without cleaning.
+  set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/GoogleTestXML-build)
+  set(RunCMake_TEST_NO_CLEAN 1)
+  if(NOT RunCMake_GENERATOR_IS_MULTI_CONFIG)
+    set(RunCMake_TEST_OPTIONS -DCMAKE_BUILD_TYPE=Debug)
+  endif()
+  file(REMOVE_RECURSE "${RunCMake_TEST_BINARY_DIR}")
+  file(MAKE_DIRECTORY "${RunCMake_TEST_BINARY_DIR}")
+
+  run_cmake(GoogleTestXML)
+
+  run_cmake_command(GoogleTestXML-discovery
+  ${CMAKE_COMMAND}
+  --build .
+  --config Debug
+  --target xml_output
+  )
+
+  run_cmake_command(GoogleTestXML-result
+  ${CMAKE_CTEST_COMMAND}
+  -C Debug
+  -R GoogleTestXML
+  --no-label-summary
+  )
+endfunction()
+
 run_GoogleTest()
+run_GoogleTestXML()

+ 26 - 0
Tests/RunCMake/GoogleTest/xml_output.cpp

@@ -0,0 +1,26 @@
+#include <fstream>
+#include <iostream>
+#include <string>
+
+int main(int argc, char** argv)
+{
+  // Note: GoogleTestXML.cmake doesn't actually depend on Google Test as such;
+  // it only mimicks the output file creation using the path passed to this
+  // test without any content
+  for (int i = 0; i < argc; i++) {
+    std::string param(argv[i]);
+    if (param.find("--gtest_list_tests") != std::string::npos) {
+      // This actually defines the name of the file passed in the 2nd run
+      std::cout << "GoogleTestXML." << std::endl;
+      std::cout << "  Foo" << std::endl;
+    } else if (param.find("--gtest_output=xml:") != std::string::npos) {
+      std::string::size_type split = param.find(":");
+      std::string filepath = param.substr(split + 1);
+      // The full file path is passed
+      std::ofstream ostrm(filepath.c_str(), std::ios::binary);
+      ostrm << "--gtest_output=xml: mockup file\n";
+    }
+  }
+
+  return 0;
+}