Skip to content

Commit

Permalink
updated msg -> string conversion
Browse files Browse the repository at this point in the history
Signed-off-by: Jenn Nguyen <[email protected]>
  • Loading branch information
jennuine committed Jul 22, 2022
1 parent 8ff8356 commit a1d294d
Show file tree
Hide file tree
Showing 2 changed files with 66 additions and 34 deletions.
34 changes: 26 additions & 8 deletions src/Utility.cc
Original file line number Diff line number Diff line change
Expand Up @@ -967,10 +967,17 @@ namespace ignition
// Get the top level <model> element.
tinyxml2::XMLElement *modelElement = modelConfigDoc.FirstChildElement(
"model");
bool isModel = true;
if (!modelElement)
{
std::cerr << "Model config string does not contain a <model> element\n";
return false;
modelElement = modelConfigDoc.FirstChildElement("world");
if (!modelElement)
{
std::cerr << "Model config string does not contain a "
<< "<model> or <world> element\n";
return false;
}
isModel = false;
}

// Read the name, which is a mandatory element.
Expand Down Expand Up @@ -1044,23 +1051,34 @@ namespace ignition
math::SemanticVersion ver(trimmed(verStr));
if (ver > maxVer)
{
meta.mutable_model()->mutable_file_format()->set_name("sdf");
ignition::msgs::Version *verMsg =
meta.mutable_model()->mutable_file_format()->mutable_version();
ignition::msgs::Version *verMsg;

if (isModel)
{
meta.mutable_model()->mutable_file_format()->set_name("sdf");
verMsg =
meta.mutable_model()->mutable_file_format()->mutable_version();
meta.mutable_model()->set_file(trimmed(elem->GetText()));
}
else
{
meta.mutable_world()->mutable_file_format()->set_name("sdf");
verMsg =
meta.mutable_world()->mutable_file_format()->mutable_version();
meta.mutable_world()->set_file(trimmed(elem->GetText()));
}

verMsg->set_major(ver.Major());
verMsg->set_minor(ver.Minor());
verMsg->set_patch(ver.Patch());
verMsg->set_prerelease(ver.Prerelease());
verMsg->set_build(ver.Build());

meta.mutable_model()->set_file(trimmed(elem->GetText()));
}
}

elem = elem->NextSiblingElement("sdf");
}
if (meta.model().file().empty())
if (meta.model().file().empty() && meta.world().file().empty())
{
std::cerr << "Model config string does not contain an <sdf> element\n";
return false;
Expand Down
66 changes: 40 additions & 26 deletions src/Utility_TEST.cc
Original file line number Diff line number Diff line change
Expand Up @@ -321,30 +321,31 @@ TEST(UtilityTest, ConvertFloat)
TEST(UtilityTest, ConvertFuelMetadata)
{
msgs::FuelMetadata metaMsg;
std::string modelConfigStr;
std::string modelConfigInput, worldConfigInput;

// test ConvertFuelMetadata(string, msgs::FuelMetadata)
{
EXPECT_FALSE(msgs::ConvertFuelMetadata(modelConfigStr, metaMsg));
EXPECT_FALSE(msgs::ConvertFuelMetadata(modelConfigInput, metaMsg));

metaMsg.Clear();
modelConfigStr = "<test/>";
EXPECT_FALSE(msgs::ConvertFuelMetadata(modelConfigStr, metaMsg));
modelConfigInput = "<test/>";
EXPECT_FALSE(msgs::ConvertFuelMetadata(modelConfigInput, metaMsg));

metaMsg.Clear();
modelConfigStr = "<model>test</model>";
EXPECT_FALSE(msgs::ConvertFuelMetadata(modelConfigStr, metaMsg));
modelConfigInput = "<model>test</model>";
EXPECT_FALSE(msgs::ConvertFuelMetadata(modelConfigInput, metaMsg));

// Test <model>
metaMsg.Clear();
modelConfigStr = R"(
modelConfigInput = R"(
<model>
<name>test_model</name>
</model>
)";
EXPECT_FALSE(msgs::ConvertFuelMetadata(modelConfigStr, metaMsg));
EXPECT_FALSE(msgs::ConvertFuelMetadata(modelConfigInput, metaMsg));

metaMsg.Clear();
modelConfigStr = R"(<?xml version='1.0'?>
modelConfigInput = R"(<?xml version='1.0'?>
<model>
<sdf version='1.7'>model.sdf</sdf>
<name>test_model</name>
Expand All @@ -362,7 +363,7 @@ TEST(UtilityTest, ConvertFuelMetadata)
</model>
)";

EXPECT_TRUE(msgs::ConvertFuelMetadata(modelConfigStr, metaMsg));
EXPECT_TRUE(msgs::ConvertFuelMetadata(modelConfigInput, metaMsg));
EXPECT_EQ("test_model", metaMsg.name());
EXPECT_EQ(3, metaMsg.version());
EXPECT_EQ("A model for testing", metaMsg.description());
Expand All @@ -375,16 +376,37 @@ TEST(UtilityTest, ConvertFuelMetadata)
EXPECT_EQ("[email protected]", metaMsg.authors(0).email());
EXPECT_EQ(1, metaMsg.dependencies().size());
EXPECT_EQ("model://some_model", metaMsg.dependencies(0).uri());

// Test <world>
metaMsg.Clear();
worldConfigInput = R"(<?xml version='1.0'?>
<world>
<sdf version='1.7'>world.sdf</sdf>
<name>test_world</name>
<version>2</version>
<description>A world for testing</description>
</world>
)";
EXPECT_TRUE(msgs::ConvertFuelMetadata(worldConfigInput, metaMsg));
EXPECT_EQ("test_world", metaMsg.name());
EXPECT_EQ(2, metaMsg.version());
EXPECT_EQ("A world for testing", metaMsg.description());
EXPECT_EQ("world.sdf", metaMsg.world().file());
EXPECT_EQ("sdf", metaMsg.world().file_format().name());
EXPECT_EQ(1, metaMsg.world().file_format().version().major());
EXPECT_EQ(7, metaMsg.world().file_format().version().minor());
EXPECT_EQ(0, metaMsg.authors().size());
EXPECT_EQ(0, metaMsg.dependencies().size());
}

