修改一些
This commit is contained in:
@@ -1,4 +1,5 @@
|
||||
#include "render_2D/scene/Render_Scene_2D.h"
|
||||
#include <renderive/renderable/Renderable_Build.hpp>
|
||||
#include <gtest/gtest.h>
|
||||
#include <memory>
|
||||
|
||||
@@ -13,7 +14,7 @@ std::unique_ptr<Render_Scene_2D> make_scene(
|
||||
.configure([&](Render_Scene_2D::Properties& properties) {
|
||||
properties = state;
|
||||
})
|
||||
.build();
|
||||
.build().value();
|
||||
}
|
||||
|
||||
TEST(RenderScene2DFramePipeline, BuilderOwnsConstructionAndState) {
|
||||
@@ -25,6 +26,72 @@ TEST(RenderScene2DFramePipeline, BuilderOwnsConstructionAndState) {
|
||||
EXPECT_EQ(scene->root_renderable()->object_name(), "root");
|
||||
}
|
||||
|
||||
|
||||
TEST(RenderScene2DFramePipeline, SceneBuilderOwnsRenderableGroupAndObjectNames) {
|
||||
auto builder = Render_Scene_2D::Builder(
|
||||
std::make_shared<Manual_Render_Scene_2D_Strategy>());
|
||||
const auto root = builder.root_renderable();
|
||||
auto child = detail::make_renderable_group(false, "child");
|
||||
Renderable_Build_Topology topology;
|
||||
topology.dependency.push_back(
|
||||
detail::build_relationship(child, root));
|
||||
topology.display.push_back(
|
||||
detail::build_relationship(child, root));
|
||||
detail::Renderable_Build_Access::set_topology(*child, std::move(topology));
|
||||
builder.add_renderable(child);
|
||||
|
||||
auto built_scene = builder.build();
|
||||
ASSERT_TRUE(built_scene);
|
||||
ASSERT_TRUE(*built_scene);
|
||||
EXPECT_EQ(child->object_name(), "child");
|
||||
EXPECT_EQ((*built_scene)->observer().renderable_count, 2U);
|
||||
}
|
||||
|
||||
TEST(RenderScene2DFramePipeline, SceneBuilderRejectsMissingDependencyEndpoint) {
|
||||
auto builder = Render_Scene_2D::Builder(
|
||||
std::make_shared<Manual_Render_Scene_2D_Strategy>());
|
||||
const auto root = builder.root_renderable();
|
||||
auto external = detail::make_renderable_group(false, "external");
|
||||
auto child = detail::make_renderable_group(false, "child");
|
||||
Renderable_Build_Topology topology;
|
||||
topology.dependency.push_back(
|
||||
detail::build_relationship(child, external));
|
||||
topology.display.push_back(
|
||||
detail::build_relationship(child, root));
|
||||
detail::Renderable_Build_Access::set_topology(*child, std::move(topology));
|
||||
builder.add_renderable(child);
|
||||
|
||||
auto built_scene = builder.build();
|
||||
ASSERT_FALSE(built_scene);
|
||||
EXPECT_EQ(built_scene.error(),
|
||||
Scene_Build_Result::dependency_endpoint_missing);
|
||||
}
|
||||
|
||||
TEST(RenderScene2DFramePipeline, SceneBuilderRejectsDependencyCycle) {
|
||||
auto builder = Render_Scene_2D::Builder(
|
||||
std::make_shared<Manual_Render_Scene_2D_Strategy>());
|
||||
auto first = detail::make_renderable_group(false, "first");
|
||||
auto second = detail::make_renderable_group(false, "second");
|
||||
|
||||
Renderable_Build_Topology first_topology;
|
||||
first_topology.dependency.push_back(
|
||||
detail::build_relationship(first, second));
|
||||
detail::Renderable_Build_Access::set_topology(
|
||||
*first, std::move(first_topology));
|
||||
|
||||
Renderable_Build_Topology second_topology;
|
||||
second_topology.dependency.push_back(
|
||||
detail::build_relationship(second, first));
|
||||
detail::Renderable_Build_Access::set_topology(
|
||||
*second, std::move(second_topology));
|
||||
|
||||
builder.add_renderable(first);
|
||||
builder.add_renderable(second);
|
||||
auto built_scene = builder.build();
|
||||
ASSERT_FALSE(built_scene);
|
||||
EXPECT_EQ(built_scene.error(), Scene_Build_Result::dependency_cycle);
|
||||
}
|
||||
|
||||
TEST(RenderScene2DFramePipeline, SceneValidityDoesNotGateStrategyProgress) {
|
||||
Render_Scene_2D::State state;
|
||||
state.viewport = {80, 45};
|
||||
|
||||
@@ -13,7 +13,7 @@ TEST(RenderScene2DIntegration, BuilderStatePublishesAtFrameBoundary) {
|
||||
.configure([&](Render_Scene_2D::Properties& properties) {
|
||||
properties = initial;
|
||||
})
|
||||
.build();
|
||||
.build().value();
|
||||
scene->activate_view();
|
||||
ASSERT_EQ(scene->render_frame().value(), Plot_Render_Status::rendered);
|
||||
ASSERT_EQ(scene->wait_for_render(), Scene_Render_Result::none);
|
||||
@@ -28,7 +28,7 @@ TEST(RenderScene2DIntegration, FrameImageMatchesConfiguredViewport) {
|
||||
.configure([&](Render_Scene_2D::Properties& properties) {
|
||||
properties = state;
|
||||
})
|
||||
.build();
|
||||
.build().value();
|
||||
scene->activate_view();
|
||||
ASSERT_EQ(scene->render_frame().value(), Plot_Render_Status::rendered);
|
||||
ASSERT_EQ(scene->wait_for_render(), Scene_Render_Result::none);
|
||||
@@ -47,7 +47,7 @@ TEST(RenderScene2DIntegration, FrameStrategyIsReplacedInsideRenderableEdit) {
|
||||
.configure([&](Render_Scene_2D::Properties& properties) {
|
||||
properties = state;
|
||||
})
|
||||
.build();
|
||||
.build().value();
|
||||
const auto operation = scene->edit_renderables(
|
||||
[](Scene_2D_Base::Renderable_Editor& editor) {
|
||||
editor.replace_frame_control_strategy(
|
||||
|
||||
Reference in New Issue
Block a user