FIXTURE_REPEAT_MODE ------------------- .. versionadded:: 4.5 Specifies how a test fixture behaves when :manual:`ctest(1)` repeats tests with its :ctest-option:`--repeat` option. The property describes the fixture rather than the test carrying it, so setting it on any one of the fixture's setup or cleanup tests is enough. It has no effect on a test that has neither a :prop_test:`FIXTURES_SETUP` nor a :prop_test:`FIXTURES_CLEANUP` property, although :manual:`ctest(1)` still rejects a value it does not recognize. The value must be one of the following: ``AROUND_ALL_REPEATS`` The fixture runs once, around all repetitions of the tests requiring it:: setup -> test -> test -> test -> cleanup ``AROUND_EACH_REPEAT`` The fixture repeats with the tests requiring it, so that every repetition of a test gets a fresh setup and its own cleanup:: setup -> test -> cleanup -> setup -> test -> cleanup -> ... ``EACH_TEST_SEPARATELY`` No test is treated specially: every test, including the fixture's own setup and cleanup tests, runs all of its repetitions before the next test starts:: setup -> setup -> setup -> test -> test -> test -> cleanup -> ... This is the behavior of CMake 4.4 and below. If the property is not set on any of a fixture's setup or cleanup tests, the behavior is determined by policy :policy:`CMP0224`. Fixtures that repeat together must agree on the mode. All of a fixture's own setup and cleanup tests must request the same mode, and so must any two fixtures that share a test, since one test cannot repeat with one fixture and not with another it takes part in. :manual:`ctest(1)` reports an error and runs nothing if they disagree. In ``AROUND_EACH_REPEAT`` mode the fixture's tests repeat as a unit, so :ctest-option:`--repeat` applies its condition to the unit as a whole. ``until-fail`` repeats while every test in the unit passes, ``until-pass`` repeats while any of them does not pass, and ``after-timeout`` repeats while any of them times out. A test that requires two fixtures in ``AROUND_EACH_REPEAT`` mode makes those fixtures repeat together. Only the last repetition of the unit is reported, as for a test repeating on its own, and a test that lists one of the unit's tests in its :prop_test:`DEPENDS` property runs after that last repetition. If :manual:`ctest(1)` is interrupted part-way through the repetitions, :ctest-option:`-F` resumes by running the whole unit again. Example ^^^^^^^ .. code-block:: cmake add_test(NAME start_server COMMAND start_server) set_tests_properties(start_server PROPERTIES FIXTURES_SETUP Server FIXTURE_REPEAT_MODE AROUND_EACH_REPEAT) add_test(NAME query_server COMMAND query_server) set_tests_properties(query_server PROPERTIES FIXTURES_REQUIRED Server) add_test(NAME stop_server COMMAND stop_server) set_tests_properties(stop_server PROPERTIES FIXTURES_CLEANUP Server) With ``ctest --repeat until-fail:3``, this runs a fresh server for each attempt at ``query_server``:: start_server -> query_server -> stop_server start_server -> query_server -> stop_server start_server -> query_server -> stop_server See Also ^^^^^^^^ * :prop_test:`FIXTURES_SETUP` * :prop_test:`FIXTURES_CLEANUP` * :prop_test:`FIXTURES_REQUIRED` * :policy:`CMP0224`