// test ConvertFuelMetadata(msgs::FuelMetadata, string)
{
std::string modelConfigOutput;
std::string modelConfig;

// Test <world>
metaMsg.Clear();
metaMsg.mutable_world()->set_file("world.sdf");
EXPECT_FALSE(msgs::ConvertFuelMetadata(metaMsg, modelConfigOutput));
EXPECT_FALSE(msgs::ConvertFuelMetadata(metaMsg, modelConfig));

metaMsg.set_name("test_world");
metaMsg.set_description("A world for testing");
Expand All @@ -394,22 +416,14 @@ TEST(UtilityTest, ConvertFuelMetadata)
->mutable_version()->set_major(1);
metaMsg.mutable_world()->mutable_file_format()
->mutable_version()->set_minor(7);
EXPECT_TRUE(msgs::ConvertFuelMetadata(metaMsg, modelConfigOutput));
EXPECT_TRUE(msgs::ConvertFuelMetadata(metaMsg, modelConfig));

std::string expectedOutput = R"(<?xml version='1.0'?>
<world>
<sdf version='1.7'>world.sdf</sdf>
<name>test_world</name>
<version>2</version>
<description>A world for testing</description>
</world>
)";
EXPECT_EQ(expectedOutput, modelConfigOutput);
EXPECT_EQ(worldConfigInput, modelConfig);

// Test <model>
metaMsg.Clear();
metaMsg.mutable_model()->set_file("model.sdf");
EXPECT_FALSE(msgs::ConvertFuelMetadata(metaMsg, modelConfigOutput));
EXPECT_FALSE(msgs::ConvertFuelMetadata(metaMsg, modelConfig));

metaMsg.set_name("test_model");
metaMsg.set_description("A model for testing");
Expand All @@ -419,13 +433,13 @@ TEST(UtilityTest, ConvertFuelMetadata)
->mutable_version()->set_major(1);
metaMsg.mutable_model()->mutable_file_format()
->mutable_version()->set_minor(7);
EXPECT_TRUE(msgs::ConvertFuelMetadata(metaMsg, modelConfigOutput));
EXPECT_TRUE(msgs::ConvertFuelMetadata(metaMsg, modelConfig));

metaMsg.add_authors()->set_name("Foo Bar");
metaMsg.mutable_authors(0)->set_email("[email protected]");
metaMsg.add_dependencies()->set_uri("model://some_model");
EXPECT_TRUE(msgs::ConvertFuelMetadata(metaMsg, modelConfigOutput));
EXPECT_EQ(modelConfigStr, modelConfigOutput);
EXPECT_TRUE(msgs::ConvertFuelMetadata(metaMsg, modelConfig));
EXPECT_EQ(modelConfigInput, modelConfig);
}
}

Expand Down

0 comments on commit a1d294d

Please sign in to comment.