| | #include <gtest/gtest.h> |
| | #include <Base/ServiceProvider.h> |
| |
|
| | class SimpleService |
| | { |
| | public: |
| | virtual ~SimpleService() = default; |
| | virtual std::string foo() = 0; |
| |
|
| | SimpleService() = default; |
| |
|
| | SimpleService(const SimpleService& other) = delete; |
| | SimpleService(SimpleService&& other) noexcept = delete; |
| | SimpleService& operator=(const SimpleService& other) = delete; |
| | SimpleService& operator=(SimpleService&& other) noexcept = delete; |
| | }; |
| |
|
| | class FirstServiceImplementation final: public SimpleService |
| | { |
| | public: |
| | std::string foo() override |
| | { |
| | return "first"; |
| | } |
| | }; |
| |
|
| | class SecondServiceImplementation final: public SimpleService |
| | { |
| | public: |
| | std::string foo() override |
| | { |
| | return "second"; |
| | } |
| | }; |
| |
|
| | TEST(ServiceProvider, provideEmptyImplementation) |
| | { |
| | |
| | Base::ServiceProvider serviceProvider; |
| |
|
| | |
| | auto implementation = serviceProvider.provide<SimpleService>(); |
| |
|
| | |
| | EXPECT_EQ(implementation, nullptr); |
| | } |
| |
|
| | TEST(ServiceProvider, provideEmptyImplementationList) |
| | { |
| | |
| | Base::ServiceProvider serviceProvider; |
| |
|
| | |
| | const auto implementations = serviceProvider.all<SimpleService>(); |
| |
|
| | |
| | EXPECT_EQ(implementations.size(), 0); |
| | } |
| |
|
| | TEST(ServiceProvider, provideImplementation) |
| | { |
| | |
| | Base::ServiceProvider serviceProvider; |
| |
|
| | serviceProvider.registerImplementation<SimpleService>(new FirstServiceImplementation); |
| |
|
| | |
| | auto implementation = serviceProvider.provide<SimpleService>(); |
| |
|
| | |
| | EXPECT_NE(implementation, nullptr); |
| | EXPECT_EQ(implementation->foo(), "first"); |
| | } |
| |
|
| | TEST(ServiceProvider, provideLatestImplementation) |
| | { |
| | |
| | Base::ServiceProvider serviceProvider; |
| |
|
| | serviceProvider.registerImplementation<SimpleService>(new FirstServiceImplementation); |
| | serviceProvider.registerImplementation<SimpleService>(new SecondServiceImplementation); |
| |
|
| | |
| | auto implementation = serviceProvider.provide<SimpleService>(); |
| |
|
| | |
| | EXPECT_NE(implementation, nullptr); |
| | EXPECT_EQ(implementation->foo(), "second"); |
| | } |
| |
|
| | TEST(ServiceProvider, provideAllImplementations) |
| | { |
| | |
| | Base::ServiceProvider serviceProvider; |
| |
|
| | serviceProvider.registerImplementation<SimpleService>(new FirstServiceImplementation); |
| | serviceProvider.registerImplementation<SimpleService>(new SecondServiceImplementation); |
| |
|
| | |
| | auto implementations = serviceProvider.all<SimpleService>(); |
| | auto it = implementations.begin(); |
| |
|
| | |
| | |
| | EXPECT_EQ((*it)->foo(), "second"); |
| | ++it; |
| | EXPECT_EQ((*it)->foo(), "first"); |
| | ++it; |
| | EXPECT_EQ(it, implementations.end()); |
| | } |
| |
|