Skip to content

Commit a1d294d

Browse files
committed
updated msg -> string conversion
Signed-off-by: Jenn Nguyen <jenn@openrobotics.org>
1 parent 8ff8356 commit a1d294d

File tree

2 files changed

+66
-34
lines changed

2 files changed

+66
-34
lines changed

src/Utility.cc

Lines changed: 26 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -967,10 +967,17 @@ namespace ignition
967967
// Get the top level <model> element.
968968
tinyxml2::XMLElement *modelElement = modelConfigDoc.FirstChildElement(
969969
"model");
970+
bool isModel = true;
970971
if (!modelElement)
971972
{
972-
std::cerr << "Model config string does not contain a <model> element\n";
973-
return false;
973+
modelElement = modelConfigDoc.FirstChildElement("world");
974+
if (!modelElement)
975+
{
976+
std::cerr << "Model config string does not contain a "
977+
<< "<model> or <world> element\n";
978+
return false;
979+
}
980+
isModel = false;
974981
}
975982

976983
// Read the name, which is a mandatory element.
@@ -1044,23 +1051,34 @@ namespace ignition
10441051
math::SemanticVersion ver(trimmed(verStr));
10451052
if (ver > maxVer)
10461053
{
1047-
meta.mutable_model()->mutable_file_format()->set_name("sdf");
1048-
ignition::msgs::Version *verMsg =
1049-
meta.mutable_model()->mutable_file_format()->mutable_version();
1054+
ignition::msgs::Version *verMsg;
1055+
1056+
if (isModel)
1057+
{
1058+
meta.mutable_model()->mutable_file_format()->set_name("sdf");
1059+
verMsg =
1060+
meta.mutable_model()->mutable_file_format()->mutable_version();
1061+
meta.mutable_model()->set_file(trimmed(elem->GetText()));
1062+
}
1063+
else
1064+
{
1065+
meta.mutable_world()->mutable_file_format()->set_name("sdf");
1066+
verMsg =
1067+
meta.mutable_world()->mutable_file_format()->mutable_version();
1068+
meta.mutable_world()->set_file(trimmed(elem->GetText()));
1069+
}
10501070

10511071
verMsg->set_major(ver.Major());
10521072
verMsg->set_minor(ver.Minor());
10531073
verMsg->set_patch(ver.Patch());
10541074
verMsg->set_prerelease(ver.Prerelease());
10551075
verMsg->set_build(ver.Build());
1056-
1057-
meta.mutable_model()->set_file(trimmed(elem->GetText()));
10581076
}
10591077
}
10601078

10611079
elem = elem->NextSiblingElement("sdf");
10621080
}
1063-
if (meta.model().file().empty())
1081+
if (meta.model().file().empty() && meta.world().file().empty())
10641082
{
10651083
std::cerr << "Model config string does not contain an <sdf> element\n";
10661084
return false;

src/Utility_TEST.cc

Lines changed: 40 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -321,30 +321,31 @@ TEST(UtilityTest, ConvertFloat)
321321
TEST(UtilityTest, ConvertFuelMetadata)
322322
{
323323
msgs::FuelMetadata metaMsg;
324-
std::string modelConfigStr;
324+
std::string modelConfigInput, worldConfigInput;
325325

326326
// test ConvertFuelMetadata(string, msgs::FuelMetadata)
327327
{
328-
EXPECT_FALSE(msgs::ConvertFuelMetadata(modelConfigStr, metaMsg));
328+
EXPECT_FALSE(msgs::ConvertFuelMetadata(modelConfigInput, metaMsg));
329329

330330
metaMsg.Clear();
331-
modelConfigStr = "<test/>";
332-
EXPECT_FALSE(msgs::ConvertFuelMetadata(modelConfigStr, metaMsg));
331+
modelConfigInput = "<test/>";
332+
EXPECT_FALSE(msgs::ConvertFuelMetadata(modelConfigInput, metaMsg));
333333

334334
metaMsg.Clear();
335-
modelConfigStr = "<model>test</model>";
336-
EXPECT_FALSE(msgs::ConvertFuelMetadata(modelConfigStr, metaMsg));
335+
modelConfigInput = "<model>test</model>";
336+
EXPECT_FALSE(msgs::ConvertFuelMetadata(modelConfigInput, metaMsg));
337337

338+
// Test <model>
338339
metaMsg.Clear();
339-
modelConfigStr = R"(
340+
modelConfigInput = R"(
340341
<model>
341342
<name>test_model</name>
342343
</model>
343344
)";
344-
EXPECT_FALSE(msgs::ConvertFuelMetadata(modelConfigStr, metaMsg));
345+
EXPECT_FALSE(msgs::ConvertFuelMetadata(modelConfigInput, metaMsg));
345346

346347
metaMsg.Clear();
347-
modelConfigStr = R"(<?xml version='1.0'?>
348+
modelConfigInput = R"(<?xml version='1.0'?>
348349
<model>
349350
<sdf version='1.7'>model.sdf</sdf>
350351
<name>test_model</name>
@@ -362,7 +363,7 @@ TEST(UtilityTest, ConvertFuelMetadata)
362363
</model>
363364
)";
364365

365-
EXPECT_TRUE(msgs::ConvertFuelMetadata(modelConfigStr, metaMsg));
366+
EXPECT_TRUE(msgs::ConvertFuelMetadata(modelConfigInput, metaMsg));
366367
EXPECT_EQ("test_model", metaMsg.name());
367368
EXPECT_EQ(3, metaMsg.version());
368369
EXPECT_EQ("A model for testing", metaMsg.description());
@@ -375,16 +376,37 @@ TEST(UtilityTest, ConvertFuelMetadata)
375376
EXPECT_EQ("foo@bar.org", metaMsg.authors(0).email());
376377
EXPECT_EQ(1, metaMsg.dependencies().size());
377378
EXPECT_EQ("model://some_model", metaMsg.dependencies(0).uri());
379+
380+
// Test <world>
381+
metaMsg.Clear();
382+
worldConfigInput = R"(<?xml version='1.0'?>
383+
<world>
384+
<sdf version='1.7'>world.sdf</sdf>
385+
<name>test_world</name>
386+
<version>2</version>
387+
<description>A world for testing</description>
388+
</world>
389+
)";
390+
EXPECT_TRUE(msgs::ConvertFuelMetadata(worldConfigInput, metaMsg));
391+
EXPECT_EQ("test_world", metaMsg.name());
392+
EXPECT_EQ(2, metaMsg.version());
393+
EXPECT_EQ("A world for testing", metaMsg.description());
394+
EXPECT_EQ("world.sdf", metaMsg.world().file());
395+
EXPECT_EQ("sdf", metaMsg.world().file_format().name());
396+
EXPECT_EQ(1, metaMsg.world().file_format().version().major());
397+
EXPECT_EQ(7, metaMsg.world().file_format().version().minor());
398+
EXPECT_EQ(0, metaMsg.authors().size());
399+
EXPECT_EQ(0, metaMsg.dependencies().size());
378400
}
379401

380402
// test ConvertFuelMetadata(msgs::FuelMetadata, string)
381403
{
382-
std::string modelConfigOutput;
404+
std::string modelConfig;
383405

384406
// Test <world>
385407
metaMsg.Clear();
386408
metaMsg.mutable_world()->set_file("world.sdf");
387-
EXPECT_FALSE(msgs::ConvertFuelMetadata(metaMsg, modelConfigOutput));
409+
EXPECT_FALSE(msgs::ConvertFuelMetadata(metaMsg, modelConfig));
388410

389411
metaMsg.set_name("test_world");
390412
metaMsg.set_description("A world for testing");
@@ -394,22 +416,14 @@ TEST(UtilityTest, ConvertFuelMetadata)
394416
->mutable_version()->set_major(1);
395417
metaMsg.mutable_world()->mutable_file_format()
396418
->mutable_version()->set_minor(7);
397-
EXPECT_TRUE(msgs::ConvertFuelMetadata(metaMsg, modelConfigOutput));
419+
EXPECT_TRUE(msgs::ConvertFuelMetadata(metaMsg, modelConfig));
398420

399-
std::string expectedOutput = R"(<?xml version='1.0'?>
400-
<world>
401-
<sdf version='1.7'>world.sdf</sdf>
402-
<name>test_world</name>
403-
<version>2</version>
404-
<description>A world for testing</description>
405-
</world>
406-
)";
407-
EXPECT_EQ(expectedOutput, modelConfigOutput);
421+
EXPECT_EQ(worldConfigInput, modelConfig);
408422

409423
// Test <model>
410424
metaMsg.Clear();
411425
metaMsg.mutable_model()->set_file("model.sdf");
412-
EXPECT_FALSE(msgs::ConvertFuelMetadata(metaMsg, modelConfigOutput));
426+
EXPECT_FALSE(msgs::ConvertFuelMetadata(metaMsg, modelConfig));
413427

414428
metaMsg.set_name("test_model");
415429
metaMsg.set_description("A model for testing");
@@ -419,13 +433,13 @@ TEST(UtilityTest, ConvertFuelMetadata)
419433
->mutable_version()->set_major(1);
420434
metaMsg.mutable_model()->mutable_file_format()
421435
->mutable_version()->set_minor(7);
422-
EXPECT_TRUE(msgs::ConvertFuelMetadata(metaMsg, modelConfigOutput));
436+
EXPECT_TRUE(msgs::ConvertFuelMetadata(metaMsg, modelConfig));
423437

424438
metaMsg.add_authors()->set_name("Foo Bar");
425439
metaMsg.mutable_authors(0)->set_email("foo@bar.org");
426440
metaMsg.add_dependencies()->set_uri("model://some_model");
427-
EXPECT_TRUE(msgs::ConvertFuelMetadata(metaMsg, modelConfigOutput));
428-
EXPECT_EQ(modelConfigStr, modelConfigOutput);
441+
EXPECT_TRUE(msgs::ConvertFuelMetadata(metaMsg, modelConfig));
442+
EXPECT_EQ(modelConfigInput, modelConfig);
429443
}
430444
}
431445

0 commit comments

Comments
 (0)