mirror of
https://github.com/catchorg/Catch2.git
synced 2025-08-01 12:55:40 +02:00
Tweaks to allow headers to be glued together.
Added Python script to generate single header. Added new XCode project that runs self test against single header
This commit is contained in:
@@ -22,7 +22,6 @@
|
||||
*/
|
||||
#ifndef TWOBLUECUBES_CATCH_HPP_INCLUDED
|
||||
#define TWOBLUECUBES_CATCH_HPP_INCLUDED
|
||||
|
||||
#include "internal/catch_hub.h"
|
||||
#include "internal/catch_test_registry.hpp"
|
||||
#include "internal/catch_capture.hpp"
|
||||
@@ -31,6 +30,14 @@
|
||||
#include "internal/catch_interfaces_exception.h"
|
||||
#include "internal/catch_approx.hpp"
|
||||
|
||||
#if defined( CATCH_CONFIG_MAIN ) || defined( CATCH_CONFIG_RUNNER )
|
||||
#include "catch_runner.hpp"
|
||||
#endif
|
||||
|
||||
#ifdef CATCH_CONFIG_MAIN
|
||||
#include "internal/catch_default_main.hpp"
|
||||
#endif
|
||||
|
||||
#ifdef __OBJC__
|
||||
#include "internal/catch_objc.hpp"
|
||||
#endif
|
||||
|
@@ -14,25 +14,6 @@
|
||||
|
||||
#include "catch_runner.hpp"
|
||||
#include "catch.hpp"
|
||||
|
||||
int main (int argc, char * const argv[])
|
||||
{
|
||||
#ifdef __OBJC__
|
||||
|
||||
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
|
||||
|
||||
Catch::registerTestMethods();
|
||||
|
||||
int result = Catch::Main( argc, (char* const*)argv );
|
||||
|
||||
[pool drain];
|
||||
return result;
|
||||
|
||||
#else
|
||||
|
||||
return Catch::Main( argc, argv );
|
||||
|
||||
#endif
|
||||
}
|
||||
#include "internal/catch_default_main.hpp"
|
||||
|
||||
#endif // TWOBLUECUBES_CATCH_WITH_MAIN_HPP_INCLUDED
|
||||
|
37
include/internal/catch_default_main.hpp
Normal file
37
include/internal/catch_default_main.hpp
Normal file
@@ -0,0 +1,37 @@
|
||||
/*
|
||||
* catch_default_main.hpp
|
||||
* Catch
|
||||
*
|
||||
* Created by Phil on 20/05/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_DEFAULT_MAIN_HPP_INCLUDED
|
||||
#define TWOBLUECUBES_CATCH_DEFAULT_MAIN_HPP_INCLUDED
|
||||
|
||||
int main (int argc, char * const argv[])
|
||||
{
|
||||
#ifdef __OBJC__
|
||||
|
||||
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
|
||||
|
||||
Catch::registerTestMethods();
|
||||
|
||||
int result = Catch::Main( argc, (char* const*)argv );
|
||||
|
||||
[pool drain];
|
||||
return result;
|
||||
|
||||
#else
|
||||
|
||||
return Catch::Main( argc, argv );
|
||||
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
#endif // TWOBLUECUBES_CATCH_DEFAULT_MAIN_HPP_INCLUDED
|
@@ -16,6 +16,9 @@
|
||||
#import <objc/runtime.h>
|
||||
#include <string>
|
||||
|
||||
// NB. Any general catch headers included here must be included
|
||||
// in catch.hpp first to make sure they are included by the single
|
||||
// header for non obj-usage
|
||||
#include "internal/catch_test_case_info.hpp"
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
|
@@ -1,154 +0,0 @@
|
||||
/*
|
||||
* catch_self_test.hpp
|
||||
* Catch
|
||||
*
|
||||
* 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"
|
||||
#include "catch_runner_impl.hpp"
|
||||
|
||||
namespace Catch
|
||||
{
|
||||
|
||||
class EmbeddedRunner
|
||||
{
|
||||
public:
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
EmbeddedRunner
|
||||
()
|
||||
{
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
std::size_t runMatching
|
||||
(
|
||||
const std::string& rawTestSpec
|
||||
)
|
||||
{
|
||||
std::ostringstream oss;
|
||||
Config config;
|
||||
config.setStreamBuf( oss.rdbuf() );
|
||||
config.setReporter( "basic" );
|
||||
|
||||
std::size_t result;
|
||||
|
||||
// Scoped because Runner doesn't report EndTesting until its destructor
|
||||
{
|
||||
Runner runner( config );
|
||||
result = runner.runMatching( rawTestSpec );
|
||||
m_successes = runner.getSuccessCount();
|
||||
m_failures = runner.getFailureCount();
|
||||
}
|
||||
m_output = oss.str();
|
||||
return result;
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
std::string getOutput
|
||||
()
|
||||
{
|
||||
return m_output;
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
std::size_t getSuccessCount
|
||||
()
|
||||
const
|
||||
{
|
||||
return m_successes;
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
std:: size_t getFailureCount
|
||||
()
|
||||
const
|
||||
{
|
||||
return m_failures;
|
||||
}
|
||||
|
||||
private:
|
||||
std::size_t m_successes;
|
||||
std::size_t m_failures;
|
||||
std::string m_output;
|
||||
};
|
||||
|
||||
class MetaTestRunner
|
||||
{
|
||||
public:
|
||||
struct Expected
|
||||
{
|
||||
enum Result
|
||||
{
|
||||
ToSucceed,
|
||||
ToFail
|
||||
};
|
||||
};
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
static void runMatching
|
||||
(
|
||||
const std::string& testSpec,
|
||||
Expected::Result expectedResult
|
||||
)
|
||||
{
|
||||
forEach( Hub::getTestCaseRegistry().getMatchingTestCases( testSpec ),
|
||||
MetaTestRunner( expectedResult ) );
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
MetaTestRunner
|
||||
(
|
||||
Expected::Result expectedResult
|
||||
)
|
||||
: m_expectedResult( expectedResult )
|
||||
{
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
void operator()
|
||||
(
|
||||
const TestCaseInfo& testCase
|
||||
)
|
||||
{
|
||||
EmbeddedRunner runner;
|
||||
runner.runMatching( testCase.getName() );
|
||||
switch( m_expectedResult )
|
||||
{
|
||||
case Expected::ToSucceed:
|
||||
if( runner.getFailureCount() > 0 )
|
||||
{
|
||||
INFO( runner.getOutput() );
|
||||
FAIL( "Expected test case '"
|
||||
<< testCase.getName()
|
||||
<< "' to succeed but there was/ were "
|
||||
<< runner.getFailureCount() << " failure(s)" );
|
||||
}
|
||||
break;
|
||||
case Expected::ToFail:
|
||||
if( runner.getSuccessCount() > 0 )
|
||||
{
|
||||
INFO( runner.getOutput() );
|
||||
FAIL( "Expected test case '"
|
||||
<< testCase.getName()
|
||||
<< "' to fail but there was/ were "
|
||||
<< runner.getSuccessCount() << " success(es)" );
|
||||
}
|
||||
break;
|
||||
}
|
||||
};
|
||||
|
||||
private:
|
||||
Expected::Result m_expectedResult;
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
#endif // TWOBLUECUBES_CATCH_SELF_TEST_HPP_INCLUDED
|
@@ -329,4 +329,4 @@ namespace Catch
|
||||
};
|
||||
|
||||
}
|
||||
#endif
|
||||
#endif // TWOBLUECUBES_CATCH_XMLWRITER_HPP_INCLUDED
|
||||
|
Reference in New Issue
Block a user