Skip to content

Commit 5275e54

Browse files
committed
add unit tests
1 parent 7b9df19 commit 5275e54

File tree

1 file changed

+87
-0
lines changed

1 file changed

+87
-0
lines changed

applications/projects/SceneChecking/tests/SceneChecker_test.cpp

Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,8 @@ using sofa::scenechecking::SceneCheckMissingRequiredPlugin;
3838
using sofa::scenechecking::SceneCheckDuplicatedName;
3939
#include <SceneChecking/SceneCheckUsingAlias.h>
4040
using sofa::scenechecking::SceneCheckUsingAlias;
41+
#include <SceneChecking/SceneCheckCollisionPipelineAndModels.h>
42+
using sofa::scenechecking::SceneCheckCollisionPipelineAndModels;
4143

4244
#include <sofa/helper/system/PluginManager.h>
4345
using sofa::helper::system::PluginManager;
@@ -238,6 +240,74 @@ struct SceneChecker_test : public BaseSimulationTest
238240
checker.validate(root.get(), &sceneLoader);
239241
}
240242
}
243+
244+
void checkCollisionPipelineModels(bool withPipeline, bool withCollisionModel)
245+
{
246+
std::string scenePrefix = R"("
247+
<Node name='root'>
248+
<DefaultAnimationLoop/>
249+
<RequiredPlugin name='Sofa.Component.Collision.Detection.Algorithm' />
250+
<RequiredPlugin name='Sofa.Component.Collision.Detection.Intersection' />
251+
<RequiredPlugin name='Sofa.Component.Collision.Geometry' />
252+
<RequiredPlugin name='Sofa.Component.Collision.Response.Contact' />
253+
)";
254+
std::string scenePipeline = R"("
255+
<CollisionPipeline verbose="0" />
256+
<BruteForceBroadPhase/>
257+
<BVHNarrowPhase/>
258+
<CollisionResponse name="Response" response="PenalityContactForceField" />
259+
<DiscreteIntersection />
260+
)";
261+
std::string sceneModel = R"("
262+
<Node name='Collision'>
263+
<MechanicalObject position="1 1 1" />
264+
<SphereCollisionModel name="Floor" radius="1" />
265+
</Node>
266+
)";
267+
std::string sceneSuffix = R"("
268+
</Node>
269+
)";
270+
std::string scene = scenePrefix;
271+
if(withPipeline)
272+
{
273+
scene += scenePipeline;
274+
}
275+
if(withCollisionModel)
276+
{
277+
scene += sceneModel;
278+
}
279+
scene += sceneSuffix;
280+
281+
SceneCheckerVisitor checker(sofa::core::execparams::defaultInstance());
282+
checker.addCheck( SceneCheckCollisionPipelineAndModels::newSPtr() );
283+
284+
SceneLoaderXML sceneLoader;
285+
const Node::SPtr root = sceneLoader.doLoadFromMemory("testscene", scene.c_str());
286+
ASSERT_NE(root.get(), nullptr);
287+
root->init(sofa::core::execparams::defaultInstance());
288+
289+
if(!withPipeline && !withCollisionModel)
290+
{
291+
EXPECT_MSG_NOEMIT(Warning);
292+
checker.validate(root.get(), &sceneLoader);
293+
}
294+
if(withPipeline && !withCollisionModel)
295+
{
296+
EXPECT_MSG_EMIT(Warning);
297+
checker.validate(root.get(), &sceneLoader);
298+
}
299+
if(!withPipeline && withCollisionModel)
300+
{
301+
EXPECT_MSG_EMIT(Warning);
302+
checker.validate(root.get(), &sceneLoader);
303+
}
304+
if(withPipeline && withCollisionModel)
305+
{
306+
EXPECT_MSG_NOEMIT(Warning);
307+
checker.validate(root.get(), &sceneLoader);
308+
}
309+
310+
}
241311
};
242312

243313
TEST_F(SceneChecker_test, checkMissingRequiredPlugin )
@@ -279,3 +349,20 @@ TEST_F(SceneChecker_test, checkUsingAlias_withoutAlias )
279349
{
280350
checkUsingAlias(false);
281351
}
352+
353+
TEST_F(SceneChecker_test, checkCollisionPipelineModels_nothing )
354+
{
355+
checkCollisionPipelineModels(false, false);
356+
}
357+
TEST_F(SceneChecker_test, checkCollisionPipelineModels_onlyPipeline )
358+
{
359+
checkCollisionPipelineModels(true, false);
360+
}
361+
TEST_F(SceneChecker_test, checkCollisionPipelineModels_onlyModel )
362+
{
363+
checkCollisionPipelineModels(false, true);
364+
}
365+
TEST_F(SceneChecker_test, checkCollisionPipelineModels_both )
366+
{
367+
checkCollisionPipelineModels(true, true);
368+
}

0 commit comments

Comments
 (0)