#include "app_core/app_frame.h" #include "test_harness.h" #include namespace { void initial_surface_matches_legacy_default(pp::tests::Harness& harness) { const auto plan = pp::app::plan_app_initial_surface(); PP_EXPECT(harness, plan.width == 960.0F); PP_EXPECT(harness, plan.height == 540.0F); } void update_plan_skips_idle_frames(pp::tests::Harness& harness) { const auto plan = pp::app::plan_app_frame_update(false, false); PP_EXPECT(harness, !plan.update_frame); PP_EXPECT(harness, !plan.update_layouts); PP_EXPECT(harness, !plan.refresh_canvas_toolbar); } void update_plan_refreshes_redraw_or_animated_frames(pp::tests::Harness& harness) { const auto redraw = pp::app::plan_app_frame_update(true, false); const auto animated = pp::app::plan_app_frame_update(false, true); PP_EXPECT(harness, redraw.update_frame); PP_EXPECT(harness, redraw.update_layouts); PP_EXPECT(harness, redraw.refresh_canvas_toolbar); PP_EXPECT(harness, animated.update_frame); PP_EXPECT(harness, animated.update_layouts); PP_EXPECT(harness, animated.refresh_canvas_toolbar); } void draw_plan_selects_canvas_and_ui_passes(pp::tests::Harness& harness) { const auto plan = pp::app::plan_app_frame_draw(true, true, true, true, false); PP_EXPECT(harness, plan.draw_canvas_stroke); PP_EXPECT(harness, plan.draw_vr_ui); PP_EXPECT(harness, plan.draw_main_ui); PP_EXPECT(harness, plan.reset_redraw); } void draw_plan_skips_missing_canvas_document(pp::tests::Harness& harness) { const auto missing_node = pp::app::plan_app_frame_draw(false, true, false, true, false); const auto missing_document = pp::app::plan_app_frame_draw(true, false, false, true, false); PP_EXPECT(harness, !missing_node.draw_canvas_stroke); PP_EXPECT(harness, !missing_document.draw_canvas_stroke); } void draw_plan_respects_vr_visibility_modes(pp::tests::Harness& harness) { const auto hidden_vr_ui = pp::app::plan_app_frame_draw(true, true, true, false, false); const auto vr_only = pp::app::plan_app_frame_draw(true, true, false, true, true); PP_EXPECT(harness, !hidden_vr_ui.draw_vr_ui); PP_EXPECT(harness, hidden_vr_ui.draw_main_ui); PP_EXPECT(harness, !vr_only.draw_vr_ui); PP_EXPECT(harness, !vr_only.draw_main_ui); } void tick_plan_selects_available_layouts(pp::tests::Harness& harness) { const auto both = pp::app::plan_app_frame_tick(true, true); const auto main_only = pp::app::plan_app_frame_tick(false, true); const auto none = pp::app::plan_app_frame_tick(false, false); PP_EXPECT(harness, both.tick_designer_layout); PP_EXPECT(harness, both.tick_main_layout); PP_EXPECT(harness, !main_only.tick_designer_layout); PP_EXPECT(harness, main_only.tick_main_layout); PP_EXPECT(harness, !none.tick_designer_layout); PP_EXPECT(harness, !none.tick_main_layout); } void resize_plan_projects_render_target_and_redraw(pp::tests::Harness& harness) { const auto plan = pp::app::plan_app_resize(1280.9F, 720.1F); PP_EXPECT(harness, plan); if (plan) { PP_EXPECT(harness, plan.value().width == 1280.9F); PP_EXPECT(harness, plan.value().height == 720.1F); PP_EXPECT(harness, plan.value().render_target_width == 1280); PP_EXPECT(harness, plan.value().render_target_height == 720); PP_EXPECT(harness, plan.value().recreate_ui_render_target); PP_EXPECT(harness, plan.value().request_redraw); } } void resize_plan_rejects_invalid_dimensions(pp::tests::Harness& harness) { PP_EXPECT(harness, !pp::app::plan_app_resize(0.0F, 720.0F)); PP_EXPECT(harness, !pp::app::plan_app_resize(1280.0F, -1.0F)); PP_EXPECT(harness, !pp::app::plan_app_resize(std::nanf(""), 720.0F)); } } // namespace int main() { pp::tests::Harness harness; harness.run("initial surface matches legacy default", initial_surface_matches_legacy_default); harness.run("update plan skips idle frames", update_plan_skips_idle_frames); harness.run("update plan refreshes redraw or animated frames", update_plan_refreshes_redraw_or_animated_frames); harness.run("draw plan selects canvas and UI passes", draw_plan_selects_canvas_and_ui_passes); harness.run("draw plan skips missing canvas document", draw_plan_skips_missing_canvas_document); harness.run("draw plan respects VR visibility modes", draw_plan_respects_vr_visibility_modes); harness.run("tick plan selects available layouts", tick_plan_selects_available_layouts); harness.run("resize plan projects render target and redraw", resize_plan_projects_render_target_and_redraw); harness.run("resize plan rejects invalid dimensions", resize_plan_rejects_invalid_dimensions); return harness.finish(); }