完美一版
This commit is contained in:
@@ -1,4 +1,5 @@
|
||||
#include <render_2D/axis/Axis.hpp>
|
||||
#include <render_2D/base/Frame_2D.hpp>
|
||||
#include <render_2D/event/Event.hpp>
|
||||
#include <render_2D/event/Event_Routing_Rules.hpp>
|
||||
#include <render_2D/scene/Render_Scene_2D.hpp>
|
||||
@@ -12,6 +13,15 @@ std::unique_ptr<Object> build_axis() {
|
||||
if (!result) std::terminate();
|
||||
return std::move(result).value();
|
||||
}
|
||||
template <typename Scene>
|
||||
std::unique_ptr<Frame_2D> render_frame(Scene* scene) {
|
||||
static std::uint64_t sequence{1};
|
||||
auto frame = std::make_unique<Frame_2D>(Frame_Identity{sequence++, 0});
|
||||
EXPECT_EQ(scene->render(frame.get()), Render_Scene_2D::Render_Result::completed);
|
||||
return frame;
|
||||
}
|
||||
template <typename Scene>
|
||||
void render_once(Scene* scene) { static_cast<void>(render_frame(scene)); }
|
||||
}
|
||||
TEST(event_routing_rule, keeps_layered_targets_before_nearest_scored_targets) {
|
||||
std::vector<int> targets{1, 2, 3, 4};
|
||||
@@ -82,8 +92,8 @@ TEST(axis_render, scene_prepares_and_paints_uncached_axis_into_frame) {
|
||||
prepare.add(axis.get());
|
||||
paint.add(axis.get());
|
||||
}).has_value()));
|
||||
scene->render();
|
||||
const Image_View view = scene->frame_view();
|
||||
const auto frame = render_frame(scene.get());
|
||||
const Image_View view = frame->image();
|
||||
ASSERT_FALSE(view.empty());
|
||||
bool contains_color{};
|
||||
for (int y = 0; y < view.height && !contains_color; ++y) {
|
||||
@@ -106,12 +116,12 @@ TEST(axis_event, numeric_axis_wheel_zoom_and_drag_update_authoritative_range) {
|
||||
prepare.add(axis.get()); paint.add(axis.get());
|
||||
}).has_value()));
|
||||
scene->activate_view();
|
||||
scene->render();
|
||||
render_once(scene.get());
|
||||
auto wheel = std::make_unique<Wheel_Event>();
|
||||
wheel->position = {50.0, 0.0};
|
||||
wheel->angle_delta_y = 120.0;
|
||||
scene->dispatch_event(std::move(wheel));
|
||||
scene->render();
|
||||
render_once(scene.get());
|
||||
EXPECT_EQ(axis->coordinate_range(), (Axis_Range{0.5, 9.5}));
|
||||
auto press = std::make_unique<Pointer_Event>(Event_Type::pointer_press);
|
||||
press->position = {50.0, 0.0};
|
||||
@@ -120,7 +130,7 @@ TEST(axis_event, numeric_axis_wheel_zoom_and_drag_update_authoritative_range) {
|
||||
auto move = std::make_unique<Pointer_Event>(Event_Type::pointer_move);
|
||||
move->position = {60.0, 0.0};
|
||||
scene->dispatch_event(std::move(move));
|
||||
scene->render();
|
||||
render_once(scene.get());
|
||||
EXPECT_EQ(axis->coordinate_range(), (Axis_Range{-0.4, 8.6}));
|
||||
}
|
||||
TEST(axis_event, scene_routes_pointer_interaction_to_the_nearest_axis_segment) {
|
||||
@@ -143,13 +153,13 @@ TEST(axis_event, scene_routes_pointer_interaction_to_the_nearest_axis_segment) {
|
||||
paint.add(horizontal.get()); paint.add(vertical.get());
|
||||
}).has_value()));
|
||||
scene->activate_view();
|
||||
scene->render();
|
||||
render_once(scene.get());
|
||||
|
||||
auto near_vertical = std::make_unique<Wheel_Event>();
|
||||
near_vertical->position = {22.0, 80.0};
|
||||
near_vertical->angle_delta_y = 120.0;
|
||||
scene->dispatch_event(std::move(near_vertical));
|
||||
scene->render();
|
||||
render_once(scene.get());
|
||||
EXPECT_DOUBLE_EQ(horizontal->coordinate_range().size(), 10.0);
|
||||
EXPECT_DOUBLE_EQ(vertical->coordinate_range().size(), 9.0);
|
||||
|
||||
@@ -157,7 +167,7 @@ TEST(axis_event, scene_routes_pointer_interaction_to_the_nearest_axis_segment) {
|
||||
near_horizontal->position = {120.0, 178.0};
|
||||
near_horizontal->angle_delta_y = 120.0;
|
||||
scene->dispatch_event(std::move(near_horizontal));
|
||||
scene->render();
|
||||
render_once(scene.get());
|
||||
EXPECT_DOUBLE_EQ(horizontal->coordinate_range().size(), 9.0);
|
||||
EXPECT_DOUBLE_EQ(vertical->coordinate_range().size(), 9.0);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user