| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | #ifndef TWOBLUECUBES_CATCH_CONTEXT_H_INCLUDED |
| | #define TWOBLUECUBES_CATCH_CONTEXT_H_INCLUDED |
| |
|
| | #include <memory> |
| |
|
| | namespace Catch { |
| |
|
| | struct IResultCapture; |
| | struct IRunner; |
| | struct IConfig; |
| | struct IMutableContext; |
| |
|
| | using IConfigPtr = std::shared_ptr<IConfig const>; |
| |
|
| | struct IContext |
| | { |
| | virtual ~IContext(); |
| |
|
| | virtual IResultCapture* getResultCapture() = 0; |
| | virtual IRunner* getRunner() = 0; |
| | virtual IConfigPtr const& getConfig() const = 0; |
| | }; |
| |
|
| | struct IMutableContext : IContext |
| | { |
| | virtual ~IMutableContext(); |
| | virtual void setResultCapture( IResultCapture* resultCapture ) = 0; |
| | virtual void setRunner( IRunner* runner ) = 0; |
| | virtual void setConfig( IConfigPtr const& config ) = 0; |
| |
|
| | private: |
| | static IMutableContext *currentContext; |
| | friend IMutableContext& getCurrentMutableContext(); |
| | friend void cleanUpContext(); |
| | static void createContext(); |
| | }; |
| |
|
| | inline IMutableContext& getCurrentMutableContext() |
| | { |
| | if( !IMutableContext::currentContext ) |
| | IMutableContext::createContext(); |
| | |
| | return *IMutableContext::currentContext; |
| | } |
| |
|
| | inline IContext& getCurrentContext() |
| | { |
| | return getCurrentMutableContext(); |
| | } |
| |
|
| | void cleanUpContext(); |
| |
|
| | class SimplePcg32; |
| | SimplePcg32& rng(); |
| | } |
| |
|
| | #endif |
| |
|