Centralize legacy app preferences

This commit is contained in:
2026-06-04 14:18:18 +02:00
parent ca5b94b044
commit f8243566c4
9 changed files with 352 additions and 22 deletions

View File

@@ -2,9 +2,63 @@
#include "test_harness.h"
#include <array>
#include <string>
namespace {
class FakeAppPreferenceServices final : public pp::app::AppPreferenceServices {
public:
void apply_ui_scale(const pp::app::ScaleApplicationPlan& plan) override
{
ui_scale = plan.scale;
ui_font_scale = plan.font_scale;
call_order += "ui-scale;";
}
void apply_viewport_scale(const pp::app::ScaleApplicationPlan& plan) override
{
viewport_scale = plan.scale;
viewport_font_scale = plan.font_scale;
call_order += "viewport-scale;";
}
void apply_interface_direction(const pp::app::InterfaceDirectionPlan& plan) override
{
interface_direction = plan.direction;
call_order += "direction;";
}
void apply_vr_controllers_preference(const pp::app::StoredBooleanPreferencePlan& plan) override
{
vr_controllers = plan.value;
call_order += "vr-controllers;";
}
void apply_timelapse_preference(const pp::app::TimelapsePreferencePlan& plan) override
{
timelapse_enabled = plan.enabled;
timelapse_action = plan.recording_action;
call_order += "timelapse;";
}
void apply_canvas_cursor_mode(const pp::app::StoredIntegerPreferencePlan& plan) override
{
cursor_mode = plan.value;
call_order += "cursor;";
}
float ui_scale = 0.0F;
float ui_font_scale = 0.0F;
float viewport_scale = 0.0F;
float viewport_font_scale = 0.0F;
pp::app::InterfaceDirection interface_direction = pp::app::InterfaceDirection::left_to_right;
bool vr_controllers = false;
bool timelapse_enabled = false;
pp::app::TimelapseRecordingAction timelapse_action = pp::app::TimelapseRecordingAction::no_op;
int cursor_mode = -1;
std::string call_order;
};
void ui_scale_computes_font_scale_from_display_density(pp::tests::Harness& harness)
{
const auto plan = pp::app::plan_ui_scale(1.5F, 2.0F);
@@ -71,6 +125,40 @@ void simple_preferences_preserve_values_for_storage(pp::tests::Harness& harness)
PP_EXPECT(harness, pp::app::plan_canvas_cursor_mode(2).value == 2);
}
void preference_executor_dispatches_side_effect_plans(pp::tests::Harness& harness)
{
FakeAppPreferenceServices services;
PP_EXPECT(harness, pp::app::execute_ui_scale_preference(1.5F, 2.0F, services).ok());
PP_EXPECT(harness, pp::app::execute_viewport_scale_preference(1.25F, 1.0F, services).ok());
PP_EXPECT(harness, pp::app::execute_interface_direction_preference(true, services).ok());
PP_EXPECT(harness, pp::app::execute_vr_controllers_preference(true, services).ok());
PP_EXPECT(harness, pp::app::execute_timelapse_preference(true, false, services).ok());
PP_EXPECT(harness, pp::app::execute_canvas_cursor_mode_preference(2, services).ok());
PP_EXPECT(harness, services.ui_scale == 1.5F);
PP_EXPECT(harness, services.ui_font_scale == 3.0F);
PP_EXPECT(harness, services.viewport_scale == 1.25F);
PP_EXPECT(harness, services.viewport_font_scale == 1.25F);
PP_EXPECT(harness, services.interface_direction == pp::app::InterfaceDirection::right_to_left);
PP_EXPECT(harness, services.vr_controllers);
PP_EXPECT(harness, services.timelapse_enabled);
PP_EXPECT(harness, services.timelapse_action == pp::app::TimelapseRecordingAction::start_recording);
PP_EXPECT(harness, services.cursor_mode == 2);
PP_EXPECT(
harness,
services.call_order == "ui-scale;viewport-scale;direction;vr-controllers;timelapse;cursor;");
}
void preference_executor_preserves_timelapse_stop_action(pp::tests::Harness& harness)
{
FakeAppPreferenceServices services;
PP_EXPECT(harness, pp::app::execute_timelapse_preference(false, true, services).ok());
PP_EXPECT(harness, !services.timelapse_enabled);
PP_EXPECT(harness, services.timelapse_action == pp::app::TimelapseRecordingAction::stop_recording);
}
}
int main()
@@ -88,5 +176,7 @@ int main()
"timelapse preference starts and stops only on state change",
timelapse_preference_starts_and_stops_only_on_state_change);
harness.run("simple preferences preserve values for storage", simple_preferences_preserve_values_for_storage);
harness.run("preference executor dispatches side effect plans", preference_executor_dispatches_side_effect_plans);
harness.run("preference executor preserves timelapse stop action", preference_executor_preserves_timelapse_stop_action);
return harness.finish();
}