From d2501eff682d752ba9980fcbbf561f9eeb5cc8b0 Mon Sep 17 00:00:00 2001 From: Alessio Quaglino Date: Tue, 17 Jun 2025 09:29:52 -0700 Subject: [PATCH] Use procedural model creation in plugin tests. This will be useful for simplifying the mjSpec API for plugins. PiperOrigin-RevId: 772505558 Change-Id: I8eb57d7e129e0f6430fb4c610a543e0dc0f3b295 --- python/mujoco/specs_test.py | 2 +- test/user/user_api_test.cc | 51 ++++++++++++++++++++----------------- 2 files changed, 29 insertions(+), 24 deletions(-) diff --git a/python/mujoco/specs_test.py b/python/mujoco/specs_test.py index bf712505..08d47c0d 100644 --- a/python/mujoco/specs_test.py +++ b/python/mujoco/specs_test.py @@ -861,7 +861,7 @@ class SpecsTest(absltest.TestCase): body = spec.worldbody.add_body() body.plugin = plugin - body.plugin.plugin_name = 'mujoco.elasticity.cable' + body.plugin.name = 'instance_name' body.plugin.active = True geom = body.add_geom() diff --git a/test/user/user_api_test.cc b/test/user/user_api_test.cc index a415d740..52df9153 100644 --- a/test/user/user_api_test.cc +++ b/test/user/user_api_test.cc @@ -18,6 +18,8 @@ #include #include #include +#include +#include #include #include #include @@ -343,32 +345,35 @@ TEST_F(PluginTest, AttachExplicitPlugin) { )"; - static constexpr char xml_child[] = R"( - - - - - - - - - - - - - - - - - - - )"; - std::array err; mjSpec* parent = mj_parseXMLString(xml_parent, 0, err.data(), err.size()); ASSERT_THAT(parent, NotNull()) << err.data(); - mjSpec* child = mj_parseXMLString(xml_child, 0, err.data(), err.size()); - ASSERT_THAT(child, NotNull()) << err.data(); + + mjSpec* child = mj_makeSpec(); + mjsBody* body = mjs_addBody(mjs_findBody(child, "world"), 0); + mjsGeom* geom = mjs_addGeom(body, 0); + mjsSite* site = mjs_addSite(body, 0); + mjsSensor* sensor = mjs_addSensor(child); + mjsPlugin* plugin = mjs_addPlugin(child); + mjs_activatePlugin(child, "mujoco.sensor.touch_grid"); + mjs_setString(plugin->plugin_name, "mujoco.sensor.touch_grid"); + mjs_setString(sensor->plugin.plugin_name, "mujoco.sensor.touch_grid"); + mjs_setString(body->name, "body"); + mjs_setString(sensor->name, "touch2"); + mjs_setString(sensor->objname, "touch2"); + mjs_setString(site->name, "touch2"); + geom->size[0] = 0.1; + site->size[0] = 0.001; + sensor->type = mjSENS_PLUGIN; + sensor->objtype = mjOBJ_SITE; + sensor->plugin.element = plugin->element; + sensor->plugin.active = true; + std::map > config_attribs; + config_attribs["size"] = "8 12"; + config_attribs["fov"] = "10 13"; + config_attribs["gamma"] = "0"; + config_attribs["nchannel"] = "1"; + mjs_setPluginAttributes(plugin, &config_attribs); mjsBody* body_parent = mjs_findBody(parent, "body"); EXPECT_THAT(body_parent, NotNull());