Skip to content

Commit

Permalink
Split RenderLightEntity into separate tests for selected/unselected
Browse files Browse the repository at this point in the history
Split tests for better organisation and to avoid one test operating on an
object which has already been modified by an earlier test.
  • Loading branch information
Matthew Mott committed Jan 31, 2021
1 parent bf77456 commit b14de84
Showing 1 changed file with 49 additions and 43 deletions.
92 changes: 49 additions & 43 deletions test/Entity.cpp
Expand Up @@ -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
Expand All @@ -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)
Expand Down

0 comments on commit b14de84

Please sign in to comment.