From 0a64be0abaee23c8e73265283cb96ebd0aa8d5d2 Mon Sep 17 00:00:00 2001 From: Lucian Smith Date: Tue, 4 Aug 2026 16:10:55 -0700 Subject: [PATCH 1/3] Actually fix CI. The gtest 'discover tests' is broken; 'add test works instead. --- test/CMakeLists.txt | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 571dbbb24a..0a66d6a88f 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -77,12 +77,17 @@ function(add_test_executable TEST_TARGET OUT_VARIABLE) add_dependencies(${TEST_TARGET} roadrunner-static gtest gtest_main gmock gmock_main rr-mockups) set_target_properties(${TEST_TARGET} PROPERTIES LINKER_LANGUAGE CXX) - # Add to ctest. + # Add to ctest. Uses gtest_add_tests (source parsing) rather than + # gtest_discover_tests (executes the binary at build/ctest time), since + # the latter is intermittently unreliable. set(TEST_ENV_VARS "testdir=${RR_ROOT}/test" "CTEST_OUTPUT_ON_FAILURE=TRUE") - gtest_discover_tests( - ${TEST_TARGET} - DISCOVERY_TIMEOUT 500 - PROPERTIES + gtest_add_tests( + TARGET ${TEST_TARGET} + SOURCES ${ARGN} + WORKING_DIRECTORY $ + TEST_LIST ${TEST_TARGET}_GTESTS + ) + set_tests_properties(${${TEST_TARGET}_GTESTS} PROPERTIES TIMEOUT 500 ENVIRONMENT "${TEST_ENV_VARS}" ) From 4307902efe095775009b3cdef79593b7ad3e6f29 Mon Sep 17 00:00:00 2001 From: Lucian Smith Date: Tue, 4 Aug 2026 17:24:27 -0700 Subject: [PATCH 2/3] Actually actually fix CI. --- test/CMakeLists.txt | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 0a66d6a88f..9f1c6d9dc7 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -80,10 +80,24 @@ function(add_test_executable TEST_TARGET OUT_VARIABLE) # Add to ctest. Uses gtest_add_tests (source parsing) rather than # gtest_discover_tests (executes the binary at build/ctest time), since # the latter is intermittently unreliable. + # + # Unlike add_executable, gtest_add_tests does not resolve source names + # given without an extension, so resolve any bare names to their .cpp + # file here before handing the list to it. + set(GTEST_ADD_TESTS_SOURCES) + foreach (SRC ${ARGN}) + get_filename_component(SRC_EXT "${SRC}" EXT) + if (SRC_EXT STREQUAL "" AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/${SRC}.cpp") + list(APPEND GTEST_ADD_TESTS_SOURCES "${CMAKE_CURRENT_SOURCE_DIR}/${SRC}.cpp") + else () + list(APPEND GTEST_ADD_TESTS_SOURCES "${SRC}") + endif () + endforeach () + set(TEST_ENV_VARS "testdir=${RR_ROOT}/test" "CTEST_OUTPUT_ON_FAILURE=TRUE") gtest_add_tests( TARGET ${TEST_TARGET} - SOURCES ${ARGN} + SOURCES ${GTEST_ADD_TESTS_SOURCES} WORKING_DIRECTORY $ TEST_LIST ${TEST_TARGET}_GTESTS ) From 740acf50a891d8de0c505ef472d8f1e15df6ff05 Mon Sep 17 00:00:00 2001 From: Lucian Smith Date: Tue, 4 Aug 2026 19:00:58 -0700 Subject: [PATCH 3/3] Hopefully CMake should finally work now. --- test/CMakeLists.txt | 35 ++++++------------- test/c_api_core/CMakeLists.txt | 4 +-- test/c_api_rrtests/CMakeLists.txt | 2 +- .../SundialsSteadyStateTests/CMakeLists.txt | 4 +-- 4 files changed, 15 insertions(+), 30 deletions(-) diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 9f1c6d9dc7..6f81d8f55e 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -77,31 +77,18 @@ function(add_test_executable TEST_TARGET OUT_VARIABLE) add_dependencies(${TEST_TARGET} roadrunner-static gtest gtest_main gmock gmock_main rr-mockups) set_target_properties(${TEST_TARGET} PROPERTIES LINKER_LANGUAGE CXX) - # Add to ctest. Uses gtest_add_tests (source parsing) rather than - # gtest_discover_tests (executes the binary at build/ctest time), since - # the latter is intermittently unreliable. - # - # Unlike add_executable, gtest_add_tests does not resolve source names - # given without an extension, so resolve any bare names to their .cpp - # file here before handing the list to it. - set(GTEST_ADD_TESTS_SOURCES) - foreach (SRC ${ARGN}) - get_filename_component(SRC_EXT "${SRC}" EXT) - if (SRC_EXT STREQUAL "" AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/${SRC}.cpp") - list(APPEND GTEST_ADD_TESTS_SOURCES "${CMAKE_CURRENT_SOURCE_DIR}/${SRC}.cpp") - else () - list(APPEND GTEST_ADD_TESTS_SOURCES "${SRC}") - endif () - endforeach () - + # Add to ctest. DISCOVERY_MODE PRE_TEST defers running the built binary + # with --gtest_list_tests until ctest itself is invoked, instead of + # running it immediately after linking (the POST_BUILD default). That + # avoids a Windows race where the freshly-linked exe isn't fully + # released yet, which was causing ParseTestList.cmake to fail on + # truncated/empty JSON output. set(TEST_ENV_VARS "testdir=${RR_ROOT}/test" "CTEST_OUTPUT_ON_FAILURE=TRUE") - gtest_add_tests( - TARGET ${TEST_TARGET} - SOURCES ${GTEST_ADD_TESTS_SOURCES} - WORKING_DIRECTORY $ - TEST_LIST ${TEST_TARGET}_GTESTS - ) - set_tests_properties(${${TEST_TARGET}_GTESTS} PROPERTIES + gtest_discover_tests( + ${TEST_TARGET} + DISCOVERY_MODE PRE_TEST + DISCOVERY_TIMEOUT 500 + PROPERTIES TIMEOUT 500 ENVIRONMENT "${TEST_ENV_VARS}" ) diff --git a/test/c_api_core/CMakeLists.txt b/test/c_api_core/CMakeLists.txt index 44d75537a6..9263e928f4 100644 --- a/test/c_api_core/CMakeLists.txt +++ b/test/c_api_core/CMakeLists.txt @@ -1,8 +1,8 @@ add_test_executable(test_c_api_core test_targets - rrSBMLTestSuiteSimulation_CAPI + rrSBMLTestSuiteSimulation_CAPI.cpp ${SharedTestFiles} exceptions.cpp - CAPICoreTest + CAPICoreTest.cpp libstruct.cpp model_editing.cpp SimulateOptionsCAPITests.cpp diff --git a/test/c_api_rrtests/CMakeLists.txt b/test/c_api_rrtests/CMakeLists.txt index cdb61357d6..344be10970 100644 --- a/test/c_api_rrtests/CMakeLists.txt +++ b/test/c_api_rrtests/CMakeLists.txt @@ -1,5 +1,5 @@ add_test_executable(test_c_api_rrtests test_targets - ${SharedTestFiles} NomTests.cpp RRTestFileTests OtherRRTestFileTests.cpp + ${SharedTestFiles} NomTests.cpp RRTestFileTests.cpp OtherRRTestFileTests.cpp ) # make test_targets list global to all tests diff --git a/test/sundials-tests/SundialsSteadyStateTests/CMakeLists.txt b/test/sundials-tests/SundialsSteadyStateTests/CMakeLists.txt index e9da69a265..28222e1d19 100644 --- a/test/sundials-tests/SundialsSteadyStateTests/CMakeLists.txt +++ b/test/sundials-tests/SundialsSteadyStateTests/CMakeLists.txt @@ -1,6 +1,6 @@ -set(SharedTestFiles "${SharedTestFiles}" "${CMAKE_CURRENT_SOURCE_DIR}/SundialsSteadyStateSolverUnitTest") +set(SharedTestFiles "${SharedTestFiles}" "${CMAKE_CURRENT_SOURCE_DIR}/SundialsSteadyStateSolverUnitTest.cpp") ## FixedPointIteration not finished due to difficulties getting it to work. #add_test_executable( # FixedPointIterationTests test_targets @@ -15,7 +15,6 @@ add_test_executable( add_test_executable( test_sundials_automatic_moiety_conservation test_targets AutomaticMoietyConservationTests.cpp - SundialsSteadyStateSolverUnitTest ${SharedTestFiles} ) @@ -23,7 +22,6 @@ add_test_executable( add_test_executable( test_sundials_steady_state_unit_basic_newton test_targets SundialsNewtonIterationUnitTests.cpp - SundialsSteadyStateSolverUnitTest ${SharedTestFiles} )