diff options
| author | Szczepan Zalega <szczepan@nitrokey.com> | 2017-12-22 16:53:56 +0100 | 
|---|---|---|
| committer | Szczepan Zalega <szczepan@nitrokey.com> | 2017-12-22 16:53:56 +0100 | 
| commit | 48b3d82ffe1ed19db9ba3cf7e6536ecf92e27391 (patch) | |
| tree | 83645ddf58fd9514e1fe6d566839bb2747ee4706 /include/internal/catch_registry_hub.hpp | |
| download | libnitrokey-48b3d82ffe1ed19db9ba3cf7e6536ecf92e27391.tar.gz libnitrokey-48b3d82ffe1ed19db9ba3cf7e6536ecf92e27391.tar.bz2  | |
Squashed 'unittest/Catch/' content from commit ae5ee2cf
git-subtree-dir: unittest/Catch
git-subtree-split: ae5ee2cf63d6d67bd1369b512d2a7b60b571c907
Diffstat (limited to 'include/internal/catch_registry_hub.hpp')
| -rw-r--r-- | include/internal/catch_registry_hub.hpp | 86 | 
1 files changed, 86 insertions, 0 deletions
diff --git a/include/internal/catch_registry_hub.hpp b/include/internal/catch_registry_hub.hpp new file mode 100644 index 0000000..35293bf --- /dev/null +++ b/include/internal/catch_registry_hub.hpp @@ -0,0 +1,86 @@ +/* + *  Created by Phil on 5/8/2012. + *  Copyright 2012 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_REGISTRY_HUB_HPP_INCLUDED +#define TWOBLUECUBES_CATCH_REGISTRY_HUB_HPP_INCLUDED + +#include "catch_interfaces_registry_hub.h" + +#include "catch_test_case_registry_impl.hpp" +#include "catch_reporter_registry.hpp" +#include "catch_exception_translator_registry.hpp" + +namespace Catch { + +    namespace { + +        class RegistryHub : public IRegistryHub, public IMutableRegistryHub { + +            RegistryHub( RegistryHub const& ); +            void operator=( RegistryHub const& ); + +        public: // IRegistryHub +            RegistryHub() { +            } +            virtual IReporterRegistry const& getReporterRegistry() const CATCH_OVERRIDE { +                return m_reporterRegistry; +            } +            virtual ITestCaseRegistry const& getTestCaseRegistry() const CATCH_OVERRIDE { +                return m_testCaseRegistry; +            } +            virtual IExceptionTranslatorRegistry& getExceptionTranslatorRegistry() CATCH_OVERRIDE { +                return m_exceptionTranslatorRegistry; +            } + +        public: // IMutableRegistryHub +            virtual void registerReporter( std::string const& name, Ptr<IReporterFactory> const& factory ) CATCH_OVERRIDE { +                m_reporterRegistry.registerReporter( name, factory ); +            } +            virtual void registerListener( Ptr<IReporterFactory> const& factory ) CATCH_OVERRIDE { +                m_reporterRegistry.registerListener( factory ); +            } +            virtual void registerTest( TestCase const& testInfo ) CATCH_OVERRIDE { +                m_testCaseRegistry.registerTest( testInfo ); +            } +            virtual void registerTranslator( const IExceptionTranslator* translator ) CATCH_OVERRIDE { +                m_exceptionTranslatorRegistry.registerTranslator( translator ); +            } + +        private: +            TestRegistry m_testCaseRegistry; +            ReporterRegistry m_reporterRegistry; +            ExceptionTranslatorRegistry m_exceptionTranslatorRegistry; +        }; + +        // Single, global, instance +        inline RegistryHub*& getTheRegistryHub() { +            static RegistryHub* theRegistryHub = CATCH_NULL; +            if( !theRegistryHub ) +                theRegistryHub = new RegistryHub(); +            return theRegistryHub; +        } +    } + +    IRegistryHub& getRegistryHub() { +        return *getTheRegistryHub(); +    } +    IMutableRegistryHub& getMutableRegistryHub() { +        return *getTheRegistryHub(); +    } +    void cleanUp() { +        delete getTheRegistryHub(); +        getTheRegistryHub() = CATCH_NULL; +        cleanUpContext(); +    } +    std::string translateActiveException() { +        return getRegistryHub().getExceptionTranslatorRegistry().translateActiveException(); +    } + + +} // end namespace Catch + +#endif // TWOBLUECUBES_CATCH_REGISTRY_HUB_HPP_INCLUDED  | 
