catch2/projects/SelfTest/ExceptionTests.cpp
Phil Nash 42d1b45386 Squashed commit of the following:
commit 70c5ef9eed
Author: Phil Nash <github@philnash.me>
Date:   Tue Nov 13 21:46:01 2012 +0000

    Regen single include

commit 4ea535e505
Author: Phil Nash <github@philnash.me>
Date:   Tue Nov 13 09:56:30 2012 +0000

    Tidied up result enums

commit 7717c29072
Author: Phil Nash <github@philnash.me>
Date:   Tue Nov 13 09:45:29 2012 +0000

    Implemented CHECK_NOFAIL

    Previous commit missed some files

commit d539da9030
Author: Phil Nash <github@philnash.me>
Date:   Tue Nov 13 09:44:52 2012 +0000

    Implemented CHECK_NO_FAIL

commit af1a321860
Author: Phil Nash <github@philnash.me>
Date:   Sat Nov 10 18:46:39 2012 +0000

    Regen single include

commit f54ac5625e
Author: Phil Nash <github@philnash.me>
Date:   Sat Nov 10 18:44:12 2012 +0000

    New (combined) baselines

commit defca58566
Author: Phil Nash <github@philnash.me>
Date:   Sat Nov 10 18:43:23 2012 +0000

    negate() -> endExpression(), takes ResultDisposition

commit b2ef998825
Author: Phil Nash <github@philnash.me>
Date:   Sat Nov 10 10:35:09 2012 +0000

    Changed shouldNegate boolean to use part of ResultDisposition enum

commit 1af13dba97
Author: Phil Nash <github@philnash.me>
Date:   Sat Nov 10 10:20:08 2012 +0000

    Changed StopOnFailure boolean to an enum

commit a1dc7e312c
Author: Phil Nash <github@philnash.me>
Date:   Tue Nov 6 19:34:35 2012 +0000

    Regen single include

commit 20e59ce9d1
Author: Phil Nash <github@philnash.me>
Date:   Tue Nov 6 19:34:10 2012 +0000

    Added tags docs

commit b5b1b1e430
Author: Phil Nash <github@philnash.me>
Date:   Tue Nov 6 19:13:25 2012 +0000

    Some expression/ evaluation clean-up

commit ec5956f471
Author: Phil Nash <github@philnash.me>
Date:   Tue Nov 6 07:52:28 2012 +0000

    Fix for #134

    The INTERNAL_CATCH_MSG macro, which is used by INFO, WARN and FAIL places its lines in a do…while block so it can be used after an if statement with no block

commit 88b70828f2
Author: Phil Nash <github@philnash.me>
Date:   Sun Nov 4 21:39:38 2012 +0000

    Regen single include

commit b323fc7e6c
Author: Phil Nash <github@philnash.me>
Date:   Sun Nov 4 21:39:16 2012 +0000

    Fixed line/no regression for SECTIONs

    Unexpected exceptions within a section now get the SECTION's line no. again (instead of TEST_CASE line/no)

commit 78fba28c4b
Author: Phil Nash <github@philnash.me>
Date:   Sun Nov 4 21:11:59 2012 +0000

    Added className to TestCaseInfo

    className is passed through from class based test methods and held in the TestCaseInfo.
    For free-function based test cases it is set to "global".

    The JUnit reporter uses the className value to populate he class attribute.

commit 81cb69ef18
Author: Phil Nash <github@philnash.me>
Date:   Sun Nov 4 21:09:22 2012 +0000

    AssertionInfo captures more info (for test cases and sections)

commit a4e088c999
Author: Phil Nash <github@philnash.me>
Date:   Fri Nov 2 08:29:03 2012 +0000

    Removed __FUNCTION__ from SourceLineInfo

commit 2a1e8bfc6e
Author: Phil Nash <github@philnash.me>
Date:   Thu Nov 1 08:16:15 2012 +0000

    Updated colour comments

commit f0f407fc3e
Author: Phil Nash <github@philnash.me>
Date:   Wed Oct 31 18:28:21 2012 +0000

    Manually applied merge #133 from Master

commit 355b95fda1
Author: Phil Nash <github@philnash.me>
Date:   Wed Oct 31 18:04:22 2012 +0000

    Cleaned up ANSI colour code impl a bit

