-
v3.7.1fa43b774 · ·
v3.7.1 === Improvements === * Applied the JUnit reporter's optimization from last release to the SonarQube reporter * Suppressed `-Wuseless-cast` in `CHECK_THROWS_MATCHES` (#2904) * Standardize exit codes for various failures * Running no tests is now guaranteed to exit with 2 (without the `--allow-running-no-tests` flag) * All tests skipped is now always 4 (...) * Assertion failures are now always 42 * and so on === Fixes === * Fixed out-of-bounds access when the arg parser encounters single `-` as an argument (#2905) === Miscellaneous === * Added `catch_config_prefix_messages.hpp` to meson build (#2903) * `catch_discover_tests` now supports skipped tests (#2873) * You can get the old behaviour by calling `catch_discover_tests` with `SKIP_IS_FAILURE` option.
-
v3.7.031588bb4 · ·
v3.7.0 === Improvements === * Slightly improved compile times of benchmarks * Made the resolution estimation in benchmarks slightly more precise * Added new test case macro, `TEST_CASE_PERSISTENT_FIXTURE` (#2885, #1602) * Unlike `TEST_CASE_METHOD`, the same underlying instance is used for all partial runs of that test case * **MASSIVELY** improved performance of the JUnit reporter when handling successful assertions (#2897) * For 1 test case and 10M assertions, the new reporter runs 3x faster and uses up only 8 MB of memory, while the old one needs 7 GB of memory. * Reworked how output redirects works. * Combining a reporter writing to stdout with capturing reporter no longer leads to the capturing reporter seeing all of the other reporter's output. * The file based redirect no longer opens up a new temporary file for each partial test case run, so it will not run out of temporary files when running many tests in single process. === Miscellaneous === * Better documentation for matchers on thrown exceptions (`REQUIRE_THROWS_MATCHES`) * Improved `catch_discover_tests`'s handling of environment paths (#2878) * It won't reorder paths in `DL_PATHS` or `DYLD_FRAMEWORK_PATHS` args * It won't overwrite the environment paths for test discovery
-
v3.6.04e8d92bf · ·
v3.6.0 === Fixes === * Fixed Windows ARM64 build by fixing the preprocessor condition guarding use `_umul128` intrinsic. * Fixed Windows ARM64EC build by removing intrinsic pragma it does not understand. (#2858) * Why doesn't the x64-emulation build mode understand x64 pragmas? Don't ask me, ask the MSVC guys. * Fixed the JUnit reporter sometimes crashing when reporting a fatal error. (#1210, #2855) * The binary will still exit, but through the original error, rather than secondary error inside the reporter. * The underlying fix applies to all reporters, not just the JUnit one, but only JUnit was currently causing troubles. === Improvements === * Disable `-Wnon-virtual-dtor` in Decomposer and Matchers (#2854) * `precision` in floating point stringmakers defaults to `max_digits10`. * This means that floating point values will be printed with enough precision to disambiguate any two floats. * Column wrapping ignores ansi colour codes when calculating string width (#2833, #2849) * This makes the output much more readable when the provided messages contain colour codes. === Miscellaneous === * Conan support improvements * `compatibility_cppstr` is set to False. (#2860) * This means that Conan won't let you mix library and project with different C++ standard settings. * The implementation library CMake target name through Conan is properly set to `Catch2::Catch2` (#2861) * `SelfTest` target can be built through Bazel (#2857)
-
v3.5.4b5373dad · ·
v3.5.4 --- Fixes --- * Fixed potential compilation error when asked to generate random integers whose type did not match `std::(u)int*_t`. * This manifested itself when generating random `size_t`s on MacOS * Added missing outlined destructor causing `Wdelete-incomplete` when compiling against libstdc++ in C++23 mode (#2852) * Fixed regression where decomposing assertion with const instance of `std::foo_ordering` would not compile --- Improvements --- * Reintroduced support for GCC 5 and 6 (#2836) * As with VS2017, if they start causing trouble again, they will be dropped again. * Added workaround for targetting newest MacOS (Sonoma) using GCC (#2837, #2839) * `CATCH_CONFIG_DEFAULT_REPORTER` can now be an arbitrary reporter spec * Previously it could only be a plain reporter name, so it was impossible to compile in custom arguments to the reporter. * Improved performance of generating 64bit random integers by 20+% --- Miscellaneous --- * Significantly improved Conan in-tree recipe (#2831) * `DL_PATHS` in `catch_discover_tests` now supports multiple arguments (#2852, #2736) * Fixed preprocessor logic for checking whether we expect reproducible floating point results in tests. * Improved the floating point tests structure to avoid `Wunused` when the reproducibility tests are disabled (#2845)
-
v3.5.38ac8190e · ·
v3.5.3 === Fixes === * Fixed OOB access when computing filename tag (from the `-#` flag) for file without extension (#2798) * Fixed the linking against `log` on Android to be `PRIVATE` (#2815) * Fixed `Wuseless-cast` in benchmarking internals (#2823) === Improvements === * Restored compatibility with VS2017 (#2792, #2822) * The baseline for Catch2 is still C++14 with some reasonable workarounds for specific compilers, so if VS2017 starts acting up again, the support will be dropped again. * Suppressed clang-tidy's `bugprone-chained-comparison` in assertions (#2801) * Improved the static analysis mode to evaluate arguments to `TEST_CASE` and `SECTION` (#2817) * Clang-tidy should no longer warn about runtime arguments to these macros being unused in static analysis mode. * Clang-tidy can warn on issues involved arguments to these macros. * Added support for literal-zero detectors based on `consteval` constructors * This is required for compiling `REQUIRE((a <=> b) == 0)` against MSVC's stdlib. * Sadly, MSVC still cannot compile this assertion as it does not implement C++20 correctly. * You can use `clang-cl` with MSVC's stdlib instead. * If for some godforsaken reasons you want to understand this better, read the two relevant commits: [`dc51386b9fd61f99ea9c660d01867e6ad489b403`](https://github.com/catchorg/Catch2/commit/dc51386b9fd61f99ea9c660d01867e6ad489b403), and [`0787132fc82a75e3fb255aa9484ca1dc1eff2a30`](https://github.com/catchorg/Catch2/commit/0787132fc82a75e3fb255aa9484ca1dc1eff2a30). === Miscellaneous === * Disabled tests for FP random generator reproducibility on non-SSE2 x86 targets (#2796) * Modified the in-tree Conan recipe to support Conan 2 (#2805)
-
v3.5.1f981c9cb · ·
v3.5.1 === Improvements === * Significantly improved performance of the CLI parsing. * This includes the cost of preparing the CLI parser, so Catch2's binaries start much faster. === Miscellaneous === * Added support for Bazel modules (#2781) * Added CMake option to disable the build reproducibility settings (#2785) * Added `log` library linking to the Meson build (#2784)
-
v3.5.053d0d913 · ·
v3.5.0 === Improvements === * Introduced `CATCH_CONFIG_PREFIX_MESSAGES` to prefix only logging macros (#2544) * This means `INFO`, `UNSCOPED_INFO`, `WARN` and `CAPTURE`. * Section hints in static analysis mode are now `const` * This prevents Clang-Tidy from complaining about `misc-const-correctness`. * `from_range` generator supports C arrays and ranges that require ADL (#2737) * Stringification support for `std::optional` now also includes `std::nullopt` (#2740) * The Console reporter flushes output after writing benchmark runtime estimate. * This means that you can immediately see for how long the benchmark is expected to run. * Added workaround to enable compilation with ICC 19.1 (#2551, #2766) * Compiling Catch2 for XBox should work out of the box (#2772) * Catch2 should automatically disable getenv when compiled for XBox. * Compiling Catch2 with exceptions disabled no longer triggers `Wunused-function` (#2726) * **`random` Generators for integral types are now reproducible across different platforms** * Unlike `<rando>`, Catch2's generators also support 1 byte integral types (`char`, `bool`, ...) * **`random` Generators for `float` and `double` are now reproducible across different platforms** * `long double` varies across different platforms too much to be reproducible * This guarantee applies only to platforms with IEEE 754 floats. === Fixes === * UDL declaration inside Catch2 are now strictly conforming to the standard * `operator "" _a` is UB, `operator ""_a` is fine. Seriously. * Fixed `CAPTURE` tests failing to compile in C++23 mode (#2744) * Fixed missing include in `catch_message.hpp` (#2758) * Fixed `CHECK_ELSE` suppressing failure from uncaught exceptions(#2723) === Miscellaneous === * The documentation for specifying which tests to run through commandline has been completely rewritten (#2738) * Fixed installation when building Catch2 with meson (#2722, #2742) * Fixed `catch_discover_tests` when using custom reporter and `PRE_TEST` discovery mode (#2747) * `catch_discover_tests` supports multi-config CMake generator in `PRE_TEST` discovery mode (#2739, #2746)
-
v3.4.06e79e682 · ·
v3.4.0 --- Improvements --- * `VectorEquals` supports elements that provide only `==` and not `!=` (#2648) * Catch2 supports compiling with IAR compiler (#2651) * Various small internal performance improvements * Various small internal compilation time improvements * XMLReporter now reports location info for INFO and WARN (#1251) * This bumps up the xml format version to 3 * Documented that `SKIP` in generator constructor can be used to handle empty generator (#1593) * Added experimental static analysis support to `TEST_CASE` and `SECTION` macros (#2681) * The two macros are redefined in a way that helps the SA tools reason about the possible paths through a test case with sections. * The support is controlled by the `CATCH_CONFIG_EXPERIMENTAL_STATIC_ANALYSIS_SUPPORT` option and autodetects clang-tidy and Coverity. * `*_THROWS`, `*_THROWS_AS`, etc now suppress warning coming from `__attribute__((warn_unused_result))` on GCC (#2691) * Unlike plain `[[nodiscard]]`, this warning is not silenced by void cast. WTF GCC? --- Fixes --- * Fixed `assertionStarting` events being sent after the expr is evaluated (#2678) * Errors in `TEST_CASE` tags are now reported nicely (#2650) --- Miscellaneous --- * Bunch of improvements to `catch_discover_tests` * Added DISCOVERY_MODE option, so the discovery can happen either post build or pre-run. * Fixed handling of semicolons and backslashes in test names (#2674, #2676) * meson build can disable building tests (#2693) * meson build properly sets meson version 0.54.1 as the minimal supported version (#2688)
-
v3.3.23f0283de · ·
v3.3.2 === Improvements === * Further reduced allocations * The compact, console, TAP and XML reporters perform less allocations in various cases * Removed 1 allocation per entered `SECTION`/`TEST_CASE`. * Removed 2 allocations per test case exit, if stdout/stderr is captured * Improved performance * Section tracking is 10%-25% faster than in v3.3.0 * Assertion handling is 5%-10% faster than in v3.3.0 * Test case registration is 1%-2% faster than in v3.3.0 * Tiny speedup for registering listeners * Tiny speedup for `CAPTURE`, `TEST_CASE_METHOD`, `METHOD_AS_TEST_CASE`, and `TEMPLATE_LIST_TEST_*` macros. * `Contains`, `RangeEquals` and `UnorderedRangeEquals` matchers now support ranges with iterator + sentinel pair * Added `IsNaN` matcher * Unlike `REQUIRE(isnan(x))`, `REQUIRE_THAT(x, IsNaN())` shows you the value of `x`. * Suppressed `declared_but_not_referenced` warning for NVHPC (=2637) === Fixes === * Fixed performance regression in section tracking introduced in v3.3.1 * Extreme cases would cause the tracking to run about 4x slower than in 3.3.0
-
v3.3.12ab20a0e · ·
v3.3.1 === Improvements === * Reduced allocations and improved performance * The exact improvements are dependent on your usage of Catch2. * For example running Catch2's SelfTest binary performs 8k less allocations. * The main improvement comes from smarter handling of `SECTION`s, especially sibling `SECTION`s
-
v3.3.0c837cb4a · ·
v3.3.0 === Improvements === * Added `MessageMatches` exception matcher (#2570) * Added `RangeEquals` and `UnorderedRangeEquals` generic range matchers (#2377) * Added `SKIP` macro for skipping tests from within the test body (#2360) * All built-in reporters have been extended to handle it properly, whether your custom reporter needs changes depends on how it was written * `skipTest` reporter event **is unrelated** to this, and has been deprecated since it has practically no uses * Restored support for PPC Macs in the break-into-debugger functionality (#2619) * Made our warning suppression compatible with CUDA toolkit pre 11.5 (#2626) * Cleaned out some static analysis complaints === Fixes === * Fixed macro redefinition warning when NVCC was reporting as MSVC (#2603) * Fixed throws in generator constructor causing the whole binary to abort (#2615) * Now it just fails the test * Fixed missing transitive include with libstdc++13 (#2611) === Miscellaneous === * Improved support for dynamic library build with non-MSVC compilers on Windows (#2630) * When used as a subproject, Catch2 keeps its generated header in a separate directory from the main project (#2604)
-
v3.2.065cc7fd2 · ·
v3.2.0 === Improvements === * Catch2 now compiles on PlayStation (#2562) * Added `CATCH_CONFIG_GETENV` compile-time toggle (#2562) * This toggle guards whether Catch2 calls `std::getenv` when reading env variables * Added support for more Bazel test environment variables * `TESTBRIDGE_TEST_ONLY` is now supported (#2490) * Sharding variables, `TEST_SHARD_INDEX`, `TEST_TOTAL_SHARDS`, `TEST_SHARD_STATUS_FILE`, are now all supported (#2491) * Bunch of small tweaks and improvements in reporters * The TAP and SonarQube reporters output the used test filters * The XML reporter now also reports the version of its output format * The compact reporter now uses the same summary output as the console reporter (#878, #2554) * Added support for asserting on types that can only be compared with literal 0 (#2555) * A canonical example is C++20's `std::*_ordering` types, which cannot be compared with an `int` variable, only `0` * The support extends to any type with this property, not just the ones in stdlib * This change imposes 2-3% slowdown on compiling files that are heavy on `REQUIRE` and friends * **This required significant rewrite of decomposition, there might be bugs** * Simplified internals of matcher related macros * This provides about ~2% speed up compiling files that are heavy on `REQUIRE_THAT` and friends === Fixes === * Cleaned out some warnings and static analysis issues * Suppressed `-Wcomma` warning rarely occuring in templated test cases (#2543) * Constified implementation details in `INFO` (#2564) * Made `MatcherGenericBase` copy constructor const (#2566) * Fixed serialization of test filters so the output roundtrips * This means that e.g. `./tests/SelfTest "aaa bbb", [approx]` outputs `Filters: "aaa bbb",[approx]` === Miscellaneous === * Catch2's build no longer leaks `-ffile-prefix-map` setting to dependees (#2533)
-
v3.1.15df88da1 · ·
v3.1.1 --- Improvements --- * Added `Catch::getSeed` function that user code can call to retrieve current rng-seed * Better detection of compiler support for `-ffile-prefix-map` (#2517) * Catch2's shared libraries now have `SOVERSION` set (#2516) * `catch2/catch_all.hpp` convenience header no longer transitively includes `windows.h` (#2432, #2526) --- Fixes --- * Fixed compilation on Universal Windows Platform * Fixed compilation on VxWorks (#2515) * Fixed compilation on Cygwin (#2540) * Remove unused variable in reporter registration (#2538) * Fixed some symbol visibility issues with dynamic library on Windows (#2527) * Suppressed `-Wuseless-cast` warnings in `REQUIRE_THROWS*` macros (#2520, #2521) * This was triggered when the potentially throwing expression evaluates to `void` * Fixed "warning: storage class is not first" with `nvc++` (#2533) * Fixed handling of `DL_PATHS` argument to `catch_discover_tests` on MacOS (#2483) * Suppressed `*-avoid-c-arrays` clang-tidy warning in `TEMPLATE_TEST_CASE` (#2095, #2536) --- Miscellaneous --- * Fixed CMake install step for Catch2 build as dynamic library (#2485) * Raised minimum CMake version to 3.10 (#2523) * Expect the minimum CMake version to increase once more in next few releases. * Whole bunch of doc updates and fixes * #1444, #2497, #2547, #2549, and more * Added support for building Catch2 with Meson (#2530, #2539)
-
v2.13.10182c910b · ·
v2.13.10 --- Fixes --- * Fixed issue with `catch_discover_tests` when there is multiple of 256 tests (#2401, #2503) * Catch2-provided `main` and `wmain` are explicitly marked as `__cdecl` when compiled with MSVC (#2486, #2487) * Improved break-into-debugger behaviour for ARM Macs. It should now be possible to step execution after the break (#2422) * Replaced deprecated `std::aligned_storage` (#2419, #2420)
-
v3.1.097c48e0c · ·
v3.1.0 --- Improvements * Improved suppression of `-Wparentheses` for older GCCs * Turns out that even GCC 9 does not properly handle `_Pragma`s in the C++ frontend. * Added type constraints onto `random` generator (#2433) * These constraints copy what the standard says for the underlying `std::uniform_int_distribution` * Suppressed -Wunused-variable from nvcc (#2306, #2427) * Suppressed -Wunused-variable from MinGW (#2132) * Added All/Any/NoneTrue range matchers (#2319) * These check that all/any/none of boolean values in a range are true. * The JUnit reporter now normalizes classnames from C++ namespaces to Java-like namespaces (#2468) * This provides better support for other JUnit based tools. * The Bazel support now understands `BAZEL_TEST` environment variable (#2459) * The `CATCH_CONFIG_BAZEL_SUPPORT` configuration option is also still supported. * Returned support for compiling Catch2 with GCC 5 (#2448) * This required removing inherited constructors from Catch2's internals. * I recommend updating to a newer GCC anyway. * `catch_discover_tests` now has a new options for setting library load path(s) when running the Catch2 binary (#2467) --- Fixes * Fixed crash when listing listeners without any registered listeners (#2442) * Fixed nvcc compilation error in constructor benchmarking helper (#2477) * Catch2's CMakeList supports pre-3.12 CMake again (#2428) * The gain from requiring CMake 3.12 was very minor, but y'all should really update to newer CMake --- Miscellaneous * Fixed SelfTest build on MinGW (#2447) * The in-repo conan recipe exports the CMake helper (#2460) * Added experimental CMake script to showcase using test case sharding together with CTest * Compared to `catch_discover_tests`, it supports very limited number of options and customization * Added documentation page on best practices when running Catch2 tests * Catch2 can be built as a dynamic library (#2397, #2398) * Note that Catch2 does not have visibility annotations, and you are responsible for ensuring correct visibility built into the resulting library.
-
v3.0.1605a3476 · ·
v3.0.1 === (Potentially) Breaking changes === * **Catch2 now uses statically compiled library as its distribution model** * **Including `catch.hpp` no longer works** * **Catch2 now uses C++14 as the minimum support language version** * `ANON_TEST_CASE` has been removed, use `TEST_CASE` with no arguments instead (#1220) * `--list*` commands no longer have non-zero return code (#1410) * `--list-test-names-only` has been removed (#1190) * You should use verbosity-modifiers for `--list-tests` instead * `--list*` commands are now piped through the reporters * The top-level reporter interface provides default implementation that works just as the old one * XmlReporter outputs a machine-parseable XML * `TEST_CASE` description support has been removed * If the second argument has text outside tags, the text will be ignored. * Hidden test cases are no longer included just because they don't match an exclusion tag * Previously, a `TEST_CASE("A", "[.foo]")` would be included by asking for `~[bar]`. * `PredicateMatcher` is no longer type erased. * This means that the type of the provided predicate is part of the `PredicateMatcher`'s type * `SectionInfo` no longer contains section description as a member (#1319) * You can still write `SECTION("ShortName", "Long and wordy description")`, but the description is thrown away * The description type now must be a `const char*` or be implicitly convertible to it * The `[!hide]` tag has been removed. * Use `[.]` or `[.foo]` instead. * Lvalues of composed matchers cannot be composed further * Uses of `REGISTER_TEST_CASE` macro need to be followed by a semicolon * This does not change `TEST_CASE` and friends in any way * `IStreamingReporter::IsMulti` member function was removed * This is _very_ unlikely to actually affect anyone, as it was default-implemented in the interface, and only used internally * Various classes not designed for user-extension have been made final * `ListeningReporter` is now `final` * Concrete Matchers (e.g. `UnorderedEquals` vector matcher) are now `final` * All Generators are now `final` * Matcher namespacing has been redone * Matcher types are no longer in deeply nested namespaces * Matcher factory functions are no longer brought into `Catch` namespace * This means that all public-facing matcher-related functionality is now in `Catch::Matchers` namespace * Defining `CATCH_CONFIG_MAIN` will no longer create main in that TU. * Link with `libCatch2Main.a`, or the proper CMake/pkg-config target * If you want to write custom main, include `catch2/catch_session.hpp` * `CATCH_CONFIG_EXTERNAL_INTERFACES` has been removed. * You should instead include the appropriate headers as needed. * `CATCH_CONFIG_IMPL` has been removed. * The implementation is now compiled into a static library. * Event Listener interface has changed * `TestEventListenerBase` was renamed to `EventListenerBase` * `EventListenerBase` now directly derives from `IStreamingReporter`, instead of deriving from `StreamingReporterBase` * `GENERATE` decays its arguments (#2012, #2040) * This means that `str` in `auto str = GENERATE("aa", "bb", "cc");` is inferred to `char const*` rather than `const char[2]`. * `--list-*` flags write their output to file specified by the `-o` flag * Many changes to reporter interfaces * With the exception of the XmlReporter, the outputs of first party reporters should remain the same * New pair of events were added * One obsolete event was removed * The base class has been renamed * The built-in reporter class hierarchy has been redone * Catch2 generates a random seed if one hasn't been specified by the user * The short flag for `--list-tests`, `-l`, has been removed. * This is not a commonly used flag and does not need to use up valuable single-letter space. * The short flag for `--list-tags`, `-t`, has been removed. * This is not a commonly used flag and does not need to use up valuable single-letter space. * The `--colour` option has been replaced with `--colour-mode` option === Improvements === * Matchers have been extended with the ability to use different signatures of `match` (#1307, #1553, #1554, #1843) * This includes having templated `match` member function * See the [rewritten Matchers documentation](matchers.md#top) for details * Catch2 currently provides _some_ generic matchers, but there should be more before final release of v3 * `IsEmpty`, `SizeIs` which check that the range has specific properties * `Contains`, which checks whether a range contains a specific element * `AllMatch`, `AnyMatch`, `NoneMatch` range matchers, which apply matchers over a range of elements * Significant compilation time improvements * including `catch_test_macros.hpp` is 80% cheaper than including `catch.hpp` * Some runtime performance optimizations * In all tested cases the v3 branch was faster, so the table below shows the speedup of v3 to v2 at the same task <a id="v3-runtime-optimization-table"></a> | task | debug build | release build | |:------------------------------------------- | ------------:| -------------:| | Run 1M `REQUIRE(true)` | 1.10 ± 0.01 | 1.02 ± 0.06 | | Run 100 tests, 3^3 sections, 1 REQUIRE each | 1.27 ± 0.01 | 1.04 ± 0.01 | | Run 3k tests, no names, no tags | 1.29 ± 0.01 | 1.05 ± 0.01 | | Run 3k tests, names, tags | 1.49 ± 0.01 | 1.22 ± 0.01 | | Run 1 out of 3k tests no names, no tags | 1.68 ± 0.02 | 1.19 ± 0.22 | | Run 1 out of 3k tests, names, tags | 1.79 ± 0.02 | 2.06 ± 0.23 | * POSIX platforms use `gmtime_r`, rather than `gmtime` when constructing a date string (#2008, #2165) * `--list-*` flags write their output to file specified by the `-o` flag (#2061, #2163) * `Approx::operator()` is now properly `const` * Catch2's internal helper variables no longer use reserved identifiers (#578) * `--rng-seed` now accepts string `"random-device"` to generate random seed using `std::random_device` * Catch2 now supports test sharding (#2257) * You can ask for the tests to be split into N groups and only run one of them. * This greatly simplifies parallelization of tests in a binary through external runner. * The embedded CLI parser now supports repeatedly callable lambdas * A lambda-based option parser can opt into being repeatedly specifiable. * Added `STATIC_CHECK` macro, similar to `STATIC_REQUIRE` (#2318) * When deferred tu runtime, it behaves like `CHECK`, and not like `REQUIRE`. * You can have multiple tests with the same name, as long as other parts of the test identity differ (#1915, #1999, #2175) * Test identity includes test's name, test's tags and and test's class name if applicable. * Added new warning, `UnmatchedTestSpec`, to error on test specs with no matching tests * The `-w`, `--warn` warning flags can now be provided multiple times to enable multiple warnings * The case-insensitive handling of tags is now more reliable and takes up less memory * Test case and assertion counting can no longer reasonably overflow on 32 bit systems * The count is now kept in `uint64_t` on all platforms, instead of using `size_t` type. * The `-o`, `--out` output destination specifiers recognize `-` as stdout * You have to provide it as `--out=-` to avoid CLI error about missing option * The new reporter specification also recognizes `-` as stdout * Multiple reporters can now run at the same time and write to different files (#1712, #2183) * To support this, the `-r`, `--reporter` flag now also accepts optional output destination * For full overview of the semantics of using multiple reporters, look into the reporter documentation * To enable the new syntax, reporter names can no longer contain `::`. * Console colour support has been rewritten and significantly improved * The colour implementation based on ANSI colour codes is always available * Colour implementations respect their associated stream * previously e.g. Win32 impl would change console colour even if Catch2 was writing to a file * The colour API is resilient against changing evaluation order of expressions * The associated CLI flag and compile-time configuration options have changed * For details see the docs for command-line and compile-time Catch2 configuration * Added a support for Bazel integration with `XML_OUTPUT_FILE` env var (#2399) * This has to be enabled during compilation. * Added `--skip-benchmarks` flag to run tests without any `BENCHMARK`s (#2392, #2408) * Added option to list all listeners in the binary via `--list-listeners` === Fixes === * The `INFO` macro no longer contains superfluous semicolon (#1456) * The `--list*` family of command line flags now return 0 on success (#1410, #1146) * Various ways of failing a benchmark are now counted and reporter properly * The ULP matcher now handles comparing numbers with different signs properly (#2152) * Universal ADL-found operators should no longer break decomposition (#2121) * Reporter selection is properly case-insensitive * Previously it forced lower cased name, which would fail for reporters with upper case characters in name * The cumulative reporter base stores benchmark results alongside assertion results * Catch2's SE handling should no longer interferes with ASan on Windows (#2334) * Fixed Windows console colour handling for tests that redirect stdout (#2345) * Fixed issue with the `random` generators returning the same value over and over again === Other changes === * `CATCH_CONFIG_DISABLE_MATCHERS` no longer exists. * If you do not want to use Matchers in a TU, do not include their header. * `CATCH_CONFIG_ENABLE_CHRONO_STRINGMAKER` no longer exists. * `StringMaker` specializations for `<chrono>` are always provided * Catch2's CMake now provides 2 targets, `Catch2` and `Catch2WithMain`. * `Catch2` is the statically compiled implementation by itself * `Catch2WithMain` also links in the default main * Catch2's pkg-config integration also provides 2 packages * `catch2` is the statically compiled implementation by itself * `catch2-with-main` also links in the default main * Passing invalid test specifications passed to Catch2 are now reported before tests are run, and are a hard error. * Running 0 tests (e.g. due to empty binary, or test spec not matching anything) returns non-0 exit code * Flag `--allow-running-no-tests` overrides this behaviour. * `NoTests` warning has been removed because it is fully subsumed by this change. * Catch2's compile-time configuration options (`CATCH_CONFIG_FOO`) can be set through CMake options of the same name * They use the same semantics as C++ defines, including the `CATCH_CONFIG_NO_FOO` overrides, * `-DCATCH_CONFIG_DEFAULT_REPORTER=compact` changes default reporter to "compact" * `-DCATCH_CONFIG_NO_ANDROID_LOGWRITE=ON` forces android logwrite to off * `-DCATCH_CONFIG_ANDROID_LOGWRITE=OFF` does nothing (the define will not exist)