mirror of
https://github.com/catchorg/Catch2.git
synced 2024-11-17 11:12:25 +01:00
Pre-merge
This commit is contained in:
parent
a0af453cda
commit
008ada6ead
@ -5,73 +5,15 @@
|
|||||||
* Distributed under the Boost Software License, Version 1.0. (See accompanying
|
* 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)
|
* file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#define CATCH_CONFIG_MAIN
|
||||||
|
#include "catch.hpp"
|
||||||
|
|
||||||
#ifdef __clang__
|
#ifdef __clang__
|
||||||
#pragma clang diagnostic ignored "-Wpadded"
|
#pragma clang diagnostic ignored "-Wpadded"
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "catch_self_test.hpp"
|
|
||||||
#include "internal/catch_text.h"
|
|
||||||
#include "internal/catch_console_colour.hpp"
|
|
||||||
|
|
||||||
namespace TestMain {
|
|
||||||
|
|
||||||
TEST_CASE( "selftest/main", "Runs all Catch self tests and checks their results" ) {
|
|
||||||
using namespace Catch;
|
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////
|
|
||||||
SECTION( "selftest/expected result",
|
|
||||||
"Tests do what they claim" ) {
|
|
||||||
|
|
||||||
SECTION( "selftest/expected result/failing tests",
|
|
||||||
"Tests in the 'failing' branch fail" ) {
|
|
||||||
MetaTestRunner::runMatching( "./failing/*", MetaTestRunner::Expected::ToFail, 0, 2 );
|
|
||||||
}
|
|
||||||
|
|
||||||
SECTION( "selftest/expected result/succeeding tests",
|
|
||||||
"Tests in the 'succeeding' branch succeed" ) {
|
|
||||||
MetaTestRunner::runMatching( "./succeeding/*", MetaTestRunner::Expected::ToSucceed, 1, 2 );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////
|
|
||||||
SECTION( "selftest/test counts",
|
|
||||||
"Number of test cases that run is fixed" ) {
|
|
||||||
EmbeddedRunner runner;
|
|
||||||
|
|
||||||
SECTION( "selftest/test counts/succeeding tests",
|
|
||||||
"Number of 'succeeding' tests is fixed" ) {
|
|
||||||
Totals totals = runner.runMatching( "./succeeding/*", 0, 2 );
|
|
||||||
CHECK( totals.assertions.passed == 298 );
|
|
||||||
CHECK( totals.assertions.failed == 0 );
|
|
||||||
}
|
|
||||||
|
|
||||||
SECTION( "selftest/test counts/failing tests",
|
|
||||||
"Number of 'failing' tests is fixed" ) {
|
|
||||||
Totals totals = runner.runMatching( "./failing/*", 1, 2 );
|
|
||||||
CHECK( totals.assertions.passed == 2 );
|
|
||||||
CHECK( totals.assertions.failed == 77 );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
TEST_CASE( "meta/Misc/Sections", "looped tests" ) {
|
|
||||||
Catch::EmbeddedRunner runner;
|
|
||||||
|
|
||||||
Catch::Totals totals = runner.runMatching( "./mixed/Misc/Sections/nested2", 0, 1 );
|
|
||||||
CHECK( totals.assertions.passed == 2 );
|
|
||||||
CHECK( totals.assertions.failed == 1 );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#ifdef __clang__
|
|
||||||
#pragma clang diagnostic ignored "-Wweak-vtables"
|
#pragma clang diagnostic ignored "-Wweak-vtables"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "../../include/internal/catch_commandline.hpp"
|
|
||||||
#include "../../include/internal/catch_test_spec.h"
|
|
||||||
#include "../../include/reporters/catch_reporter_xml.hpp"
|
|
||||||
|
|
||||||
namespace TestMain {
|
|
||||||
|
|
||||||
template<size_t size>
|
template<size_t size>
|
||||||
void parseIntoConfig( const char * (&argv)[size], Catch::ConfigData& config ) {
|
void parseIntoConfig( const char * (&argv)[size], Catch::ConfigData& config ) {
|
||||||
Clara::CommandLine<Catch::ConfigData> parser = Catch::makeCommandLineParser();
|
Clara::CommandLine<Catch::ConfigData> parser = Catch::makeCommandLineParser();
|
||||||
@ -402,35 +344,35 @@ namespace TestMain {
|
|||||||
std::string testString = "one two three four";
|
std::string testString = "one two three four";
|
||||||
|
|
||||||
SECTION( "No wrapping", "" ) {
|
SECTION( "No wrapping", "" ) {
|
||||||
CHECK( Catch::Text( testString, TextAttributes().setWidth( 80 ) ).toString() == testString );
|
CHECK( Text( testString, TextAttributes().setWidth( 80 ) ).toString() == testString );
|
||||||
CHECK( Catch::Text( testString, TextAttributes().setWidth( 18 ) ).toString() == testString );
|
CHECK( Text( testString, TextAttributes().setWidth( 18 ) ).toString() == testString );
|
||||||
}
|
}
|
||||||
SECTION( "Wrapped once", "" ) {
|
SECTION( "Wrapped once", "" ) {
|
||||||
CHECK( Catch::Text( testString, TextAttributes().setWidth( 17 ) ).toString() == "one two three\nfour" );
|
CHECK( Text( testString, TextAttributes().setWidth( 17 ) ).toString() == "one two three\nfour" );
|
||||||
CHECK( Catch::Text( testString, TextAttributes().setWidth( 16 ) ).toString() == "one two three\nfour" );
|
CHECK( Text( testString, TextAttributes().setWidth( 16 ) ).toString() == "one two three\nfour" );
|
||||||
CHECK( Catch::Text( testString, TextAttributes().setWidth( 14 ) ).toString() == "one two three\nfour" );
|
CHECK( Text( testString, TextAttributes().setWidth( 14 ) ).toString() == "one two three\nfour" );
|
||||||
CHECK( Catch::Text( testString, TextAttributes().setWidth( 13 ) ).toString() == "one two three\nfour" );
|
CHECK( Text( testString, TextAttributes().setWidth( 13 ) ).toString() == "one two three\nfour" );
|
||||||
CHECK( Catch::Text( testString, TextAttributes().setWidth( 12 ) ).toString() == "one two\nthree four" );
|
CHECK( Text( testString, TextAttributes().setWidth( 12 ) ).toString() == "one two\nthree four" );
|
||||||
}
|
}
|
||||||
SECTION( "Wrapped twice", "" ) {
|
SECTION( "Wrapped twice", "" ) {
|
||||||
CHECK( Catch::Text( testString, TextAttributes().setWidth( 9 ) ).toString() == "one two\nthree\nfour" );
|
CHECK( Text( testString, TextAttributes().setWidth( 9 ) ).toString() == "one two\nthree\nfour" );
|
||||||
CHECK( Catch::Text( testString, TextAttributes().setWidth( 8 ) ).toString() == "one two\nthree\nfour" );
|
CHECK( Text( testString, TextAttributes().setWidth( 8 ) ).toString() == "one two\nthree\nfour" );
|
||||||
CHECK( Catch::Text( testString, TextAttributes().setWidth( 7 ) ).toString() == "one two\nthree\nfour" );
|
CHECK( Text( testString, TextAttributes().setWidth( 7 ) ).toString() == "one two\nthree\nfour" );
|
||||||
}
|
}
|
||||||
SECTION( "Wrapped three times", "" ) {
|
SECTION( "Wrapped three times", "" ) {
|
||||||
CHECK( Catch::Text( testString, TextAttributes().setWidth( 6 ) ).toString() == "one\ntwo\nthree\nfour" );
|
CHECK( Text( testString, TextAttributes().setWidth( 6 ) ).toString() == "one\ntwo\nthree\nfour" );
|
||||||
CHECK( Catch::Text( testString, TextAttributes().setWidth( 5 ) ).toString() == "one\ntwo\nthree\nfour" );
|
CHECK( Text( testString, TextAttributes().setWidth( 5 ) ).toString() == "one\ntwo\nthree\nfour" );
|
||||||
}
|
}
|
||||||
SECTION( "Short wrap", "" ) {
|
SECTION( "Short wrap", "" ) {
|
||||||
CHECK( Catch::Text( "abcdef", TextAttributes().setWidth( 4 ) ).toString() == "abc-\ndef" );
|
CHECK( Text( "abcdef", TextAttributes().setWidth( 4 ) ).toString() == "abc-\ndef" );
|
||||||
CHECK( Catch::Text( "abcdefg", TextAttributes().setWidth( 4 ) ).toString() == "abc-\ndefg" );
|
CHECK( Text( "abcdefg", TextAttributes().setWidth( 4 ) ).toString() == "abc-\ndefg" );
|
||||||
CHECK( Catch::Text( "abcdefgh", TextAttributes().setWidth( 4 ) ).toString() == "abc-\ndef-\ngh" );
|
CHECK( Text( "abcdefgh", TextAttributes().setWidth( 4 ) ).toString() == "abc-\ndef-\ngh" );
|
||||||
|
|
||||||
CHECK( Catch::Text( testString, TextAttributes().setWidth( 4 ) ).toString() == "one\ntwo\nthr-\nee\nfour" );
|
CHECK( Text( testString, TextAttributes().setWidth( 4 ) ).toString() == "one\ntwo\nthr-\nee\nfour" );
|
||||||
CHECK( Catch::Text( testString, TextAttributes().setWidth( 3 ) ).toString() == "one\ntwo\nth-\nree\nfo-\nur" );
|
CHECK( Text( testString, TextAttributes().setWidth( 3 ) ).toString() == "one\ntwo\nth-\nree\nfo-\nur" );
|
||||||
}
|
}
|
||||||
SECTION( "As container", "" ) {
|
SECTION( "As container", "" ) {
|
||||||
Catch::Text text( testString, TextAttributes().setWidth( 6 ) );
|
Text text( testString, TextAttributes().setWidth( 6 ) );
|
||||||
REQUIRE( text.size() == 4 );
|
REQUIRE( text.size() == 4 );
|
||||||
CHECK( text[0] == "one" );
|
CHECK( text[0] == "one" );
|
||||||
CHECK( text[1] == "two" );
|
CHECK( text[1] == "two" );
|
||||||
@ -438,7 +380,7 @@ namespace TestMain {
|
|||||||
CHECK( text[3] == "four" );
|
CHECK( text[3] == "four" );
|
||||||
}
|
}
|
||||||
SECTION( "Indent first line differently", "" ) {
|
SECTION( "Indent first line differently", "" ) {
|
||||||
Catch::Text text( testString, TextAttributes()
|
Text text( testString, TextAttributes()
|
||||||
.setWidth( 10 )
|
.setWidth( 10 )
|
||||||
.setIndent( 4 )
|
.setIndent( 4 )
|
||||||
.setInitialIndent( 1 ) );
|
.setInitialIndent( 1 ) );
|
||||||
@ -453,22 +395,22 @@ namespace TestMain {
|
|||||||
std::string testString = "one two\nthree four";
|
std::string testString = "one two\nthree four";
|
||||||
|
|
||||||
SECTION( "No wrapping" , "" ) {
|
SECTION( "No wrapping" , "" ) {
|
||||||
CHECK( Catch::Text( testString, TextAttributes().setWidth( 80 ) ).toString() == testString );
|
CHECK( Text( testString, TextAttributes().setWidth( 80 ) ).toString() == testString );
|
||||||
CHECK( Catch::Text( testString, TextAttributes().setWidth( 18 ) ).toString() == testString );
|
CHECK( Text( testString, TextAttributes().setWidth( 18 ) ).toString() == testString );
|
||||||
CHECK( Catch::Text( testString, TextAttributes().setWidth( 10 ) ).toString() == testString );
|
CHECK( Text( testString, TextAttributes().setWidth( 10 ) ).toString() == testString );
|
||||||
}
|
}
|
||||||
SECTION( "Trailing newline" , "" ) {
|
SECTION( "Trailing newline" , "" ) {
|
||||||
CHECK( Catch::Text( "abcdef\n", TextAttributes().setWidth( 10 ) ).toString() == "abcdef\n" );
|
CHECK( Text( "abcdef\n", TextAttributes().setWidth( 10 ) ).toString() == "abcdef\n" );
|
||||||
CHECK( Catch::Text( "abcdef", TextAttributes().setWidth( 6 ) ).toString() == "abcdef" );
|
CHECK( Text( "abcdef", TextAttributes().setWidth( 6 ) ).toString() == "abcdef" );
|
||||||
CHECK( Catch::Text( "abcdef\n", TextAttributes().setWidth( 6 ) ).toString() == "abcdef\n" );
|
CHECK( Text( "abcdef\n", TextAttributes().setWidth( 6 ) ).toString() == "abcdef\n" );
|
||||||
}
|
}
|
||||||
SECTION( "Wrapped once", "" ) {
|
SECTION( "Wrapped once", "" ) {
|
||||||
CHECK( Catch::Text( testString, TextAttributes().setWidth( 9 ) ).toString() == "one two\nthree\nfour" );
|
CHECK( Text( testString, TextAttributes().setWidth( 9 ) ).toString() == "one two\nthree\nfour" );
|
||||||
CHECK( Catch::Text( testString, TextAttributes().setWidth( 8 ) ).toString() == "one two\nthree\nfour" );
|
CHECK( Text( testString, TextAttributes().setWidth( 8 ) ).toString() == "one two\nthree\nfour" );
|
||||||
CHECK( Catch::Text( testString, TextAttributes().setWidth( 7 ) ).toString() == "one two\nthree\nfour" );
|
CHECK( Text( testString, TextAttributes().setWidth( 7 ) ).toString() == "one two\nthree\nfour" );
|
||||||
}
|
}
|
||||||
SECTION( "Wrapped twice", "" ) {
|
SECTION( "Wrapped twice", "" ) {
|
||||||
CHECK( Catch::Text( testString, TextAttributes().setWidth( 6 ) ).toString() == "one\ntwo\nthree\nfour" );
|
CHECK( Text( testString, TextAttributes().setWidth( 6 ) ).toString() == "one\ntwo\nthree\nfour" );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -477,7 +419,7 @@ namespace TestMain {
|
|||||||
// guide: 1234567890123456789
|
// guide: 1234567890123456789
|
||||||
std::string testString = "one two \tthree four five six";
|
std::string testString = "one two \tthree four five six";
|
||||||
|
|
||||||
CHECK( Catch::Text( testString, TextAttributes().setWidth( 15 ) ).toString()
|
CHECK( Text( testString, TextAttributes().setWidth( 15 ) ).toString()
|
||||||
== "one two three\n four\n five\n six" );
|
== "one two three\n four\n five\n six" );
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -578,12 +520,12 @@ namespace TestMain {
|
|||||||
|
|
||||||
TEST_CASE( "Text can be formatted using the Text class", "" ) {
|
TEST_CASE( "Text can be formatted using the Text class", "" ) {
|
||||||
|
|
||||||
CHECK( Catch::Text( "hi there" ).toString() == "hi there" );
|
CHECK( Text( "hi there" ).toString() == "hi there" );
|
||||||
|
|
||||||
TextAttributes narrow;
|
TextAttributes narrow;
|
||||||
narrow.setWidth( 6 );
|
narrow.setWidth( 6 );
|
||||||
|
|
||||||
CHECK( Catch::Text( "hi there", narrow ).toString() == "hi\nthere" );
|
CHECK( Text( "hi there", narrow ).toString() == "hi\nthere" );
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_CASE( "Long text is truncted", "[Text][Truncated]" ) {
|
TEST_CASE( "Long text is truncted", "[Text][Truncated]" ) {
|
||||||
@ -593,8 +535,7 @@ namespace TestMain {
|
|||||||
std::ostringstream oss;
|
std::ostringstream oss;
|
||||||
for(int i = 0; i < 600; ++i )
|
for(int i = 0; i < 600; ++i )
|
||||||
oss << longLine << longLine << "\n";
|
oss << longLine << longLine << "\n";
|
||||||
Catch::Text t( oss.str() );
|
Text t( oss.str() );
|
||||||
CHECK_THAT( t.toString(), EndsWith( "... message truncated due to excessive size" ) );
|
CHECK_THAT( t.toString(), EndsWith( "... message truncated due to excessive size" ) );
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
@ -1,33 +0,0 @@
|
|||||||
/*
|
|
||||||
* Created by Phil on 14/02/2012.
|
|
||||||
* Copyright 2012 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)
|
|
||||||
*/
|
|
||||||
|
|
||||||
#if !defined(_WINDLL)
|
|
||||||
#define CATCH_CONFIG_MAIN
|
|
||||||
#endif
|
|
||||||
#include "catch_self_test.hpp"
|
|
||||||
|
|
||||||
namespace Catch{
|
|
||||||
|
|
||||||
NullStreamingReporter::~NullStreamingReporter() {}
|
|
||||||
|
|
||||||
Totals EmbeddedRunner::runMatching( const std::string& rawTestSpec, std::size_t groupIndex, std::size_t groupsCount, const std::string& ) {
|
|
||||||
std::ostringstream oss;
|
|
||||||
Ptr<Config> config = new Config();
|
|
||||||
config->setStreamBuf( oss.rdbuf() );
|
|
||||||
|
|
||||||
Totals totals;
|
|
||||||
|
|
||||||
// Scoped because RunContext doesn't report EndTesting until its destructor
|
|
||||||
{
|
|
||||||
RunContext runner( config.get(), m_reporter.get() );
|
|
||||||
totals = runner.runMatching( rawTestSpec, groupIndex, groupsCount );
|
|
||||||
}
|
|
||||||
return totals;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -1,177 +0,0 @@
|
|||||||
/*
|
|
||||||
* Created by Phil on 14/01/2011.
|
|
||||||
* Copyright 2011 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)
|
|
||||||
*/
|
|
||||||
#ifndef TWOBLUECUBES_CATCH_SELF_TEST_HPP_INCLUDED
|
|
||||||
#define TWOBLUECUBES_CATCH_SELF_TEST_HPP_INCLUDED
|
|
||||||
|
|
||||||
#include "catch.hpp"
|
|
||||||
|
|
||||||
// Use this external guard here as if we're using the single header version
|
|
||||||
// this will already be defined
|
|
||||||
#ifndef TWOBLUECUBES_CATCH_INTERFACES_REGISTRY_HUB_H_INCLUDED
|
|
||||||
#include "catch_interfaces_registry_hub.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "set"
|
|
||||||
|
|
||||||
#ifdef __clang__
|
|
||||||
#pragma clang diagnostic push
|
|
||||||
#pragma clang diagnostic ignored "-Wpadded"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
namespace Catch {
|
|
||||||
|
|
||||||
class NullStreamingReporter : public SharedImpl<IStreamingReporter> {
|
|
||||||
public:
|
|
||||||
|
|
||||||
virtual ~NullStreamingReporter();
|
|
||||||
|
|
||||||
static std::string getDescription() {
|
|
||||||
return "null reporter";
|
|
||||||
}
|
|
||||||
|
|
||||||
private: // IStreamingReporter
|
|
||||||
|
|
||||||
virtual ReporterPreferences getPreferences() const {
|
|
||||||
return ReporterPreferences();
|
|
||||||
}
|
|
||||||
|
|
||||||
virtual void noMatchingTestCases( std::string const& ) {}
|
|
||||||
virtual void testRunStarting( TestRunInfo const& ) {}
|
|
||||||
virtual void testGroupStarting( GroupInfo const& ) {}
|
|
||||||
virtual void testCaseStarting( TestCaseInfo const& ) {}
|
|
||||||
virtual void sectionStarting( SectionInfo const& ) {}
|
|
||||||
virtual void assertionStarting( AssertionInfo const& ) {}
|
|
||||||
virtual bool assertionEnded( AssertionStats const& ) { return false; }
|
|
||||||
virtual void sectionEnded( SectionStats const& ) {}
|
|
||||||
virtual void testCaseEnded( TestCaseStats const& ) {}
|
|
||||||
virtual void testGroupEnded( TestGroupStats const& ) {}
|
|
||||||
virtual void testRunEnded( TestRunStats const& ) {}
|
|
||||||
};
|
|
||||||
|
|
||||||
class EmbeddedRunner {
|
|
||||||
|
|
||||||
public:
|
|
||||||
EmbeddedRunner() : m_reporter( new NullStreamingReporter() ) {}
|
|
||||||
|
|
||||||
Totals runMatching( const std::string& rawTestSpec,
|
|
||||||
std::size_t groupIndex,
|
|
||||||
std::size_t groupsCount,
|
|
||||||
const std::string& reporter = "console" );
|
|
||||||
|
|
||||||
private:
|
|
||||||
Ptr<IStreamingReporter> m_reporter;
|
|
||||||
};
|
|
||||||
|
|
||||||
class MetaTestRunner {
|
|
||||||
|
|
||||||
public:
|
|
||||||
struct Expected { enum Result {
|
|
||||||
ToSucceed,
|
|
||||||
ToFail
|
|
||||||
}; };
|
|
||||||
|
|
||||||
MetaTestRunner( Expected::Result expectedResult, std::size_t groupIndex, std::size_t groupsCount )
|
|
||||||
: m_expectedResult( expectedResult ),
|
|
||||||
m_groupIndex( groupIndex ),
|
|
||||||
m_groupsCount( groupsCount )
|
|
||||||
{}
|
|
||||||
|
|
||||||
static void runMatching( const std::string& testSpec,
|
|
||||||
Expected::Result expectedResult,
|
|
||||||
std::size_t groupIndex,
|
|
||||||
std::size_t groupsCount ) {
|
|
||||||
forEach( getRegistryHub().getTestCaseRegistry().getMatchingTestCases( testSpec ),
|
|
||||||
MetaTestRunner( expectedResult, groupIndex, groupsCount ) );
|
|
||||||
}
|
|
||||||
|
|
||||||
void operator()( const TestCase& testCase ) {
|
|
||||||
std::string name;
|
|
||||||
Totals totals;
|
|
||||||
{
|
|
||||||
EmbeddedRunner runner;
|
|
||||||
name = testCase.getTestCaseInfo().name;
|
|
||||||
totals = runner.runMatching( name, m_groupIndex, m_groupsCount );
|
|
||||||
}
|
|
||||||
switch( m_expectedResult ) {
|
|
||||||
case Expected::ToSucceed:
|
|
||||||
if( totals.assertions.failed > 0 ) {
|
|
||||||
FAIL( "Expected test case '"
|
|
||||||
<< name
|
|
||||||
<< "' to succeed but there was/ were "
|
|
||||||
<< totals.assertions.failed << " failure(s)" );
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
SUCCEED( "Tests passed, as expected" );
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case Expected::ToFail:
|
|
||||||
if( totals.assertions.failed == 0 ) {
|
|
||||||
FAIL( "Expected test case '"
|
|
||||||
<< name
|
|
||||||
<< "' to fail but there was/ were "
|
|
||||||
<< totals.assertions.passed << " success(es)" );
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
SUCCEED( "Tests failed, as expected" );
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private:
|
|
||||||
Expected::Result m_expectedResult;
|
|
||||||
std::size_t m_groupIndex;
|
|
||||||
std::size_t m_groupsCount;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
struct LineInfoRegistry {
|
|
||||||
|
|
||||||
static LineInfoRegistry& get() {
|
|
||||||
static LineInfoRegistry s_instance;
|
|
||||||
return s_instance;
|
|
||||||
}
|
|
||||||
|
|
||||||
void registerLineInfo( const std::string& name,
|
|
||||||
const SourceLineInfo& info ) {
|
|
||||||
m_registry.insert( std::make_pair( name, info ) );
|
|
||||||
}
|
|
||||||
|
|
||||||
const SourceLineInfo* find( const std::string& name ) const {
|
|
||||||
std::map<std::string, SourceLineInfo>::const_iterator it = m_registry.find( name );
|
|
||||||
return it == m_registry.end() ? NULL : &(it->second);
|
|
||||||
}
|
|
||||||
|
|
||||||
const std::string infoForName( const std::string& name ) const {
|
|
||||||
std::map<std::string, SourceLineInfo>::const_iterator it = m_registry.find( name );
|
|
||||||
if( it == m_registry.end() )
|
|
||||||
return "";
|
|
||||||
std::ostringstream oss;
|
|
||||||
oss << it->second;
|
|
||||||
return oss.str();
|
|
||||||
}
|
|
||||||
|
|
||||||
std::map<std::string, SourceLineInfo> m_registry;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct LineInfoRegistrar {
|
|
||||||
LineInfoRegistrar( const char* name, const SourceLineInfo& lineInfo ) {
|
|
||||||
LineInfoRegistry::get().registerLineInfo( name, lineInfo );
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef __clang__
|
|
||||||
#pragma clang diagnostic pop
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define CATCH_REGISTER_LINE_INFO( name ) ::Catch::LineInfoRegistrar INTERNAL_CATCH_UNIQUE_NAME( lineRegistrar )( name, ::Catch::SourceLineInfo( __FILE__, __LINE__ ) );
|
|
||||||
#define CATCH_GET_LINE_INFO( name ) ::Catch::LineInfoRegistry::get().infoForName( name )
|
|
||||||
|
|
||||||
#endif // TWOBLUECUBES_CATCH_SELF_TEST_HPP_INCLUDED
|
|
Loading…
Reference in New Issue
Block a user