#include "render_2D/scene/Render_Scene_2D.h" #include #include namespace renderive { namespace { TEST(RenderScene2DIntegration, BuilderStatePublishesAtFrameBoundary) { Render_Scene_2D::State initial; initial.viewport = {64, 32}; auto scene = Render_Scene_2D::Builder( std::make_shared()) .configure([&](Render_Scene_2D::Properties& properties) { properties = initial; }) .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); EXPECT_EQ(scene->observer().state, initial); } TEST(RenderScene2DIntegration, FrameImageMatchesConfiguredViewport) { Render_Scene_2D::State state; state.viewport = {48, 27}; auto scene = Render_Scene_2D::Builder( std::make_shared()) .configure([&](Render_Scene_2D::Properties& properties) { properties = state; }) .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); scene->with_frame([](Image_View image) { EXPECT_EQ(image.width, 48); EXPECT_EQ(image.height, 27); EXPECT_NE(image.data, nullptr); }); } TEST(RenderScene2DIntegration, FrameStrategyIsReplacedInsideRenderableEdit) { Render_Scene_2D::State state; state.viewport = {48, 27}; auto scene = Render_Scene_2D::Builder( std::make_shared()) .configure([&](Render_Scene_2D::Properties& properties) { properties = state; }) .build().value(); const auto operation = scene->edit_renderables( [](Scene_2D_Base::Renderable_Editor& editor) { editor.replace_frame_control_strategy( std::make_shared()); }); ASSERT_EQ(operation.wait(), Scene_Edit_Error::none); EXPECT_NE(std::dynamic_pointer_cast( scene->frame_control_strategy()), nullptr); } } // namespace } // namespace renderive