commit 778f9c4fc7
Author: Phil Nash <github@philnash.me>
Date:   Tue Oct 30 09:09:30 2012 +0000

    Removed "no-" from Wno-global-constructors when disabling

commit 5efa4bcb8a
Author: Phil Nash <github@philnash.me>
Date:   Mon Oct 29 20:49:22 2012 +0000

    Regenerated single_include

commit 108f1937d8
Author: Phil Nash <github@philnash.me>
Date:   Mon Oct 29 20:46:45 2012 +0000

    Added terminal colour codes for POSIX

    With thanks to Adam Strzelecki

commit 8f4cc541d5
Author: Phil Nash <github@philnash.me>
Date:   Mon Oct 29 19:55:34 2012 +0000

    Added regression test baselines

commit 2e203a1834
Author: Phil Nash <github@philnash.me>
Date:   Mon Oct 29 19:55:13 2012 +0000

    Fixed remaining reporting regressions

commit 134e45b3ad
Author: Phil Nash <github@philnash.me>
Date:   Sun Oct 28 20:57:21 2012 +0000

    Fixed #132

commit 2f92db9898
Author: Phil Nash <github@philnash.me>
Date:   Sun Oct 28 12:15:34 2012 +0000

    Updated the readme specifically for the Integration branch

commit 82acc2ca05
Author: Phil Nash <github@philnash.me>
Date:   Sun Oct 28 12:07:17 2012 +0000

    Regenerated single include

commit fe1d7c1d08
Author: Phil Nash <github@philnash.me>
Date:   Sun Oct 28 10:27:44 2012 +0000

    Small fixes and tweaks

commit 355b5e546d
Author: Phil Nash <github@philnash.me>
Date:   Fri Oct 26 09:05:36 2012 +0100

    Some tidy-up

commit f847186ebb
Author: Phil Nash <github@philnash.me>
Date:   Fri Oct 26 08:45:23 2012 +0100

    AssertionResultBuilder -> ExpressionResultBuilder

commit 8cca2f1369
Author: Phil Nash <github@philnash.me>
Date:   Wed Oct 24 22:09:01 2012 +0100

    ExpressionBuilder ->ExpressionDecomposer
    Expression -> ExpressionLhs

commit e04e74f896
Author: Phil Nash <github@philnash.me>
Date:   Wed Oct 24 21:59:47 2012 +0100

    More AssertionResult refactoring

commit 1dd56d4d2b
Author: Phil Nash <github@philnash.me>
Date:   Fri Oct 19 08:01:34 2012 +0100

    AssertionResultBuilder can be constructed from result type

commit f2d5f1b3e4
Author: Phil Nash <github@philnash.me>
Date:   Fri Oct 19 08:01:05 2012 +0100

    Expression has its own result builder - not passed in from expression builder

commit e3b111a39a
Author: Phil Nash <github@philnash.me>
Date:   Thu Oct 18 22:59:16 2012 +0100

    streamlined acceptResult

commit 3ad13256e1
Author: Phil Nash <github@philnash.me>
Date:   Thu Oct 18 08:39:44 2012 +0100

    Refactored assertion builder stuff out of expression builder

commit c96f9330a0
Author: Phil Nash <github@philnash.me>
Date:   Wed Oct 17 08:14:22 2012 +0100

    Collect assertion info up front

commit a5fa78284d
Author: Phil Nash <github@philnash.me>
Date:   Tue Oct 16 08:33:13 2012 +0100

    ResultData -> AssertionResultData

commit c597a893fa
Author: Phil Nash <github@philnash.me>
Date:   Tue Oct 16 08:31:05 2012 +0100

    ResultInfo -> AssertionResult filenames and variables

commit d16955f63a
Author: Phil Nash <github@philnash.me>
Date:   Tue Oct 16 08:27:21 2012 +0100

    Renamed ResultInfo -> AssertionResult

commit 175da3ef64
Author: Phil Nash <github@philnash.me>
Date:   Fri Oct 12 18:39:22 2012 +0100

    regen test 3
2012-11-13 21:59:50 +00:00

167 lines
4.3 KiB
C++

