2020-08-30 15:43:45 +02:00
|
|
|
|
|
|
|
|
// Copyright Catch2 Authors
|
|
|
|
|
// Distributed under the Boost Software License, Version 1.0.
|
2022-10-28 11:22:53 +02:00
|
|
|
// (See accompanying file LICENSE.txt or copy at
|
2020-08-30 15:43:45 +02:00
|
|
|
// https://www.boost.org/LICENSE_1_0.txt)
|
|
|
|
|
|
|
|
|
|
// SPDX-License-Identifier: BSL-1.0
|
2020-08-29 20:48:32 +02:00
|
|
|
#ifndef CATCH_CONTEXT_HPP_INCLUDED
|
|
|
|
|
#define CATCH_CONTEXT_HPP_INCLUDED
|
2012-05-10 07:58:48 +01:00
|
|
|
|
2022-09-17 14:58:52 +02:00
|
|
|
#include <catch2/internal/catch_compiler_capabilities.hpp>
|
|
|
|
|
|
2012-05-15 23:58:23 +01:00
|
|
|
namespace Catch {
|
|
|
|
|
|
2022-04-11 00:00:19 +02:00
|
|
|
class IResultCapture;
|
|
|
|
|
class IConfig;
|
2012-05-10 07:58:48 +01:00
|
|
|
|
2022-04-11 00:00:19 +02:00
|
|
|
class IContext {
|
|
|
|
|
public:
|
2021-05-12 23:31:08 +02:00
|
|
|
virtual ~IContext(); // = default
|
2013-07-03 19:14:59 +01:00
|
|
|
|
2014-05-20 18:49:28 +01:00
|
|
|
virtual IResultCapture* getResultCapture() = 0;
|
2020-05-19 15:40:32 +02:00
|
|
|
virtual IConfig const* getConfig() const = 0;
|
2012-05-21 18:52:09 +01:00
|
|
|
};
|
2013-05-28 18:39:32 +01:00
|
|
|
|
2022-04-11 00:00:19 +02:00
|
|
|
class IMutableContext : public IContext {
|
|
|
|
|
public:
|
2022-05-02 10:45:02 +02:00
|
|
|
~IMutableContext() override; // = default
|
2012-05-21 18:52:09 +01:00
|
|
|
virtual void setResultCapture( IResultCapture* resultCapture ) = 0;
|
2020-05-19 18:02:05 +02:00
|
|
|
virtual void setConfig( IConfig const* config ) = 0;
|
2017-11-17 14:55:30 -06:00
|
|
|
|
|
|
|
|
private:
|
2022-09-17 14:58:52 +02:00
|
|
|
CATCH_EXPORT static IMutableContext* currentContext;
|
2017-11-17 14:55:30 -06:00
|
|
|
friend IMutableContext& getCurrentMutableContext();
|
|
|
|
|
friend void cleanUpContext();
|
|
|
|
|
static void createContext();
|
2012-05-21 18:52:09 +01:00
|
|
|
};
|
|
|
|
|
|
2017-11-17 14:55:30 -06:00
|
|
|
inline IMutableContext& getCurrentMutableContext()
|
|
|
|
|
{
|
|
|
|
|
if( !IMutableContext::currentContext )
|
|
|
|
|
IMutableContext::createContext();
|
2019-08-24 17:42:16 -04:00
|
|
|
// NOLINTNEXTLINE(clang-analyzer-core.uninitialized.UndefReturn)
|
2017-11-17 14:55:30 -06:00
|
|
|
return *IMutableContext::currentContext;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
inline IContext& getCurrentContext()
|
|
|
|
|
{
|
|
|
|
|
return getCurrentMutableContext();
|
|
|
|
|
}
|
|
|
|
|
|
2012-08-08 08:33:54 +01:00
|
|
|
void cleanUpContext();
|
2019-10-06 21:47:54 +02:00
|
|
|
|
|
|
|
|
class SimplePcg32;
|
2022-05-17 15:37:14 +02:00
|
|
|
SimplePcg32& sharedRng();
|
2012-05-10 07:58:48 +01:00
|
|
|
}
|
|
|
|
|
|
2020-08-29 20:48:32 +02:00
|
|
|
#endif // CATCH_CONTEXT_HPP_INCLUDED
|