@@ -34,6 +34,7 @@ namespace {
3434using ::testing::IsNull;
3535using ::testing::NotNull;
3636using ::testing::StartsWith;
37+ using ::testing::HasSubstr;
3738
3839static constexpr char xml[] = R"(
3940 <mujoco>
@@ -151,11 +152,46 @@ TEST_F(MujocoTest, SaveXml) {
151152 mjModel* saved_model = mj_compile (saved_spec, 0 );
152153 EXPECT_THAT (saved_model, NotNull ()) << " Invalid model: " << error.data ();
153154
154- mjtNum tol = 0 ;
155- std::string field = " " ;
156- EXPECT_LE (CompareModel (model, saved_model, field), tol)
157- << " Expected and attached models are different!\n "
158- << " Different field: " << field << ' \n ' ;
155+ mj_deleteSpec (spec);
156+ mj_deleteSpec (saved_spec);
157+ mj_deleteModel (model);
158+ mj_deleteModel (saved_model);
159+ }
160+
161+ TEST_F (MujocoTest, SaveXmlWithDefaultMesh) {
162+ static constexpr char xml[] = R"(
163+ <mujoco>
164+ <default>
165+ <mesh inertia="shell"/>
166+ </default>
167+ <asset>
168+ <mesh name="test_mesh" vertex="0 0 0 1 0 0 0 1 0 0 0 1"/>
169+ </asset>
170+ <worldbody>
171+ <body>
172+ <geom mesh="test_mesh" type="mesh"/>
173+ </body>
174+ </worldbody>
175+ </mujoco>
176+ )" ;
177+
178+ std::array<char , 1024 > error;
179+ mjSpec* spec = mj_parseXMLString (xml, 0 , error.data (), error.size ());
180+ EXPECT_THAT (spec, NotNull ()) << " Failed to parse spec: " << error.data ();
181+ mjModel* model = mj_compile (spec, 0 );
182+ EXPECT_THAT (model, NotNull ()) << " Failed to compile model: " << error.data ();
183+
184+ std::array<char , 1024 > out;
185+ EXPECT_THAT (mj_saveXMLString (spec, out.data (), out.size (), error.data (),
186+ error.size ()), 0 ) << error.data ();
187+
188+ mjSpec* saved_spec = mj_parseXMLString (xml, 0 , error.data (), error.size ());
189+ EXPECT_THAT (saved_spec, NotNull ()) << " Invalid saved spec: " << error.data ();
190+ mjModel* saved_model = mj_compile (saved_spec, 0 );
191+ EXPECT_THAT (saved_model, NotNull ()) << " Invalid model: " << error.data ();
192+
193+ // check that the mesh has inertia="shell"
194+ EXPECT_THAT (out.data (), HasSubstr (R"( <mesh inertia="shell"/>)" ));
159195
160196 mj_deleteSpec (spec);
161197 mj_deleteSpec (saved_spec);
0 commit comments