v2.0.1
This is the first full release of Catch2. There may be some minor breaking changes for some people. Please see the details below before moving to this release. If you need to stay on Catch "Classic", because you do not have a fully C++11 aware compiler, for example, then please see the Catch1.x branch.
The following list is changes compared to Catch 1.x:
Breaking changes
- Removed C++98 support
- Removed legacy reporter support
- Removed legacy generator support
- Generator support will come back later, reworked
- Removed
Catch::toString
support- The new stringification machinery uses
Catch::StringMaker
specializations first andoperator<<
overloads second.
- The new stringification machinery uses
- Removed legacy
SCOPED_MSG
andSCOPED_INFO
macros - Removed
INTERNAL_CATCH_REGISTER_REPORTER
CATCH_REGISTER_REPORTER
should be used to register reporters
- Removed legacy
[hide]
tag[.]
,[.foo]
and[!hide]
are still supported
- Output into debugger is now colourized
*_THROWS_AS(expr, exception_type)
now unconditionally appendsconst&
to the exception type.CATCH_CONFIG_FAST_COMPILE
now affects theCHECK_
family of assertions as well asREQUIRE_
family of assertions- This is most noticeable in
CHECK(throws())
, which would previously report failure, properly stringify the exception and continue. Now it will report failure and stop executing current section.
- This is most noticeable in
- Removed deprecated matcher utility functions
Not
,AllOf
andAnyOf
.- They are superseded by operators
!
,&&
and||
, which are natural and do not have limited arity
- They are superseded by operators
- Removed support for non-const comparison operators
- Non-const comparison operators are an abomination that should not exist
- They were breaking support for comparing function to function pointer
std::pair
andstd::tuple
are no longer stringified by default- This is done to avoid dragging in
<tuple>
and<utility>
headers in common path - Their stringification can be enabled per-file via new configuration macros
- This is done to avoid dragging in
Approx
is subtly different and hopefully behaves more as users would expectApprox::scale
defaults to0.0
Approx::epsilon
no longer applies to the larger of the two compared values, but only to theApprox
's valueINFINITY == Approx(INFINITY)
returns true
Improvements
- Reporters and Listeners can be defined in files different from the main file
- The file has to define
CATCH_CONFIG_EXTERNAL_INTERFACES
before including catch.hpp.
- The file has to define
- Errors that happen during set up before main are now caught and properly reported once main is entered
- If you are providing your own main, you can access and use these as well.
- New assertion macros, *_THROWS_MATCHES(expr, exception_type, matcher) are provided
- As the arguments suggest, these allow you to assert that an expression throws desired type of exception and pass the exception to a matcher.
- JUnit reporter no longer has significantly different output for test cases with and without sections
- Most assertions now support expressions containing commas (ie
REQUIRE(foo() == std::vector<int>{1, 2, 3});
) - Catch now contains experimental micro benchmarking support
- See
projects/SelfTest/Benchmark.tests.cpp
for examples - The support being experiment means that it can be changed without prior notice
- See
- Catch uses new CLI parsing library (Clara)
- Users can now easily add new command line options to the final executable
- This also leads to some changes in
Catch::Session
interface
- All parts of matchers can be removed from a TU by defining
CATCH_CONFIG_DISABLE_MATCHERS
- This can be used to somewhat speed up compilation times
- An experimental implementation of
CATCH_CONFIG_DISABLE
has been added- Inspired by Doctest's
DOCTEST_CONFIG_DISABLE
- Useful for implementing tests in source files
- ie for functions in anonymous namespaces
- Removes all assertions
- Prevents
TEST_CASE
registrations - Exception translators are not registered
- Reporters are not registered
- Listeners are not registered
- Inspired by Doctest's
- Reporters/Listeners are now notified of fatal errors
- This means specific signals or structured exceptions
- The Reporter/Listener interface provides default, empty, implementation to preserve backward compatibility
- Stringification of
std::chrono::duration
andstd::chrono::time_point
is now supported- Needs to be enabled by a per-file compile time configuration option
- Add
pkg-config
support to CMake install command
Fixes
- Don't use console colour if running in XCode
- Explicit constructor in reporter base class
- Swept out
-Wweak-vtables
,-Wexit-time-destructors
,-Wglobal-constructors
warnings - Compilation for Universal Windows Platform (UWP) is supported
- SEH handling and colorized output are disabled when compiling for UWP
- Implemented a workaround for
std::uncaught_exception
issues in libcxxrt- These issues caused incorrect section traversals
- The workaround is only partial, user's test can still trigger the issue by using
throw;
to rethrow an exception
- Suppressed C4061 warning under MSVC
Internal changes
- The development version now uses .cpp files instead of header files containing implementation.
- This makes partial rebuilds much faster during development
- The expression decomposition layer has been rewritten
- The evaluation layer has been rewritten
- New library (TextFlow) is used for formatting text to output