Throw an error if a child attached by reference to a parent is compiled.
Fixes #2482. PiperOrigin-RevId: 735665098 Change-Id: Ia3436fdd2ff572f8f0c1ded434742a4a9186f2f7
This commit is contained in:
committed by
Copybara-Service
parent
14dc6fd33b
commit
019e0a806c
@@ -2544,5 +2544,30 @@ TEST_F(MujocoTest, ApplyNameSpaceToDefaults) {
|
||||
mj_deleteVFS(vfs.get());
|
||||
}
|
||||
|
||||
TEST_F(MujocoTest, ErrorWhenCompilingOrphanedSpec) {
|
||||
static constexpr char xml[] = R"(
|
||||
<mujoco>
|
||||
<worldbody>
|
||||
<body name="a"/>
|
||||
</worldbody>
|
||||
</mujoco>
|
||||
)";
|
||||
std::array<char, 1024> er;
|
||||
mjSpec* child = mj_parseXMLString(xml, 0, er.data(), er.size());
|
||||
EXPECT_THAT(child, NotNull()) << er.data();
|
||||
mjSpec* parent = mj_makeSpec();
|
||||
EXPECT_THAT(parent, NotNull());
|
||||
mjsBody* body = mjs_findBody(child, "a");
|
||||
EXPECT_THAT(body, NotNull());
|
||||
mjsFrame* frame = mjs_addFrame(mjs_findBody(parent, "world"), nullptr);
|
||||
EXPECT_THAT(frame, NotNull());
|
||||
mjs_attachBody(frame, body, "child-", "");
|
||||
mj_deleteSpec(parent);
|
||||
mjModel* model = mj_compile(child, 0);
|
||||
EXPECT_THAT(model, IsNull());
|
||||
EXPECT_THAT(mjs_getError(child), HasSubstr("by reference to a parent"));
|
||||
mj_deleteSpec(child);
|
||||
}
|
||||
|
||||
} // namespace
|
||||
} // namespace mujoco
|
||||
|
||||
Reference in New Issue
Block a user