Collect startup exceptions instead of throwing them
Previously, some errors in Catch configuration would cause exceptions to be thrown before main was even entered. This leads to call to `std::terminate`, which is not a particularly nice way of ending the binary. Now these exceptions are registered with a global collector and used once Catch enters main. They can also be optionally ignored, if user supplies his own main and opts not to check them (or ignored them intentionally). Closes #921
This commit is contained in:
parent
0020747420
commit
da0edcbe25
11 changed files with 135 additions and 18 deletions
|
@ -15,6 +15,7 @@
|
|||
#include "internal/catch_version.h"
|
||||
#include "internal/catch_text.h"
|
||||
#include "internal/catch_interfaces_reporter.h"
|
||||
#include "internal/catch_startup_exception_registry.h"
|
||||
|
||||
#include <fstream>
|
||||
#include <stdlib.h>
|
||||
|
@ -146,7 +147,19 @@ namespace Catch {
|
|||
}
|
||||
|
||||
int run( int argc, char const* const* const argv ) {
|
||||
|
||||
const auto& exceptions = getRegistryHub().getStartupExceptionRegistry().getExceptions();
|
||||
if ( !exceptions.empty() ) {
|
||||
Catch::cerr() << "Errors occured during startup!" << '\n';
|
||||
// iterate over all exceptions and notify user
|
||||
for ( const auto& ex_ptr : exceptions ) {
|
||||
try {
|
||||
std::rethrow_exception(ex_ptr);
|
||||
} catch ( std::exception const& ex ) {
|
||||
Catch::cerr() << ex.what() << '\n';
|
||||
}
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
int returnCode = applyCommandLine( argc, argv );
|
||||
if( returnCode == 0 )
|
||||
returnCode = run();
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue