This commit is contained in:
Martin Hořeňovský 2018-10-26 21:14:16 +02:00
parent 1d9b506e39
commit 03d122a35c
8 changed files with 386 additions and 307 deletions

View File

@ -6,7 +6,7 @@ if(NOT DEFINED PROJECT_NAME)
set(NOT_SUBPROJECT ON) set(NOT_SUBPROJECT ON)
endif() endif()
project(Catch2 LANGUAGES CXX VERSION 2.4.1) project(Catch2 LANGUAGES CXX VERSION 2.4.2)
# Provide path for scripts # Provide path for scripts
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/CMake") list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/CMake")

View File

@ -5,11 +5,11 @@
[![Build Status](https://travis-ci.org/catchorg/Catch2.svg?branch=master)](https://travis-ci.org/catchorg/Catch2) [![Build Status](https://travis-ci.org/catchorg/Catch2.svg?branch=master)](https://travis-ci.org/catchorg/Catch2)
[![Build status](https://ci.appveyor.com/api/projects/status/github/catchorg/Catch2?svg=true)](https://ci.appveyor.com/project/catchorg/catch2) [![Build status](https://ci.appveyor.com/api/projects/status/github/catchorg/Catch2?svg=true)](https://ci.appveyor.com/project/catchorg/catch2)
[![codecov](https://codecov.io/gh/catchorg/Catch2/branch/master/graph/badge.svg)](https://codecov.io/gh/catchorg/Catch2) [![codecov](https://codecov.io/gh/catchorg/Catch2/branch/master/graph/badge.svg)](https://codecov.io/gh/catchorg/Catch2)
[![Try online](https://img.shields.io/badge/try-online-blue.svg)](https://wandbox.org/permlink/E0msqwbW7U4PVbHn) [![Try online](https://img.shields.io/badge/try-online-blue.svg)](https://wandbox.org/permlink/rbkudthN4hBNJznk)
[![Join the chat in Discord: https://discord.gg/4CWS9zD](https://img.shields.io/badge/Discord-Chat!-brightgreen.svg)](https://discord.gg/4CWS9zD) [![Join the chat in Discord: https://discord.gg/4CWS9zD](https://img.shields.io/badge/Discord-Chat!-brightgreen.svg)](https://discord.gg/4CWS9zD)
<a href="https://github.com/catchorg/Catch2/releases/download/v2.4.1/catch.hpp">The latest version of the single header can be downloaded directly using this link</a> <a href="https://github.com/catchorg/Catch2/releases/download/v2.4.2/catch.hpp">The latest version of the single header can be downloaded directly using this link</a>
## Catch2 is released! ## Catch2 is released!

View File

@ -4,7 +4,7 @@ from conans import ConanFile, CMake
class CatchConan(ConanFile): class CatchConan(ConanFile):
name = "Catch" name = "Catch"
version = "2.4.1" version = "2.4.2"
description = "A modern, C++-native, header-only, framework for unit-tests, TDD and BDD" description = "A modern, C++-native, header-only, framework for unit-tests, TDD and BDD"
author = "philsquared" author = "philsquared"
generators = "cmake" generators = "cmake"

View File

@ -2,6 +2,7 @@
# Release notes # Release notes
**Contents**<br> **Contents**<br>
[2.4.2](#242)<br>
[2.4.1](#241)<br> [2.4.1](#241)<br>
[2.4.0](#240)<br> [2.4.0](#240)<br>
[2.3.0](#230)<br> [2.3.0](#230)<br>
@ -17,6 +18,29 @@
[Even Older versions](#even-older-versions)<br> [Even Older versions](#even-older-versions)<br>
## 2.4.2
### Improvements
* XmlReporter now also outputs the RNG seed that was used in a run (#1404)
* `Catch::Session::applyCommandLine` now also accepts `wchar_t` arguments.
* However, Catch2 still does not support unicode.
* Added `STATIC_REQUIRE` macro (#1356, #1362)
* Catch2's singleton's are now cleaned up even if tests are run (#1411)
* This is mostly useful as a FP prevention for users who define their own main.
* Specifying an invalid reporter via `-r` is now reported sooner (#1351, #1422)
### Fixes
* Stringification no longer assumes that `char` is signed (#1399, #1407)
* This caused a `Wtautological-compare` warning.
* SFINAE for `operator<<` no longer sees different overload set than the actual insertion (#1403)
### Contrib
* `catch_discover_tests` correctly adds tests with comma in name (#1327, #1409)
* Added a new customization point in how the tests are launched to `catch_discover_tests`
## 2.4.1 ## 2.4.1
### Improvements ### Improvements

View File

@ -11,7 +11,7 @@
#define CATCH_VERSION_MAJOR 2 #define CATCH_VERSION_MAJOR 2
#define CATCH_VERSION_MINOR 4 #define CATCH_VERSION_MINOR 4
#define CATCH_VERSION_PATCH 1 #define CATCH_VERSION_PATCH 2
#ifdef __clang__ #ifdef __clang__
# pragma clang system_header # pragma clang system_header

View File

@ -37,7 +37,7 @@ namespace Catch {
} }
Version const& libraryVersion() { Version const& libraryVersion() {
static Version version( 2, 4, 1, "", 0 ); static Version version( 2, 4, 2, "", 0 );
return version; return version;
} }

View File

@ -1,6 +1,6 @@
/* /*
* Catch v2.4.1 * Catch v2.4.2
* Generated: 2018-09-28 15:50:15.645795 * Generated: 2018-10-26 21:12:29.223927
* ---------------------------------------------------------- * ----------------------------------------------------------
* This file has been merged from multiple headers. Please don't edit it directly * This file has been merged from multiple headers. Please don't edit it directly
* Copyright (c) 2018 Two Blue Cubes Ltd. All rights reserved. * Copyright (c) 2018 Two Blue Cubes Ltd. All rights reserved.
@ -15,7 +15,7 @@
#define CATCH_VERSION_MAJOR 2 #define CATCH_VERSION_MAJOR 2
#define CATCH_VERSION_MINOR 4 #define CATCH_VERSION_MINOR 4
#define CATCH_VERSION_PATCH 1 #define CATCH_VERSION_PATCH 2
#ifdef __clang__ #ifdef __clang__
# pragma clang system_header # pragma clang system_header
@ -356,6 +356,10 @@ namespace Catch {
#include <string> #include <string>
#include <cstdint> #include <cstdint>
// We need a dummy global operator<< so we can bring it into Catch namespace later
struct Catch_global_namespace_dummy {};
std::ostream& operator<<(std::ostream&, Catch_global_namespace_dummy);
namespace Catch { namespace Catch {
struct CaseSensitive { enum Choice { struct CaseSensitive { enum Choice {
@ -397,6 +401,11 @@ namespace Catch {
std::ostream& operator << ( std::ostream& os, SourceLineInfo const& info ); std::ostream& operator << ( std::ostream& os, SourceLineInfo const& info );
// Bring in operator<< from global namespace into Catch namespace
// This is necessary because the overload of operator<< above makes
// lookup stop at namespace Catch
using ::operator<<;
// Use this in variadic streaming macros to allow // Use this in variadic streaming macros to allow
// >> +StreamEndStop // >> +StreamEndStop
// as well as // as well as
@ -850,14 +859,7 @@ inline id performOptionalSelector( id obj, SEL sel ) {
#pragma warning(disable:4180) // We attempt to stream a function (address) by const&, which MSVC complains about but is harmless #pragma warning(disable:4180) // We attempt to stream a function (address) by const&, which MSVC complains about but is harmless
#endif #endif
// We need a dummy global operator<< so we can bring it into Catch namespace later
struct Catch_global_namespace_dummy {};
std::ostream& operator<<(std::ostream&, Catch_global_namespace_dummy);
namespace Catch { namespace Catch {
// Bring in operator<< from global namespace into Catch namespace
using ::operator<<;
namespace Detail { namespace Detail {
extern const std::string unprintableString; extern const std::string unprintableString;
@ -5121,6 +5123,7 @@ namespace Catch {
struct LeakDetector { struct LeakDetector {
LeakDetector(); LeakDetector();
~LeakDetector();
}; };
} }
@ -5772,7 +5775,7 @@ namespace Catch {
// //
// See https://github.com/philsquared/Clara for more details // See https://github.com/philsquared/Clara for more details
// Clara v1.1.4 // Clara v1.1.5
#ifndef CATCH_CLARA_CONFIG_CONSOLE_WIDTH #ifndef CATCH_CLARA_CONFIG_CONSOLE_WIDTH
@ -5798,8 +5801,8 @@ namespace Catch {
// //
// A single-header library for wrapping and laying out basic text, by Phil Nash // A single-header library for wrapping and laying out basic text, by Phil Nash
// //
// This work is licensed under the BSD 2-Clause license. // Distributed under the Boost Software License, Version 1.0. (See accompanying
// See the accompanying LICENSE file, or the one at https://opensource.org/licenses/BSD-2-Clause // file LICENSE.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
// //
// This project is hosted at https://github.com/philsquared/textflowcpp // This project is hosted at https://github.com/philsquared/textflowcpp
@ -5813,7 +5816,9 @@ namespace Catch {
#define CATCH_CLARA_TEXTFLOW_CONFIG_CONSOLE_WIDTH 80 #define CATCH_CLARA_TEXTFLOW_CONFIG_CONSOLE_WIDTH 80
#endif #endif
namespace Catch { namespace clara { namespace TextFlow { namespace Catch {
namespace clara {
namespace TextFlow {
inline auto isWhitespace(char c) -> bool { inline auto isWhitespace(char c) -> bool {
static std::string chars = " \t\n\r"; static std::string chars = " \t\n\r";
@ -5850,8 +5855,7 @@ namespace Catch { namespace clara { namespace TextFlow {
iterator(Column const& column, size_t stringIndex) iterator(Column const& column, size_t stringIndex)
: m_column(column), : m_column(column),
m_stringIndex( stringIndex ) m_stringIndex(stringIndex) {}
{}
auto line() const -> std::string const& { return m_column.m_strings[m_stringIndex]; } auto line() const -> std::string const& { return m_column.m_strings[m_stringIndex]; }
@ -5876,8 +5880,7 @@ namespace Catch { namespace clara { namespace TextFlow {
if (m_end < m_pos + width) { if (m_end < m_pos + width) {
m_len = m_end - m_pos; m_len = m_end - m_pos;
} } else {
else {
size_t len = width; size_t len = width;
while (len > 0 && !isBoundary(m_pos + len)) while (len > 0 && !isBoundary(m_pos + len))
--len; --len;
@ -5903,6 +5906,12 @@ namespace Catch { namespace clara { namespace TextFlow {
} }
public: public:
using difference_type = std::ptrdiff_t;
using value_type = std::string;
using pointer = value_type * ;
using reference = value_type & ;
using iterator_category = std::forward_iterator_tag;
explicit iterator(Column const& column) : m_column(column) { explicit iterator(Column const& column) : m_column(column) {
assert(m_column.m_width > m_column.m_indent); assert(m_column.m_width > m_column.m_indent);
assert(m_column.m_initialIndent == std::string::npos || m_column.m_width > m_column.m_initialIndent); assert(m_column.m_initialIndent == std::string::npos || m_column.m_width > m_column.m_initialIndent);
@ -5914,10 +5923,7 @@ namespace Catch { namespace clara { namespace TextFlow {
auto operator *() const -> std::string { auto operator *() const -> std::string {
assert(m_stringIndex < m_column.m_strings.size()); assert(m_stringIndex < m_column.m_strings.size());
assert(m_pos <= m_end); assert(m_pos <= m_end);
if( m_pos + m_column.m_width < m_end )
return addIndentAndSuffix(line().substr(m_pos, m_len)); return addIndentAndSuffix(line().substr(m_pos, m_len));
else
return addIndentAndSuffix(line().substr(m_pos, m_end - m_pos));
} }
auto operator ++() -> iterator& { auto operator ++() -> iterator& {
@ -6018,8 +6024,7 @@ namespace Catch { namespace clara { namespace TextFlow {
iterator(Columns const& columns, EndTag) iterator(Columns const& columns, EndTag)
: m_columns(columns.m_columns), : m_columns(columns.m_columns),
m_activeIterators( 0 ) m_activeIterators(0) {
{
m_iterators.reserve(m_columns.size()); m_iterators.reserve(m_columns.size());
for (auto const& col : m_columns) for (auto const& col : m_columns)
@ -6027,10 +6032,15 @@ namespace Catch { namespace clara { namespace TextFlow {
} }
public: public:
using difference_type = std::ptrdiff_t;
using value_type = std::string;
using pointer = value_type * ;
using reference = value_type & ;
using iterator_category = std::forward_iterator_tag;
explicit iterator(Columns const& columns) explicit iterator(Columns const& columns)
: m_columns(columns.m_columns), : m_columns(columns.m_columns),
m_activeIterators( m_columns.size() ) m_activeIterators(m_columns.size()) {
{
m_iterators.reserve(m_columns.size()); m_iterators.reserve(m_columns.size());
for (auto const& col : m_columns) for (auto const& col : m_columns)
@ -6055,8 +6065,7 @@ namespace Catch { namespace clara { namespace TextFlow {
padding = std::string(width - col.size(), ' '); padding = std::string(width - col.size(), ' ');
else else
padding = ""; padding = "";
} } else {
else {
padding += std::string(width, ' '); padding += std::string(width, ' ');
} }
} }
@ -6116,11 +6125,15 @@ namespace Catch { namespace clara { namespace TextFlow {
cols += other; cols += other;
return cols; return cols;
} }
}}} // namespace Catch::clara::TextFlow }
}
}
// ----------- end of #include from clara_textflow.hpp ----------- // ----------- end of #include from clara_textflow.hpp -----------
// ........... back in clara.hpp // ........... back in clara.hpp
#include <string>
#include <memory> #include <memory>
#include <set> #include <set>
#include <algorithm> #include <algorithm>
@ -7119,6 +7132,18 @@ namespace Catch {
return ParserResult::runtimeError( "Unrecognised verbosity, '" + verbosity + "'" ); return ParserResult::runtimeError( "Unrecognised verbosity, '" + verbosity + "'" );
return ParserResult::ok( ParseResultType::Matched ); return ParserResult::ok( ParseResultType::Matched );
}; };
auto const setReporter = [&]( std::string const& reporter ) {
IReporterRegistry::FactoryMap const& factories = getRegistryHub().getReporterRegistry().getFactories();
auto lcReporter = toLower( reporter );
auto result = factories.find( lcReporter );
if( factories.end() != result )
config.reporterName = lcReporter;
else
return ParserResult::runtimeError( "Unrecognized reporter, '" + reporter + "'. Check available with --list-reporters" );
return ParserResult::ok( ParseResultType::Matched );
};
auto cli auto cli
= ExeName( config.processName ) = ExeName( config.processName )
@ -7144,7 +7169,7 @@ namespace Catch {
| Opt( config.outputFilename, "filename" ) | Opt( config.outputFilename, "filename" )
["-o"]["--out"] ["-o"]["--out"]
( "output filename" ) ( "output filename" )
| Opt( config.reporterName, "name" ) | Opt( setReporter, "name" )
["-r"]["--reporter"] ["-r"]["--reporter"]
( "reporter to use (defaults to console)" ) ( "reporter to use (defaults to console)" )
| Opt( config.name, "name" ) | Opt( config.name, "name" )
@ -8292,6 +8317,10 @@ namespace Catch {
Catch::LeakDetector::LeakDetector() {} Catch::LeakDetector::LeakDetector() {}
#endif #endif
Catch::LeakDetector::~LeakDetector() {
Catch::cleanUp();
}
// end catch_leak_detector.cpp // end catch_leak_detector.cpp
// start catch_list.cpp // start catch_list.cpp
@ -8315,7 +8344,7 @@ namespace Catch {
std::size_t listTags( Config const& config ); std::size_t listTags( Config const& config );
std::size_t listReporters( Config const& /*config*/ ); std::size_t listReporters();
Option<std::size_t> list( Config const& config ); Option<std::size_t> list( Config const& config );
@ -8433,7 +8462,7 @@ namespace Catch {
return tagCounts.size(); return tagCounts.size();
} }
std::size_t listReporters( Config const& /*config*/ ) { std::size_t listReporters() {
Catch::cout() << "Available reporters:\n"; Catch::cout() << "Available reporters:\n";
IReporterRegistry::FactoryMap const& factories = getRegistryHub().getReporterRegistry().getFactories(); IReporterRegistry::FactoryMap const& factories = getRegistryHub().getReporterRegistry().getFactories();
std::size_t maxNameLen = 0; std::size_t maxNameLen = 0;
@ -8464,7 +8493,7 @@ namespace Catch {
if( config.listTags() ) if( config.listTags() )
listedCount = listedCount.valueOr(0) + listTags( config ); listedCount = listedCount.valueOr(0) + listTags( config );
if( config.listReporters() ) if( config.listReporters() )
listedCount = listedCount.valueOr(0) + listReporters( config ); listedCount = listedCount.valueOr(0) + listReporters();
return listedCount; return listedCount;
} }
@ -9930,13 +9959,22 @@ namespace Catch {
void libIdentify(); void libIdentify();
int applyCommandLine( int argc, char const * const * argv ); int applyCommandLine( int argc, char const * const * argv );
#if defined(CATCH_CONFIG_WCHAR) && defined(WIN32) && defined(UNICODE)
int applyCommandLine( int argc, wchar_t const * const * argv );
#endif
void useConfigData( ConfigData const& configData ); void useConfigData( ConfigData const& configData );
int run( int argc, char* argv[] ); template<typename CharT>
#if defined(CATCH_CONFIG_WCHAR) && defined(WIN32) && defined(UNICODE) int run(int argc, CharT const * const argv[]) {
int run( int argc, wchar_t* const argv[] ); if (m_startupExceptions)
#endif return 1;
int returnCode = applyCommandLine(argc, argv);
if (returnCode == 0)
returnCode = run();
return returnCode;
}
int run(); int run();
clara::Parser const& cli() const; clara::Parser const& cli() const;
@ -10148,22 +10186,8 @@ namespace Catch {
return 0; return 0;
} }
void Session::useConfigData( ConfigData const& configData ) {
m_configData = configData;
m_config.reset();
}
int Session::run( int argc, char* argv[] ) {
if( m_startupExceptions )
return 1;
int returnCode = applyCommandLine( argc, argv );
if( returnCode == 0 )
returnCode = run();
return returnCode;
}
#if defined(CATCH_CONFIG_WCHAR) && defined(WIN32) && defined(UNICODE) #if defined(CATCH_CONFIG_WCHAR) && defined(WIN32) && defined(UNICODE)
int Session::run( int argc, wchar_t* const argv[] ) { int Session::applyCommandLine( int argc, wchar_t const * const * argv ) {
char **utf8Argv = new char *[ argc ]; char **utf8Argv = new char *[ argc ];
@ -10175,7 +10199,7 @@ namespace Catch {
WideCharToMultiByte( CP_UTF8, 0, argv[i], -1, utf8Argv[i], bufSize, NULL, NULL ); WideCharToMultiByte( CP_UTF8, 0, argv[i], -1, utf8Argv[i], bufSize, NULL, NULL );
} }
int returnCode = run( argc, utf8Argv ); int returnCode = applyCommandLine( argc, utf8Argv );
for ( int i = 0; i < argc; ++i ) for ( int i = 0; i < argc; ++i )
delete [] utf8Argv[ i ]; delete [] utf8Argv[ i ];
@ -10185,6 +10209,12 @@ namespace Catch {
return returnCode; return returnCode;
} }
#endif #endif
void Session::useConfigData( ConfigData const& configData ) {
m_configData = configData;
m_config.reset();
}
int Session::run() { int Session::run() {
if( ( m_configData.waitForKeypress & WaitForKeypress::BeforeStart ) != 0 ) { if( ( m_configData.waitForKeypress & WaitForKeypress::BeforeStart ) != 0 ) {
Catch::cout() << "...waiting for enter/ return before starting" << std::endl; Catch::cout() << "...waiting for enter/ return before starting" << std::endl;
@ -11686,7 +11716,7 @@ std::string StringMaker<bool>::convert(bool b) {
return b ? "true" : "false"; return b ? "true" : "false";
} }
std::string StringMaker<char>::convert(char value) { std::string StringMaker<signed char>::convert(signed char value) {
if (value == '\r') { if (value == '\r') {
return "'\\r'"; return "'\\r'";
} else if (value == '\f') { } else if (value == '\f') {
@ -11703,8 +11733,8 @@ std::string StringMaker<char>::convert(char value) {
return chstr; return chstr;
} }
} }
std::string StringMaker<signed char>::convert(signed char c) { std::string StringMaker<char>::convert(char c) {
return ::Catch::Detail::stringify(static_cast<char>(c)); return ::Catch::Detail::stringify(static_cast<signed char>(c));
} }
std::string StringMaker<unsigned char>::convert(unsigned char c) { std::string StringMaker<unsigned char>::convert(unsigned char c) {
return ::Catch::Detail::stringify(static_cast<char>(c)); return ::Catch::Detail::stringify(static_cast<char>(c));
@ -11836,7 +11866,7 @@ namespace Catch {
} }
Version const& libraryVersion() { Version const& libraryVersion() {
static Version version( 2, 4, 1, "", 0 ); static Version version( 2, 4, 2, "", 0 );
return version; return version;
} }
@ -13517,6 +13547,9 @@ namespace Catch {
m_xml.startElement( "Catch" ); m_xml.startElement( "Catch" );
if( !m_config->name().empty() ) if( !m_config->name().empty() )
m_xml.writeAttribute( "name", m_config->name() ); m_xml.writeAttribute( "name", m_config->name() );
if( m_config->rngSeed() != 0 )
m_xml.scopedElement( "Randomness" )
.writeAttribute( "seed", m_config->rngSeed() );
} }
void XmlReporter::testGroupStarting( GroupInfo const& groupInfo ) { void XmlReporter::testGroupStarting( GroupInfo const& groupInfo ) {
@ -13792,6 +13825,14 @@ int main (int argc, char * const argv[]) {
#define CATCH_ANON_TEST_CASE() INTERNAL_CATCH_TESTCASE() #define CATCH_ANON_TEST_CASE() INTERNAL_CATCH_TESTCASE()
#if !defined(CATCH_CONFIG_RUNTIME_STATIC_REQUIRE)
#define CATCH_STATIC_REQUIRE( ... ) static_assert( __VA_ARGS__ , #__VA_ARGS__ ); CATCH_SUCCEED( #__VA_ARGS__ )
#define CATCH_STATIC_REQUIRE_FALSE( ... ) static_assert( !(__VA_ARGS__), "!(" #__VA_ARGS__ ")" ); CATCH_SUCCEED( #__VA_ARGS__ )
#else
#define CATCH_STATIC_REQUIRE( ... ) CATCH_REQUIRE( __VA_ARGS__ )
#define CATCH_STATIC_REQUIRE_FALSE( ... ) CATCH_REQUIRE_FALSE( __VA_ARGS__ )
#endif
// "BDD-style" convenience wrappers // "BDD-style" convenience wrappers
#define CATCH_SCENARIO( ... ) CATCH_TEST_CASE( "Scenario: " __VA_ARGS__ ) #define CATCH_SCENARIO( ... ) CATCH_TEST_CASE( "Scenario: " __VA_ARGS__ )
#define CATCH_SCENARIO_METHOD( className, ... ) INTERNAL_CATCH_TEST_CASE_METHOD( className, "Scenario: " __VA_ARGS__ ) #define CATCH_SCENARIO_METHOD( className, ... ) INTERNAL_CATCH_TEST_CASE_METHOD( className, "Scenario: " __VA_ARGS__ )
@ -13851,6 +13892,14 @@ int main (int argc, char * const argv[]) {
#define SUCCEED( ... ) INTERNAL_CATCH_MSG( "SUCCEED", Catch::ResultWas::Ok, Catch::ResultDisposition::ContinueOnFailure, __VA_ARGS__ ) #define SUCCEED( ... ) INTERNAL_CATCH_MSG( "SUCCEED", Catch::ResultWas::Ok, Catch::ResultDisposition::ContinueOnFailure, __VA_ARGS__ )
#define ANON_TEST_CASE() INTERNAL_CATCH_TESTCASE() #define ANON_TEST_CASE() INTERNAL_CATCH_TESTCASE()
#if !defined(CATCH_CONFIG_RUNTIME_STATIC_REQUIRE)
#define STATIC_REQUIRE( ... ) static_assert( __VA_ARGS__, #__VA_ARGS__ ); SUCCEED( #__VA_ARGS__ )
#define STATIC_REQUIRE_FALSE( ... ) static_assert( !(__VA_ARGS__), "!(" #__VA_ARGS__ ")" ); SUCCEED( "!(" #__VA_ARGS__ ")" )
#else
#define STATIC_REQUIRE( ... ) REQUIRE( __VA_ARGS__ )
#define STATIC_REQUIRE_FALSE( ... ) REQUIRE_FALSE( __VA_ARGS__ )
#endif
#endif #endif
#define CATCH_TRANSLATE_EXCEPTION( signature ) INTERNAL_CATCH_TRANSLATE_EXCEPTION( signature ) #define CATCH_TRANSLATE_EXCEPTION( signature ) INTERNAL_CATCH_TRANSLATE_EXCEPTION( signature )
@ -13931,6 +13980,9 @@ using Catch::Detail::Approx;
#define CATCH_THEN( desc ) #define CATCH_THEN( desc )
#define CATCH_AND_THEN( desc ) #define CATCH_AND_THEN( desc )
#define CATCH_STATIC_REQUIRE( ... ) (void)(0)
#define CATCH_STATIC_REQUIRE_FALSE( ... ) (void)(0)
// If CATCH_CONFIG_PREFIX_ALL is not defined then the CATCH_ prefix is not required // If CATCH_CONFIG_PREFIX_ALL is not defined then the CATCH_ prefix is not required
#else #else
@ -13980,6 +14032,9 @@ using Catch::Detail::Approx;
#define SUCCEED( ... ) (void)(0) #define SUCCEED( ... ) (void)(0)
#define ANON_TEST_CASE() INTERNAL_CATCH_TESTCASE_NO_REGISTRATION(INTERNAL_CATCH_UNIQUE_NAME( ____C_A_T_C_H____T_E_S_T____ )) #define ANON_TEST_CASE() INTERNAL_CATCH_TESTCASE_NO_REGISTRATION(INTERNAL_CATCH_UNIQUE_NAME( ____C_A_T_C_H____T_E_S_T____ ))
#define STATIC_REQUIRE( ... ) (void)(0)
#define STATIC_REQUIRE_FALSE( ... ) (void)(0)
#endif #endif
#define CATCH_TRANSLATE_EXCEPTION( signature ) INTERNAL_CATCH_TRANSLATE_EXCEPTION_NO_REG( INTERNAL_CATCH_UNIQUE_NAME( catch_internal_ExceptionTranslator ), signature ) #define CATCH_TRANSLATE_EXCEPTION( signature ) INTERNAL_CATCH_TRANSLATE_EXCEPTION_NO_REG( INTERNAL_CATCH_UNIQUE_NAME( catch_internal_ExceptionTranslator ), signature )

View File

@ -10,7 +10,7 @@ class CatchConanTest(ConanFile):
settings = "os", "compiler", "arch", "build_type" settings = "os", "compiler", "arch", "build_type"
username = getenv("CONAN_USERNAME", "philsquared") username = getenv("CONAN_USERNAME", "philsquared")
channel = getenv("CONAN_CHANNEL", "testing") channel = getenv("CONAN_CHANNEL", "testing")
requires = "Catch/2.4.1@%s/%s" % (username, channel) requires = "Catch/2.4.2@%s/%s" % (username, channel)
def build(self): def build(self):
cmake = CMake(self) cmake = CMake(self)