#include #include #include #include namespace { struct Test_Renderable_2D : aethera::Def { struct Private : Prev_Private {}; }; static_assert(pro::proxiable, aethera::render_2d::scene::Renderable>); TEST(Render_2D_Model, Every_Def_Layer_Uses_The_Final_Private_Instance) { auto renderable = Test_Renderable_2D::Builder{}.build(); auto* renderable_2d_layer = static_cast(renderable.get()); auto* kernel_renderable_layer = static_cast(renderable.get()); EXPECT_EQ(std::addressof(*renderable_2d_layer->d), std::addressof(static_cast(*renderable->d))); EXPECT_EQ(std::addressof(*kernel_renderable_layer->d), std::addressof(static_cast(*renderable->d))); } TEST(Render_2D_Model, Scene_Endpoint_Publishes_Properties_And_Owned_Dag) { aethera::Dag::Builder dag_builder; dag_builder.add({1}, aethera::make_model_proxy()); auto dag = dag_builder.build(); ASSERT_TRUE(dag.has_value()); aethera::render_2d::Render_Scene_2D::Builder scene_builder; scene_builder .set(&aethera::render_2d::Render_Scene_2D::Prop::viewport, aethera::render_2d::Size{32, 24}) .set(&aethera::render_2d::Render_Scene_2D::Prop::view_active, true); auto scene = scene_builder.build(); scene->set(std::move(*dag)); auto& properties = scene->d->get(); EXPECT_EQ(properties.internal.use()->viewport, (aethera::render_2d::Size{32, 24})); EXPECT_TRUE(properties.internal.use()->view_active); aethera::render_2d::Frame_2D frame({1, 0}); const auto rendered = scene->render(&frame, [](aethera::render_2d::Frame_2D*, std::exception_ptr) {}); ASSERT_FALSE(rendered.has_value()); EXPECT_EQ(std::get(rendered.error()), aethera::Run_Taskflow_Result::runtime_not_initialized); } } // namespace