11#include < scratchcpp/scratchconfiguration.h>
2+ #include < imageformatfactorymock.h>
23
34#include " ../common.h"
5+ #include " imageformats/stub/imageformatstub.h"
46#include " extension1.h"
57#include " extension2.h"
68#include " extension3.h"
79
810using namespace libscratchcpp ;
911
12+ using ::testing::Return;
13+
1014class ScratchConfigurationTest : public testing ::Test
1115{
1216 public:
@@ -15,11 +19,15 @@ class ScratchConfigurationTest : public testing::Test
1519 m_extension1 = std::make_shared<Extension1>();
1620 m_extension2 = std::make_shared<Extension2>();
1721 m_extension3 = std::make_shared<Extension3>();
22+ m_imageFormatMock1 = std::make_shared<ImageFormatFactoryMock>();
23+ m_imageFormatMock2 = std::make_shared<ImageFormatFactoryMock>();
1824 }
1925
2026 std::shared_ptr<IExtension> m_extension1;
2127 std::shared_ptr<IExtension> m_extension2;
2228 std::shared_ptr<IExtension> m_extension3;
29+ std::shared_ptr<ImageFormatFactoryMock> m_imageFormatMock1;
30+ std::shared_ptr<ImageFormatFactoryMock> m_imageFormatMock2;
2331};
2432
2533TEST_F (ScratchConfigurationTest, Extensions)
@@ -35,3 +43,40 @@ TEST_F(ScratchConfigurationTest, Extensions)
3543 ASSERT_EQ (ScratchConfiguration::getExtension<Extension2>(), m_extension2.get ());
3644 ASSERT_EQ (ScratchConfiguration::getExtension<Extension3>(), nullptr );
3745}
46+
47+ TEST_F (ScratchConfigurationTest, ImageFormats)
48+ {
49+ ScratchConfiguration::registerImageFormat (" format1" , m_imageFormatMock1);
50+ ScratchConfiguration::registerImageFormat (" format2" , m_imageFormatMock2);
51+ auto format1 = std::make_shared<ImageFormatStub>();
52+ auto format2 = std::make_shared<ImageFormatStub>();
53+
54+ EXPECT_CALL (*m_imageFormatMock1, createInstance ()).WillOnce (Return (format1));
55+ ASSERT_EQ (ScratchConfiguration::createImageFormat (" format1" ), format1);
56+
57+ EXPECT_CALL (*m_imageFormatMock2, createInstance ()).WillOnce (Return (format2));
58+ ASSERT_EQ (ScratchConfiguration::createImageFormat (" format2" ), format2);
59+
60+ auto format = ScratchConfiguration::createImageFormat (" format3" );
61+ IImageFormat *unsupportedFormat = format.get ();
62+ ASSERT_TRUE (unsupportedFormat);
63+ ASSERT_TRUE (dynamic_cast <ImageFormatStub *>(unsupportedFormat));
64+
65+ ScratchConfiguration::removeImageFormat (" format1" );
66+ format = ScratchConfiguration::createImageFormat (" format1" );
67+ unsupportedFormat = format.get ();
68+ ASSERT_TRUE (unsupportedFormat);
69+ ASSERT_TRUE (dynamic_cast <ImageFormatStub *>(unsupportedFormat));
70+
71+ EXPECT_CALL (*m_imageFormatMock2, createInstance ()).WillOnce (Return (format2));
72+ ASSERT_EQ (ScratchConfiguration::createImageFormat (" format2" ), format2);
73+
74+ ScratchConfiguration::removeImageFormat (" format2" );
75+ format = ScratchConfiguration::createImageFormat (" format2" );
76+ unsupportedFormat = format.get ();
77+ ASSERT_TRUE (unsupportedFormat);
78+ ASSERT_TRUE (dynamic_cast <ImageFormatStub *>(unsupportedFormat));
79+
80+ testing::Mock::AllowLeak (m_imageFormatMock1.get ());
81+ testing::Mock::AllowLeak (m_imageFormatMock2.get ());
82+ }
0 commit comments