38 lines
1.7 KiB
C++
38 lines
1.7 KiB
C++
#include <render_2D/module/renderable/Renderable_2D.hpp>
|
|
#include <render_2D/module/scene/Render_Scene_2D.hpp>
|
|
#include <gtest/gtest.h>
|
|
#include <type_traits>
|
|
namespace {
|
|
struct Test_Renderable_2D : aethera::Def<Test_Renderable_2D, aethera::render_2d::Renderable_2D> {
|
|
struct Private : Prev_Private {};
|
|
};
|
|
|
|
TEST(Model_Adaptation, Final_Private_Adapts_To_Renderable_Facade) {
|
|
auto renderable = Test_Renderable_2D::Builder{}.build();
|
|
auto proxy = aethera::model_proxy_view<aethera::render_2d::scene::Renderable>(*renderable);
|
|
aethera::render_2d::Blend2D_Cache target;
|
|
ASSERT_TRUE(proxy);
|
|
target.ensure_size({32, 24});
|
|
proxy->render(target);
|
|
proxy->advance();
|
|
EXPECT_TRUE(proxy->taskflow());
|
|
}
|
|
|
|
TEST(Model_Adaptation, Scene_Owns_The_Only_Renderable_Dag) {
|
|
aethera::Dag_Relation<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
|
|
.relation<aethera::scene::Renderable>([dag = std::move(*dag)](auto& relation) mutable { relation = std::move(dag); });
|
|
auto scene = scene_builder.build();
|
|
EXPECT_TRUE(scene->model_initialized());
|
|
auto& relation = aethera::detail::model_private(*scene).relation<aethera::scene::Renderable>();
|
|
static_assert(std::same_as<typename std::remove_reference_t<decltype(relation)>::Node, aethera::render_2d::scene::Renderable>);
|
|
std::size_t node_count{};
|
|
relation.for_each_topological([&](auto, auto&) { ++node_count; });
|
|
EXPECT_EQ(node_count, 1U);
|
|
}
|
|
} // namespace
|