Split the NonCopyable helper out of catch_common.hpp

This commit is contained in:
Martin Hořeňovský 2020-08-18 11:35:58 +02:00
parent c1bb699d45
commit e7eb749815
No known key found for this signature in database
GPG Key ID: DE48307B8B0D381A
15 changed files with 53 additions and 31 deletions

View File

@ -38,6 +38,7 @@ set(INTERNAL_HEADERS
${SOURCES_DIR}/matchers/internal/catch_matchers_impl.hpp ${SOURCES_DIR}/matchers/internal/catch_matchers_impl.hpp
${SOURCES_DIR}/internal/catch_console_width.hpp ${SOURCES_DIR}/internal/catch_console_width.hpp
${SOURCES_DIR}/internal/catch_container_nonmembers.hpp ${SOURCES_DIR}/internal/catch_container_nonmembers.hpp
${SOURCES_DIR}/internal/catch_noncopyable.hpp
${SOURCES_DIR}/catch_approx.hpp ${SOURCES_DIR}/catch_approx.hpp
${SOURCES_DIR}/internal/catch_assertion_handler.hpp ${SOURCES_DIR}/internal/catch_assertion_handler.hpp
${SOURCES_DIR}/catch_assertion_info.hpp ${SOURCES_DIR}/catch_assertion_info.hpp

View File

@ -60,6 +60,7 @@
#include <catch2/internal/catch_list.hpp> #include <catch2/internal/catch_list.hpp>
#include <catch2/internal/catch_message_info.hpp> #include <catch2/internal/catch_message_info.hpp>
#include <catch2/internal/catch_meta.hpp> #include <catch2/internal/catch_meta.hpp>
#include <catch2/internal/catch_noncopyable.hpp>
#include <catch2/internal/catch_option.hpp> #include <catch2/internal/catch_option.hpp>
#include <catch2/internal/catch_output_redirect.hpp> #include <catch2/internal/catch_output_redirect.hpp>
#include <catch2/internal/catch_platform.hpp> #include <catch2/internal/catch_platform.hpp>

View File

@ -18,13 +18,15 @@
#include <catch2/internal/catch_singletons.hpp> #include <catch2/internal/catch_singletons.hpp>
#include <catch2/internal/catch_enum_values_registry.hpp> #include <catch2/internal/catch_enum_values_registry.hpp>
#include <catch2/catch_test_case_info.hpp> #include <catch2/catch_test_case_info.hpp>
#include <catch2/internal/catch_noncopyable.hpp>
namespace Catch { namespace Catch {
namespace { namespace {
class RegistryHub : public IRegistryHub, public IMutableRegistryHub, class RegistryHub : public IRegistryHub,
private NonCopyable { public IMutableRegistryHub,
private Detail::NonCopyable {
public: // IRegistryHub public: // IRegistryHub
RegistryHub() = default; RegistryHub() = default;

View File

@ -9,12 +9,14 @@
#define TWOBLUECUBES_CATCH_RUNNER_HPP_INCLUDED #define TWOBLUECUBES_CATCH_RUNNER_HPP_INCLUDED
#include <catch2/internal/catch_commandline.hpp> #include <catch2/internal/catch_commandline.hpp>
#include <catch2/internal/catch_noncopyable.hpp>
#include <catch2/catch_config.hpp> #include <catch2/catch_config.hpp>
#include <catch2/internal/catch_unique_ptr.hpp> #include <catch2/internal/catch_unique_ptr.hpp>
#include <catch2/internal/catch_compiler_capabilities.hpp>
namespace Catch { namespace Catch {
class Session : NonCopyable { class Session : Detail::NonCopyable {
public: public:
Session(); Session();

View File

@ -9,6 +9,7 @@
#define TWOBLUECUBES_CATCH_TEST_CASE_INFO_H_INCLUDED #define TWOBLUECUBES_CATCH_TEST_CASE_INFO_H_INCLUDED
#include <catch2/internal/catch_common.hpp> #include <catch2/internal/catch_common.hpp>
#include <catch2/internal/catch_noncopyable.hpp>
#include <catch2/internal/catch_stringref.hpp> #include <catch2/internal/catch_stringref.hpp>
#include <catch2/internal/catch_test_registry.hpp> #include <catch2/internal/catch_test_registry.hpp>
#include <catch2/internal/catch_unique_ptr.hpp> #include <catch2/internal/catch_unique_ptr.hpp>
@ -44,7 +45,7 @@ namespace Catch {
}; };
struct TestCaseInfo : NonCopyable { struct TestCaseInfo : Detail::NonCopyable {
TestCaseInfo(std::string const& _className, TestCaseInfo(std::string const& _className,
NameAndTags const& _tags, NameAndTags const& _tags,

View File

@ -8,7 +8,7 @@
#ifndef TWOBLUECUBES_CATCH_INTERFACES_CONFIG_H_INCLUDED #ifndef TWOBLUECUBES_CATCH_INTERFACES_CONFIG_H_INCLUDED
#define TWOBLUECUBES_CATCH_INTERFACES_CONFIG_H_INCLUDED #define TWOBLUECUBES_CATCH_INTERFACES_CONFIG_H_INCLUDED
#include <catch2/internal/catch_common.hpp> #include <catch2/internal/catch_noncopyable.hpp>
#include <chrono> #include <chrono>
#include <iosfwd> #include <iosfwd>
@ -53,7 +53,7 @@ namespace Catch {
class TestSpec; class TestSpec;
struct IConfig : NonCopyable { struct IConfig : Detail::NonCopyable {
virtual ~IConfig(); virtual ~IConfig();

View File

@ -8,7 +8,6 @@
#ifndef TWOBLUECUBES_CATCH_INTERFACES_REGISTRY_HUB_H_INCLUDED #ifndef TWOBLUECUBES_CATCH_INTERFACES_REGISTRY_HUB_H_INCLUDED
#define TWOBLUECUBES_CATCH_INTERFACES_REGISTRY_HUB_H_INCLUDED #define TWOBLUECUBES_CATCH_INTERFACES_REGISTRY_HUB_H_INCLUDED
#include <catch2/internal/catch_common.hpp>
#include <catch2/internal/catch_unique_ptr.hpp> #include <catch2/internal/catch_unique_ptr.hpp>
#include <string> #include <string>
@ -25,6 +24,7 @@ namespace Catch {
struct ITagAliasRegistry; struct ITagAliasRegistry;
struct ITestInvoker; struct ITestInvoker;
struct IMutableEnumValuesRegistry; struct IMutableEnumValuesRegistry;
struct SourceLineInfo;
class StartupExceptionRegistry; class StartupExceptionRegistry;

View File

@ -30,6 +30,8 @@
# endif # endif
#endif #endif
#include <catch2/internal/catch_noncopyable.hpp>
#include <cassert> #include <cassert>
#include <cctype> #include <cctype>
#include <memory> #include <memory>
@ -286,15 +288,7 @@ namespace Catch {
} }
#endif // CLARA_CONFIG_OPTIONAL_TYPE #endif // CLARA_CONFIG_OPTIONAL_TYPE
struct NonCopyable { struct BoundRef : Catch::Detail::NonCopyable {
NonCopyable() = default;
NonCopyable( NonCopyable const& ) = delete;
NonCopyable( NonCopyable&& ) = delete;
NonCopyable& operator=( NonCopyable const& ) = delete;
NonCopyable& operator=( NonCopyable&& ) = delete;
};
struct BoundRef : NonCopyable {
virtual ~BoundRef() = default; virtual ~BoundRef() = default;
virtual auto isContainer() const -> bool { return false; } virtual auto isContainer() const -> bool { return false; }
virtual auto isFlag() const -> bool { return false; } virtual auto isFlag() const -> bool { return false; }

View File

@ -32,15 +32,6 @@ namespace Catch {
No No
}; }; }; };
class NonCopyable {
NonCopyable( NonCopyable const& ) = delete;
NonCopyable( NonCopyable && ) = delete;
NonCopyable& operator = ( NonCopyable const& ) = delete;
NonCopyable& operator = ( NonCopyable && ) = delete;
protected:
NonCopyable() noexcept = default;
};
struct SourceLineInfo { struct SourceLineInfo {
SourceLineInfo() = delete; SourceLineInfo() = delete;

View File

@ -6,12 +6,12 @@
* 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)
*/ */
#include <catch2/internal/catch_context.hpp> #include <catch2/internal/catch_context.hpp>
#include <catch2/internal/catch_common.hpp> #include <catch2/internal/catch_noncopyable.hpp>
#include <catch2/internal/catch_random_number_generator.hpp> #include <catch2/internal/catch_random_number_generator.hpp>
namespace Catch { namespace Catch {
class Context : public IMutableContext, NonCopyable { class Context : public IMutableContext, private Detail::NonCopyable {
public: // IContext public: // IContext
IResultCapture* getResultCapture() override { IResultCapture* getResultCapture() override {

View File

@ -0,0 +1,21 @@
#ifndef CATCH_NONCOPYABLE_HPP_INCLUDED
#define CATCH_NONCOPYABLE_HPP_INCLUDED
namespace Catch {
namespace Detail {
//! Deriving classes become noncopyable and nonmovable
class NonCopyable {
NonCopyable( NonCopyable const& ) = delete;
NonCopyable( NonCopyable&& ) = delete;
NonCopyable& operator=( NonCopyable const& ) = delete;
NonCopyable& operator=( NonCopyable&& ) = delete;
protected:
NonCopyable() noexcept = default;
};
} // namespace Detail
} // namespace Catch
#endif // CATCH_NONCOPYABLE_HPP_INCLUDED

View File

@ -9,6 +9,7 @@
#define TWOBLUECUBES_CATCH_SECTION_H_INCLUDED #define TWOBLUECUBES_CATCH_SECTION_H_INCLUDED
#include <catch2/internal/catch_compiler_capabilities.hpp> #include <catch2/internal/catch_compiler_capabilities.hpp>
#include <catch2/internal/catch_noncopyable.hpp>
#include <catch2/catch_section_info.hpp> #include <catch2/catch_section_info.hpp>
#include <catch2/catch_timer.hpp> #include <catch2/catch_timer.hpp>
#include <catch2/catch_totals.hpp> #include <catch2/catch_totals.hpp>
@ -17,7 +18,7 @@
namespace Catch { namespace Catch {
class Section : NonCopyable { class Section : Detail::NonCopyable {
public: public:
Section( SectionInfo&& info ); Section( SectionInfo&& info );
~Section(); ~Section();

View File

@ -9,7 +9,7 @@
#ifndef TWOBLUECUBES_CATCH_STREAM_H_INCLUDED #ifndef TWOBLUECUBES_CATCH_STREAM_H_INCLUDED
#define TWOBLUECUBES_CATCH_STREAM_H_INCLUDED #define TWOBLUECUBES_CATCH_STREAM_H_INCLUDED
#include <catch2/internal/catch_common.hpp> #include <catch2/internal/catch_noncopyable.hpp>
#include <iosfwd> #include <iosfwd>
#include <cstddef> #include <cstddef>
@ -30,7 +30,7 @@ namespace Catch {
auto makeStream( StringRef const &filename ) -> IStream const*; auto makeStream( StringRef const &filename ) -> IStream const*;
class ReusableStringStream : NonCopyable { class ReusableStringStream : Detail::NonCopyable {
std::size_t m_index; std::size_t m_index;
std::ostream* m_oss; std::ostream* m_oss;
public: public:

View File

@ -9,6 +9,7 @@
#define TWOBLUECUBES_CATCH_TEST_REGISTRY_HPP_INCLUDED #define TWOBLUECUBES_CATCH_TEST_REGISTRY_HPP_INCLUDED
#include <catch2/internal/catch_common.hpp> #include <catch2/internal/catch_common.hpp>
#include <catch2/internal/catch_noncopyable.hpp>
#include <catch2/interfaces/catch_interfaces_testcase.hpp> #include <catch2/interfaces/catch_interfaces_testcase.hpp>
#include <catch2/internal/catch_compiler_capabilities.hpp> #include <catch2/internal/catch_compiler_capabilities.hpp>
#include <catch2/internal/catch_stringref.hpp> #include <catch2/internal/catch_stringref.hpp>
@ -52,7 +53,7 @@ struct NameAndTags {
StringRef tags; StringRef tags;
}; };
struct AutoReg : NonCopyable { struct AutoReg : Detail::NonCopyable {
AutoReg( Detail::unique_ptr<ITestInvoker> invoker, SourceLineInfo const& lineInfo, StringRef const& classOrMethod, NameAndTags const& nameAndTags ) noexcept; AutoReg( Detail::unique_ptr<ITestInvoker> invoker, SourceLineInfo const& lineInfo, StringRef const& classOrMethod, NameAndTags const& nameAndTags ) noexcept;
}; };

View File

@ -11,6 +11,13 @@
#include <catch2/internal/catch_stream.hpp> #include <catch2/internal/catch_stream.hpp>
#include <catch2/internal/catch_compiler_capabilities.hpp> #include <catch2/internal/catch_compiler_capabilities.hpp>
// FixMe: Without this include (and something inside it), MSVC goes crazy
// and reports that calls to XmlEncode's op << are ambiguous between
// the declaration and definition.
// It also has to be in the header.
#include <catch2/internal/catch_common.hpp>
#include <vector> #include <vector>
namespace Catch { namespace Catch {