Files
Renderive/render_2D/tests/render_2D_Integration_Tests.cpp
2026-08-17 15:24:28 +08:00

52 lines
1.9 KiB
C++

#include "render_2D/scene/Render_Scene_2D.h"
#include <gtest/gtest.h>
#include <memory>
namespace renderive {
namespace {
TEST(RenderScene2DIntegration, BuilderStatePublishesAtFrameBoundary) {
Render_Scene_2D::State initial;
initial.viewport = {64, 32};
auto scene = Render_Scene_2D::Builder{initial}.build(
std::make_shared<Manual_Render_Scene_2D_Strategy>());
scene->activate_view();
ASSERT_EQ(scene->render_frame(true).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{state}.build(
std::make_shared<Low_Latency_Render_Scene_2D_Strategy>());
scene->activate_view();
ASSERT_EQ(scene->render_frame(true).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{state}.build(
std::make_shared<Low_Latency_Render_Scene_2D_Strategy>());
const auto operation = scene->edit_renderables(
[](Scene_2D_Base::Renderable_Editor& editor) {
editor.replace_frame_control_strategy(
std::make_shared<Manual_Render_Scene_2D_Strategy>());
});
ASSERT_EQ(operation.wait(), Scene_Edit_Error::none);
EXPECT_NE(std::dynamic_pointer_cast<Manual_Render_Scene_2D_Strategy>(
scene->frame_control_strategy()),
nullptr);
}
} // namespace
} // namespace renderive