Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions src/scratchconfiguration_p.cpp
Original file line number Diff line number Diff line change
@@ -1,13 +1,17 @@
// SPDX-License-Identifier: Apache-2.0

#include <scratchcpp/iextension.h>
#include <algorithm>

#include "scratchconfiguration_p.h"

using namespace libscratchcpp;

void ScratchConfigurationPrivate::registerExtension(std::shared_ptr<IExtension> extension)
{
if (std::find(extensions.begin(), extensions.end(), extension) != extensions.cend())
return;

extensions.push_back(extension);
}

Expand Down
1 change: 1 addition & 0 deletions test/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -23,3 +23,4 @@ add_subdirectory(virtual_machine)
add_subdirectory(scratch_classes)
add_subdirectory(target_interfaces)
add_subdirectory(blocks)
add_subdirectory(scratchconfiguration)
20 changes: 20 additions & 0 deletions test/scratchconfiguration/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
add_executable(
scratchconfiguration_test
scratchconfiguration_test.cpp
extensionbase.cpp
extensionbase.h
extension1.cpp
extension1.h
extension2.cpp
extension2.h
extension3.cpp
extension3.h
)

target_link_libraries(
scratchconfiguration_test
GTest::gtest_main
scratchcpp
)

gtest_discover_tests(scratchconfiguration_test)
8 changes: 8 additions & 0 deletions test/scratchconfiguration/extension1.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
#include "extension1.h"

using namespace libscratchcpp;

std::string Extension1::name() const
{
return "ext 1";
}
14 changes: 14 additions & 0 deletions test/scratchconfiguration/extension1.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
#pragma once

#include "extensionbase.h"

namespace libscratchcpp
{

class Extension1 : public ExtensionBase
{
public:
std::string name() const override;
};

} // namespace libscratchcpp
8 changes: 8 additions & 0 deletions test/scratchconfiguration/extension2.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
#include "extension2.h"

using namespace libscratchcpp;

std::string Extension2::name() const
{
return "ext 2";
}
14 changes: 14 additions & 0 deletions test/scratchconfiguration/extension2.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
#pragma once

#include "extensionbase.h"

namespace libscratchcpp
{

class Extension2 : public ExtensionBase
{
public:
std::string name() const override;
};

} // namespace libscratchcpp
8 changes: 8 additions & 0 deletions test/scratchconfiguration/extension3.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
#include "extension3.h"

using namespace libscratchcpp;

std::string Extension3::name() const
{
return "ext 3";
}
14 changes: 14 additions & 0 deletions test/scratchconfiguration/extension3.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
#pragma once

#include "extensionbase.h"

namespace libscratchcpp
{

class Extension3 : public ExtensionBase
{
public:
std::string name() const override;
};

} // namespace libscratchcpp
12 changes: 12 additions & 0 deletions test/scratchconfiguration/extensionbase.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
#include "extensionbase.h"

using namespace libscratchcpp;

std::string ExtensionBase::description() const
{
return "";
}

void ExtensionBase::registerSections(IEngine *engine)
{
}
16 changes: 16 additions & 0 deletions test/scratchconfiguration/extensionbase.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
#pragma once

#include <scratchcpp/iextension.h>

namespace libscratchcpp
{

class ExtensionBase : public IExtension
{
public:
std::string description() const override;

void registerSections(IEngine *engine) override;
};

} // namespace libscratchcpp
37 changes: 37 additions & 0 deletions test/scratchconfiguration/scratchconfiguration_test.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
#include <scratchcpp/scratchconfiguration.h>

#include "../common.h"
#include "extension1.h"
#include "extension2.h"
#include "extension3.h"

using namespace libscratchcpp;

class ScratchConfigurationTest : public testing::Test
{
public:
void SetUp() override
{
m_extension1 = std::make_shared<Extension1>();
m_extension2 = std::make_shared<Extension2>();
m_extension3 = std::make_shared<Extension3>();
}

std::shared_ptr<IExtension> m_extension1;
std::shared_ptr<IExtension> m_extension2;
std::shared_ptr<IExtension> m_extension3;
};

TEST_F(ScratchConfigurationTest, Extensions)
{
ScratchConfiguration::registerExtension(m_extension1);
ScratchConfiguration::registerExtension(m_extension2);

ASSERT_EQ(ScratchConfiguration::getExtension("ext 1"), m_extension1.get());
ASSERT_EQ(ScratchConfiguration::getExtension("ext 2"), m_extension2.get());
ASSERT_EQ(ScratchConfiguration::getExtension("ext 3"), nullptr);

ASSERT_EQ(ScratchConfiguration::getExtension<Extension1>(), m_extension1.get());
ASSERT_EQ(ScratchConfiguration::getExtension<Extension2>(), m_extension2.get());
ASSERT_EQ(ScratchConfiguration::getExtension<Extension3>(), nullptr);
}