Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Add test for entity spawnarg enumeration
Test the forEachKeyValue() and forEachEntityKeyValue() methods with default
spawnargs and some additional spawnargs added with setKeyValue().
  • Loading branch information
Matthew Mott committed Jan 30, 2021
1 parent 9e64adc commit 9db5809
Showing 1 changed file with 48 additions and 0 deletions.
48 changes: 48 additions & 0 deletions test/Entity.cpp
Expand Up @@ -11,6 +11,13 @@ using EntityTest = RadiantTest;
namespace
{

// Create an entity from a simple classname string
IEntityNodePtr createByClassName(const std::string& className)
{
auto cls = GlobalEntityClassManager().findClass("light");
return GlobalEntityModule().createEntity(cls);
}

// Obtain entity attachments as a simple std::list
std::list<Entity::Attachment> getAttachments(const IEntityNodePtr node)
{
Expand Down Expand Up @@ -91,6 +98,47 @@ TEST_F(EntityTest, CreateBasicLightEntity)
EXPECT_EQ(attachments.size(), 0);
}

TEST_F(EntityTest, EnumerateEntitySpawnargs)
{
auto light = createByClassName("light");
auto& spawnArgs = light->getEntity();

// Visit spawnargs by key and value string
using StringMap = std::map<std::string, std::string>;
StringMap keyValuesInit;
spawnArgs.forEachKeyValue([&](const std::string& k, const std::string& v) {
keyValuesInit.insert({k, v});
});

// Initial entity should have a name and a classname value and no other
// properties
EXPECT_EQ(keyValuesInit.size(), 2);
EXPECT_EQ(keyValuesInit["name"], light->name());
EXPECT_EQ(keyValuesInit["classname"], "light");

// Add some new properties of our own
spawnArgs.setKeyValue("origin", "128 256 -1024");
spawnArgs.setKeyValue("_color", "0.5 0.5 0.5");

// Ensure that our new properties are also enumerated
StringMap keyValuesAll;
spawnArgs.forEachKeyValue([&](const std::string& k, const std::string& v) {
keyValuesAll.insert({k, v});
});
EXPECT_EQ(keyValuesAll.size(), 4);
EXPECT_EQ(keyValuesAll["origin"], "128 256 -1024");
EXPECT_EQ(keyValuesAll["_color"], "0.5 0.5 0.5");

// Enumerate as full EntityKeyValue objects as well as strings
StringMap keyValuesByObj;
spawnArgs.forEachEntityKeyValue(
[&](const std::string& k, const EntityKeyValue& v) {
keyValuesByObj.insert({k, v.get()});
}
);
EXPECT_EQ(keyValuesAll, keyValuesByObj);
}

TEST_F(EntityTest, CreateAttachedLightEntity)
{
// Create the torch entity which has an attached light
Expand Down

0 comments on commit 9db5809

Please sign in to comment.