Skip to content

Commit

Permalink
#5977: More signal tests
Browse files Browse the repository at this point in the history
  • Loading branch information
codereader committed Jun 26, 2022
1 parent 3a1d720 commit 3a58c3c
Show file tree
Hide file tree
Showing 2 changed files with 33 additions and 6 deletions.
12 changes: 7 additions & 5 deletions radiantcore/decl/DeclarationManager.cpp
Expand Up @@ -171,12 +171,12 @@ void DeclarationManager::reloadDecarations()
}
}

std::lock_guard folderLock(_registeredFoldersLock);

// Invoke the declsReloaded signal for all types
for (const auto& folder : _registeredFolders)
std::lock_guard declLock(_declarationLock);

for (const auto& [type, _] : _declarationsByType)
{
signal_DeclsReloaded(folder.defaultType).emit();
signal_DeclsReloaded(type).emit();
}
}

Expand Down Expand Up @@ -204,11 +204,13 @@ void DeclarationManager::runParsersForAllFolders()

std::lock_guard folderLock(_registeredFoldersLock);

auto typeMapping = getTypenameMapping();

// Start a parser for each known folder
for (const auto& folder : _registeredFolders)
{
auto& parser = parsers.emplace_back(
std::make_unique<DeclarationFolderParser>(*this, folder.defaultType, folder.folder, folder.extension, getTypenameMapping())
std::make_unique<DeclarationFolderParser>(*this, folder.defaultType, folder.folder, folder.extension, typeMapping)
);
parser->start();
}
Expand Down
27 changes: 26 additions & 1 deletion test/DeclManager.cpp
Expand Up @@ -259,7 +259,7 @@ TEST_F(DeclManagerTest, CreatorRegistrationDuringRunningThread)
checkKnownTestDecl2Names();
}

TEST_F(DeclManagerTest, DeclsReloadedSignal)
TEST_F(DeclManagerTest, DeclsReloadedSignalAfterInitialParse)
{
auto creator = std::make_shared<TestDeclarationCreator>();
GlobalDeclarationManager().registerDeclType("testdecl", creator);
Expand All @@ -283,6 +283,31 @@ TEST_F(DeclManagerTest, DeclsReloadedSignal)
EXPECT_FALSE(modelSignalFired) << "Model-type Signal should not have been fired";
}

TEST_F(DeclManagerTest, DeclsReloadedSignal)
{
GlobalDeclarationManager().registerDeclType("testdecl", std::make_shared<TestDeclarationCreator>());
GlobalDeclarationManager().registerDeclType("testdecl2", std::make_shared<TestDeclaration2Creator>());
GlobalDeclarationManager().registerDeclFolder(decl::Type::Material, "testdecls", ".decl");

// Force the threads to be finished
GlobalDeclarationManager().foreachDeclaration(decl::Type::Material, [](const decl::IDeclaration&) {});
GlobalDeclarationManager().foreachDeclaration(decl::Type::Model, [](const decl::IDeclaration&) {});

bool materialSignalFired = false;
bool modelSignalFired = false;
GlobalDeclarationManager().signal_DeclsReloaded(decl::Type::Material).connect(
[&]() { materialSignalFired = true; }
);
GlobalDeclarationManager().signal_DeclsReloaded(decl::Type::Model).connect(
[&]() { modelSignalFired = true; }
);

GlobalDeclarationManager().reloadDecarations();

EXPECT_TRUE(materialSignalFired) << "Material signal should have fired after reloadDecls";
EXPECT_TRUE(modelSignalFired) << "Model signal should have fired after reloadDecls";
}

TEST_F(DeclManagerTest, FindDeclaration)
{
GlobalDeclarationManager().registerDeclType("testdecl", std::make_shared<TestDeclarationCreator>());
Expand Down

0 comments on commit 3a58c3c

Please sign in to comment.