Add quick panel service boundary
This commit is contained in:
@@ -1,8 +1,57 @@
|
||||
#include "app_core/quick_ui.h"
|
||||
#include "test_harness.h"
|
||||
|
||||
#include <string>
|
||||
|
||||
namespace {
|
||||
|
||||
class FakeQuickUiServices final : public pp::app::QuickUiServices {
|
||||
public:
|
||||
void select_slot(pp::app::QuickUiSlotKind slot_kind, int slot_index, bool fire_event) override
|
||||
{
|
||||
selects += 1;
|
||||
last_slot_kind = slot_kind;
|
||||
last_slot_index = slot_index;
|
||||
last_fire_event = fire_event;
|
||||
call_order += "select;";
|
||||
}
|
||||
|
||||
void open_slot_popup(pp::app::QuickUiSlotKind slot_kind, int slot_index) override
|
||||
{
|
||||
popups += 1;
|
||||
last_slot_kind = slot_kind;
|
||||
last_slot_index = slot_index;
|
||||
call_order += "popup;";
|
||||
}
|
||||
|
||||
void restore_state(int brush_index, int color_index, bool fire_event) override
|
||||
{
|
||||
restores += 1;
|
||||
last_brush_index = brush_index;
|
||||
last_color_index = color_index;
|
||||
last_fire_event = fire_event;
|
||||
call_order += "restore;";
|
||||
}
|
||||
|
||||
void reset_state(bool fire_event) override
|
||||
{
|
||||
resets += 1;
|
||||
last_fire_event = fire_event;
|
||||
call_order += "reset;";
|
||||
}
|
||||
|
||||
int selects = 0;
|
||||
int popups = 0;
|
||||
int restores = 0;
|
||||
int resets = 0;
|
||||
pp::app::QuickUiSlotKind last_slot_kind = pp::app::QuickUiSlotKind::brush;
|
||||
int last_slot_index = -1;
|
||||
int last_brush_index = -1;
|
||||
int last_color_index = -1;
|
||||
bool last_fire_event = false;
|
||||
std::string call_order;
|
||||
};
|
||||
|
||||
void slot_click_selects_or_opens_popup(pp::tests::Harness& harness)
|
||||
{
|
||||
const auto select_brush = pp::app::plan_quick_slot_click(pp::app::QuickUiSlotKind::brush, 0, 2, 3);
|
||||
@@ -12,6 +61,7 @@ void slot_click_selects_or_opens_popup(pp::tests::Harness& harness)
|
||||
PP_EXPECT(harness, select_brush.value().slot_kind == pp::app::QuickUiSlotKind::brush);
|
||||
PP_EXPECT(harness, select_brush.value().slot_index == 2);
|
||||
PP_EXPECT(harness, select_brush.value().previous_index == 0);
|
||||
PP_EXPECT(harness, select_brush.value().brush_index == 2);
|
||||
PP_EXPECT(harness, select_brush.value().updates_selection);
|
||||
PP_EXPECT(harness, select_brush.value().invokes_change_callback);
|
||||
PP_EXPECT(harness, select_brush.value().mutates_quick_state);
|
||||
@@ -49,6 +99,8 @@ void restore_and_reset_validate_state(pp::tests::Harness& harness)
|
||||
PP_EXPECT(harness, restore);
|
||||
if (restore) {
|
||||
PP_EXPECT(harness, restore.value().operation == pp::app::QuickUiOperation::restore_state);
|
||||
PP_EXPECT(harness, restore.value().brush_index == 2);
|
||||
PP_EXPECT(harness, restore.value().color_index == 1);
|
||||
PP_EXPECT(harness, restore.value().slot_count == 3);
|
||||
PP_EXPECT(harness, restore.value().fire_event);
|
||||
PP_EXPECT(harness, restore.value().restores_slots);
|
||||
@@ -60,6 +112,8 @@ void restore_and_reset_validate_state(pp::tests::Harness& harness)
|
||||
PP_EXPECT(harness, reset);
|
||||
if (reset) {
|
||||
PP_EXPECT(harness, reset.value().operation == pp::app::QuickUiOperation::reset_state);
|
||||
PP_EXPECT(harness, reset.value().brush_index == 0);
|
||||
PP_EXPECT(harness, reset.value().color_index == 0);
|
||||
PP_EXPECT(harness, reset.value().resets_slots);
|
||||
PP_EXPECT(harness, reset.value().redraws_brush_previews);
|
||||
PP_EXPECT(harness, !reset.value().invokes_change_callback);
|
||||
@@ -71,6 +125,89 @@ void restore_and_reset_validate_state(pp::tests::Harness& harness)
|
||||
PP_EXPECT(harness, !pp::app::plan_quick_state_reset(0, false));
|
||||
}
|
||||
|
||||
void executor_dispatches_selection_popup_restore_and_reset(pp::tests::Harness& harness)
|
||||
{
|
||||
FakeQuickUiServices services;
|
||||
|
||||
const auto select = pp::app::plan_quick_slot_click(pp::app::QuickUiSlotKind::brush, 0, 2, 3);
|
||||
PP_EXPECT(harness, select);
|
||||
if (select) {
|
||||
PP_EXPECT(harness, pp::app::execute_quick_ui_plan(select.value(), services).ok());
|
||||
}
|
||||
|
||||
const auto popup = pp::app::plan_quick_slot_click(pp::app::QuickUiSlotKind::color, 1, 1, 3);
|
||||
PP_EXPECT(harness, popup);
|
||||
if (popup) {
|
||||
PP_EXPECT(harness, pp::app::execute_quick_ui_plan(popup.value(), services).ok());
|
||||
}
|
||||
|
||||
const auto restore = pp::app::plan_quick_state_restore(2, 1, 3, true);
|
||||
PP_EXPECT(harness, restore);
|
||||
if (restore) {
|
||||
PP_EXPECT(harness, pp::app::execute_quick_ui_plan(restore.value(), services).ok());
|
||||
}
|
||||
|
||||
const auto reset = pp::app::plan_quick_state_reset(3, false);
|
||||
PP_EXPECT(harness, reset);
|
||||
if (reset) {
|
||||
PP_EXPECT(harness, pp::app::execute_quick_ui_plan(reset.value(), services).ok());
|
||||
}
|
||||
|
||||
PP_EXPECT(harness, services.selects == 1);
|
||||
PP_EXPECT(harness, services.popups == 1);
|
||||
PP_EXPECT(harness, services.restores == 1);
|
||||
PP_EXPECT(harness, services.resets == 1);
|
||||
PP_EXPECT(harness, services.last_brush_index == 2);
|
||||
PP_EXPECT(harness, services.last_color_index == 1);
|
||||
PP_EXPECT(harness, !services.last_fire_event);
|
||||
PP_EXPECT(harness, services.call_order == "select;popup;restore;reset;");
|
||||
}
|
||||
|
||||
void executor_rejects_malformed_quick_plans(pp::tests::Harness& harness)
|
||||
{
|
||||
FakeQuickUiServices services;
|
||||
|
||||
pp::app::QuickUiPlan select;
|
||||
select.operation = pp::app::QuickUiOperation::select_slot;
|
||||
select.slot_index = 0;
|
||||
select.slot_count = 3;
|
||||
select.updates_selection = false;
|
||||
PP_EXPECT(harness, !pp::app::execute_quick_ui_plan(select, services).ok());
|
||||
|
||||
pp::app::QuickUiPlan popup;
|
||||
popup.operation = pp::app::QuickUiOperation::open_slot_popup;
|
||||
popup.slot_index = 0;
|
||||
popup.slot_count = 3;
|
||||
PP_EXPECT(harness, !pp::app::execute_quick_ui_plan(popup, services).ok());
|
||||
|
||||
pp::app::QuickUiPlan mismatched_popup;
|
||||
mismatched_popup.operation = pp::app::QuickUiOperation::open_slot_popup;
|
||||
mismatched_popup.slot_kind = pp::app::QuickUiSlotKind::color;
|
||||
mismatched_popup.slot_index = 0;
|
||||
mismatched_popup.slot_count = 3;
|
||||
mismatched_popup.opens_brush_popup = true;
|
||||
PP_EXPECT(harness, !pp::app::execute_quick_ui_plan(mismatched_popup, services).ok());
|
||||
|
||||
pp::app::QuickUiPlan restore;
|
||||
restore.operation = pp::app::QuickUiOperation::restore_state;
|
||||
restore.slot_count = 3;
|
||||
restore.brush_index = 2;
|
||||
restore.color_index = 3;
|
||||
restore.restores_slots = true;
|
||||
PP_EXPECT(harness, !pp::app::execute_quick_ui_plan(restore, services).ok());
|
||||
|
||||
pp::app::QuickUiPlan reset;
|
||||
reset.operation = pp::app::QuickUiOperation::reset_state;
|
||||
reset.slot_count = 0;
|
||||
reset.resets_slots = true;
|
||||
PP_EXPECT(harness, !pp::app::execute_quick_ui_plan(reset, services).ok());
|
||||
|
||||
PP_EXPECT(harness, services.selects == 0);
|
||||
PP_EXPECT(harness, services.popups == 0);
|
||||
PP_EXPECT(harness, services.restores == 0);
|
||||
PP_EXPECT(harness, services.resets == 0);
|
||||
}
|
||||
|
||||
} // namespace
|
||||
|
||||
int main()
|
||||
@@ -79,5 +216,7 @@ int main()
|
||||
harness.run("slot click selects or opens popup", slot_click_selects_or_opens_popup);
|
||||
harness.run("slot click rejects invalid indices", slot_click_rejects_invalid_indices);
|
||||
harness.run("restore and reset validate state", restore_and_reset_validate_state);
|
||||
harness.run("executor dispatches selection popup restore and reset", executor_dispatches_selection_popup_restore_and_reset);
|
||||
harness.run("executor rejects malformed quick plans", executor_rejects_malformed_quick_plans);
|
||||
return harness.finish();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user