Skip to content

Commit

Permalink
#5977: Add empty implementation, define a few unit tests
Browse files Browse the repository at this point in the history
  • Loading branch information
codereader committed Jun 18, 2022
1 parent 0f91058 commit 0aa291a
Show file tree
Hide file tree
Showing 8 changed files with 124 additions and 0 deletions.
1 change: 1 addition & 0 deletions radiantcore/CMakeLists.txt
Expand Up @@ -23,6 +23,7 @@ add_library(radiantcore MODULE
clipper/ClipPoint.cpp
clipper/SplitAlgorithm.cpp
commandsystem/CommandSystem.cpp
decl/DeclarationManager.cpp
decl/FavouritesManager.cpp
eclass/EntityClass.cpp
eclass/EClassColourManager.cpp
Expand Down
48 changes: 48 additions & 0 deletions radiantcore/decl/DeclarationManager.cpp
@@ -0,0 +1,48 @@
#include "ideclmanager.h"

#include "module/StaticModule.h"

namespace decl
{

class DeclarationManager :
public IDeclarationManager
{
public:
void registerDeclType(const std::string& typeName, const IDeclarationParser::Ptr& parser) override
{

}

void unregisterDeclType(const std::string& typeName) override
{

}

void registerDeclFolder(Type defaultType, const std::string& vfsFolder, const std::string& extension) override
{

}

const std::string& getName() const override
{
static std::string _name(MODULE_DECLMANAGER);
return _name;
}

const StringSet& getDependencies() const override
{
static StringSet _dependencies{};

return _dependencies;
}

void initialiseModule(const IApplicationContext& ctx) override
{
rMessage() << getName() << "::initialiseModule called." << std::endl;
}
};

module::StaticModuleRegistration<DeclarationManager> _declManagerModule;

}
1 change: 1 addition & 0 deletions test/CMakeLists.txt
Expand Up @@ -7,6 +7,7 @@ add_executable(drtest
ColourSchemes.cpp
ContinuousBuffer.cpp
CSG.cpp
DeclManager.cpp
Entity.cpp
Favourites.cpp
FileTypes.cpp
Expand Down
68 changes: 68 additions & 0 deletions test/DeclManager.cpp
@@ -0,0 +1,68 @@
#include "RadiantTest.h"

#include "ideclmanager.h"

namespace test
{

using DeclManagerTest = RadiantTest;

class TestDeclaration :
public decl::IDeclaration
{
public:
const std::string& getName() const override
{
static std::string _testName("TestName");
return _testName;
}

decl::Type getType() const override
{
return decl::Type::Material;
}
};

class TestDeclarationParser :
public decl::IDeclarationParser
{
public:
// Returns the declaration type this parser can handle
decl::Type getDeclType() const override
{
return decl::Type::Material;
}

// Create a new declaration instance from the given block
decl::IDeclaration::Ptr parseFromBlock(const decl::DeclarationBlockSyntax& block) override
{
return std::make_shared<TestDeclaration>();
}
};

TEST_F(DeclManagerTest, DeclTypeRegistration)
{
auto parser = std::make_shared<TestDeclarationParser>();
EXPECT_NO_THROW(GlobalDeclarationManager().registerDeclType("sometype", parser));

// Registering the same type name twice should result in an exception
EXPECT_THROW(GlobalDeclarationManager().registerDeclType("sometype", parser), std::logic_error);

// Passing a new parser instance doesn't help either
auto parser2 = std::make_shared<TestDeclarationParser>();
EXPECT_THROW(GlobalDeclarationManager().registerDeclType("sometype", parser2), std::logic_error);
}

TEST_F(DeclManagerTest, DeclTypeUnregistration)
{
auto parser = std::make_shared<TestDeclarationParser>();
GlobalDeclarationManager().registerDeclType("sometype", parser);

// Unregistering the parser should succeed
EXPECT_NO_THROW(GlobalDeclarationManager().unregisterDeclType("sometype"));

// Trying to unregister it twice should result in an exception
EXPECT_THROW(GlobalDeclarationManager().unregisterDeclType("sometype"), std::logic_error);
}

}
1 change: 1 addition & 0 deletions tools/msvc/DarkRadiantCore.vcxproj
Expand Up @@ -38,6 +38,7 @@
<ClCompile Include="..\..\radiantcore\clipper\Clipper.cpp" />
<ClCompile Include="..\..\radiantcore\clipper\ClipPoint.cpp" />
<ClCompile Include="..\..\radiantcore\clipper\SplitAlgorithm.cpp" />
<ClCompile Include="..\..\radiantcore\decl\DeclarationManager.cpp" />
<ClCompile Include="..\..\radiantcore\decl\FavouritesManager.cpp" />
<ClCompile Include="..\..\radiantcore\eclass\EClassColourManager.cpp" />
<ClCompile Include="..\..\radiantcore\eclass\EClassManager.cpp" />
Expand Down
3 changes: 3 additions & 0 deletions tools/msvc/DarkRadiantCore.vcxproj.filters
Expand Up @@ -1150,6 +1150,9 @@
<ClCompile Include="..\..\radiantcore\rendersystem\backend\glprogram\RegularStageProgram.cpp">
<Filter>src\rendersystem\backend\glprogram</Filter>
</ClCompile>
<ClCompile Include="..\..\radiantcore\decl\DeclarationManager.cpp">
<Filter>src\decl</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="..\..\radiantcore\modulesystem\ModuleLoader.h">
Expand Down
1 change: 1 addition & 0 deletions tools/msvc/Tests/Tests.vcxproj
Expand Up @@ -87,6 +87,7 @@
<ClCompile Include="..\..\..\test\ColourSchemes.cpp" />
<ClCompile Include="..\..\..\test\ContinuousBuffer.cpp" />
<ClCompile Include="..\..\..\test\CSG.cpp" />
<ClCompile Include="..\..\..\test\DeclManager.cpp" />
<ClCompile Include="..\..\..\test\Entity.cpp" />
<ClCompile Include="..\..\..\test\EntityInspector.cpp" />
<ClCompile Include="..\..\..\test\Favourites.cpp" />
Expand Down
1 change: 1 addition & 0 deletions tools/msvc/Tests/Tests.vcxproj.filters
Expand Up @@ -59,6 +59,7 @@
<ClCompile Include="..\..\..\test\GeometryStore.cpp" />
<ClCompile Include="..\..\..\test\Settings.cpp" />
<ClCompile Include="..\..\..\test\Patch.cpp" />
<ClCompile Include="..\..\..\test\DeclManager.cpp" />
</ItemGroup>
<ItemGroup>
<ClInclude Include="..\..\..\test\HeadlessOpenGLContext.h" />
Expand Down

0 comments on commit 0aa291a

Please sign in to comment.