mirror of
https://github.com/catchorg/Catch2.git
synced 2024-11-26 23:36:11 +01:00
WIP: devirtualize RunContext
This commit is contained in:
parent
f3960c02ce
commit
5db31e587e
@ -55,6 +55,7 @@ set(IMPL_HEADERS
|
|||||||
${SOURCES_DIR}/catch_template_test_macros.hpp
|
${SOURCES_DIR}/catch_template_test_macros.hpp
|
||||||
${SOURCES_DIR}/catch_test_case_info.hpp
|
${SOURCES_DIR}/catch_test_case_info.hpp
|
||||||
${SOURCES_DIR}/catch_test_macros.hpp
|
${SOURCES_DIR}/catch_test_macros.hpp
|
||||||
|
${SOURCES_DIR}/catch_test_run_info.hpp
|
||||||
${SOURCES_DIR}/catch_test_spec.hpp
|
${SOURCES_DIR}/catch_test_spec.hpp
|
||||||
${SOURCES_DIR}/catch_timer.hpp
|
${SOURCES_DIR}/catch_timer.hpp
|
||||||
${SOURCES_DIR}/catch_tostring.hpp
|
${SOURCES_DIR}/catch_tostring.hpp
|
||||||
@ -63,6 +64,7 @@ set(IMPL_HEADERS
|
|||||||
${SOURCES_DIR}/catch_version.hpp
|
${SOURCES_DIR}/catch_version.hpp
|
||||||
${SOURCES_DIR}/catch_version_macros.hpp
|
${SOURCES_DIR}/catch_version_macros.hpp
|
||||||
${SOURCES_DIR}/internal/catch_assertion_handler.hpp
|
${SOURCES_DIR}/internal/catch_assertion_handler.hpp
|
||||||
|
${SOURCES_DIR}/internal/catch_benchmark_stats_fwd.hpp
|
||||||
${SOURCES_DIR}/internal/catch_case_insensitive_comparisons.hpp
|
${SOURCES_DIR}/internal/catch_case_insensitive_comparisons.hpp
|
||||||
${SOURCES_DIR}/internal/catch_case_sensitive.hpp
|
${SOURCES_DIR}/internal/catch_case_sensitive.hpp
|
||||||
${SOURCES_DIR}/internal/catch_clara.hpp
|
${SOURCES_DIR}/internal/catch_clara.hpp
|
||||||
@ -210,7 +212,6 @@ set(INTERNAL_FILES ${IMPL_SOURCES} ${IMPL_HEADERS})
|
|||||||
|
|
||||||
set(INTERFACE_HEADERS
|
set(INTERFACE_HEADERS
|
||||||
${SOURCES_DIR}/interfaces/catch_interfaces_all.hpp
|
${SOURCES_DIR}/interfaces/catch_interfaces_all.hpp
|
||||||
${SOURCES_DIR}/interfaces/catch_interfaces_capture.hpp
|
|
||||||
${SOURCES_DIR}/interfaces/catch_interfaces_config.hpp
|
${SOURCES_DIR}/interfaces/catch_interfaces_config.hpp
|
||||||
${SOURCES_DIR}/interfaces/catch_interfaces_exception.hpp
|
${SOURCES_DIR}/interfaces/catch_interfaces_exception.hpp
|
||||||
${SOURCES_DIR}/interfaces/catch_interfaces_generatortracker.hpp
|
${SOURCES_DIR}/interfaces/catch_interfaces_generatortracker.hpp
|
||||||
@ -219,7 +220,6 @@ set(INTERFACE_HEADERS
|
|||||||
${SOURCES_DIR}/interfaces/catch_interfaces_testcase.hpp
|
${SOURCES_DIR}/interfaces/catch_interfaces_testcase.hpp
|
||||||
)
|
)
|
||||||
set(INTERFACE_SOURCES
|
set(INTERFACE_SOURCES
|
||||||
${SOURCES_DIR}/interfaces/catch_interfaces_capture.cpp
|
|
||||||
${SOURCES_DIR}/interfaces/catch_interfaces_config.cpp
|
${SOURCES_DIR}/interfaces/catch_interfaces_config.cpp
|
||||||
${SOURCES_DIR}/interfaces/catch_interfaces_exception.cpp
|
${SOURCES_DIR}/interfaces/catch_interfaces_exception.cpp
|
||||||
${SOURCES_DIR}/interfaces/catch_interfaces_generatortracker.cpp
|
${SOURCES_DIR}/interfaces/catch_interfaces_generatortracker.cpp
|
||||||
|
@ -11,9 +11,10 @@
|
|||||||
#define CATCH_BENCHMARK_HPP_INCLUDED
|
#define CATCH_BENCHMARK_HPP_INCLUDED
|
||||||
|
|
||||||
#include <catch2/interfaces/catch_interfaces_config.hpp>
|
#include <catch2/interfaces/catch_interfaces_config.hpp>
|
||||||
|
#include <catch2/interfaces/catch_interfaces_reporter.hpp>
|
||||||
#include <catch2/internal/catch_compiler_capabilities.hpp>
|
#include <catch2/internal/catch_compiler_capabilities.hpp>
|
||||||
#include <catch2/internal/catch_context.hpp>
|
#include <catch2/internal/catch_context.hpp>
|
||||||
#include <catch2/interfaces/catch_interfaces_reporter.hpp>
|
#include <catch2/internal/catch_run_context.hpp>
|
||||||
#include <catch2/internal/catch_registry_hub.hpp>
|
#include <catch2/internal/catch_registry_hub.hpp>
|
||||||
#include <catch2/internal/catch_unique_name.hpp>
|
#include <catch2/internal/catch_unique_name.hpp>
|
||||||
#include <catch2/internal/catch_move_and_forward.hpp>
|
#include <catch2/internal/catch_move_and_forward.hpp>
|
||||||
|
@ -12,7 +12,6 @@
|
|||||||
|
|
||||||
#include <catch2/internal/catch_test_failure_exception.hpp>
|
#include <catch2/internal/catch_test_failure_exception.hpp>
|
||||||
#include <catch2/internal/catch_meta.hpp>
|
#include <catch2/internal/catch_meta.hpp>
|
||||||
#include <catch2/interfaces/catch_interfaces_capture.hpp>
|
|
||||||
#include <catch2/internal/catch_move_and_forward.hpp>
|
#include <catch2/internal/catch_move_and_forward.hpp>
|
||||||
|
|
||||||
#include <type_traits>
|
#include <type_traits>
|
||||||
|
@ -36,6 +36,7 @@
|
|||||||
#include <catch2/catch_template_test_macros.hpp>
|
#include <catch2/catch_template_test_macros.hpp>
|
||||||
#include <catch2/catch_test_case_info.hpp>
|
#include <catch2/catch_test_case_info.hpp>
|
||||||
#include <catch2/catch_test_macros.hpp>
|
#include <catch2/catch_test_macros.hpp>
|
||||||
|
#include <catch2/catch_test_run_info.hpp>
|
||||||
#include <catch2/catch_test_spec.hpp>
|
#include <catch2/catch_test_spec.hpp>
|
||||||
#include <catch2/catch_timer.hpp>
|
#include <catch2/catch_timer.hpp>
|
||||||
#include <catch2/catch_tostring.hpp>
|
#include <catch2/catch_tostring.hpp>
|
||||||
@ -46,6 +47,7 @@
|
|||||||
#include <catch2/generators/catch_generators_all.hpp>
|
#include <catch2/generators/catch_generators_all.hpp>
|
||||||
#include <catch2/interfaces/catch_interfaces_all.hpp>
|
#include <catch2/interfaces/catch_interfaces_all.hpp>
|
||||||
#include <catch2/internal/catch_assertion_handler.hpp>
|
#include <catch2/internal/catch_assertion_handler.hpp>
|
||||||
|
#include <catch2/internal/catch_benchmark_stats_fwd.hpp>
|
||||||
#include <catch2/internal/catch_case_insensitive_comparisons.hpp>
|
#include <catch2/internal/catch_case_insensitive_comparisons.hpp>
|
||||||
#include <catch2/internal/catch_case_sensitive.hpp>
|
#include <catch2/internal/catch_case_sensitive.hpp>
|
||||||
#include <catch2/internal/catch_clara.hpp>
|
#include <catch2/internal/catch_clara.hpp>
|
||||||
|
@ -6,10 +6,10 @@
|
|||||||
|
|
||||||
// SPDX-License-Identifier: BSL-1.0
|
// SPDX-License-Identifier: BSL-1.0
|
||||||
#include <catch2/catch_message.hpp>
|
#include <catch2/catch_message.hpp>
|
||||||
#include <catch2/interfaces/catch_interfaces_capture.hpp>
|
|
||||||
#include <catch2/internal/catch_uncaught_exceptions.hpp>
|
#include <catch2/internal/catch_uncaught_exceptions.hpp>
|
||||||
#include <catch2/internal/catch_enforce.hpp>
|
#include <catch2/internal/catch_enforce.hpp>
|
||||||
#include <catch2/internal/catch_move_and_forward.hpp>
|
#include <catch2/internal/catch_move_and_forward.hpp>
|
||||||
|
#include <catch2/internal/catch_run_context.hpp>
|
||||||
|
|
||||||
#include <cassert>
|
#include <cassert>
|
||||||
#include <stack>
|
#include <stack>
|
||||||
|
@ -12,7 +12,7 @@
|
|||||||
#include <catch2/internal/catch_reusable_string_stream.hpp>
|
#include <catch2/internal/catch_reusable_string_stream.hpp>
|
||||||
#include <catch2/internal/catch_stream_end_stop.hpp>
|
#include <catch2/internal/catch_stream_end_stop.hpp>
|
||||||
#include <catch2/internal/catch_message_info.hpp>
|
#include <catch2/internal/catch_message_info.hpp>
|
||||||
#include <catch2/interfaces/catch_interfaces_capture.hpp>
|
#include <catch2/internal/catch_run_context.hpp>
|
||||||
#include <catch2/catch_tostring.hpp>
|
#include <catch2/catch_tostring.hpp>
|
||||||
|
|
||||||
#include <string>
|
#include <string>
|
||||||
@ -61,7 +61,7 @@ namespace Catch {
|
|||||||
|
|
||||||
class Capturer {
|
class Capturer {
|
||||||
std::vector<MessageInfo> m_messages;
|
std::vector<MessageInfo> m_messages;
|
||||||
IResultCapture& m_resultCapture = getResultCapture();
|
RunContext& m_resultCapture = getResultCapture();
|
||||||
size_t m_captured = 0;
|
size_t m_captured = 0;
|
||||||
public:
|
public:
|
||||||
Capturer( StringRef macroName, SourceLineInfo const& lineInfo, ResultWas::OfType resultType, StringRef names );
|
Capturer( StringRef macroName, SourceLineInfo const& lineInfo, ResultWas::OfType resultType, StringRef names );
|
||||||
|
@ -25,7 +25,8 @@
|
|||||||
#include <catch2/internal/catch_stdstreams.hpp>
|
#include <catch2/internal/catch_stdstreams.hpp>
|
||||||
#include <catch2/internal/catch_istream.hpp>
|
#include <catch2/internal/catch_istream.hpp>
|
||||||
#include <catch2/internal/catch_test_case_registry_impl.hpp>
|
#include <catch2/internal/catch_test_case_registry_impl.hpp>
|
||||||
|
#include <catch2/internal/catch_registry_hub.hpp>
|
||||||
|
#include <catch2/catch_test_case_info.hpp>
|
||||||
|
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
#include <cassert>
|
#include <cassert>
|
||||||
|
23
src/catch2/catch_test_run_info.hpp
Normal file
23
src/catch2/catch_test_run_info.hpp
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
|
||||||
|
// Copyright Catch2 Authors
|
||||||
|
// Distributed under the Boost Software License, Version 1.0.
|
||||||
|
// (See accompanying file LICENSE.txt or copy at
|
||||||
|
// https://www.boost.org/LICENSE_1_0.txt)
|
||||||
|
|
||||||
|
// SPDX-License-Identifier: BSL-1.0
|
||||||
|
#ifndef CATCH_TEST_RUN_INFO_HPP_INCLUDED
|
||||||
|
#define CATCH_TEST_RUN_INFO_HPP_INCLUDED
|
||||||
|
|
||||||
|
#include <catch2/internal/catch_stringref.hpp>
|
||||||
|
|
||||||
|
namespace Catch {
|
||||||
|
|
||||||
|
struct TestRunInfo {
|
||||||
|
constexpr TestRunInfo(StringRef _name) : name(_name) {}
|
||||||
|
StringRef name;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
} // end namespace Catch
|
||||||
|
|
||||||
|
#endif // CATCH_TEST_RUN_INFO_HPP_INCLUDED
|
@ -9,7 +9,7 @@
|
|||||||
#include <catch2/generators/catch_generators.hpp>
|
#include <catch2/generators/catch_generators.hpp>
|
||||||
#include <catch2/internal/catch_enforce.hpp>
|
#include <catch2/internal/catch_enforce.hpp>
|
||||||
#include <catch2/generators/catch_generator_exception.hpp>
|
#include <catch2/generators/catch_generator_exception.hpp>
|
||||||
#include <catch2/interfaces/catch_interfaces_capture.hpp>
|
#include <catch2/internal/catch_run_context.hpp>
|
||||||
|
|
||||||
namespace Catch {
|
namespace Catch {
|
||||||
|
|
||||||
|
@ -22,7 +22,6 @@
|
|||||||
#ifndef CATCH_INTERFACES_ALL_HPP_INCLUDED
|
#ifndef CATCH_INTERFACES_ALL_HPP_INCLUDED
|
||||||
#define CATCH_INTERFACES_ALL_HPP_INCLUDED
|
#define CATCH_INTERFACES_ALL_HPP_INCLUDED
|
||||||
|
|
||||||
#include <catch2/interfaces/catch_interfaces_capture.hpp>
|
|
||||||
#include <catch2/interfaces/catch_interfaces_config.hpp>
|
#include <catch2/interfaces/catch_interfaces_config.hpp>
|
||||||
#include <catch2/interfaces/catch_interfaces_exception.hpp>
|
#include <catch2/interfaces/catch_interfaces_exception.hpp>
|
||||||
#include <catch2/interfaces/catch_interfaces_generatortracker.hpp>
|
#include <catch2/interfaces/catch_interfaces_generatortracker.hpp>
|
||||||
|
@ -1,13 +0,0 @@
|
|||||||
|
|
||||||
// Copyright Catch2 Authors
|
|
||||||
// Distributed under the Boost Software License, Version 1.0.
|
|
||||||
// (See accompanying file LICENSE.txt or copy at
|
|
||||||
// https://www.boost.org/LICENSE_1_0.txt)
|
|
||||||
|
|
||||||
// SPDX-License-Identifier: BSL-1.0
|
|
||||||
|
|
||||||
#include <catch2/interfaces/catch_interfaces_capture.hpp>
|
|
||||||
|
|
||||||
namespace Catch {
|
|
||||||
IResultCapture::~IResultCapture() = default;
|
|
||||||
}
|
|
@ -1,110 +0,0 @@
|
|||||||
|
|
||||||
// Copyright Catch2 Authors
|
|
||||||
// Distributed under the Boost Software License, Version 1.0.
|
|
||||||
// (See accompanying file LICENSE.txt or copy at
|
|
||||||
// https://www.boost.org/LICENSE_1_0.txt)
|
|
||||||
|
|
||||||
// SPDX-License-Identifier: BSL-1.0
|
|
||||||
#ifndef CATCH_INTERFACES_CAPTURE_HPP_INCLUDED
|
|
||||||
#define CATCH_INTERFACES_CAPTURE_HPP_INCLUDED
|
|
||||||
|
|
||||||
#include <string>
|
|
||||||
#include <chrono>
|
|
||||||
|
|
||||||
#include <catch2/internal/catch_stringref.hpp>
|
|
||||||
#include <catch2/internal/catch_result_type.hpp>
|
|
||||||
#include <catch2/internal/catch_unique_ptr.hpp>
|
|
||||||
|
|
||||||
namespace Catch {
|
|
||||||
|
|
||||||
class AssertionResult;
|
|
||||||
struct AssertionInfo;
|
|
||||||
struct SectionInfo;
|
|
||||||
struct SectionEndInfo;
|
|
||||||
struct MessageInfo;
|
|
||||||
struct MessageBuilder;
|
|
||||||
struct Counts;
|
|
||||||
struct AssertionReaction;
|
|
||||||
struct SourceLineInfo;
|
|
||||||
|
|
||||||
class ITransientExpression;
|
|
||||||
class IGeneratorTracker;
|
|
||||||
|
|
||||||
struct BenchmarkInfo;
|
|
||||||
template <typename Duration = std::chrono::duration<double, std::nano>>
|
|
||||||
struct BenchmarkStats;
|
|
||||||
|
|
||||||
namespace Generators {
|
|
||||||
class GeneratorUntypedBase;
|
|
||||||
using GeneratorBasePtr = Catch::Detail::unique_ptr<GeneratorUntypedBase>;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
class IResultCapture {
|
|
||||||
public:
|
|
||||||
virtual ~IResultCapture();
|
|
||||||
|
|
||||||
virtual bool sectionStarted( StringRef sectionName,
|
|
||||||
SourceLineInfo const& sectionLineInfo,
|
|
||||||
Counts& assertions ) = 0;
|
|
||||||
virtual void sectionEnded( SectionEndInfo&& endInfo ) = 0;
|
|
||||||
virtual void sectionEndedEarly( SectionEndInfo&& endInfo ) = 0;
|
|
||||||
|
|
||||||
virtual IGeneratorTracker*
|
|
||||||
acquireGeneratorTracker( StringRef generatorName,
|
|
||||||
SourceLineInfo const& lineInfo ) = 0;
|
|
||||||
virtual IGeneratorTracker*
|
|
||||||
createGeneratorTracker( StringRef generatorName,
|
|
||||||
SourceLineInfo lineInfo,
|
|
||||||
Generators::GeneratorBasePtr&& generator ) = 0;
|
|
||||||
|
|
||||||
virtual void benchmarkPreparing( StringRef name ) = 0;
|
|
||||||
virtual void benchmarkStarting( BenchmarkInfo const& info ) = 0;
|
|
||||||
virtual void benchmarkEnded( BenchmarkStats<> const& stats ) = 0;
|
|
||||||
virtual void benchmarkFailed( StringRef error ) = 0;
|
|
||||||
|
|
||||||
virtual void pushScopedMessage( MessageInfo const& message ) = 0;
|
|
||||||
virtual void popScopedMessage( MessageInfo const& message ) = 0;
|
|
||||||
|
|
||||||
virtual void emplaceUnscopedMessage( MessageBuilder&& builder ) = 0;
|
|
||||||
|
|
||||||
virtual void handleFatalErrorCondition( StringRef message ) = 0;
|
|
||||||
|
|
||||||
virtual void handleExpr
|
|
||||||
( AssertionInfo const& info,
|
|
||||||
ITransientExpression const& expr,
|
|
||||||
AssertionReaction& reaction ) = 0;
|
|
||||||
virtual void handleMessage
|
|
||||||
( AssertionInfo const& info,
|
|
||||||
ResultWas::OfType resultType,
|
|
||||||
StringRef message,
|
|
||||||
AssertionReaction& reaction ) = 0;
|
|
||||||
virtual void handleUnexpectedExceptionNotThrown
|
|
||||||
( AssertionInfo const& info,
|
|
||||||
AssertionReaction& reaction ) = 0;
|
|
||||||
virtual void handleUnexpectedInflightException
|
|
||||||
( AssertionInfo const& info,
|
|
||||||
std::string&& message,
|
|
||||||
AssertionReaction& reaction ) = 0;
|
|
||||||
virtual void handleIncomplete
|
|
||||||
( AssertionInfo const& info ) = 0;
|
|
||||||
virtual void handleNonExpr
|
|
||||||
( AssertionInfo const &info,
|
|
||||||
ResultWas::OfType resultType,
|
|
||||||
AssertionReaction &reaction ) = 0;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
virtual bool lastAssertionPassed() = 0;
|
|
||||||
virtual void assertionPassed() = 0;
|
|
||||||
|
|
||||||
// Deprecated, do not use:
|
|
||||||
virtual std::string getCurrentTestName() const = 0;
|
|
||||||
virtual const AssertionResult* getLastResult() const = 0;
|
|
||||||
virtual void exceptionEarlyReported() = 0;
|
|
||||||
};
|
|
||||||
|
|
||||||
IResultCapture& getResultCapture();
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif // CATCH_INTERFACES_CAPTURE_HPP_INCLUDED
|
|
@ -9,6 +9,7 @@
|
|||||||
#define CATCH_INTERFACES_REPORTER_HPP_INCLUDED
|
#define CATCH_INTERFACES_REPORTER_HPP_INCLUDED
|
||||||
|
|
||||||
#include <catch2/catch_section_info.hpp>
|
#include <catch2/catch_section_info.hpp>
|
||||||
|
#include <catch2/catch_test_run_info.hpp>
|
||||||
#include <catch2/catch_totals.hpp>
|
#include <catch2/catch_totals.hpp>
|
||||||
#include <catch2/catch_assertion_result.hpp>
|
#include <catch2/catch_assertion_result.hpp>
|
||||||
#include <catch2/internal/catch_message_info.hpp>
|
#include <catch2/internal/catch_message_info.hpp>
|
||||||
@ -17,15 +18,18 @@
|
|||||||
#include <catch2/internal/catch_move_and_forward.hpp>
|
#include <catch2/internal/catch_move_and_forward.hpp>
|
||||||
#include <catch2/benchmark/catch_estimate.hpp>
|
#include <catch2/benchmark/catch_estimate.hpp>
|
||||||
#include <catch2/benchmark/catch_outlier_classification.hpp>
|
#include <catch2/benchmark/catch_outlier_classification.hpp>
|
||||||
|
#include <catch2/internal/catch_benchmark_stats_fwd.hpp>
|
||||||
|
|
||||||
#include <map>
|
#include <map>
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
#include <iosfwd>
|
#include <iosfwd>
|
||||||
|
#include <chrono>
|
||||||
|
|
||||||
namespace Catch {
|
namespace Catch {
|
||||||
|
|
||||||
|
struct BenchmarkInfo;
|
||||||
|
|
||||||
struct ReporterDescription;
|
struct ReporterDescription;
|
||||||
struct ListenerDescription;
|
struct ListenerDescription;
|
||||||
struct TagInfo;
|
struct TagInfo;
|
||||||
@ -57,11 +61,6 @@ namespace Catch {
|
|||||||
std::map<std::string, std::string> m_customOptions;
|
std::map<std::string, std::string> m_customOptions;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct TestRunInfo {
|
|
||||||
constexpr TestRunInfo(StringRef _name) : name(_name) {}
|
|
||||||
StringRef name;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct AssertionStats {
|
struct AssertionStats {
|
||||||
AssertionStats( AssertionResult const& _assertionResult,
|
AssertionStats( AssertionResult const& _assertionResult,
|
||||||
std::vector<MessageInfo> const& _infoMessages,
|
std::vector<MessageInfo> const& _infoMessages,
|
||||||
|
@ -10,14 +10,14 @@
|
|||||||
|
|
||||||
#include <catch2/catch_assertion_info.hpp>
|
#include <catch2/catch_assertion_info.hpp>
|
||||||
#include <catch2/internal/catch_decomposer.hpp>
|
#include <catch2/internal/catch_decomposer.hpp>
|
||||||
#include <catch2/interfaces/catch_interfaces_capture.hpp>
|
#include <catch2/internal/catch_run_context.hpp>
|
||||||
#include <catch2/internal/catch_lazy_expr.hpp>
|
#include <catch2/internal/catch_lazy_expr.hpp>
|
||||||
|
|
||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
namespace Catch {
|
namespace Catch {
|
||||||
|
|
||||||
class IResultCapture;
|
class RunContext;
|
||||||
|
|
||||||
struct AssertionReaction {
|
struct AssertionReaction {
|
||||||
bool shouldDebugBreak = false;
|
bool shouldDebugBreak = false;
|
||||||
@ -29,7 +29,7 @@ namespace Catch {
|
|||||||
AssertionInfo m_assertionInfo;
|
AssertionInfo m_assertionInfo;
|
||||||
AssertionReaction m_reaction;
|
AssertionReaction m_reaction;
|
||||||
bool m_completed = false;
|
bool m_completed = false;
|
||||||
IResultCapture& m_resultCapture;
|
RunContext& m_resultCapture;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
AssertionHandler
|
AssertionHandler
|
||||||
|
23
src/catch2/internal/catch_benchmark_stats_fwd.hpp
Normal file
23
src/catch2/internal/catch_benchmark_stats_fwd.hpp
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
|
||||||
|
// Copyright Catch2 Authors
|
||||||
|
// Distributed under the Boost Software License, Version 1.0.
|
||||||
|
// (See accompanying file LICENSE.txt or copy at
|
||||||
|
// https://www.boost.org/LICENSE_1_0.txt)
|
||||||
|
|
||||||
|
// SPDX-License-Identifier: BSL-1.0
|
||||||
|
#ifndef CATCH_BENCHMARK_STATS_FWD_HPP_INCLUDED
|
||||||
|
#define CATCH_BENCHMARK_STATS_FWD_HPP_INCLUDED
|
||||||
|
|
||||||
|
#include <chrono>
|
||||||
|
|
||||||
|
namespace Catch {
|
||||||
|
|
||||||
|
// We cannot forward declare the type with default template argument
|
||||||
|
// multiple times, so it is split out into a separate header so that
|
||||||
|
// we can prevent multiple declarations in dependees
|
||||||
|
template <typename Duration = std::chrono::duration<double, std::nano>>
|
||||||
|
struct BenchmarkStats;
|
||||||
|
|
||||||
|
} // end namespace Catch
|
||||||
|
|
||||||
|
#endif // CATCH_BENCHMARK_STATS_FWD_HPP_INCLUDED
|
@ -27,7 +27,7 @@ namespace Catch {
|
|||||||
return *Context::currentContext;
|
return *Context::currentContext;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Context::setResultCapture( IResultCapture* resultCapture ) {
|
void Context::setResultCapture( RunContext* resultCapture ) {
|
||||||
m_resultCapture = resultCapture;
|
m_resultCapture = resultCapture;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -12,12 +12,12 @@
|
|||||||
|
|
||||||
namespace Catch {
|
namespace Catch {
|
||||||
|
|
||||||
class IResultCapture;
|
class RunContext;
|
||||||
class IConfig;
|
class IConfig;
|
||||||
|
|
||||||
class Context {
|
class Context {
|
||||||
IConfig const* m_config = nullptr;
|
IConfig const* m_config = nullptr;
|
||||||
IResultCapture* m_resultCapture = nullptr;
|
RunContext* m_resultCapture = nullptr;
|
||||||
|
|
||||||
CATCH_EXPORT static Context* currentContext;
|
CATCH_EXPORT static Context* currentContext;
|
||||||
friend Context& getCurrentMutableContext();
|
friend Context& getCurrentMutableContext();
|
||||||
@ -26,9 +26,9 @@ namespace Catch {
|
|||||||
friend void cleanUpContext();
|
friend void cleanUpContext();
|
||||||
|
|
||||||
public:
|
public:
|
||||||
IResultCapture* getResultCapture() const { return m_resultCapture; }
|
RunContext* getResultCapture() const { return m_resultCapture; }
|
||||||
IConfig const* getConfig() const { return m_config; }
|
IConfig const* getConfig() const { return m_config; }
|
||||||
void setResultCapture( IResultCapture* resultCapture );
|
void setResultCapture( RunContext* resultCapture );
|
||||||
void setConfig( IConfig const* config );
|
void setConfig( IConfig const* config );
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -28,7 +28,7 @@
|
|||||||
|
|
||||||
#include <catch2/internal/catch_context.hpp>
|
#include <catch2/internal/catch_context.hpp>
|
||||||
#include <catch2/internal/catch_enforce.hpp>
|
#include <catch2/internal/catch_enforce.hpp>
|
||||||
#include <catch2/interfaces/catch_interfaces_capture.hpp>
|
#include <catch2/internal/catch_run_context.hpp>
|
||||||
#include <catch2/internal/catch_windows_h_proxy.hpp>
|
#include <catch2/internal/catch_windows_h_proxy.hpp>
|
||||||
#include <catch2/internal/catch_stdstreams.hpp>
|
#include <catch2/internal/catch_stdstreams.hpp>
|
||||||
|
|
||||||
|
@ -10,7 +10,7 @@
|
|||||||
|
|
||||||
#include <catch2/internal/catch_result_type.hpp>
|
#include <catch2/internal/catch_result_type.hpp>
|
||||||
#include <catch2/internal/catch_source_line_info.hpp>
|
#include <catch2/internal/catch_source_line_info.hpp>
|
||||||
#include <catch2/interfaces/catch_interfaces_capture.hpp>
|
#include <catch2/internal/catch_stringref.hpp>
|
||||||
|
|
||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
|
@ -7,7 +7,11 @@
|
|||||||
// SPDX-License-Identifier: BSL-1.0
|
// SPDX-License-Identifier: BSL-1.0
|
||||||
#include <catch2/internal/catch_run_context.hpp>
|
#include <catch2/internal/catch_run_context.hpp>
|
||||||
|
|
||||||
|
#include <catch2/interfaces/catch_interfaces_reporter.hpp>
|
||||||
|
#include <catch2/catch_test_case_info.hpp>
|
||||||
|
#include <catch2/catch_assertion_result.hpp>
|
||||||
#include <catch2/catch_user_config.hpp>
|
#include <catch2/catch_user_config.hpp>
|
||||||
|
#include <catch2/catch_timer.hpp>
|
||||||
#include <catch2/interfaces/catch_interfaces_generatortracker.hpp>
|
#include <catch2/interfaces/catch_interfaces_generatortracker.hpp>
|
||||||
#include <catch2/interfaces/catch_interfaces_config.hpp>
|
#include <catch2/interfaces/catch_interfaces_config.hpp>
|
||||||
#include <catch2/internal/catch_compiler_capabilities.hpp>
|
#include <catch2/internal/catch_compiler_capabilities.hpp>
|
||||||
@ -15,10 +19,14 @@
|
|||||||
#include <catch2/internal/catch_enforce.hpp>
|
#include <catch2/internal/catch_enforce.hpp>
|
||||||
#include <catch2/internal/catch_fatal_condition_handler.hpp>
|
#include <catch2/internal/catch_fatal_condition_handler.hpp>
|
||||||
#include <catch2/internal/catch_random_number_generator.hpp>
|
#include <catch2/internal/catch_random_number_generator.hpp>
|
||||||
#include <catch2/catch_timer.hpp>
|
|
||||||
#include <catch2/internal/catch_output_redirect.hpp>
|
#include <catch2/internal/catch_output_redirect.hpp>
|
||||||
#include <catch2/internal/catch_assertion_handler.hpp>
|
#include <catch2/internal/catch_assertion_handler.hpp>
|
||||||
#include <catch2/internal/catch_test_failure_exception.hpp>
|
#include <catch2/internal/catch_test_failure_exception.hpp>
|
||||||
|
#include <catch2/internal/catch_optional.hpp>
|
||||||
|
#include <catch2/internal/catch_move_and_forward.hpp>
|
||||||
|
#include <catch2/internal/catch_fatal_condition_handler.hpp>
|
||||||
|
#include <catch2/internal/catch_test_case_tracker.hpp>
|
||||||
|
#include <catch2/catch_message.hpp>
|
||||||
|
|
||||||
#include <cassert>
|
#include <cassert>
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
@ -164,30 +172,44 @@ namespace Catch {
|
|||||||
} // namespace
|
} // namespace
|
||||||
}
|
}
|
||||||
|
|
||||||
RunContext::RunContext(IConfig const* _config, IEventListenerPtr&& reporter)
|
|
||||||
: m_runInfo(_config->name()),
|
struct RunContext::RunContextImpl {
|
||||||
|
Optional<AssertionResult> lastResult;
|
||||||
|
FatalConditionHandler fatalConditionhandler;
|
||||||
|
TrackerContext trackerContext;
|
||||||
|
std::vector<MessageInfo> messages;
|
||||||
|
// Fake owners for unscoped messages
|
||||||
|
std::vector<ScopedMessage> messageScopes;
|
||||||
|
IEventListenerPtr reporter;
|
||||||
|
std::vector<SectionEndInfo> unfinishedSections;
|
||||||
|
std::vector<ITracker*> activeSections;
|
||||||
|
};
|
||||||
|
|
||||||
|
RunContext::RunContext(IConfig const* _config, IEventListenerPtr&& reporter):
|
||||||
|
m_impl( Detail::make_unique<RunContextImpl>() ),
|
||||||
|
m_runInfo(_config->name()),
|
||||||
m_config(_config),
|
m_config(_config),
|
||||||
m_reporter(CATCH_MOVE(reporter)),
|
|
||||||
m_lastAssertionInfo{ StringRef(), SourceLineInfo("",0), StringRef(), ResultDisposition::Normal },
|
m_lastAssertionInfo{ StringRef(), SourceLineInfo("",0), StringRef(), ResultDisposition::Normal },
|
||||||
m_includeSuccessfulResults( m_config->includeSuccessfulResults() || m_reporter->getPreferences().shouldReportAllAssertions )
|
m_includeSuccessfulResults( m_config->includeSuccessfulResults() || reporter->getPreferences().shouldReportAllAssertions )
|
||||||
{
|
{
|
||||||
getCurrentMutableContext().setResultCapture( this );
|
getCurrentMutableContext().setResultCapture(this);
|
||||||
m_reporter->testRunStarting(m_runInfo);
|
m_impl->reporter = CATCH_MOVE( reporter );
|
||||||
|
m_impl->reporter->testRunStarting(m_runInfo);
|
||||||
}
|
}
|
||||||
|
|
||||||
RunContext::~RunContext() {
|
RunContext::~RunContext() {
|
||||||
m_reporter->testRunEnded(TestRunStats(m_runInfo, m_totals, aborting()));
|
m_impl->reporter->testRunEnded(TestRunStats(m_runInfo, m_totals, aborting()));
|
||||||
}
|
}
|
||||||
|
|
||||||
Totals RunContext::runTest(TestCaseHandle const& testCase) {
|
Totals RunContext::runTest(TestCaseHandle const& testCase) {
|
||||||
const Totals prevTotals = m_totals;
|
const Totals prevTotals = m_totals;
|
||||||
|
|
||||||
auto const& testInfo = testCase.getTestCaseInfo();
|
auto const& testInfo = testCase.getTestCaseInfo();
|
||||||
m_reporter->testCaseStarting(testInfo);
|
m_impl->reporter->testCaseStarting( testInfo );
|
||||||
m_activeTestCase = &testCase;
|
m_activeTestCase = &testCase;
|
||||||
|
|
||||||
|
|
||||||
ITracker& rootTracker = m_trackerContext.startRun();
|
ITracker& rootTracker = m_impl->trackerContext.startRun();
|
||||||
assert(rootTracker.isSectionTracker());
|
assert(rootTracker.isSectionTracker());
|
||||||
static_cast<SectionTracker&>(rootTracker).addInitialFilters(m_config->getSectionsToRun());
|
static_cast<SectionTracker&>(rootTracker).addInitialFilters(m_config->getSectionsToRun());
|
||||||
|
|
||||||
@ -228,10 +250,10 @@ namespace Catch {
|
|||||||
std::string redirectedCout;
|
std::string redirectedCout;
|
||||||
std::string redirectedCerr;
|
std::string redirectedCerr;
|
||||||
do {
|
do {
|
||||||
m_trackerContext.startCycle();
|
m_impl->trackerContext.startCycle();
|
||||||
m_testCaseTracker = &SectionTracker::acquire(m_trackerContext, TestCaseTracking::NameAndLocationRef(testInfo.name, testInfo.lineInfo));
|
m_testCaseTracker = &SectionTracker::acquire(m_impl->trackerContext, TestCaseTracking::NameAndLocationRef(testInfo.name, testInfo.lineInfo));
|
||||||
|
|
||||||
m_reporter->testCasePartialStarting(testInfo, testRuns);
|
m_impl->reporter->testCasePartialStarting( testInfo, testRuns );
|
||||||
|
|
||||||
const auto beforeRunTotals = m_totals;
|
const auto beforeRunTotals = m_totals;
|
||||||
std::string oneRunCout, oneRunCerr;
|
std::string oneRunCout, oneRunCerr;
|
||||||
@ -242,7 +264,7 @@ namespace Catch {
|
|||||||
const auto singleRunTotals = m_totals.delta(beforeRunTotals);
|
const auto singleRunTotals = m_totals.delta(beforeRunTotals);
|
||||||
auto statsForOneRun = TestCaseStats(testInfo, singleRunTotals, CATCH_MOVE(oneRunCout), CATCH_MOVE(oneRunCerr), aborting());
|
auto statsForOneRun = TestCaseStats(testInfo, singleRunTotals, CATCH_MOVE(oneRunCout), CATCH_MOVE(oneRunCerr), aborting());
|
||||||
|
|
||||||
m_reporter->testCasePartialEnded(statsForOneRun, testRuns);
|
m_impl->reporter->testCasePartialEnded( statsForOneRun, testRuns );
|
||||||
++testRuns;
|
++testRuns;
|
||||||
} while (!m_testCaseTracker->isSuccessfullyCompleted() && !aborting());
|
} while (!m_testCaseTracker->isSuccessfullyCompleted() && !aborting());
|
||||||
|
|
||||||
@ -253,11 +275,12 @@ namespace Catch {
|
|||||||
deltaTotals.testCases.failed++;
|
deltaTotals.testCases.failed++;
|
||||||
}
|
}
|
||||||
m_totals.testCases += deltaTotals.testCases;
|
m_totals.testCases += deltaTotals.testCases;
|
||||||
m_reporter->testCaseEnded(TestCaseStats(testInfo,
|
m_impl->reporter->testCaseEnded(
|
||||||
deltaTotals,
|
TestCaseStats( testInfo,
|
||||||
CATCH_MOVE(redirectedCout),
|
deltaTotals,
|
||||||
CATCH_MOVE(redirectedCerr),
|
CATCH_MOVE( redirectedCout ),
|
||||||
aborting()));
|
CATCH_MOVE( redirectedCerr ),
|
||||||
|
aborting() ) );
|
||||||
|
|
||||||
m_activeTestCase = nullptr;
|
m_activeTestCase = nullptr;
|
||||||
m_testCaseTracker = nullptr;
|
m_testCaseTracker = nullptr;
|
||||||
@ -286,14 +309,15 @@ namespace Catch {
|
|||||||
m_lastAssertionPassed = true;
|
m_lastAssertionPassed = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
m_reporter->assertionEnded(AssertionStats(result, m_messages, m_totals));
|
m_impl->reporter->assertionEnded(AssertionStats(result, m_impl->messages, m_totals));
|
||||||
|
|
||||||
if (result.getResultType() != ResultWas::Warning)
|
if ( result.getResultType() != ResultWas::Warning ) {
|
||||||
m_messageScopes.clear();
|
m_impl->messageScopes.clear();
|
||||||
|
}
|
||||||
|
|
||||||
// Reset working state
|
// Reset working state
|
||||||
resetAssertionInfo();
|
resetAssertionInfo();
|
||||||
m_lastResult = result;
|
m_impl->lastResult = result;
|
||||||
}
|
}
|
||||||
void RunContext::resetAssertionInfo() {
|
void RunContext::resetAssertionInfo() {
|
||||||
m_lastAssertionInfo.macroName = StringRef();
|
m_lastAssertionInfo.macroName = StringRef();
|
||||||
@ -302,18 +326,18 @@ namespace Catch {
|
|||||||
|
|
||||||
bool RunContext::sectionStarted(StringRef sectionName, SourceLineInfo const& sectionLineInfo, Counts & assertions) {
|
bool RunContext::sectionStarted(StringRef sectionName, SourceLineInfo const& sectionLineInfo, Counts & assertions) {
|
||||||
ITracker& sectionTracker =
|
ITracker& sectionTracker =
|
||||||
SectionTracker::acquire( m_trackerContext,
|
SectionTracker::acquire( m_impl->trackerContext,
|
||||||
TestCaseTracking::NameAndLocationRef(
|
TestCaseTracking::NameAndLocationRef(
|
||||||
sectionName, sectionLineInfo ) );
|
sectionName, sectionLineInfo ) );
|
||||||
|
|
||||||
if (!sectionTracker.isOpen())
|
if (!sectionTracker.isOpen())
|
||||||
return false;
|
return false;
|
||||||
m_activeSections.push_back(§ionTracker);
|
m_impl->activeSections.push_back(§ionTracker);
|
||||||
|
|
||||||
SectionInfo sectionInfo( sectionLineInfo, static_cast<std::string>(sectionName) );
|
SectionInfo sectionInfo( sectionLineInfo, static_cast<std::string>(sectionName) );
|
||||||
m_lastAssertionInfo.lineInfo = sectionInfo.lineInfo;
|
m_lastAssertionInfo.lineInfo = sectionInfo.lineInfo;
|
||||||
|
|
||||||
m_reporter->sectionStarting(sectionInfo);
|
m_impl->reporter->sectionStarting( sectionInfo );
|
||||||
|
|
||||||
assertions = m_totals.assertions;
|
assertions = m_totals.assertions;
|
||||||
|
|
||||||
@ -324,7 +348,7 @@ namespace Catch {
|
|||||||
SourceLineInfo const& lineInfo ) {
|
SourceLineInfo const& lineInfo ) {
|
||||||
using namespace Generators;
|
using namespace Generators;
|
||||||
GeneratorTracker* tracker = GeneratorTracker::acquire(
|
GeneratorTracker* tracker = GeneratorTracker::acquire(
|
||||||
m_trackerContext,
|
m_impl->trackerContext,
|
||||||
TestCaseTracking::NameAndLocationRef(
|
TestCaseTracking::NameAndLocationRef(
|
||||||
generatorName, lineInfo ) );
|
generatorName, lineInfo ) );
|
||||||
m_lastAssertionInfo.lineInfo = lineInfo;
|
m_lastAssertionInfo.lineInfo = lineInfo;
|
||||||
@ -337,13 +361,13 @@ namespace Catch {
|
|||||||
Generators::GeneratorBasePtr&& generator ) {
|
Generators::GeneratorBasePtr&& generator ) {
|
||||||
|
|
||||||
auto nameAndLoc = TestCaseTracking::NameAndLocation( static_cast<std::string>( generatorName ), lineInfo );
|
auto nameAndLoc = TestCaseTracking::NameAndLocation( static_cast<std::string>( generatorName ), lineInfo );
|
||||||
auto& currentTracker = m_trackerContext.currentTracker();
|
auto& currentTracker = m_impl->trackerContext.currentTracker();
|
||||||
assert(
|
assert(
|
||||||
currentTracker.nameAndLocation() != nameAndLoc &&
|
currentTracker.nameAndLocation() != nameAndLoc &&
|
||||||
"Trying to create tracker for a genreator that already has one" );
|
"Trying to create tracker for a genreator that already has one" );
|
||||||
|
|
||||||
auto newTracker = Catch::Detail::make_unique<Generators::GeneratorTracker>(
|
auto newTracker = Catch::Detail::make_unique<Generators::GeneratorTracker>(
|
||||||
CATCH_MOVE(nameAndLoc), m_trackerContext, ¤tTracker );
|
CATCH_MOVE(nameAndLoc), m_impl->trackerContext, ¤tTracker );
|
||||||
auto ret = newTracker.get();
|
auto ret = newTracker.get();
|
||||||
currentTracker.addChild( CATCH_MOVE( newTracker ) );
|
currentTracker.addChild( CATCH_MOVE( newTracker ) );
|
||||||
|
|
||||||
@ -357,7 +381,7 @@ namespace Catch {
|
|||||||
return false;
|
return false;
|
||||||
if (!m_config->warnAboutMissingAssertions())
|
if (!m_config->warnAboutMissingAssertions())
|
||||||
return false;
|
return false;
|
||||||
if (m_trackerContext.currentTracker().hasChildren())
|
if (m_impl->trackerContext.currentTracker().hasChildren())
|
||||||
return false;
|
return false;
|
||||||
m_totals.assertions.failed++;
|
m_totals.assertions.failed++;
|
||||||
assertions.failed++;
|
assertions.failed++;
|
||||||
@ -368,50 +392,57 @@ namespace Catch {
|
|||||||
Counts assertions = m_totals.assertions - endInfo.prevAssertions;
|
Counts assertions = m_totals.assertions - endInfo.prevAssertions;
|
||||||
bool missingAssertions = testForMissingAssertions(assertions);
|
bool missingAssertions = testForMissingAssertions(assertions);
|
||||||
|
|
||||||
if (!m_activeSections.empty()) {
|
if (!m_impl->activeSections.empty()) {
|
||||||
m_activeSections.back()->close();
|
m_impl->activeSections.back()->close();
|
||||||
m_activeSections.pop_back();
|
m_impl->activeSections.pop_back();
|
||||||
}
|
}
|
||||||
|
|
||||||
m_reporter->sectionEnded(SectionStats(CATCH_MOVE(endInfo.sectionInfo), assertions, endInfo.durationInSeconds, missingAssertions));
|
m_impl->reporter->sectionEnded(
|
||||||
m_messages.clear();
|
SectionStats( CATCH_MOVE( endInfo.sectionInfo ),
|
||||||
m_messageScopes.clear();
|
assertions,
|
||||||
|
endInfo.durationInSeconds,
|
||||||
|
missingAssertions ) );
|
||||||
|
m_impl->messages.clear();
|
||||||
|
m_impl->messageScopes.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
void RunContext::sectionEndedEarly(SectionEndInfo&& endInfo) {
|
void RunContext::sectionEndedEarly(SectionEndInfo&& endInfo) {
|
||||||
if ( m_unfinishedSections.empty() ) {
|
if ( m_impl->unfinishedSections.empty() ) {
|
||||||
m_activeSections.back()->fail();
|
m_impl->activeSections.back()->fail();
|
||||||
} else {
|
} else {
|
||||||
m_activeSections.back()->close();
|
m_impl->activeSections.back()->close();
|
||||||
}
|
}
|
||||||
m_activeSections.pop_back();
|
m_impl->activeSections.pop_back();
|
||||||
|
|
||||||
m_unfinishedSections.push_back(CATCH_MOVE(endInfo));
|
m_impl->unfinishedSections.push_back(CATCH_MOVE(endInfo));
|
||||||
}
|
}
|
||||||
|
|
||||||
void RunContext::benchmarkPreparing( StringRef name ) {
|
void RunContext::benchmarkPreparing( StringRef name ) {
|
||||||
m_reporter->benchmarkPreparing(name);
|
m_impl->reporter->benchmarkPreparing( name );
|
||||||
}
|
}
|
||||||
void RunContext::benchmarkStarting( BenchmarkInfo const& info ) {
|
void RunContext::benchmarkStarting( BenchmarkInfo const& info ) {
|
||||||
m_reporter->benchmarkStarting( info );
|
m_impl->reporter->benchmarkStarting( info );
|
||||||
}
|
}
|
||||||
void RunContext::benchmarkEnded( BenchmarkStats<> const& stats ) {
|
void RunContext::benchmarkEnded( BenchmarkStats<> const& stats ) {
|
||||||
m_reporter->benchmarkEnded( stats );
|
m_impl->reporter->benchmarkEnded( stats );
|
||||||
}
|
}
|
||||||
void RunContext::benchmarkFailed( StringRef error ) {
|
void RunContext::benchmarkFailed( StringRef error ) {
|
||||||
m_reporter->benchmarkFailed( error );
|
m_impl->reporter->benchmarkFailed( error );
|
||||||
}
|
}
|
||||||
|
|
||||||
void RunContext::pushScopedMessage(MessageInfo const & message) {
|
void RunContext::pushScopedMessage(MessageInfo const & message) {
|
||||||
m_messages.push_back(message);
|
m_impl->messages.push_back(message);
|
||||||
}
|
}
|
||||||
|
|
||||||
void RunContext::popScopedMessage(MessageInfo const & message) {
|
void RunContext::popScopedMessage(MessageInfo const & message) {
|
||||||
m_messages.erase(std::remove(m_messages.begin(), m_messages.end(), message), m_messages.end());
|
m_impl->messages.erase( std::remove( m_impl->messages.begin(),
|
||||||
|
m_impl->messages.end(),
|
||||||
|
message ),
|
||||||
|
m_impl->messages.end() );
|
||||||
}
|
}
|
||||||
|
|
||||||
void RunContext::emplaceUnscopedMessage( MessageBuilder&& builder ) {
|
void RunContext::emplaceUnscopedMessage( MessageBuilder&& builder ) {
|
||||||
m_messageScopes.emplace_back( CATCH_MOVE(builder) );
|
m_impl->messageScopes.emplace_back( CATCH_MOVE(builder) );
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string RunContext::getCurrentTestName() const {
|
std::string RunContext::getCurrentTestName() const {
|
||||||
@ -421,7 +452,7 @@ namespace Catch {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const AssertionResult * RunContext::getLastResult() const {
|
const AssertionResult * RunContext::getLastResult() const {
|
||||||
return &(*m_lastResult);
|
return &(*m_impl->lastResult);
|
||||||
}
|
}
|
||||||
|
|
||||||
void RunContext::exceptionEarlyReported() {
|
void RunContext::exceptionEarlyReported() {
|
||||||
@ -430,7 +461,7 @@ namespace Catch {
|
|||||||
|
|
||||||
void RunContext::handleFatalErrorCondition( StringRef message ) {
|
void RunContext::handleFatalErrorCondition( StringRef message ) {
|
||||||
// First notify reporter that bad things happened
|
// First notify reporter that bad things happened
|
||||||
m_reporter->fatalErrorEncountered(message);
|
m_impl->reporter->fatalErrorEncountered(message);
|
||||||
|
|
||||||
// Don't rebuild the result -- the stringification itself can cause more fatal errors
|
// Don't rebuild the result -- the stringification itself can cause more fatal errors
|
||||||
// Instead, fake a result data.
|
// Instead, fake a result data.
|
||||||
@ -449,20 +480,20 @@ namespace Catch {
|
|||||||
Counts assertions;
|
Counts assertions;
|
||||||
assertions.failed = 1;
|
assertions.failed = 1;
|
||||||
SectionStats testCaseSectionStats(CATCH_MOVE(testCaseSection), assertions, 0, false);
|
SectionStats testCaseSectionStats(CATCH_MOVE(testCaseSection), assertions, 0, false);
|
||||||
m_reporter->sectionEnded(testCaseSectionStats);
|
m_impl->reporter->sectionEnded(testCaseSectionStats);
|
||||||
|
|
||||||
auto const& testInfo = m_activeTestCase->getTestCaseInfo();
|
auto const& testInfo = m_activeTestCase->getTestCaseInfo();
|
||||||
|
|
||||||
Totals deltaTotals;
|
Totals deltaTotals;
|
||||||
deltaTotals.testCases.failed = 1;
|
deltaTotals.testCases.failed = 1;
|
||||||
deltaTotals.assertions.failed = 1;
|
deltaTotals.assertions.failed = 1;
|
||||||
m_reporter->testCaseEnded(TestCaseStats(testInfo,
|
m_impl->reporter->testCaseEnded(TestCaseStats(testInfo,
|
||||||
deltaTotals,
|
deltaTotals,
|
||||||
std::string(),
|
std::string(),
|
||||||
std::string(),
|
std::string(),
|
||||||
false));
|
false));
|
||||||
m_totals.testCases.failed++;
|
m_totals.testCases.failed++;
|
||||||
m_reporter->testRunEnded(TestRunStats(m_runInfo, m_totals, false));
|
m_impl->reporter->testRunEnded(TestRunStats(m_runInfo, m_totals, false));
|
||||||
}
|
}
|
||||||
|
|
||||||
bool RunContext::lastAssertionPassed() {
|
bool RunContext::lastAssertionPassed() {
|
||||||
@ -473,7 +504,7 @@ namespace Catch {
|
|||||||
m_lastAssertionPassed = true;
|
m_lastAssertionPassed = true;
|
||||||
++m_totals.assertions.passed;
|
++m_totals.assertions.passed;
|
||||||
resetAssertionInfo();
|
resetAssertionInfo();
|
||||||
m_messageScopes.clear();
|
m_impl->messageScopes.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool RunContext::aborting() const {
|
bool RunContext::aborting() const {
|
||||||
@ -483,7 +514,7 @@ namespace Catch {
|
|||||||
void RunContext::runCurrentTest(std::string & redirectedCout, std::string & redirectedCerr) {
|
void RunContext::runCurrentTest(std::string & redirectedCout, std::string & redirectedCerr) {
|
||||||
auto const& testCaseInfo = m_activeTestCase->getTestCaseInfo();
|
auto const& testCaseInfo = m_activeTestCase->getTestCaseInfo();
|
||||||
SectionInfo testCaseSection(testCaseInfo.lineInfo, testCaseInfo.name);
|
SectionInfo testCaseSection(testCaseInfo.lineInfo, testCaseInfo.name);
|
||||||
m_reporter->sectionStarting(testCaseSection);
|
m_impl->reporter->sectionStarting(testCaseSection);
|
||||||
Counts prevAssertions = m_totals.assertions;
|
Counts prevAssertions = m_totals.assertions;
|
||||||
double duration = 0;
|
double duration = 0;
|
||||||
m_shouldReportUnexpected = true;
|
m_shouldReportUnexpected = true;
|
||||||
@ -491,7 +522,7 @@ namespace Catch {
|
|||||||
|
|
||||||
Timer timer;
|
Timer timer;
|
||||||
CATCH_TRY {
|
CATCH_TRY {
|
||||||
if (m_reporter->getPreferences().shouldRedirectStdOut) {
|
if (m_impl->reporter->getPreferences().shouldRedirectStdOut) {
|
||||||
#if !defined(CATCH_CONFIG_EXPERIMENTAL_REDIRECT)
|
#if !defined(CATCH_CONFIG_EXPERIMENTAL_REDIRECT)
|
||||||
RedirectedStreams redirectedStreams(redirectedCout, redirectedCerr);
|
RedirectedStreams redirectedStreams(redirectedCout, redirectedCerr);
|
||||||
|
|
||||||
@ -524,18 +555,18 @@ namespace Catch {
|
|||||||
|
|
||||||
m_testCaseTracker->close();
|
m_testCaseTracker->close();
|
||||||
handleUnfinishedSections();
|
handleUnfinishedSections();
|
||||||
m_messages.clear();
|
m_impl->messages.clear();
|
||||||
m_messageScopes.clear();
|
m_impl->messageScopes.clear();
|
||||||
|
|
||||||
SectionStats testCaseSectionStats(CATCH_MOVE(testCaseSection), assertions, duration, missingAssertions);
|
SectionStats testCaseSectionStats(CATCH_MOVE(testCaseSection), assertions, duration, missingAssertions);
|
||||||
m_reporter->sectionEnded(testCaseSectionStats);
|
m_impl->reporter->sectionEnded(testCaseSectionStats);
|
||||||
}
|
}
|
||||||
|
|
||||||
void RunContext::invokeActiveTestCase() {
|
void RunContext::invokeActiveTestCase() {
|
||||||
// We need to engage a handler for signals/structured exceptions
|
// We need to engage a handler for signals/structured exceptions
|
||||||
// before running the tests themselves, or the binary can crash
|
// before running the tests themselves, or the binary can crash
|
||||||
// without failed test being reported.
|
// without failed test being reported.
|
||||||
FatalConditionHandlerGuard _(&m_fatalConditionhandler);
|
FatalConditionHandlerGuard _(&m_impl->fatalConditionhandler);
|
||||||
// We keep having issue where some compilers warn about an unused
|
// We keep having issue where some compilers warn about an unused
|
||||||
// variable, even though the type has non-trivial constructor and
|
// variable, even though the type has non-trivial constructor and
|
||||||
// destructor. This is annoying and ugly, but it makes them stfu.
|
// destructor. This is annoying and ugly, but it makes them stfu.
|
||||||
@ -547,12 +578,12 @@ namespace Catch {
|
|||||||
void RunContext::handleUnfinishedSections() {
|
void RunContext::handleUnfinishedSections() {
|
||||||
// If sections ended prematurely due to an exception we stored their
|
// If sections ended prematurely due to an exception we stored their
|
||||||
// infos here so we can tear them down outside the unwind process.
|
// infos here so we can tear them down outside the unwind process.
|
||||||
for (auto it = m_unfinishedSections.rbegin(),
|
for (auto it = m_impl->unfinishedSections.rbegin(),
|
||||||
itEnd = m_unfinishedSections.rend();
|
itEnd = m_impl->unfinishedSections.rend();
|
||||||
it != itEnd;
|
it != itEnd;
|
||||||
++it)
|
++it)
|
||||||
sectionEnded(CATCH_MOVE(*it));
|
sectionEnded(CATCH_MOVE(*it));
|
||||||
m_unfinishedSections.clear();
|
m_impl->unfinishedSections.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
void RunContext::handleExpr(
|
void RunContext::handleExpr(
|
||||||
@ -560,7 +591,7 @@ namespace Catch {
|
|||||||
ITransientExpression const& expr,
|
ITransientExpression const& expr,
|
||||||
AssertionReaction& reaction
|
AssertionReaction& reaction
|
||||||
) {
|
) {
|
||||||
m_reporter->assertionStarting( info );
|
m_impl->reporter->assertionStarting( info );
|
||||||
|
|
||||||
bool negated = isFalseTest( info.resultDisposition );
|
bool negated = isFalseTest( info.resultDisposition );
|
||||||
bool result = expr.getResult() != negated;
|
bool result = expr.getResult() != negated;
|
||||||
@ -599,7 +630,7 @@ namespace Catch {
|
|||||||
StringRef message,
|
StringRef message,
|
||||||
AssertionReaction& reaction
|
AssertionReaction& reaction
|
||||||
) {
|
) {
|
||||||
m_reporter->assertionStarting( info );
|
m_impl->reporter->assertionStarting( info );
|
||||||
|
|
||||||
m_lastAssertionInfo = info;
|
m_lastAssertionInfo = info;
|
||||||
|
|
||||||
@ -669,7 +700,7 @@ namespace Catch {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
IResultCapture& getResultCapture() {
|
RunContext& getResultCapture() {
|
||||||
if (auto* capture = getCurrentContext().getResultCapture())
|
if (auto* capture = getCurrentContext().getResultCapture())
|
||||||
return *capture;
|
return *capture;
|
||||||
else
|
else
|
||||||
|
@ -8,36 +8,60 @@
|
|||||||
#ifndef CATCH_RUN_CONTEXT_HPP_INCLUDED
|
#ifndef CATCH_RUN_CONTEXT_HPP_INCLUDED
|
||||||
#define CATCH_RUN_CONTEXT_HPP_INCLUDED
|
#define CATCH_RUN_CONTEXT_HPP_INCLUDED
|
||||||
|
|
||||||
#include <catch2/interfaces/catch_interfaces_reporter.hpp>
|
#include <catch2/catch_test_run_info.hpp>
|
||||||
#include <catch2/internal/catch_test_registry.hpp>
|
|
||||||
#include <catch2/internal/catch_fatal_condition_handler.hpp>
|
|
||||||
#include <catch2/catch_test_case_info.hpp>
|
|
||||||
#include <catch2/catch_message.hpp>
|
|
||||||
#include <catch2/catch_totals.hpp>
|
#include <catch2/catch_totals.hpp>
|
||||||
#include <catch2/internal/catch_test_case_tracker.hpp>
|
|
||||||
#include <catch2/catch_assertion_info.hpp>
|
#include <catch2/catch_assertion_info.hpp>
|
||||||
#include <catch2/catch_assertion_result.hpp>
|
#include <catch2/internal/catch_benchmark_stats_fwd.hpp>
|
||||||
#include <catch2/internal/catch_optional.hpp>
|
#include <catch2/internal/catch_unique_ptr.hpp>
|
||||||
#include <catch2/internal/catch_move_and_forward.hpp>
|
|
||||||
|
|
||||||
#include <string>
|
#include <string>
|
||||||
|
#include <chrono>
|
||||||
|
|
||||||
namespace Catch {
|
namespace Catch {
|
||||||
|
|
||||||
|
class TestCaseHandle;
|
||||||
|
class AssertionResult;
|
||||||
|
struct AssertionInfo;
|
||||||
|
struct SectionInfo;
|
||||||
|
struct SectionEndInfo;
|
||||||
|
struct MessageInfo;
|
||||||
|
struct MessageBuilder;
|
||||||
|
struct Counts;
|
||||||
|
struct AssertionReaction;
|
||||||
|
struct SourceLineInfo;
|
||||||
|
|
||||||
|
class ITransientExpression;
|
||||||
|
class IGeneratorTracker;
|
||||||
|
|
||||||
|
struct BenchmarkInfo;
|
||||||
|
|
||||||
|
namespace Generators {
|
||||||
|
class GeneratorUntypedBase;
|
||||||
|
using GeneratorBasePtr = Catch::Detail::unique_ptr<GeneratorUntypedBase>;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
class IGeneratorTracker;
|
class IGeneratorTracker;
|
||||||
class IConfig;
|
class IConfig;
|
||||||
|
// Fixme: Take out the namespace?
|
||||||
|
namespace TestCaseTracking {
|
||||||
|
class ITracker;
|
||||||
|
}
|
||||||
|
using TestCaseTracking::ITracker;
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////
|
class IEventListener;
|
||||||
|
using IEventListenerPtr = Detail::unique_ptr<IEventListener>;
|
||||||
class RunContext final : public IResultCapture {
|
|
||||||
|
|
||||||
|
class RunContext {
|
||||||
|
struct RunContextImpl;
|
||||||
|
Detail::unique_ptr<RunContextImpl> m_impl;
|
||||||
public:
|
public:
|
||||||
RunContext( RunContext const& ) = delete;
|
RunContext( RunContext const& ) = delete;
|
||||||
RunContext& operator =( RunContext const& ) = delete;
|
RunContext& operator =( RunContext const& ) = delete;
|
||||||
|
|
||||||
explicit RunContext( IConfig const* _config, IEventListenerPtr&& reporter );
|
explicit RunContext( IConfig const* _config, IEventListenerPtr&& reporter );
|
||||||
|
|
||||||
~RunContext() override;
|
~RunContext();
|
||||||
|
|
||||||
Totals runTest(TestCaseHandle const& testCase);
|
Totals runTest(TestCaseHandle const& testCase);
|
||||||
|
|
||||||
@ -47,63 +71,63 @@ namespace Catch {
|
|||||||
void handleExpr
|
void handleExpr
|
||||||
( AssertionInfo const& info,
|
( AssertionInfo const& info,
|
||||||
ITransientExpression const& expr,
|
ITransientExpression const& expr,
|
||||||
AssertionReaction& reaction ) override;
|
AssertionReaction& reaction );
|
||||||
void handleMessage
|
void handleMessage
|
||||||
( AssertionInfo const& info,
|
( AssertionInfo const& info,
|
||||||
ResultWas::OfType resultType,
|
ResultWas::OfType resultType,
|
||||||
StringRef message,
|
StringRef message,
|
||||||
AssertionReaction& reaction ) override;
|
AssertionReaction& reaction );
|
||||||
void handleUnexpectedExceptionNotThrown
|
void handleUnexpectedExceptionNotThrown
|
||||||
( AssertionInfo const& info,
|
( AssertionInfo const& info,
|
||||||
AssertionReaction& reaction ) override;
|
AssertionReaction& reaction );
|
||||||
void handleUnexpectedInflightException
|
void handleUnexpectedInflightException
|
||||||
( AssertionInfo const& info,
|
( AssertionInfo const& info,
|
||||||
std::string&& message,
|
std::string&& message,
|
||||||
AssertionReaction& reaction ) override;
|
AssertionReaction& reaction );
|
||||||
void handleIncomplete
|
void handleIncomplete
|
||||||
( AssertionInfo const& info ) override;
|
( AssertionInfo const& info );
|
||||||
void handleNonExpr
|
void handleNonExpr
|
||||||
( AssertionInfo const &info,
|
( AssertionInfo const &info,
|
||||||
ResultWas::OfType resultType,
|
ResultWas::OfType resultType,
|
||||||
AssertionReaction &reaction ) override;
|
AssertionReaction &reaction );
|
||||||
|
|
||||||
bool sectionStarted( StringRef sectionName,
|
bool sectionStarted( StringRef sectionName,
|
||||||
SourceLineInfo const& sectionLineInfo,
|
SourceLineInfo const& sectionLineInfo,
|
||||||
Counts& assertions ) override;
|
Counts& assertions );
|
||||||
|
|
||||||
void sectionEnded( SectionEndInfo&& endInfo ) override;
|
void sectionEnded( SectionEndInfo&& endInfo );
|
||||||
void sectionEndedEarly( SectionEndInfo&& endInfo ) override;
|
void sectionEndedEarly( SectionEndInfo&& endInfo );
|
||||||
|
|
||||||
IGeneratorTracker*
|
IGeneratorTracker*
|
||||||
acquireGeneratorTracker( StringRef generatorName,
|
acquireGeneratorTracker( StringRef generatorName,
|
||||||
SourceLineInfo const& lineInfo ) override;
|
SourceLineInfo const& lineInfo );
|
||||||
IGeneratorTracker* createGeneratorTracker(
|
IGeneratorTracker* createGeneratorTracker(
|
||||||
StringRef generatorName,
|
StringRef generatorName,
|
||||||
SourceLineInfo lineInfo,
|
SourceLineInfo lineInfo,
|
||||||
Generators::GeneratorBasePtr&& generator ) override;
|
Generators::GeneratorBasePtr&& generator );
|
||||||
|
|
||||||
|
|
||||||
void benchmarkPreparing( StringRef name ) override;
|
void benchmarkPreparing( StringRef name );
|
||||||
void benchmarkStarting( BenchmarkInfo const& info ) override;
|
void benchmarkStarting( BenchmarkInfo const& info );
|
||||||
void benchmarkEnded( BenchmarkStats<> const& stats ) override;
|
void benchmarkEnded( BenchmarkStats<> const& stats );
|
||||||
void benchmarkFailed( StringRef error ) override;
|
void benchmarkFailed( StringRef error );
|
||||||
|
|
||||||
void pushScopedMessage( MessageInfo const& message ) override;
|
void pushScopedMessage( MessageInfo const& message );
|
||||||
void popScopedMessage( MessageInfo const& message ) override;
|
void popScopedMessage( MessageInfo const& message );
|
||||||
|
|
||||||
void emplaceUnscopedMessage( MessageBuilder&& builder ) override;
|
void emplaceUnscopedMessage( MessageBuilder&& builder );
|
||||||
|
|
||||||
std::string getCurrentTestName() const override;
|
std::string getCurrentTestName() const;
|
||||||
|
|
||||||
const AssertionResult* getLastResult() const override;
|
const AssertionResult* getLastResult() const;
|
||||||
|
|
||||||
void exceptionEarlyReported() override;
|
void exceptionEarlyReported();
|
||||||
|
|
||||||
void handleFatalErrorCondition( StringRef message ) override;
|
void handleFatalErrorCondition( StringRef message );
|
||||||
|
|
||||||
bool lastAssertionPassed() override;
|
bool lastAssertionPassed();
|
||||||
|
|
||||||
void assertionPassed() override;
|
void assertionPassed();
|
||||||
|
|
||||||
public:
|
public:
|
||||||
// !TBD We need to do this another way!
|
// !TBD We need to do this another way!
|
||||||
@ -133,18 +157,10 @@ namespace Catch {
|
|||||||
TestRunInfo m_runInfo;
|
TestRunInfo m_runInfo;
|
||||||
TestCaseHandle const* m_activeTestCase = nullptr;
|
TestCaseHandle const* m_activeTestCase = nullptr;
|
||||||
ITracker* m_testCaseTracker = nullptr;
|
ITracker* m_testCaseTracker = nullptr;
|
||||||
Optional<AssertionResult> m_lastResult;
|
|
||||||
|
|
||||||
IConfig const* m_config;
|
IConfig const* m_config;
|
||||||
Totals m_totals;
|
Totals m_totals;
|
||||||
IEventListenerPtr m_reporter;
|
|
||||||
std::vector<MessageInfo> m_messages;
|
|
||||||
std::vector<ScopedMessage> m_messageScopes; /* Keeps owners of so-called unscoped messages. */
|
|
||||||
AssertionInfo m_lastAssertionInfo;
|
AssertionInfo m_lastAssertionInfo;
|
||||||
std::vector<SectionEndInfo> m_unfinishedSections;
|
|
||||||
std::vector<ITracker*> m_activeSections;
|
|
||||||
TrackerContext m_trackerContext;
|
|
||||||
FatalConditionHandler m_fatalConditionhandler;
|
|
||||||
bool m_lastAssertionPassed = false;
|
bool m_lastAssertionPassed = false;
|
||||||
bool m_shouldReportUnexpected = true;
|
bool m_shouldReportUnexpected = true;
|
||||||
bool m_includeSuccessfulResults;
|
bool m_includeSuccessfulResults;
|
||||||
@ -152,6 +168,9 @@ namespace Catch {
|
|||||||
|
|
||||||
void seedRng(IConfig const& config);
|
void seedRng(IConfig const& config);
|
||||||
unsigned int rngSeed();
|
unsigned int rngSeed();
|
||||||
|
|
||||||
|
RunContext& getResultCapture();
|
||||||
|
|
||||||
} // end namespace Catch
|
} // end namespace Catch
|
||||||
|
|
||||||
#endif // CATCH_RUN_CONTEXT_HPP_INCLUDED
|
#endif // CATCH_RUN_CONTEXT_HPP_INCLUDED
|
||||||
|
@ -10,7 +10,6 @@
|
|||||||
|
|
||||||
#include <catch2/catch_user_config.hpp>
|
#include <catch2/catch_user_config.hpp>
|
||||||
#include <catch2/internal/catch_assertion_handler.hpp>
|
#include <catch2/internal/catch_assertion_handler.hpp>
|
||||||
#include <catch2/interfaces/catch_interfaces_capture.hpp>
|
|
||||||
#include <catch2/internal/catch_stringref.hpp>
|
#include <catch2/internal/catch_stringref.hpp>
|
||||||
#include <catch2/internal/catch_source_line_info.hpp>
|
#include <catch2/internal/catch_source_line_info.hpp>
|
||||||
|
|
||||||
|
@ -56,7 +56,6 @@ internal_headers = [
|
|||||||
'generators/catch_generators_random.hpp',
|
'generators/catch_generators_random.hpp',
|
||||||
'generators/catch_generators_range.hpp',
|
'generators/catch_generators_range.hpp',
|
||||||
'interfaces/catch_interfaces_all.hpp',
|
'interfaces/catch_interfaces_all.hpp',
|
||||||
'interfaces/catch_interfaces_capture.hpp',
|
|
||||||
'interfaces/catch_interfaces_config.hpp',
|
'interfaces/catch_interfaces_config.hpp',
|
||||||
'interfaces/catch_interfaces_exception.hpp',
|
'interfaces/catch_interfaces_exception.hpp',
|
||||||
'interfaces/catch_interfaces_generatortracker.hpp',
|
'interfaces/catch_interfaces_generatortracker.hpp',
|
||||||
@ -64,6 +63,7 @@ internal_headers = [
|
|||||||
'interfaces/catch_interfaces_reporter_factory.hpp',
|
'interfaces/catch_interfaces_reporter_factory.hpp',
|
||||||
'interfaces/catch_interfaces_testcase.hpp',
|
'interfaces/catch_interfaces_testcase.hpp',
|
||||||
'internal/catch_assertion_handler.hpp',
|
'internal/catch_assertion_handler.hpp',
|
||||||
|
'internal/catch_benchmark_stats_fwd.hpp',
|
||||||
'internal/catch_case_insensitive_comparisons.hpp',
|
'internal/catch_case_insensitive_comparisons.hpp',
|
||||||
'internal/catch_case_sensitive.hpp',
|
'internal/catch_case_sensitive.hpp',
|
||||||
'internal/catch_clara.hpp',
|
'internal/catch_clara.hpp',
|
||||||
@ -165,6 +165,7 @@ internal_headers = [
|
|||||||
'catch_template_test_macros.hpp',
|
'catch_template_test_macros.hpp',
|
||||||
'catch_test_case_info.hpp',
|
'catch_test_case_info.hpp',
|
||||||
'catch_test_macros.hpp',
|
'catch_test_macros.hpp',
|
||||||
|
'catch_test_run_info.hpp',
|
||||||
'catch_test_spec.hpp',
|
'catch_test_spec.hpp',
|
||||||
'catch_timer.hpp',
|
'catch_timer.hpp',
|
||||||
'catch_tostring.hpp',
|
'catch_tostring.hpp',
|
||||||
@ -178,7 +179,6 @@ internal_sources = files(
|
|||||||
'generators/catch_generator_exception.cpp',
|
'generators/catch_generator_exception.cpp',
|
||||||
'generators/catch_generators.cpp',
|
'generators/catch_generators.cpp',
|
||||||
'generators/catch_generators_random.cpp',
|
'generators/catch_generators_random.cpp',
|
||||||
'interfaces/catch_interfaces_capture.cpp',
|
|
||||||
'interfaces/catch_interfaces_config.cpp',
|
'interfaces/catch_interfaces_config.cpp',
|
||||||
'interfaces/catch_interfaces_exception.cpp',
|
'interfaces/catch_interfaces_exception.cpp',
|
||||||
'interfaces/catch_interfaces_generatortracker.cpp',
|
'interfaces/catch_interfaces_generatortracker.cpp',
|
||||||
|
Loading…
Reference in New Issue
Block a user