diff --git a/src/catch2/catch_config.cpp b/src/catch2/catch_config.cpp index 978bcfd7..fef03d7d 100644 --- a/src/catch2/catch_config.cpp +++ b/src/catch2/catch_config.cpp @@ -253,6 +253,21 @@ namespace Catch { if (bazelExitGuardFile) { m_data.prematureExitGuardFilePath = bazelExitGuardFile; } + + const auto bazelRandomSeed = Detail::getEnv( "TEST_RANDOM_SEED" ); + if ( bazelRandomSeed ) { + auto parsedSeed = parseUInt( bazelRandomSeed, 0 ); + if ( !parsedSeed ) { + // Currently we handle issues with parsing other Bazel Env + // options by warning and ignoring the issue. So we do the + // same for random seed option. + Catch::cerr() + << "Warning: could not parse 'TEST_RANDOM_SEED' ('" + << bazelRandomSeed << "') as proper seed.\n"; + } else { + m_data.rngSeed = *parsedSeed; + } + } } } // end namespace Catch diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 8f8a3755..7d8caf79 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -662,5 +662,26 @@ foreach(reporterName # "Automake" - the simple .trs format does not support any ) endforeach() +add_test(NAME "Bazel::RngSeedEnvVar" + COMMAND + $ "Factorials are computed" +) +set_tests_properties("Bazel::RngSeedEnvVar" + PROPERTIES + ENVIRONMENT "BAZEL_TEST=1;TEST_RANDOM_SEED=18181818" + PASS_REGULAR_EXPRESSION "Randomness seeded to: 18181818" +) + +add_test(NAME "Bazel::RngSeedEnvVarPriorityOverCLI" + COMMAND + $ "Factorials are computed" + --rng-seed 17171717 +) +set_tests_properties("Bazel::RngSeedEnvVarPriorityOverCLI" + PROPERTIES + ENVIRONMENT "BAZEL_TEST=1;TEST_RANDOM_SEED=18181818" + PASS_REGULAR_EXPRESSION "Randomness seeded to: 18181818" +) + list(APPEND CATCH_TEST_TARGETS SelfTest) set(CATCH_TEST_TARGETS ${CATCH_TEST_TARGETS} PARENT_SCOPE)