blob: 0a4711be0e76db1d4b7dd1bbe1ffbc0dcfb5a2c6 [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
Martin Hořeňovský44dbda92018-01-26 20:27:19 +010012#define CATCH_VERSION_MAJOR 2
13#define CATCH_VERSION_MINOR 1
14#define CATCH_VERSION_PATCH 1
Martin Hořeňovský9796a772017-11-14 21:04:36 +010015
Phil Nashfc63b022015-05-21 06:15:53 +010016#ifdef __clang__
17# pragma clang system_header
18#elif defined __GNUC__
19# pragma GCC system_header
20#endif
21
Phil Nash3bdc97d2014-05-19 18:57:14 +010022#include "internal/catch_suppress_warnings.h"
Phil Nasha695eb92012-08-13 07:46:10 +010023
Phil Nashdb0421e2014-12-19 17:52:33 +000024#if defined(CATCH_CONFIG_MAIN) || defined(CATCH_CONFIG_RUNNER)
25# define CATCH_IMPL
Martin Hořeňovský9796a772017-11-14 21:04:36 +010026# define CATCH_CONFIG_ALL_PARTS
27#endif
28
29// In the impl file, we want to have access to all parts of the headers
30// Can also be used to sanely support PCHs
31#if defined(CATCH_CONFIG_ALL_PARTS)
Martin Hořeňovský24af32f2017-08-17 20:21:06 +020032# define CATCH_CONFIG_EXTERNAL_INTERFACES
Martin Hořeňovský9796c512017-08-30 18:06:48 +020033# if defined(CATCH_CONFIG_DISABLE_MATCHERS)
34# undef CATCH_CONFIG_DISABLE_MATCHERS
35# endif
Martin Hořeňovskýbaf3d2f2017-11-19 14:54:52 +010036# define CATCH_CONFIG_ENABLE_CHRONO_STRINGMAKER
Phil Nashf9df35b2014-03-10 18:02:18 +000037#endif
38
Martin Hořeňovský9796a772017-11-14 21:04:36 +010039#if !defined(CATCH_CONFIG_IMPL_ONLY)
Martin Hořeňovskýcb2fceb2017-08-21 14:58:50 +020040#include "internal/catch_platform.h"
41
Phil Nashdb0421e2014-12-19 17:52:33 +000042#ifdef CATCH_IMPL
Phil Nash9abb2762014-03-06 21:53:34 +000043# ifndef CLARA_CONFIG_MAIN
44# define CLARA_CONFIG_MAIN_NOT_DEFINED
45# define CLARA_CONFIG_MAIN
46# endif
47#endif
48
Martin Hořeňovskýa8a1c372017-11-21 11:10:07 +010049#include "internal/catch_user_interfaces.h"
Martin Hořeňovský33fd54a2017-07-27 11:55:30 +020050#include "internal/catch_tag_alias_autoregistrar.h"
Phil Nashc5608f02017-09-07 11:24:33 +010051#include "internal/catch_test_registry.h"
Phil Nashd8026002010-11-09 23:24:00 +000052#include "internal/catch_capture.hpp"
Phil Nashc4a089c2013-12-03 18:52:41 +000053#include "internal/catch_section.h"
Phil Nasha9b68132017-08-04 19:23:30 +010054#include "internal/catch_benchmark.h"
Phil Nash9430a2c2011-04-20 15:40:40 +010055#include "internal/catch_interfaces_exception.h"
Phil Nashc5608f02017-09-07 11:24:33 +010056#include "internal/catch_approx.h"
Phil Nash4dd3f682013-04-22 08:19:17 +010057#include "internal/catch_compiler_capabilities.h"
Phil Nash2d376492017-09-06 15:43:26 +010058#include "internal/catch_string_manip.h"
Phil Nashd8026002010-11-09 23:24:00 +000059
Phil Nashee9b19e2017-08-09 12:10:14 +010060#ifndef CATCH_CONFIG_DISABLE_MATCHERS
61#include "internal/catch_capture_matchers.h"
62#endif
63
Phil Nash0f9c5512012-06-02 23:12:42 +010064// These files are included here so the single_include script doesn't put them
65// in the conditionally compiled sections
Phil Nashddfe9632012-08-14 19:30:30 +010066#include "internal/catch_test_case_info.h"
Phil Nash0f9c5512012-06-02 23:12:42 +010067#include "internal/catch_interfaces_runner.h"
68
Phil Nash8350ef62011-08-12 18:52:10 +010069#ifdef __OBJC__
70#include "internal/catch_objc.hpp"
71#endif
72
Martin Hořeňovský24af32f2017-08-17 20:21:06 +020073#ifdef CATCH_CONFIG_EXTERNAL_INTERFACES
74#include "internal/catch_external_interfaces.h"
75#endif
76
Martin Hořeňovský9796a772017-11-14 21:04:36 +010077#endif // ! CATCH_CONFIG_IMPL_ONLY
78
Phil Nashdb0421e2014-12-19 17:52:33 +000079#ifdef CATCH_IMPL
Phil Nash1091ca82012-08-06 20:16:53 +010080#include "internal/catch_impl.hpp"
Phil Nash9abb2762014-03-06 21:53:34 +000081#endif
Phil Nash89d1e6c2011-05-24 08:23:02 +010082
83#ifdef CATCH_CONFIG_MAIN
84#include "internal/catch_default_main.hpp"
Phil Nash9abb2762014-03-06 21:53:34 +000085#endif
86
Martin Hořeňovský9796a772017-11-14 21:04:36 +010087#if !defined(CATCH_CONFIG_IMPL_ONLY)
Phil Nash9abb2762014-03-06 21:53:34 +000088
89#ifdef CLARA_CONFIG_MAIN_NOT_DEFINED
90# undef CLARA_CONFIG_MAIN
91#endif
Phil Nash89d1e6c2011-05-24 08:23:02 +010092
Martin Hořeňovský053c29a2017-08-27 17:03:32 +020093#if !defined(CATCH_CONFIG_DISABLE)
Phil Nashd8026002010-11-09 23:24:00 +000094//////
Phil Nash46bcd4b2012-07-20 18:43:48 +010095// If this config identifier is defined then all CATCH macros are prefixed with CATCH_
96#ifdef CATCH_CONFIG_PREFIX_ALL
97
Martin Hořeňovskýe1bca702017-04-25 20:20:46 +020098#define CATCH_REQUIRE( ... ) INTERNAL_CATCH_TEST( "CATCH_REQUIRE", Catch::ResultDisposition::Normal, __VA_ARGS__ )
99#define CATCH_REQUIRE_FALSE( ... ) INTERNAL_CATCH_TEST( "CATCH_REQUIRE_FALSE", Catch::ResultDisposition::Normal | Catch::ResultDisposition::FalseTest, __VA_ARGS__ )
Phil Nash46bcd4b2012-07-20 18:43:48 +0100100
Martin Hořeňovskýe1bca702017-04-25 20:20:46 +0200101#define CATCH_REQUIRE_THROWS( ... ) INTERNAL_CATCH_THROWS( "CATCH_REQUIRE_THROWS", Catch::ResultDisposition::Normal, "", __VA_ARGS__ )
Phil Nashf3ec8432017-03-21 13:22:39 +0000102#define CATCH_REQUIRE_THROWS_AS( expr, exceptionType ) INTERNAL_CATCH_THROWS_AS( "CATCH_REQUIRE_THROWS_AS", exceptionType, Catch::ResultDisposition::Normal, expr )
Martin Hořeňovský35c13012017-07-28 21:04:18 +0200103#define CATCH_REQUIRE_THROWS_WITH( expr, matcher ) INTERNAL_CATCH_THROWS_STR_MATCHES( "CATCH_REQUIRE_THROWS_WITH", Catch::ResultDisposition::Normal, matcher, expr )
Phil Nashee9b19e2017-08-09 12:10:14 +0100104#if !defined(CATCH_CONFIG_DISABLE_MATCHERS)
Martin Hořeňovský35c13012017-07-28 21:04:18 +0200105#define CATCH_REQUIRE_THROWS_MATCHES( expr, exceptionType, matcher ) INTERNAL_CATCH_THROWS_MATCHES( "CATCH_REQUIRE_THROWS_MATCHES", exceptionType, Catch::ResultDisposition::Normal, matcher, expr )
Martin Hořeňovský0ca4cfb2017-07-28 21:34:34 +0200106#endif// CATCH_CONFIG_DISABLE_MATCHERS
Martin Hořeňovskýe1bca702017-04-25 20:20:46 +0200107#define CATCH_REQUIRE_NOTHROW( ... ) INTERNAL_CATCH_NO_THROW( "CATCH_REQUIRE_NOTHROW", Catch::ResultDisposition::Normal, __VA_ARGS__ )
Phil Nash46bcd4b2012-07-20 18:43:48 +0100108
Martin Hořeňovskýe1bca702017-04-25 20:20:46 +0200109#define CATCH_CHECK( ... ) INTERNAL_CATCH_TEST( "CATCH_CHECK", Catch::ResultDisposition::ContinueOnFailure, __VA_ARGS__ )
110#define CATCH_CHECK_FALSE( ... ) INTERNAL_CATCH_TEST( "CATCH_CHECK_FALSE", Catch::ResultDisposition::ContinueOnFailure | Catch::ResultDisposition::FalseTest, __VA_ARGS__ )
111#define CATCH_CHECKED_IF( ... ) INTERNAL_CATCH_IF( "CATCH_CHECKED_IF", Catch::ResultDisposition::ContinueOnFailure, __VA_ARGS__ )
112#define CATCH_CHECKED_ELSE( ... ) INTERNAL_CATCH_ELSE( "CATCH_CHECKED_ELSE", Catch::ResultDisposition::ContinueOnFailure, __VA_ARGS__ )
113#define CATCH_CHECK_NOFAIL( ... ) INTERNAL_CATCH_TEST( "CATCH_CHECK_NOFAIL", Catch::ResultDisposition::ContinueOnFailure | Catch::ResultDisposition::SuppressFail, __VA_ARGS__ )
Phil Nash46bcd4b2012-07-20 18:43:48 +0100114
Martin Hořeňovskýe1bca702017-04-25 20:20:46 +0200115#define CATCH_CHECK_THROWS( ... ) INTERNAL_CATCH_THROWS( "CATCH_CHECK_THROWS", Catch::ResultDisposition::ContinueOnFailure, "", __VA_ARGS__ )
Phil Nashf3ec8432017-03-21 13:22:39 +0000116#define CATCH_CHECK_THROWS_AS( expr, exceptionType ) INTERNAL_CATCH_THROWS_AS( "CATCH_CHECK_THROWS_AS", exceptionType, Catch::ResultDisposition::ContinueOnFailure, expr )
Martin Hořeňovský35c13012017-07-28 21:04:18 +0200117#define CATCH_CHECK_THROWS_WITH( expr, matcher ) INTERNAL_CATCH_THROWS_STR_MATCHES( "CATCH_CHECK_THROWS_WITH", Catch::ResultDisposition::ContinueOnFailure, matcher, expr )
Phil Nashee9b19e2017-08-09 12:10:14 +0100118#if !defined(CATCH_CONFIG_DISABLE_MATCHERS)
Martin Hořeňovský35c13012017-07-28 21:04:18 +0200119#define CATCH_CHECK_THROWS_MATCHES( expr, exceptionType, matcher ) INTERNAL_CATCH_THROWS_MATCHES( "CATCH_CHECK_THROWS_MATCHES", exceptionType, Catch::ResultDisposition::ContinueOnFailure, matcher, expr )
Martin Hořeňovský0ca4cfb2017-07-28 21:34:34 +0200120#endif // CATCH_CONFIG_DISABLE_MATCHERS
Martin Hořeňovskýe1bca702017-04-25 20:20:46 +0200121#define CATCH_CHECK_NOTHROW( ... ) INTERNAL_CATCH_NO_THROW( "CATCH_CHECK_NOTHROW", Catch::ResultDisposition::ContinueOnFailure, __VA_ARGS__ )
Phil Nash46bcd4b2012-07-20 18:43:48 +0100122
Martin Hořeňovskýd08e31d2017-07-29 08:43:32 +0200123#if !defined(CATCH_CONFIG_DISABLE_MATCHERS)
Phil Nashf3ec8432017-03-21 13:22:39 +0000124#define CATCH_CHECK_THAT( arg, matcher ) INTERNAL_CHECK_THAT( "CATCH_CHECK_THAT", matcher, Catch::ResultDisposition::ContinueOnFailure, arg )
Martin Hořeňovský7a8a0202017-03-17 13:21:40 +0100125
Phil Nashf3ec8432017-03-21 13:22:39 +0000126#define CATCH_REQUIRE_THAT( arg, matcher ) INTERNAL_CHECK_THAT( "CATCH_REQUIRE_THAT", matcher, Catch::ResultDisposition::Normal, arg )
Martin Hořeňovský0ca4cfb2017-07-28 21:34:34 +0200127#endif // CATCH_CONFIG_DISABLE_MATCHERS
Phil Nash46bcd4b2012-07-20 18:43:48 +0100128
Phil Nashf3ec8432017-03-21 13:22:39 +0000129#define CATCH_INFO( msg ) INTERNAL_CATCH_INFO( "CATCH_INFO", msg )
130#define CATCH_WARN( msg ) INTERNAL_CATCH_MSG( "CATCH_WARN", Catch::ResultWas::Warning, Catch::ResultDisposition::ContinueOnFailure, msg )
Martin Hořeňovský33ed1772017-05-02 23:51:03 +0200131#define CATCH_CAPTURE( msg ) INTERNAL_CATCH_INFO( "CATCH_CAPTURE", #msg " := " << ::Catch::Detail::stringify(msg) )
Phil Nash46bcd4b2012-07-20 18:43:48 +0100132
Martin Hořeňovský71df6632017-04-25 12:41:30 +0200133#define CATCH_TEST_CASE( ... ) INTERNAL_CATCH_TESTCASE( __VA_ARGS__ )
134#define CATCH_TEST_CASE_METHOD( className, ... ) INTERNAL_CATCH_TEST_CASE_METHOD( className, __VA_ARGS__ )
135#define CATCH_METHOD_AS_TEST_CASE( method, ... ) INTERNAL_CATCH_METHOD_AS_TEST_CASE( method, __VA_ARGS__ )
136#define CATCH_REGISTER_TEST_CASE( Function, ... ) INTERNAL_CATCH_REGISTER_TESTCASE( Function, __VA_ARGS__ )
137#define CATCH_SECTION( ... ) INTERNAL_CATCH_SECTION( __VA_ARGS__ )
Martin Hořeňovský40130e52017-04-28 18:33:52 +0200138#define CATCH_FAIL( ... ) INTERNAL_CATCH_MSG( "CATCH_FAIL", Catch::ResultWas::ExplicitFailure, Catch::ResultDisposition::Normal, __VA_ARGS__ )
Martin Hořeňovský71df6632017-04-25 12:41:30 +0200139#define CATCH_FAIL_CHECK( ... ) INTERNAL_CATCH_MSG( "CATCH_FAIL_CHECK", Catch::ResultWas::ExplicitFailure, Catch::ResultDisposition::ContinueOnFailure, __VA_ARGS__ )
140#define CATCH_SUCCEED( ... ) INTERNAL_CATCH_MSG( "CATCH_SUCCEED", Catch::ResultWas::Ok, Catch::ResultDisposition::ContinueOnFailure, __VA_ARGS__ )
141
Phil Nashf1936982017-07-13 09:20:37 +0100142#define CATCH_ANON_TEST_CASE() INTERNAL_CATCH_TESTCASE()
Phil Nash46bcd4b2012-07-20 18:43:48 +0100143
Phil Nash37186a12013-03-13 12:19:30 +0000144// "BDD-style" convenience wrappers
Phil Nash444f4dd2013-03-16 20:39:19 +0000145#define CATCH_SCENARIO( ... ) CATCH_TEST_CASE( "Scenario: " __VA_ARGS__ )
James Wilkinson63005a12014-07-10 10:22:20 +0100146#define CATCH_SCENARIO_METHOD( className, ... ) INTERNAL_CATCH_TEST_CASE_METHOD( className, "Scenario: " __VA_ARGS__ )
Phil Nashf1936982017-07-13 09:20:37 +0100147#define CATCH_GIVEN( desc ) CATCH_SECTION( std::string( "Given: ") + desc )
148#define CATCH_WHEN( desc ) CATCH_SECTION( std::string( " When: ") + desc )
149#define CATCH_AND_WHEN( desc ) CATCH_SECTION( std::string( " And: ") + desc )
150#define CATCH_THEN( desc ) CATCH_SECTION( std::string( " Then: ") + desc )
151#define CATCH_AND_THEN( desc ) CATCH_SECTION( std::string( " And: ") + desc )
Phil Nash37186a12013-03-13 12:19:30 +0000152
Phil Nash46bcd4b2012-07-20 18:43:48 +0100153// If CATCH_CONFIG_PREFIX_ALL is not defined then the CATCH_ prefix is not required
154#else
155
Martin Hořeňovskýe1bca702017-04-25 20:20:46 +0200156#define REQUIRE( ... ) INTERNAL_CATCH_TEST( "REQUIRE", Catch::ResultDisposition::Normal, __VA_ARGS__ )
157#define REQUIRE_FALSE( ... ) INTERNAL_CATCH_TEST( "REQUIRE_FALSE", Catch::ResultDisposition::Normal | Catch::ResultDisposition::FalseTest, __VA_ARGS__ )
Phil Nashd8026002010-11-09 23:24:00 +0000158
Martin Hořeňovskýfae0fa42017-06-26 20:48:41 +0200159#define REQUIRE_THROWS( ... ) INTERNAL_CATCH_THROWS( "REQUIRE_THROWS", Catch::ResultDisposition::Normal, __VA_ARGS__ )
Phil Nashf3ec8432017-03-21 13:22:39 +0000160#define REQUIRE_THROWS_AS( expr, exceptionType ) INTERNAL_CATCH_THROWS_AS( "REQUIRE_THROWS_AS", exceptionType, Catch::ResultDisposition::Normal, expr )
Martin Hořeňovskýfae0fa42017-06-26 20:48:41 +0200161#define REQUIRE_THROWS_WITH( expr, matcher ) INTERNAL_CATCH_THROWS_STR_MATCHES( "REQUIRE_THROWS_WITH", Catch::ResultDisposition::Normal, matcher, expr )
Phil Nashee9b19e2017-08-09 12:10:14 +0100162#if !defined(CATCH_CONFIG_DISABLE_MATCHERS)
Martin Hořeňovský950cae92017-06-05 18:40:50 +0200163#define REQUIRE_THROWS_MATCHES( expr, exceptionType, matcher ) INTERNAL_CATCH_THROWS_MATCHES( "REQUIRE_THROWS_MATCHES", exceptionType, Catch::ResultDisposition::Normal, matcher, expr )
Martin Hořeňovský0ca4cfb2017-07-28 21:34:34 +0200164#endif // CATCH_CONFIG_DISABLE_MATCHERS
Martin Hořeňovskýe1bca702017-04-25 20:20:46 +0200165#define REQUIRE_NOTHROW( ... ) INTERNAL_CATCH_NO_THROW( "REQUIRE_NOTHROW", Catch::ResultDisposition::Normal, __VA_ARGS__ )
Phil Nashd8026002010-11-09 23:24:00 +0000166
Martin Hořeňovskýe1bca702017-04-25 20:20:46 +0200167#define CHECK( ... ) INTERNAL_CATCH_TEST( "CHECK", Catch::ResultDisposition::ContinueOnFailure, __VA_ARGS__ )
168#define CHECK_FALSE( ... ) INTERNAL_CATCH_TEST( "CHECK_FALSE", Catch::ResultDisposition::ContinueOnFailure | Catch::ResultDisposition::FalseTest, __VA_ARGS__ )
169#define CHECKED_IF( ... ) INTERNAL_CATCH_IF( "CHECKED_IF", Catch::ResultDisposition::ContinueOnFailure, __VA_ARGS__ )
170#define CHECKED_ELSE( ... ) INTERNAL_CATCH_ELSE( "CHECKED_ELSE", Catch::ResultDisposition::ContinueOnFailure, __VA_ARGS__ )
171#define CHECK_NOFAIL( ... ) INTERNAL_CATCH_TEST( "CHECK_NOFAIL", Catch::ResultDisposition::ContinueOnFailure | Catch::ResultDisposition::SuppressFail, __VA_ARGS__ )
Phil Nashd8026002010-11-09 23:24:00 +0000172
Martin Hořeňovskýfae0fa42017-06-26 20:48:41 +0200173#define CHECK_THROWS( ... ) INTERNAL_CATCH_THROWS( "CHECK_THROWS", Catch::ResultDisposition::ContinueOnFailure, __VA_ARGS__ )
Phil Nashf3ec8432017-03-21 13:22:39 +0000174#define CHECK_THROWS_AS( expr, exceptionType ) INTERNAL_CATCH_THROWS_AS( "CHECK_THROWS_AS", exceptionType, Catch::ResultDisposition::ContinueOnFailure, expr )
Martin Hořeňovskýfae0fa42017-06-26 20:48:41 +0200175#define CHECK_THROWS_WITH( expr, matcher ) INTERNAL_CATCH_THROWS_STR_MATCHES( "CHECK_THROWS_WITH", Catch::ResultDisposition::ContinueOnFailure, matcher, expr )
Phil Nashee9b19e2017-08-09 12:10:14 +0100176#if !defined(CATCH_CONFIG_DISABLE_MATCHERS)
Martin Hořeňovský950cae92017-06-05 18:40:50 +0200177#define CHECK_THROWS_MATCHES( expr, exceptionType, matcher ) INTERNAL_CATCH_THROWS_MATCHES( "CHECK_THROWS_MATCHES", exceptionType, Catch::ResultDisposition::ContinueOnFailure, matcher, expr )
Martin Hořeňovský0ca4cfb2017-07-28 21:34:34 +0200178#endif // CATCH_CONFIG_DISABLE_MATCHERS
Martin Hořeňovskýe1bca702017-04-25 20:20:46 +0200179#define CHECK_NOTHROW( ... ) INTERNAL_CATCH_NO_THROW( "CHECK_NOTHROW", Catch::ResultDisposition::ContinueOnFailure, __VA_ARGS__ )
Phil Nashd8026002010-11-09 23:24:00 +0000180
Martin Hořeňovský0ca4cfb2017-07-28 21:34:34 +0200181
Martin Hořeňovskýd08e31d2017-07-29 08:43:32 +0200182#if !defined(CATCH_CONFIG_DISABLE_MATCHERS)
Phil Nashf3ec8432017-03-21 13:22:39 +0000183#define CHECK_THAT( arg, matcher ) INTERNAL_CHECK_THAT( "CHECK_THAT", matcher, Catch::ResultDisposition::ContinueOnFailure, arg )
Martin Hořeňovský7a8a0202017-03-17 13:21:40 +0100184
Phil Nashf3ec8432017-03-21 13:22:39 +0000185#define REQUIRE_THAT( arg, matcher ) INTERNAL_CHECK_THAT( "REQUIRE_THAT", matcher, Catch::ResultDisposition::Normal, arg )
Martin Hořeňovský0ca4cfb2017-07-28 21:34:34 +0200186#endif // CATCH_CONFIG_DISABLE_MATCHERS
Phil Nasheca56372012-03-04 11:14:21 +0000187
Phil Nashf3ec8432017-03-21 13:22:39 +0000188#define INFO( msg ) INTERNAL_CATCH_INFO( "INFO", msg )
189#define WARN( msg ) INTERNAL_CATCH_MSG( "WARN", Catch::ResultWas::Warning, Catch::ResultDisposition::ContinueOnFailure, msg )
Martin Hořeňovský33ed1772017-05-02 23:51:03 +0200190#define CAPTURE( msg ) INTERNAL_CATCH_INFO( "CAPTURE", #msg " := " << ::Catch::Detail::stringify(msg) )
Phil Nashd8026002010-11-09 23:24:00 +0000191
Phil Nash5dd06392017-03-08 15:40:20 +0000192#define TEST_CASE( ... ) INTERNAL_CATCH_TESTCASE( __VA_ARGS__ )
193#define TEST_CASE_METHOD( className, ... ) INTERNAL_CATCH_TEST_CASE_METHOD( className, __VA_ARGS__ )
194#define METHOD_AS_TEST_CASE( method, ... ) INTERNAL_CATCH_METHOD_AS_TEST_CASE( method, __VA_ARGS__ )
195#define REGISTER_TEST_CASE( Function, ... ) INTERNAL_CATCH_REGISTER_TESTCASE( Function, __VA_ARGS__ )
196#define SECTION( ... ) INTERNAL_CATCH_SECTION( __VA_ARGS__ )
Phil Nashf3ec8432017-03-21 13:22:39 +0000197#define FAIL( ... ) INTERNAL_CATCH_MSG( "FAIL", Catch::ResultWas::ExplicitFailure, Catch::ResultDisposition::Normal, __VA_ARGS__ )
198#define FAIL_CHECK( ... ) INTERNAL_CATCH_MSG( "FAIL_CHECK", Catch::ResultWas::ExplicitFailure, Catch::ResultDisposition::ContinueOnFailure, __VA_ARGS__ )
199#define SUCCEED( ... ) INTERNAL_CATCH_MSG( "SUCCEED", Catch::ResultWas::Ok, Catch::ResultDisposition::ContinueOnFailure, __VA_ARGS__ )
Phil Nashf1936982017-07-13 09:20:37 +0100200#define ANON_TEST_CASE() INTERNAL_CATCH_TESTCASE()
Phil Nashd8026002010-11-09 23:24:00 +0000201
Phil Nash46bcd4b2012-07-20 18:43:48 +0100202#endif
203
204#define CATCH_TRANSLATE_EXCEPTION( signature ) INTERNAL_CATCH_TRANSLATE_EXCEPTION( signature )
Phil Nashd8026002010-11-09 23:24:00 +0000205
Phil Nash37186a12013-03-13 12:19:30 +0000206// "BDD-style" convenience wrappers
Phil Nash444f4dd2013-03-16 20:39:19 +0000207#define SCENARIO( ... ) TEST_CASE( "Scenario: " __VA_ARGS__ )
James Wilkinson63005a12014-07-10 10:22:20 +0100208#define SCENARIO_METHOD( className, ... ) INTERNAL_CATCH_TEST_CASE_METHOD( className, "Scenario: " __VA_ARGS__ )
Martin Hořeňovský71df6632017-04-25 12:41:30 +0200209
Phil Nashf1936982017-07-13 09:20:37 +0100210#define GIVEN( desc ) SECTION( std::string(" Given: ") + desc )
211#define WHEN( desc ) SECTION( std::string(" When: ") + desc )
212#define AND_WHEN( desc ) SECTION( std::string("And when: ") + desc )
213#define THEN( desc ) SECTION( std::string(" Then: ") + desc )
214#define AND_THEN( desc ) SECTION( std::string(" And: ") + desc )
Phil Nash37186a12013-03-13 12:19:30 +0000215
Phil Nash01db6c42011-04-04 07:56:44 +0100216using Catch::Detail::Approx;
Phil Nashd8026002010-11-09 23:24:00 +0000217
Martin Hořeňovský053c29a2017-08-27 17:03:32 +0200218#else
219//////
220// If this config identifier is defined then all CATCH macros are prefixed with CATCH_
221#ifdef CATCH_CONFIG_PREFIX_ALL
222
223#define CATCH_REQUIRE( ... ) (void)(0)
224#define CATCH_REQUIRE_FALSE( ... ) (void)(0)
225
226#define CATCH_REQUIRE_THROWS( ... ) (void)(0)
227#define CATCH_REQUIRE_THROWS_AS( expr, exceptionType ) (void)(0)
228#define CATCH_REQUIRE_THROWS_WITH( expr, matcher ) (void)(0)
229#if !defined(CATCH_CONFIG_DISABLE_MATCHERS)
230#define CATCH_REQUIRE_THROWS_MATCHES( expr, exceptionType, matcher ) (void)(0)
231#endif// CATCH_CONFIG_DISABLE_MATCHERS
232#define CATCH_REQUIRE_NOTHROW( ... ) (void)(0)
233
234#define CATCH_CHECK( ... ) (void)(0)
235#define CATCH_CHECK_FALSE( ... ) (void)(0)
236#define CATCH_CHECKED_IF( ... ) if (__VA_ARGS__)
237#define CATCH_CHECKED_ELSE( ... ) if (!(__VA_ARGS__))
238#define CATCH_CHECK_NOFAIL( ... ) (void)(0)
239
240#define CATCH_CHECK_THROWS( ... ) (void)(0)
241#define CATCH_CHECK_THROWS_AS( expr, exceptionType ) (void)(0)
242#define CATCH_CHECK_THROWS_WITH( expr, matcher ) (void)(0)
243#if !defined(CATCH_CONFIG_DISABLE_MATCHERS)
244#define CATCH_CHECK_THROWS_MATCHES( expr, exceptionType, matcher ) (void)(0)
245#endif // CATCH_CONFIG_DISABLE_MATCHERS
246#define CATCH_CHECK_NOTHROW( ... ) (void)(0)
247
248#if !defined(CATCH_CONFIG_DISABLE_MATCHERS)
249#define CATCH_CHECK_THAT( arg, matcher ) (void)(0)
250
251#define CATCH_REQUIRE_THAT( arg, matcher ) (void)(0)
252#endif // CATCH_CONFIG_DISABLE_MATCHERS
253
254#define CATCH_INFO( msg ) (void)(0)
255#define CATCH_WARN( msg ) (void)(0)
256#define CATCH_CAPTURE( msg ) (void)(0)
257
258#define CATCH_TEST_CASE( ... ) INTERNAL_CATCH_TESTCASE_NO_REGISTRATION(INTERNAL_CATCH_UNIQUE_NAME( ____C_A_T_C_H____T_E_S_T____ ))
259#define CATCH_TEST_CASE_METHOD( className, ... ) INTERNAL_CATCH_TESTCASE_NO_REGISTRATION(INTERNAL_CATCH_UNIQUE_NAME( ____C_A_T_C_H____T_E_S_T____ ))
260#define CATCH_METHOD_AS_TEST_CASE( method, ... )
261#define CATCH_REGISTER_TEST_CASE( Function, ... ) (void)(0)
262#define CATCH_SECTION( ... )
263#define CATCH_FAIL( ... ) (void)(0)
264#define CATCH_FAIL_CHECK( ... ) (void)(0)
265#define CATCH_SUCCEED( ... ) (void)(0)
266
267#define CATCH_ANON_TEST_CASE() INTERNAL_CATCH_TESTCASE_NO_REGISTRATION(INTERNAL_CATCH_UNIQUE_NAME( ____C_A_T_C_H____T_E_S_T____ ))
268
269// "BDD-style" convenience wrappers
270#define CATCH_SCENARIO( ... ) INTERNAL_CATCH_TESTCASE_NO_REGISTRATION(INTERNAL_CATCH_UNIQUE_NAME( ____C_A_T_C_H____T_E_S_T____ ))
271#define CATCH_SCENARIO_METHOD( className, ... ) INTERNAL_CATCH_TESTCASE_METHOD_NO_REGISTRATION(INTERNAL_CATCH_UNIQUE_NAME( ____C_A_T_C_H____T_E_S_T____ ), className )
272#define CATCH_GIVEN( desc )
273#define CATCH_WHEN( desc )
274#define CATCH_AND_WHEN( desc )
275#define CATCH_THEN( desc )
276#define CATCH_AND_THEN( desc )
277
278// If CATCH_CONFIG_PREFIX_ALL is not defined then the CATCH_ prefix is not required
279#else
280
281#define REQUIRE( ... ) (void)(0)
282#define REQUIRE_FALSE( ... ) (void)(0)
283
284#define REQUIRE_THROWS( ... ) (void)(0)
285#define REQUIRE_THROWS_AS( expr, exceptionType ) (void)(0)
286#define REQUIRE_THROWS_WITH( expr, matcher ) (void)(0)
287#if !defined(CATCH_CONFIG_DISABLE_MATCHERS)
288#define REQUIRE_THROWS_MATCHES( expr, exceptionType, matcher ) (void)(0)
289#endif // CATCH_CONFIG_DISABLE_MATCHERS
290#define REQUIRE_NOTHROW( ... ) (void)(0)
291
292#define CHECK( ... ) (void)(0)
293#define CHECK_FALSE( ... ) (void)(0)
294#define CHECKED_IF( ... ) if (__VA_ARGS__)
295#define CHECKED_ELSE( ... ) if (!(__VA_ARGS__))
296#define CHECK_NOFAIL( ... ) (void)(0)
297
298#define CHECK_THROWS( ... ) (void)(0)
299#define CHECK_THROWS_AS( expr, exceptionType ) (void)(0)
300#define CHECK_THROWS_WITH( expr, matcher ) (void)(0)
301#if !defined(CATCH_CONFIG_DISABLE_MATCHERS)
302#define CHECK_THROWS_MATCHES( expr, exceptionType, matcher ) (void)(0)
303#endif // CATCH_CONFIG_DISABLE_MATCHERS
304#define CHECK_NOTHROW( ... ) (void)(0)
305
306
307#if !defined(CATCH_CONFIG_DISABLE_MATCHERS)
308#define CHECK_THAT( arg, matcher ) (void)(0)
309
310#define REQUIRE_THAT( arg, matcher ) (void)(0)
311#endif // CATCH_CONFIG_DISABLE_MATCHERS
312
313#define INFO( msg ) (void)(0)
314#define WARN( msg ) (void)(0)
315#define CAPTURE( msg ) (void)(0)
316
317#define TEST_CASE( ... ) INTERNAL_CATCH_TESTCASE_NO_REGISTRATION(INTERNAL_CATCH_UNIQUE_NAME( ____C_A_T_C_H____T_E_S_T____ ))
318#define TEST_CASE_METHOD( className, ... ) INTERNAL_CATCH_TESTCASE_NO_REGISTRATION(INTERNAL_CATCH_UNIQUE_NAME( ____C_A_T_C_H____T_E_S_T____ ))
319#define METHOD_AS_TEST_CASE( method, ... )
320#define REGISTER_TEST_CASE( Function, ... ) (void)(0)
321#define SECTION( ... )
322#define FAIL( ... ) (void)(0)
323#define FAIL_CHECK( ... ) (void)(0)
324#define SUCCEED( ... ) (void)(0)
325#define ANON_TEST_CASE() INTERNAL_CATCH_TESTCASE_NO_REGISTRATION(INTERNAL_CATCH_UNIQUE_NAME( ____C_A_T_C_H____T_E_S_T____ ))
326
327#endif
328
Martin Hořeňovský75f14382017-08-29 09:52:25 +0200329#define CATCH_TRANSLATE_EXCEPTION( signature ) INTERNAL_CATCH_TRANSLATE_EXCEPTION_NO_REG( INTERNAL_CATCH_UNIQUE_NAME( catch_internal_ExceptionTranslator ), signature )
Martin Hořeňovský053c29a2017-08-27 17:03:32 +0200330
331// "BDD-style" convenience wrappers
332#define SCENARIO( ... ) INTERNAL_CATCH_TESTCASE_NO_REGISTRATION(INTERNAL_CATCH_UNIQUE_NAME( ____C_A_T_C_H____T_E_S_T____ ) )
333#define SCENARIO_METHOD( className, ... ) INTERNAL_CATCH_TESTCASE_METHOD_NO_REGISTRATION(INTERNAL_CATCH_UNIQUE_NAME( ____C_A_T_C_H____T_E_S_T____ ), className )
334
335#define GIVEN( desc )
336#define WHEN( desc )
337#define AND_WHEN( desc )
338#define THEN( desc )
339#define AND_THEN( desc )
340
341using Catch::Detail::Approx;
342
343
344#endif
345
Martin Hořeňovský9796a772017-11-14 21:04:36 +0100346#endif // ! CATCH_CONFIG_IMPL_ONLY
347
Phil Nash3bdc97d2014-05-19 18:57:14 +0100348#include "internal/catch_reenable_warnings.h"
Phil Nasha695eb92012-08-13 07:46:10 +0100349
Phil Nash73acd942011-02-16 19:02:09 +0000350#endif // TWOBLUECUBES_CATCH_HPP_INCLUDED