From b14de84b8ed7456466b7491400bcdae113c65e29 Mon Sep 17 00:00:00 2001 From: Matthew Mott Date: Sun, 31 Jan 2021 20:08:52 +0000 Subject: [PATCH] Split RenderLightEntity into separate tests for selected/unselected Split tests for better organisation and to avoid one test operating on an object which has already been modified by an earlier test. --- test/Entity.cpp | 92 ++++++++++++++++++++++++++----------------------- 1 file changed, 49 insertions(+), 43 deletions(-) diff --git a/test/Entity.cpp b/test/Entity.cpp index 8669b6b7a5..333a05660c 100644 --- a/test/Entity.cpp +++ b/test/Entity.cpp @@ -249,6 +249,32 @@ TEST_F(EntityTest, CopySpawnargs) EXPECT_EQ(overlap.size(), 0); } +TEST_F(EntityTest, SelectEntity) +{ + auto light = createByClassName("light"); + + // Confirm that setting entity node's selection status propagates to the + // selection system + EXPECT_EQ(GlobalSelectionSystem().countSelected(), 0); + Node_getSelectable(light)->setSelected(true); + EXPECT_EQ(GlobalSelectionSystem().countSelected(), 1); + Node_getSelectable(light)->setSelected(false); + EXPECT_EQ(GlobalSelectionSystem().countSelected(), 0); +} + +TEST_F(EntityTest, DestroySelectedEntity) +{ + auto light = createByClassName("light"); + + // Confirm that setting entity node's selection status propagates to the + // selection system + EXPECT_EQ(GlobalSelectionSystem().countSelected(), 0); + Node_getSelectable(light)->setSelected(true); + EXPECT_EQ(GlobalSelectionSystem().countSelected(), 1); + + // Destructor called here and should not crash +} + namespace { // A simple RenderableCollector which just logs the number of renderables @@ -275,62 +301,42 @@ namespace void setHighlightFlag(Highlight::Flags flags, bool enabled) override {} }; -} - -TEST_F(EntityTest, SelectEntity) -{ - auto light = createByClassName("light"); - // Confirm that setting entity node's selection status propagates to the - // selection system - EXPECT_EQ(GlobalSelectionSystem().countSelected(), 0); - Node_getSelectable(light)->setSelected(true); - EXPECT_EQ(GlobalSelectionSystem().countSelected(), 1); - Node_getSelectable(light)->setSelected(false); - EXPECT_EQ(GlobalSelectionSystem().countSelected(), 0); + // Collection of objects needed for rendering + struct RenderFixture + { + RenderSystemPtr backend = GlobalRenderSystemFactory().createRenderSystem(); + render::NopVolumeTest volumeTest; + TestRenderableCollector collector; + }; } -TEST_F(EntityTest, DestroySelectedEntity) +TEST_F(EntityTest, RenderUnselectedLightEntity) { auto light = createByClassName("light"); + RenderFixture renderF; - // Confirm that setting entity node's selection status propagates to the - // selection system - EXPECT_EQ(GlobalSelectionSystem().countSelected(), 0); - Node_getSelectable(light)->setSelected(true); - EXPECT_EQ(GlobalSelectionSystem().countSelected(), 1); - - // Destructor called here and should not crash + // Render the light in wireframe mode. This should render just the origin + // diamond. + light->setRenderSystem(renderF.backend); + light->renderWireframe(renderF.collector, renderF.volumeTest); + EXPECT_EQ(renderF.collector.renderables, 1); + EXPECT_EQ(renderF.collector.lights, 0); } -TEST_F(EntityTest, RenderLightEntity) +TEST_F(EntityTest, RenderSelectedLightEntity) { auto light = createByClassName("light"); - - // Rendering requires a backend and a volume test - auto backend = GlobalRenderSystemFactory().createRenderSystem(); - render::NopVolumeTest volumeTest; - - // Render the light in wireframe mode. This should render just the origin - // diamond. - { - TestRenderableCollector wireframeRenderer; - light->setRenderSystem(backend); - light->renderWireframe(wireframeRenderer, volumeTest); - EXPECT_EQ(wireframeRenderer.renderables, 1); - EXPECT_EQ(wireframeRenderer.lights, 0); - } + RenderFixture renderF; // With the light selected, we should get the origin diamond, the radius and // the center vertex. - { - TestRenderableCollector wireframeRenderer; - Node_getSelectable(light)->setSelected(true); - light->setRenderSystem(backend); - light->renderWireframe(wireframeRenderer, volumeTest); - EXPECT_EQ(wireframeRenderer.renderables, 3); - EXPECT_EQ(wireframeRenderer.lights, 0); - } + Node_getSelectable(light)->setSelected(true); + + light->setRenderSystem(renderF.backend); + light->renderWireframe(renderF.collector, renderF.volumeTest); + EXPECT_EQ(renderF.collector.renderables, 3); + EXPECT_EQ(renderF.collector.lights, 0); } TEST_F(EntityTest, CreateAttachedLightEntity)