改协议之前

This commit is contained in:
2026-09-02 20:26:09 +08:00
parent 4c77135783
commit 50d0ba0e55
96 changed files with 802 additions and 4332 deletions
+40
View File
@@ -0,0 +1,40 @@
#include <render_2D/module/renderable/Renderable_2D.hpp>
#include <render_2D/module/scene/Render_Scene_2D.hpp>
#include <gtest/gtest.h>
#include <variant>
namespace {
struct Test_Renderable_2D : aethera::Def<Test_Renderable_2D, aethera::render_2d::Renderable_2D> {
struct Private : Prev_Private {};
};
static_assert(pro::proxiable<aethera::detail::Model_Private_Pointer<Test_Renderable_2D*>, 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<aethera::render_2d::Renderable_2D*>(renderable.get());
auto* kernel_renderable_layer = static_cast<aethera::Renderable*>(renderable.get());
EXPECT_EQ(std::addressof(*renderable_2d_layer->d), std::addressof(static_cast<aethera::render_2d::Renderable_2D::Private&>(*renderable->d)));
EXPECT_EQ(std::addressof(*kernel_renderable_layer->d), std::addressof(static_cast<aethera::Renderable::Private&>(*renderable->d)));
}
TEST(Render_2D_Model, Scene_Endpoint_Publishes_Properties_And_Owned_Dag) {
aethera::Dag<aethera::render_2d::scene::Renderable>::Builder dag_builder;
dag_builder.add({1}, aethera::make_model_proxy<aethera::render_2d::scene::Renderable, Test_Renderable_2D>());
auto dag = dag_builder.build();
ASSERT_TRUE(dag.has_value());
aethera::render_2d::Render_Scene_2D::Builder scene_builder;
scene_builder
.set<aethera::Import_Struct_With_Dirty, aethera::Prop_Tag>(&aethera::render_2d::Render_Scene_2D::Prop::viewport, aethera::render_2d::Size{32, 24})
.set<aethera::Import_Struct_With_Dirty, aethera::Prop_Tag>(&aethera::render_2d::Render_Scene_2D::Prop::view_active, true);
auto scene = scene_builder.build();
scene->set<aethera::Owned_Dag, aethera::render_2d::Render_Scene_2D>(std::move(*dag));
auto& properties = scene->d->get<aethera::Prop_Tag>();
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<aethera::Run_Taskflow_Result>(rendered.error()), aethera::Run_Taskflow_Result::runtime_not_initialized);
}
} // namespace