blob: 997f3ccc7975ce3d99eaca5ee4b652ec4b43c81d [file] [log] [blame]
Phil Nashd8026002010-11-09 23:24:00 +00001/*
Phil Nashd8026002010-11-09 23:24:00 +00002 * Created by Phil on 22/10/2010.
3 * Copyright 2010 Two Blue Cubes Ltd
4 *
5 * Distributed under the Boost Software License, Version 1.0. (See accompanying
6 * file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
Phil Nashd8026002010-11-09 23:24:00 +00007 */
8
Phil Nashd8026002010-11-09 23:24:00 +00009#ifndef TWOBLUECUBES_CATCH_HPP_INCLUDED
10#define TWOBLUECUBES_CATCH_HPP_INCLUDED
Phil Nash0f9c5512012-06-02 23:12:42 +010011
Phil Nashfc63b022015-05-21 06:15:53 +010012#ifdef __clang__
13# pragma clang system_header
14#elif defined __GNUC__
15# pragma GCC system_header
16#endif
17
Phil Nash3bdc97d2014-05-19 18:57:14 +010018#include "internal/catch_suppress_warnings.h"
Phil Nasha695eb92012-08-13 07:46:10 +010019
Phil Nashdb0421e2014-12-19 17:52:33 +000020#if defined(CATCH_CONFIG_MAIN) || defined(CATCH_CONFIG_RUNNER)
21# define CATCH_IMPL
Phil Nashf9df35b2014-03-10 18:02:18 +000022#endif
23
Phil Nashdb0421e2014-12-19 17:52:33 +000024#ifdef CATCH_IMPL
Phil Nash9abb2762014-03-06 21:53:34 +000025# ifndef CLARA_CONFIG_MAIN
26# define CLARA_CONFIG_MAIN_NOT_DEFINED
27# define CLARA_CONFIG_MAIN
28# endif
29#endif
30
Phil Nash1091ca82012-08-06 20:16:53 +010031#include "internal/catch_notimplemented_exception.h"
Phil Nash5ec53b22012-05-10 07:58:48 +010032#include "internal/catch_context.h"
Phil Nash896a04f2011-01-05 21:16:54 +000033#include "internal/catch_test_registry.hpp"
Phil Nashd8026002010-11-09 23:24:00 +000034#include "internal/catch_capture.hpp"
Phil Nashc4a089c2013-12-03 18:52:41 +000035#include "internal/catch_section.h"
Phil Nash5cad9d52011-01-27 22:29:36 +000036#include "internal/catch_generators.hpp"
Phil Nash9430a2c2011-04-20 15:40:40 +010037#include "internal/catch_interfaces_exception.h"
Phil Nashd7c203c2011-04-28 08:03:28 +010038#include "internal/catch_approx.hpp"
Phil Nash14001272017-02-08 15:14:51 +000039#include "internal/catch_matchers_string.h"
Phil Nash10dfca32017-02-21 16:05:04 +000040#include "internal/catch_matchers_vector.h"
Phil Nash4dd3f682013-04-22 08:19:17 +010041#include "internal/catch_compiler_capabilities.h"
Phil Nash1d210eb2014-06-30 07:33:17 +010042#include "internal/catch_interfaces_tag_alias_registry.h"
Phil Nashd8026002010-11-09 23:24:00 +000043
Phil Nash0f9c5512012-06-02 23:12:42 +010044// These files are included here so the single_include script doesn't put them
45// in the conditionally compiled sections
Phil Nashddfe9632012-08-14 19:30:30 +010046#include "internal/catch_test_case_info.h"
Phil Nash0f9c5512012-06-02 23:12:42 +010047#include "internal/catch_interfaces_runner.h"
48
Phil Nash8350ef62011-08-12 18:52:10 +010049#ifdef __OBJC__
50#include "internal/catch_objc.hpp"
51#endif
52
Phil Nashdb0421e2014-12-19 17:52:33 +000053#ifdef CATCH_IMPL
philsquaredb1835e12017-02-17 23:43:31 +000054
55// !TBD: Move the leak detector code into a separate header
56#ifdef CATCH_CONFIG_WINDOWS_CRTDBG
57#include <crtdbg.h>
58class LeakDetector {
59public:
60 LeakDetector() {
61 int flag = _CrtSetDbgFlag(_CRTDBG_REPORT_FLAG);
62 flag |= _CRTDBG_LEAK_CHECK_DF;
63 flag |= _CRTDBG_ALLOC_MEM_DF;
64 _CrtSetDbgFlag(flag);
65 _CrtSetReportMode(_CRT_WARN, _CRTDBG_MODE_FILE | _CRTDBG_MODE_DEBUG);
66 _CrtSetReportFile(_CRT_WARN, _CRTDBG_FILE_STDERR);
67 // Change this to leaking allocation's number to break there
68 _CrtSetBreakAlloc(-1);
69 }
70};
71#else
72class LeakDetector {};
73#endif
74
75LeakDetector leakDetector;
76
Phil Nash1091ca82012-08-06 20:16:53 +010077#include "internal/catch_impl.hpp"
Phil Nash9abb2762014-03-06 21:53:34 +000078#endif
Phil Nash89d1e6c2011-05-24 08:23:02 +010079
80#ifdef CATCH_CONFIG_MAIN
81#include "internal/catch_default_main.hpp"
Phil Nash9abb2762014-03-06 21:53:34 +000082#endif
83
84
85#ifdef CLARA_CONFIG_MAIN_NOT_DEFINED
86# undef CLARA_CONFIG_MAIN
87#endif
Phil Nash89d1e6c2011-05-24 08:23:02 +010088
Phil Nashd8026002010-11-09 23:24:00 +000089//////
90
Phil Nash46bcd4b2012-07-20 18:43:48 +010091// If this config identifier is defined then all CATCH macros are prefixed with CATCH_
92#ifdef CATCH_CONFIG_PREFIX_ALL
93
Phil Nashb2ef9982012-11-10 10:35:09 +000094#define CATCH_REQUIRE( expr ) INTERNAL_CATCH_TEST( expr, Catch::ResultDisposition::Normal, "CATCH_REQUIRE" )
Phil Nashbe9fe762014-05-29 08:00:20 +010095#define CATCH_REQUIRE_FALSE( expr ) INTERNAL_CATCH_TEST( expr, Catch::ResultDisposition::Normal | Catch::ResultDisposition::FalseTest, "CATCH_REQUIRE_FALSE" )
Phil Nash46bcd4b2012-07-20 18:43:48 +010096
Phil Nash85de7432015-07-13 06:34:41 +010097#define CATCH_REQUIRE_THROWS( expr ) INTERNAL_CATCH_THROWS( expr, Catch::ResultDisposition::Normal, "", "CATCH_REQUIRE_THROWS" )
Phil Nash1af13db2012-11-10 10:20:08 +000098#define CATCH_REQUIRE_THROWS_AS( expr, exceptionType ) INTERNAL_CATCH_THROWS_AS( expr, exceptionType, Catch::ResultDisposition::Normal, "CATCH_REQUIRE_THROWS_AS" )
Phil Nash72868922015-07-15 23:02:25 +010099#define CATCH_REQUIRE_THROWS_WITH( expr, matcher ) INTERNAL_CATCH_THROWS( expr, Catch::ResultDisposition::Normal, matcher, "CATCH_REQUIRE_THROWS_WITH" )
Phil Nash1af13db2012-11-10 10:20:08 +0000100#define CATCH_REQUIRE_NOTHROW( expr ) INTERNAL_CATCH_NO_THROW( expr, Catch::ResultDisposition::Normal, "CATCH_REQUIRE_NOTHROW" )
Phil Nash46bcd4b2012-07-20 18:43:48 +0100101
Phil Nashb2ef9982012-11-10 10:35:09 +0000102#define CATCH_CHECK( expr ) INTERNAL_CATCH_TEST( expr, Catch::ResultDisposition::ContinueOnFailure, "CATCH_CHECK" )
Phil Nashbe9fe762014-05-29 08:00:20 +0100103#define CATCH_CHECK_FALSE( expr ) INTERNAL_CATCH_TEST( expr, Catch::ResultDisposition::ContinueOnFailure | Catch::ResultDisposition::FalseTest, "CATCH_CHECK_FALSE" )
Phil Nashb2ef9982012-11-10 10:35:09 +0000104#define CATCH_CHECKED_IF( expr ) INTERNAL_CATCH_IF( expr, Catch::ResultDisposition::ContinueOnFailure, "CATCH_CHECKED_IF" )
105#define CATCH_CHECKED_ELSE( expr ) INTERNAL_CATCH_ELSE( expr, Catch::ResultDisposition::ContinueOnFailure, "CATCH_CHECKED_ELSE" )
Phil Nash7717c292012-11-13 09:45:29 +0000106#define CATCH_CHECK_NOFAIL( expr ) INTERNAL_CATCH_TEST( expr, Catch::ResultDisposition::ContinueOnFailure | Catch::ResultDisposition::SuppressFail, "CATCH_CHECK_NOFAIL" )
Phil Nash46bcd4b2012-07-20 18:43:48 +0100107
Kevin Ushey7d2668f2016-04-21 18:26:17 -0700108#define CATCH_CHECK_THROWS( expr ) INTERNAL_CATCH_THROWS( expr, Catch::ResultDisposition::ContinueOnFailure, "", "CATCH_CHECK_THROWS" )
Phil Nash1af13db2012-11-10 10:20:08 +0000109#define CATCH_CHECK_THROWS_AS( expr, exceptionType ) INTERNAL_CATCH_THROWS_AS( expr, exceptionType, Catch::ResultDisposition::ContinueOnFailure, "CATCH_CHECK_THROWS_AS" )
Phil Nash72868922015-07-15 23:02:25 +0100110#define CATCH_CHECK_THROWS_WITH( expr, matcher ) INTERNAL_CATCH_THROWS( expr, Catch::ResultDisposition::ContinueOnFailure, matcher, "CATCH_CHECK_THROWS_WITH" )
Phil Nash1af13db2012-11-10 10:20:08 +0000111#define CATCH_CHECK_NOTHROW( expr ) INTERNAL_CATCH_NO_THROW( expr, Catch::ResultDisposition::ContinueOnFailure, "CATCH_CHECK_NOTHROW" )
Phil Nash46bcd4b2012-07-20 18:43:48 +0100112
jbo-abletone12fc4a2015-07-27 00:25:56 +0200113#define CATCH_CHECK_THAT( arg, matcher ) INTERNAL_CHECK_THAT( arg, matcher, Catch::ResultDisposition::ContinueOnFailure, "CATCH_CHECK_THAT" )
Phil Nash1af13db2012-11-10 10:20:08 +0000114#define CATCH_REQUIRE_THAT( arg, matcher ) INTERNAL_CHECK_THAT( arg, matcher, Catch::ResultDisposition::Normal, "CATCH_REQUIRE_THAT" )
Phil Nash46bcd4b2012-07-20 18:43:48 +0100115
Phil Nash207b27b2013-02-02 19:58:04 +0000116#define CATCH_INFO( msg ) INTERNAL_CATCH_INFO( msg, "CATCH_INFO" )
Phil Nash274ed3e2013-12-12 23:02:31 +0000117#define CATCH_WARN( msg ) INTERNAL_CATCH_MSG( Catch::ResultWas::Warning, Catch::ResultDisposition::ContinueOnFailure, "CATCH_WARN", msg )
Phil Nashb5fd5a62013-06-28 17:09:57 +0100118#define CATCH_SCOPED_INFO( msg ) INTERNAL_CATCH_INFO( msg, "CATCH_INFO" )
Phil Nash207b27b2013-02-02 19:58:04 +0000119#define CATCH_CAPTURE( msg ) INTERNAL_CATCH_INFO( #msg " := " << msg, "CATCH_CAPTURE" )
Phil Nashb5fd5a62013-06-28 17:09:57 +0100120#define CATCH_SCOPED_CAPTURE( msg ) INTERNAL_CATCH_INFO( #msg " := " << msg, "CATCH_CAPTURE" )
Phil Nash46bcd4b2012-07-20 18:43:48 +0100121
Phil Nashc0b69802013-03-16 20:18:52 +0000122#ifdef CATCH_CONFIG_VARIADIC_MACROS
123 #define CATCH_TEST_CASE( ... ) INTERNAL_CATCH_TESTCASE( __VA_ARGS__ )
Phil Nash597ed1f2013-05-14 19:31:21 +0100124 #define CATCH_TEST_CASE_METHOD( className, ... ) INTERNAL_CATCH_TEST_CASE_METHOD( className, __VA_ARGS__ )
Phil Nashc0b69802013-03-16 20:18:52 +0000125 #define CATCH_METHOD_AS_TEST_CASE( method, ... ) INTERNAL_CATCH_METHOD_AS_TEST_CASE( method, __VA_ARGS__ )
Phil Nashaca16a02016-01-22 07:50:10 +0000126 #define CATCH_REGISTER_TEST_CASE( Function, ... ) INTERNAL_CATCH_REGISTER_TESTCASE( Function, __VA_ARGS__ )
Phil Nashc0b69802013-03-16 20:18:52 +0000127 #define CATCH_SECTION( ... ) INTERNAL_CATCH_SECTION( __VA_ARGS__ )
Phil Nash274ed3e2013-12-12 23:02:31 +0000128 #define CATCH_FAIL( ... ) INTERNAL_CATCH_MSG( Catch::ResultWas::ExplicitFailure, Catch::ResultDisposition::Normal, "CATCH_FAIL", __VA_ARGS__ )
Phil Nash557b3bd2013-12-14 23:16:03 +0000129 #define CATCH_SUCCEED( ... ) INTERNAL_CATCH_MSG( Catch::ResultWas::Ok, Catch::ResultDisposition::ContinueOnFailure, "CATCH_SUCCEED", __VA_ARGS__ )
Phil Nashc0b69802013-03-16 20:18:52 +0000130#else
131 #define CATCH_TEST_CASE( name, description ) INTERNAL_CATCH_TESTCASE( name, description )
Phil Nash597ed1f2013-05-14 19:31:21 +0100132 #define CATCH_TEST_CASE_METHOD( className, name, description ) INTERNAL_CATCH_TEST_CASE_METHOD( className, name, description )
Phil Nashc0b69802013-03-16 20:18:52 +0000133 #define CATCH_METHOD_AS_TEST_CASE( method, name, description ) INTERNAL_CATCH_METHOD_AS_TEST_CASE( method, name, description )
Phil Nash0e649732015-11-20 16:54:07 +0000134 #define CATCH_REGISTER_TEST_CASE( function, name, description ) INTERNAL_CATCH_REGISTER_TESTCASE( function, name, description )
Phil Nashc0b69802013-03-16 20:18:52 +0000135 #define CATCH_SECTION( name, description ) INTERNAL_CATCH_SECTION( name, description )
Phil Nash274ed3e2013-12-12 23:02:31 +0000136 #define CATCH_FAIL( msg ) INTERNAL_CATCH_MSG( Catch::ResultWas::ExplicitFailure, Catch::ResultDisposition::Normal, "CATCH_FAIL", msg )
Phil Nash557b3bd2013-12-14 23:16:03 +0000137 #define CATCH_SUCCEED( msg ) INTERNAL_CATCH_MSG( Catch::ResultWas::Ok, Catch::ResultDisposition::ContinueOnFailure, "CATCH_SUCCEED", msg )
Phil Nashc0b69802013-03-16 20:18:52 +0000138#endif
139#define CATCH_ANON_TEST_CASE() INTERNAL_CATCH_TESTCASE( "", "" )
Phil Nash46bcd4b2012-07-20 18:43:48 +0100140
141#define CATCH_REGISTER_REPORTER( name, reporterType ) INTERNAL_CATCH_REGISTER_REPORTER( name, reporterType )
Phil Nash8255acf2012-11-30 19:29:03 +0000142#define CATCH_REGISTER_LEGACY_REPORTER( name, reporterType ) INTERNAL_CATCH_REGISTER_LEGACY_REPORTER( name, reporterType )
Phil Nash46bcd4b2012-07-20 18:43:48 +0100143
144#define CATCH_GENERATE( expr) INTERNAL_CATCH_GENERATE( expr )
145
Phil Nash37186a12013-03-13 12:19:30 +0000146// "BDD-style" convenience wrappers
Phil Nash444f4dd2013-03-16 20:39:19 +0000147#ifdef CATCH_CONFIG_VARIADIC_MACROS
148#define CATCH_SCENARIO( ... ) CATCH_TEST_CASE( "Scenario: " __VA_ARGS__ )
James Wilkinson63005a12014-07-10 10:22:20 +0100149#define CATCH_SCENARIO_METHOD( className, ... ) INTERNAL_CATCH_TEST_CASE_METHOD( className, "Scenario: " __VA_ARGS__ )
Phil Nash444f4dd2013-03-16 20:39:19 +0000150#else
Phil Nash37186a12013-03-13 12:19:30 +0000151#define CATCH_SCENARIO( name, tags ) CATCH_TEST_CASE( "Scenario: " name, tags )
James Wilkinson63005a12014-07-10 10:22:20 +0100152#define CATCH_SCENARIO_METHOD( className, name, tags ) INTERNAL_CATCH_TEST_CASE_METHOD( className, "Scenario: " name, tags )
Phil Nash444f4dd2013-03-16 20:39:19 +0000153#endif
Phil Nash6de135c2015-07-22 18:07:28 +0100154#define CATCH_GIVEN( desc ) CATCH_SECTION( std::string( "Given: ") + desc, "" )
155#define CATCH_WHEN( desc ) CATCH_SECTION( std::string( " When: ") + desc, "" )
156#define CATCH_AND_WHEN( desc ) CATCH_SECTION( std::string( " And: ") + desc, "" )
157#define CATCH_THEN( desc ) CATCH_SECTION( std::string( " Then: ") + desc, "" )
158#define CATCH_AND_THEN( desc ) CATCH_SECTION( std::string( " And: ") + desc, "" )
Phil Nash37186a12013-03-13 12:19:30 +0000159
Phil Nash46bcd4b2012-07-20 18:43:48 +0100160// If CATCH_CONFIG_PREFIX_ALL is not defined then the CATCH_ prefix is not required
161#else
162
Phil Nashb2ef9982012-11-10 10:35:09 +0000163#define REQUIRE( expr ) INTERNAL_CATCH_TEST( expr, Catch::ResultDisposition::Normal, "REQUIRE" )
Phil Nashbe9fe762014-05-29 08:00:20 +0100164#define REQUIRE_FALSE( expr ) INTERNAL_CATCH_TEST( expr, Catch::ResultDisposition::Normal | Catch::ResultDisposition::FalseTest, "REQUIRE_FALSE" )
Phil Nashd8026002010-11-09 23:24:00 +0000165
Phil Nash85de7432015-07-13 06:34:41 +0100166#define REQUIRE_THROWS( expr ) INTERNAL_CATCH_THROWS( expr, Catch::ResultDisposition::Normal, "", "REQUIRE_THROWS" )
Phil Nash1af13db2012-11-10 10:20:08 +0000167#define REQUIRE_THROWS_AS( expr, exceptionType ) INTERNAL_CATCH_THROWS_AS( expr, exceptionType, Catch::ResultDisposition::Normal, "REQUIRE_THROWS_AS" )
Phil Nash72868922015-07-15 23:02:25 +0100168#define REQUIRE_THROWS_WITH( expr, matcher ) INTERNAL_CATCH_THROWS( expr, Catch::ResultDisposition::Normal, matcher, "REQUIRE_THROWS_WITH" )
Phil Nash1af13db2012-11-10 10:20:08 +0000169#define REQUIRE_NOTHROW( expr ) INTERNAL_CATCH_NO_THROW( expr, Catch::ResultDisposition::Normal, "REQUIRE_NOTHROW" )
Phil Nashd8026002010-11-09 23:24:00 +0000170
Phil Nashb2ef9982012-11-10 10:35:09 +0000171#define CHECK( expr ) INTERNAL_CATCH_TEST( expr, Catch::ResultDisposition::ContinueOnFailure, "CHECK" )
Phil Nashbe9fe762014-05-29 08:00:20 +0100172#define CHECK_FALSE( expr ) INTERNAL_CATCH_TEST( expr, Catch::ResultDisposition::ContinueOnFailure | Catch::ResultDisposition::FalseTest, "CHECK_FALSE" )
Phil Nashb2ef9982012-11-10 10:35:09 +0000173#define CHECKED_IF( expr ) INTERNAL_CATCH_IF( expr, Catch::ResultDisposition::ContinueOnFailure, "CHECKED_IF" )
174#define CHECKED_ELSE( expr ) INTERNAL_CATCH_ELSE( expr, Catch::ResultDisposition::ContinueOnFailure, "CHECKED_ELSE" )
Phil Nashd539da92012-11-13 09:44:52 +0000175#define CHECK_NOFAIL( expr ) INTERNAL_CATCH_TEST( expr, Catch::ResultDisposition::ContinueOnFailure | Catch::ResultDisposition::SuppressFail, "CHECK_NOFAIL" )
Phil Nashd8026002010-11-09 23:24:00 +0000176
Phil Nash85de7432015-07-13 06:34:41 +0100177#define CHECK_THROWS( expr ) INTERNAL_CATCH_THROWS( expr, Catch::ResultDisposition::ContinueOnFailure, "", "CHECK_THROWS" )
Phil Nash1af13db2012-11-10 10:20:08 +0000178#define CHECK_THROWS_AS( expr, exceptionType ) INTERNAL_CATCH_THROWS_AS( expr, exceptionType, Catch::ResultDisposition::ContinueOnFailure, "CHECK_THROWS_AS" )
Phil Nash72868922015-07-15 23:02:25 +0100179#define CHECK_THROWS_WITH( expr, matcher ) INTERNAL_CATCH_THROWS( expr, Catch::ResultDisposition::ContinueOnFailure, matcher, "CHECK_THROWS_WITH" )
Phil Nash1af13db2012-11-10 10:20:08 +0000180#define CHECK_NOTHROW( expr ) INTERNAL_CATCH_NO_THROW( expr, Catch::ResultDisposition::ContinueOnFailure, "CHECK_NOTHROW" )
Phil Nashd8026002010-11-09 23:24:00 +0000181
Phil Nash1af13db2012-11-10 10:20:08 +0000182#define CHECK_THAT( arg, matcher ) INTERNAL_CHECK_THAT( arg, matcher, Catch::ResultDisposition::ContinueOnFailure, "CHECK_THAT" )
183#define REQUIRE_THAT( arg, matcher ) INTERNAL_CHECK_THAT( arg, matcher, Catch::ResultDisposition::Normal, "REQUIRE_THAT" )
Phil Nasheca56372012-03-04 11:14:21 +0000184
Phil Nash207b27b2013-02-02 19:58:04 +0000185#define INFO( msg ) INTERNAL_CATCH_INFO( msg, "INFO" )
Phil Nash274ed3e2013-12-12 23:02:31 +0000186#define WARN( msg ) INTERNAL_CATCH_MSG( Catch::ResultWas::Warning, Catch::ResultDisposition::ContinueOnFailure, "WARN", msg )
Phil Nashb5fd5a62013-06-28 17:09:57 +0100187#define SCOPED_INFO( msg ) INTERNAL_CATCH_INFO( msg, "INFO" )
Phil Nash207b27b2013-02-02 19:58:04 +0000188#define CAPTURE( msg ) INTERNAL_CATCH_INFO( #msg " := " << msg, "CAPTURE" )
Phil Nashb5fd5a62013-06-28 17:09:57 +0100189#define SCOPED_CAPTURE( msg ) INTERNAL_CATCH_INFO( #msg " := " << msg, "CAPTURE" )
Phil Nashd8026002010-11-09 23:24:00 +0000190
Phil Nashc0b69802013-03-16 20:18:52 +0000191#ifdef CATCH_CONFIG_VARIADIC_MACROS
192 #define TEST_CASE( ... ) INTERNAL_CATCH_TESTCASE( __VA_ARGS__ )
Phil Nash597ed1f2013-05-14 19:31:21 +0100193 #define TEST_CASE_METHOD( className, ... ) INTERNAL_CATCH_TEST_CASE_METHOD( className, __VA_ARGS__ )
Phil Nashc0b69802013-03-16 20:18:52 +0000194 #define METHOD_AS_TEST_CASE( method, ... ) INTERNAL_CATCH_METHOD_AS_TEST_CASE( method, __VA_ARGS__ )
Phil Nashf294c982016-01-05 08:19:16 +0000195 #define REGISTER_TEST_CASE( Function, ... ) INTERNAL_CATCH_REGISTER_TESTCASE( Function, __VA_ARGS__ )
Phil Nashc0b69802013-03-16 20:18:52 +0000196 #define SECTION( ... ) INTERNAL_CATCH_SECTION( __VA_ARGS__ )
Phil Nash274ed3e2013-12-12 23:02:31 +0000197 #define FAIL( ... ) INTERNAL_CATCH_MSG( Catch::ResultWas::ExplicitFailure, Catch::ResultDisposition::Normal, "FAIL", __VA_ARGS__ )
Phil Nash557b3bd2013-12-14 23:16:03 +0000198 #define SUCCEED( ... ) INTERNAL_CATCH_MSG( Catch::ResultWas::Ok, Catch::ResultDisposition::ContinueOnFailure, "SUCCEED", __VA_ARGS__ )
Phil Nashc0b69802013-03-16 20:18:52 +0000199#else
200 #define TEST_CASE( name, description ) INTERNAL_CATCH_TESTCASE( name, description )
Phil Nash597ed1f2013-05-14 19:31:21 +0100201 #define TEST_CASE_METHOD( className, name, description ) INTERNAL_CATCH_TEST_CASE_METHOD( className, name, description )
Phil Nashc0b69802013-03-16 20:18:52 +0000202 #define METHOD_AS_TEST_CASE( method, name, description ) INTERNAL_CATCH_METHOD_AS_TEST_CASE( method, name, description )
Phil Nash2106d822015-12-09 18:24:29 +0000203 #define REGISTER_TEST_CASE( method, name, description ) INTERNAL_CATCH_REGISTER_TESTCASE( method, name, description )
Phil Nashc0b69802013-03-16 20:18:52 +0000204 #define SECTION( name, description ) INTERNAL_CATCH_SECTION( name, description )
Phil Nash274ed3e2013-12-12 23:02:31 +0000205 #define FAIL( msg ) INTERNAL_CATCH_MSG( Catch::ResultWas::ExplicitFailure, Catch::ResultDisposition::Normal, "FAIL", msg )
Phil Nash557b3bd2013-12-14 23:16:03 +0000206 #define SUCCEED( msg ) INTERNAL_CATCH_MSG( Catch::ResultWas::Ok, Catch::ResultDisposition::ContinueOnFailure, "SUCCEED", msg )
Phil Nashc0b69802013-03-16 20:18:52 +0000207#endif
208#define ANON_TEST_CASE() INTERNAL_CATCH_TESTCASE( "", "" )
Phil Nashd8026002010-11-09 23:24:00 +0000209
Phil Nash5cad9d52011-01-27 22:29:36 +0000210#define REGISTER_REPORTER( name, reporterType ) INTERNAL_CATCH_REGISTER_REPORTER( name, reporterType )
Phil Nash8255acf2012-11-30 19:29:03 +0000211#define REGISTER_LEGACY_REPORTER( name, reporterType ) INTERNAL_CATCH_REGISTER_LEGACY_REPORTER( name, reporterType )
Phil Nash5cad9d52011-01-27 22:29:36 +0000212
213#define GENERATE( expr) INTERNAL_CATCH_GENERATE( expr )
Phil Nashd8026002010-11-09 23:24:00 +0000214
Phil Nash46bcd4b2012-07-20 18:43:48 +0100215#endif
216
217#define CATCH_TRANSLATE_EXCEPTION( signature ) INTERNAL_CATCH_TRANSLATE_EXCEPTION( signature )
Phil Nashd8026002010-11-09 23:24:00 +0000218
Phil Nash37186a12013-03-13 12:19:30 +0000219// "BDD-style" convenience wrappers
Phil Nash444f4dd2013-03-16 20:39:19 +0000220#ifdef CATCH_CONFIG_VARIADIC_MACROS
221#define SCENARIO( ... ) TEST_CASE( "Scenario: " __VA_ARGS__ )
James Wilkinson63005a12014-07-10 10:22:20 +0100222#define SCENARIO_METHOD( className, ... ) INTERNAL_CATCH_TEST_CASE_METHOD( className, "Scenario: " __VA_ARGS__ )
Phil Nash444f4dd2013-03-16 20:39:19 +0000223#else
Phil Nash37186a12013-03-13 12:19:30 +0000224#define SCENARIO( name, tags ) TEST_CASE( "Scenario: " name, tags )
James Wilkinson63005a12014-07-10 10:22:20 +0100225#define SCENARIO_METHOD( className, name, tags ) INTERNAL_CATCH_TEST_CASE_METHOD( className, "Scenario: " name, tags )
Phil Nash444f4dd2013-03-16 20:39:19 +0000226#endif
Phil Nash6de135c2015-07-22 18:07:28 +0100227#define GIVEN( desc ) SECTION( std::string(" Given: ") + desc, "" )
228#define WHEN( desc ) SECTION( std::string(" When: ") + desc, "" )
229#define AND_WHEN( desc ) SECTION( std::string("And when: ") + desc, "" )
230#define THEN( desc ) SECTION( std::string(" Then: ") + desc, "" )
231#define AND_THEN( desc ) SECTION( std::string(" And: ") + desc, "" )
Phil Nash37186a12013-03-13 12:19:30 +0000232
Phil Nash01db6c42011-04-04 07:56:44 +0100233using Catch::Detail::Approx;
Phil Nashd8026002010-11-09 23:24:00 +0000234
Phil Nash3bdc97d2014-05-19 18:57:14 +0100235#include "internal/catch_reenable_warnings.h"
Phil Nasha695eb92012-08-13 07:46:10 +0100236
Phil Nash73acd942011-02-16 19:02:09 +0000237#endif // TWOBLUECUBES_CATCH_HPP_INCLUDED