/*
* Created by Phil on 09/11/2010.
* Copyright 2010 Two Blue Cubes Ltd. All rights reserved.
*
* Distributed under the Boost Software License, Version 1.0. (See accompanying
* file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
*/
#ifdef __clang__
#pragma clang diagnostic ignored "-Wpadded"
#endif
#include "catch.hpp"
#include <string>
#include <stdexcept>
#include "catch_self_test.hpp"
namespace
{
CATCH_ATTRIBUTE_NORETURN
int thisThrows();
int thisThrows()
{
throw std::domain_error( "expected exception" );
/*NOTREACHED*/
}
int thisDoesntThrow()
{
return 0;
}
}
TEST_CASE( "./succeeding/exceptions/explicit", "When checked exceptions are thrown they can be expected or unexpected" )
{
REQUIRE_THROWS_AS( thisThrows(), std::domain_error );
REQUIRE_NOTHROW( thisDoesntThrow() );
REQUIRE_THROWS( thisThrows() );
}
CATCH_ATTRIBUTE_NORETURN
TEST_CASE( "./failing/exceptions/explicit", "When checked exceptions are thrown they can be expected or unexpected" )
{
CHECK_THROWS_AS( thisThrows(), std::string );
CHECK_THROWS_AS( thisDoesntThrow(), std::domain_error );
CHECK_NOTHROW( thisThrows() );
}
TEST_CASE_NORETURN( "./failing/exceptions/implicit", "When unchecked exceptions are thrown they are always failures" )
{
throw std::domain_error( "unexpected exception" );
/*NOTREACHED*/
}
TEST_CASE( "./succeeding/exceptions/implicit", "When unchecked exceptions are thrown, but caught, they do not affect the test" )
{
try
{
throw std::domain_error( "unexpected exception" );
}
catch(...)
{
}
}
class CustomException
{
public:
CustomException( const std::string& msg )
: m_msg( msg )
{}
std::string getMessage() const
{
return m_msg;
}
private:
std::string m_msg;
};
CATCH_TRANSLATE_EXCEPTION( CustomException& ex )
{
return ex.getMessage();
}
CATCH_TRANSLATE_EXCEPTION( double& ex )
{
return Catch::toString( ex );
}
TEST_CASE_NORETURN( "./failing/exceptions/custom", "Unexpected custom exceptions can be translated" )
{
throw CustomException( "custom exception" );
}
TEST_CASE( "./failing/exceptions/custom/nothrow", "Custom exceptions can be translated when testing for nothrow" )
{
REQUIRE_NOTHROW( throw CustomException( "unexpected custom exception" ) );
}
TEST_CASE( "./failing/exceptions/custom/throw", "Custom exceptions can be translated when testing for throwing as something else" )
{
REQUIRE_THROWS_AS( throw CustomException( "custom exception - not std" ), std::exception );
}
TEST_CASE_NORETURN( "./failing/exceptions/custom/double", "Unexpected custom exceptions can be translated" )
{
throw double( 3.14 );
}
#ifdef __GNUC__
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wunused-variable"
#endif
TEST_CASE( "./failing/exceptions/in-section", "Exceptions thrown from sections report file/ line or section" )
{
SECTION( "the section", "" )
{
CATCH_REGISTER_LINE_INFO( "the section2" ) SECTION( "the section2", "" )
{
throw std::domain_error( "Exception from section" );
}
}
}
#ifdef __GNUC__
#pragma GCC diagnostic pop
#endif
TEST_CASE( "./succeeding/exceptions/error messages", "The error messages produced by exceptions caught by Catch matched the expected form" )
{
Catch::EmbeddedRunner runner;
using namespace Catch::Matchers;
SECTION( "custom, unexpected", "" )
{
runner.runMatching( "./failing/exceptions/custom" );
// CHECK_THAT( runner.getLog(), Contains( "Unexpected exception" ) ); // Mock reporter doesn't say this
CHECK_THAT( runner.getLog(), Contains( "custom exception" ) );
}
SECTION( "in section", "" )
{
runner.runMatching( "./failing/exceptions/in-section" );
INFO( runner.getLog() );
// CHECK( runner.getLog().find( "Unexpected exception" ) != std::string::npos ); // Mock reporter doesn't say this
CHECK_THAT( runner.getLog(), Contains( "Exception from section" ) );
CHECK_THAT( runner.getLog(), Contains( CATCH_GET_LINE_INFO( "the section2" ) ) );
}
}
inline int thisFunctionNotImplemented( int ) {
CATCH_NOT_IMPLEMENTED;
}
TEST_CASE( "./succeeding/exceptions/notimplemented", "" )
{
REQUIRE_THROWS( thisFunctionNotImplemented( 7 ) );
}