blob: d03fdfbb99dcb2078a734771823e837a98f13bfd [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 Nasha695eb92012-08-13 07:46:10 +010012#pragma clang diagnostic ignored "-Wno-global-constructors"
13
14#pragma clang diagnostic push
15#pragma clang diagnostic ignored "-Wpadded"
16
17
Phil Nash1091ca82012-08-06 20:16:53 +010018#include "internal/catch_notimplemented_exception.h"
Phil Nash5ec53b22012-05-10 07:58:48 +010019#include "internal/catch_context.h"
Phil Nash896a04f2011-01-05 21:16:54 +000020#include "internal/catch_test_registry.hpp"
Phil Nashd8026002010-11-09 23:24:00 +000021#include "internal/catch_capture.hpp"
22#include "internal/catch_section.hpp"
Phil Nash5cad9d52011-01-27 22:29:36 +000023#include "internal/catch_generators.hpp"
Phil Nash9430a2c2011-04-20 15:40:40 +010024#include "internal/catch_interfaces_exception.h"
Phil Nashd7c203c2011-04-28 08:03:28 +010025#include "internal/catch_approx.hpp"
Phil Nasha6a40b32012-03-04 20:10:36 +000026#include "internal/catch_matchers.hpp"
Phil Nashd8026002010-11-09 23:24:00 +000027
Phil Nash0f9c5512012-06-02 23:12:42 +010028// These files are included here so the single_include script doesn't put them
29// in the conditionally compiled sections
Phil Nashddfe9632012-08-14 19:30:30 +010030#include "internal/catch_test_case_info.h"
Phil Nash0f9c5512012-06-02 23:12:42 +010031#include "internal/catch_interfaces_runner.h"
32
Phil Nash8350ef62011-08-12 18:52:10 +010033#ifdef __OBJC__
34#include "internal/catch_objc.hpp"
35#endif
36
Phil Nash89d1e6c2011-05-24 08:23:02 +010037#if defined( CATCH_CONFIG_MAIN ) || defined( CATCH_CONFIG_RUNNER )
Phil Nash1091ca82012-08-06 20:16:53 +010038#include "internal/catch_impl.hpp"
Phil Nash89d1e6c2011-05-24 08:23:02 +010039#endif
40
41#ifdef CATCH_CONFIG_MAIN
42#include "internal/catch_default_main.hpp"
43#endif
44
Phil Nashd8026002010-11-09 23:24:00 +000045//////
46
Phil Nash46bcd4b2012-07-20 18:43:48 +010047// If this config identifier is defined then all CATCH macros are prefixed with CATCH_
48#ifdef CATCH_CONFIG_PREFIX_ALL
49
50#define CATCH_REQUIRE( expr ) INTERNAL_CATCH_TEST( expr, false, true, "CATCH_REQUIRE" )
51#define CATCH_REQUIRE_FALSE( expr ) INTERNAL_CATCH_TEST( expr, true, true, "CATCH_REQUIRE_FALSE" )
52
53#define CATCH_REQUIRE_THROWS( expr ) INTERNAL_CATCH_THROWS( expr, ..., true, "CATCH_REQUIRE_THROWS" )
54#define CATCH_REQUIRE_THROWS_AS( expr, exceptionType ) INTERNAL_CATCH_THROWS_AS( expr, exceptionType, true, "CATCH_REQUIRE_THROWS_AS" )
55#define CATCH_REQUIRE_NOTHROW( expr ) INTERNAL_CATCH_NO_THROW( expr, true, "CATCH_REQUIRE_NOTHROW" )
56
57#define CATCH_CHECK( expr ) INTERNAL_CATCH_TEST( expr, false, false, "CATCH_CHECK" )
58#define CATCH_CHECK_FALSE( expr ) INTERNAL_CATCH_TEST( expr, true, false, "CATCH_CHECK_FALSE" )
59#define CATCH_CHECKED_IF( expr ) INTERNAL_CATCH_IF( expr, false, false, "CATCH_CHECKED_IF" )
60#define CATCH_CHECKED_ELSE( expr ) INTERNAL_CATCH_ELSE( expr, false, false, "CATCH_CHECKED_ELSE" )
61
62#define CATCH_CHECK_THROWS( expr ) INTERNAL_CATCH_THROWS( expr, ..., false, "CATCH_CHECK_THROWS" )
63#define CATCH_CHECK_THROWS_AS( expr, exceptionType ) INTERNAL_CATCH_THROWS_AS( expr, exceptionType, false, "CATCH_CHECK_THROWS_AS" )
64#define CATCH_CHECK_NOTHROW( expr ) INTERNAL_CATCH_NO_THROW( expr, false, "CATCH_CHECK_NOTHROW" )
65
66#define CHECK_THAT( arg, matcher ) INTERNAL_CHECK_THAT( arg, matcher, false, "CATCH_CHECK_THAT" )
67#define CATCH_REQUIRE_THAT( arg, matcher ) INTERNAL_CHECK_THAT( arg, matcher, true, "CATCH_REQUIRE_THAT" )
68
69#define CATCH_INFO( msg ) INTERNAL_CATCH_MSG( msg, Catch::ResultWas::Info, false, "CATCH_INFO" )
70#define CATCH_WARN( msg ) INTERNAL_CATCH_MSG( msg, Catch::ResultWas::Warning, false, "CATCH_WARN" )
71#define CATCH_FAIL( msg ) INTERNAL_CATCH_MSG( msg, Catch::ResultWas::ExplicitFailure, true, "CATCH_FAIL" )
72#define CATCH_SCOPED_INFO( msg ) INTERNAL_CATCH_SCOPED_INFO( msg )
73#define CATCH_CAPTURE( msg ) INTERNAL_CATCH_MSG( #msg " := " << msg, Catch::ResultWas::Info, false, "CATCH_CAPTURE" )
74
75#define CATCH_SECTION( name, description ) INTERNAL_CATCH_SECTION( name, description )
76
77#define CATCH_TEST_CASE( name, description ) INTERNAL_CATCH_TESTCASE( name, description )
78#define CATCH_TEST_CASE_NORETURN( name, description ) INTERNAL_CATCH_TESTCASE_NORETURN( name, description )
79#define CATCH_ANON_TEST_CASE() INTERNAL_CATCH_TESTCASE( "", "Anonymous test case" )
80#define CATCH_METHOD_AS_TEST_CASE( method, name, description ) INTERNAL_CATCH_METHOD_AS_TEST_CASE( method, name, description )
81
82#define CATCH_REGISTER_REPORTER( name, reporterType ) INTERNAL_CATCH_REGISTER_REPORTER( name, reporterType )
83
84#define CATCH_GENERATE( expr) INTERNAL_CATCH_GENERATE( expr )
85
86///////////////
87// Still to be implemented
88//#define CHECK_NOFAIL( expr ) // !TBD - reports violation, but doesn't fail Test
89
90// If CATCH_CONFIG_PREFIX_ALL is not defined then the CATCH_ prefix is not required
91#else
92
Phil Nasha2d20952010-12-14 09:00:09 +000093#define REQUIRE( expr ) INTERNAL_CATCH_TEST( expr, false, true, "REQUIRE" )
94#define REQUIRE_FALSE( expr ) INTERNAL_CATCH_TEST( expr, true, true, "REQUIRE_FALSE" )
Phil Nashd8026002010-11-09 23:24:00 +000095
Phil Nashc27e6dc2011-03-14 08:49:42 +000096#define REQUIRE_THROWS( expr ) INTERNAL_CATCH_THROWS( expr, ..., true, "REQUIRE_THROWS" )
97#define REQUIRE_THROWS_AS( expr, exceptionType ) INTERNAL_CATCH_THROWS_AS( expr, exceptionType, true, "REQUIRE_THROWS_AS" )
Phil Nash0dc45082011-03-14 08:45:55 +000098#define REQUIRE_NOTHROW( expr ) INTERNAL_CATCH_NO_THROW( expr, true, "REQUIRE_NOTHROW" )
Phil Nashd8026002010-11-09 23:24:00 +000099
Phil Nash3455e552010-11-10 07:42:15 +0000100#define CHECK( expr ) INTERNAL_CATCH_TEST( expr, false, false, "CHECK" )
Phil Nasha2d20952010-12-14 09:00:09 +0000101#define CHECK_FALSE( expr ) INTERNAL_CATCH_TEST( expr, true, false, "CHECK_FALSE" )
Phil Nasha162e222012-02-10 08:30:13 +0000102#define CHECKED_IF( expr ) INTERNAL_CATCH_IF( expr, false, false, "CHECKED_IF" )
103#define CHECKED_ELSE( expr ) INTERNAL_CATCH_ELSE( expr, false, false, "CHECKED_ELSE" )
Phil Nashd8026002010-11-09 23:24:00 +0000104
Phil Nashc27e6dc2011-03-14 08:49:42 +0000105#define CHECK_THROWS( expr ) INTERNAL_CATCH_THROWS( expr, ..., false, "CHECK_THROWS" )
106#define CHECK_THROWS_AS( expr, exceptionType ) INTERNAL_CATCH_THROWS_AS( expr, exceptionType, false, "CHECK_THROWS_AS" )
Phil Nash0dc45082011-03-14 08:45:55 +0000107#define CHECK_NOTHROW( expr ) INTERNAL_CATCH_NO_THROW( expr, false, "CHECK_NOTHROW" )
Phil Nashd8026002010-11-09 23:24:00 +0000108
Phil Nasheca56372012-03-04 11:14:21 +0000109#define CHECK_THAT( arg, matcher ) INTERNAL_CHECK_THAT( arg, matcher, false, "CHECK_THAT" )
110#define REQUIRE_THAT( arg, matcher ) INTERNAL_CHECK_THAT( arg, matcher, true, "REQUIRE_THAT" )
111
Phil Nashe4016012011-02-28 19:01:04 +0000112#define INFO( msg ) INTERNAL_CATCH_MSG( msg, Catch::ResultWas::Info, false, "INFO" )
113#define WARN( msg ) INTERNAL_CATCH_MSG( msg, Catch::ResultWas::Warning, false, "WARN" )
114#define FAIL( msg ) INTERNAL_CATCH_MSG( msg, Catch::ResultWas::ExplicitFailure, true, "FAIL" )
115#define SCOPED_INFO( msg ) INTERNAL_CATCH_SCOPED_INFO( msg )
116#define CAPTURE( msg ) INTERNAL_CATCH_MSG( #msg " := " << msg, Catch::ResultWas::Info, false, "CAPTURE" )
Phil Nashd8026002010-11-09 23:24:00 +0000117
Phil Nash5cad9d52011-01-27 22:29:36 +0000118#define SECTION( name, description ) INTERNAL_CATCH_SECTION( name, description )
Phil Nashd8026002010-11-09 23:24:00 +0000119
Phil Nash3455e552010-11-10 07:42:15 +0000120#define TEST_CASE( name, description ) INTERNAL_CATCH_TESTCASE( name, description )
Phil Nashd1ee9642011-01-31 20:15:40 +0000121#define TEST_CASE_NORETURN( name, description ) INTERNAL_CATCH_TESTCASE_NORETURN( name, description )
Phil Nash2b05dfa2011-01-18 20:09:21 +0000122#define ANON_TEST_CASE() INTERNAL_CATCH_TESTCASE( "", "Anonymous test case" )
Phil Nash46bcd4b2012-07-20 18:43:48 +0100123#define METHOD_AS_TEST_CASE( method, name, description ) INTERNAL_CATCH_METHOD_AS_TEST_CASE( method, name, description )
Phil Nashd8026002010-11-09 23:24:00 +0000124
Phil Nash5cad9d52011-01-27 22:29:36 +0000125#define REGISTER_REPORTER( name, reporterType ) INTERNAL_CATCH_REGISTER_REPORTER( name, reporterType )
126
127#define GENERATE( expr) INTERNAL_CATCH_GENERATE( expr )
Phil Nashd8026002010-11-09 23:24:00 +0000128
Phil Nash46bcd4b2012-07-20 18:43:48 +0100129#endif
130
131#define CATCH_TRANSLATE_EXCEPTION( signature ) INTERNAL_CATCH_TRANSLATE_EXCEPTION( signature )
Phil Nashd8026002010-11-09 23:24:00 +0000132
Phil Nash01db6c42011-04-04 07:56:44 +0100133using Catch::Detail::Approx;
Phil Nashd8026002010-11-09 23:24:00 +0000134
Phil Nasha695eb92012-08-13 07:46:10 +0100135#pragma clang diagnostic pop
136
Phil Nash73acd942011-02-16 19:02:09 +0000137#endif // TWOBLUECUBES_CATCH_HPP_INCLUDED