64 lines
2.3 KiB
C++
64 lines
2.3 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(
|
|
std::make_shared<Manual_Render_Scene_2D_Strategy>())
|
|
.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<Low_Latency_Render_Scene_2D_Strategy>())
|
|
.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<Low_Latency_Render_Scene_2D_Strategy>())
|
|
.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<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
|