Add main toolbar service boundary
This commit is contained in:
@@ -3,6 +3,39 @@
|
||||
|
||||
namespace {
|
||||
|
||||
class FakeMainToolbarServices final : public pp::app::MainToolbarServices {
|
||||
public:
|
||||
void show_open_dialog() override { open_dialogs += 1; }
|
||||
void show_save_dialog() override { save_dialogs += 1; }
|
||||
void invoke_undo() override { undo_calls += 1; }
|
||||
void invoke_redo() override { redo_calls += 1; }
|
||||
void clear_history() override { clear_history_calls += 1; }
|
||||
void clear_canvas() override { clear_canvas_calls += 1; }
|
||||
void show_message_box() override { message_boxes += 1; }
|
||||
void show_settings_dialog() override { settings_dialogs += 1; }
|
||||
|
||||
[[nodiscard]] int total_calls() const noexcept
|
||||
{
|
||||
return open_dialogs
|
||||
+ save_dialogs
|
||||
+ undo_calls
|
||||
+ redo_calls
|
||||
+ clear_history_calls
|
||||
+ clear_canvas_calls
|
||||
+ message_boxes
|
||||
+ settings_dialogs;
|
||||
}
|
||||
|
||||
int open_dialogs = 0;
|
||||
int save_dialogs = 0;
|
||||
int undo_calls = 0;
|
||||
int redo_calls = 0;
|
||||
int clear_history_calls = 0;
|
||||
int clear_canvas_calls = 0;
|
||||
int message_boxes = 0;
|
||||
int settings_dialogs = 0;
|
||||
};
|
||||
|
||||
void direct_dialog_commands_are_available(pp::tests::Harness& harness)
|
||||
{
|
||||
const auto open = pp::app::plan_main_toolbar_command(pp::app::MainToolbarCommand::open_document);
|
||||
@@ -101,6 +134,49 @@ void rejects_negative_history_metrics(pp::tests::Harness& harness)
|
||||
PP_EXPECT(harness, !pp::app::plan_main_toolbar_command(pp::app::MainToolbarCommand::clear_history, 0, 0, -1));
|
||||
}
|
||||
|
||||
void executor_dispatches_to_service_boundary(pp::tests::Harness& harness)
|
||||
{
|
||||
FakeMainToolbarServices services;
|
||||
|
||||
auto open = pp::app::plan_main_toolbar_command(pp::app::MainToolbarCommand::open_document);
|
||||
PP_EXPECT(harness, open);
|
||||
if (open) {
|
||||
const auto status = pp::app::execute_main_toolbar_plan(open.value(), services);
|
||||
PP_EXPECT(harness, status.ok());
|
||||
PP_EXPECT(harness, services.open_dialogs == 1);
|
||||
}
|
||||
|
||||
auto undo = pp::app::plan_main_toolbar_command(pp::app::MainToolbarCommand::undo, 1);
|
||||
PP_EXPECT(harness, undo);
|
||||
if (undo) {
|
||||
const auto status = pp::app::execute_main_toolbar_plan(undo.value(), services);
|
||||
PP_EXPECT(harness, status.ok());
|
||||
PP_EXPECT(harness, services.undo_calls == 1);
|
||||
}
|
||||
|
||||
auto clear_canvas = pp::app::plan_main_toolbar_command(
|
||||
pp::app::MainToolbarCommand::clear_canvas,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
true);
|
||||
PP_EXPECT(harness, clear_canvas);
|
||||
if (clear_canvas) {
|
||||
const auto status = pp::app::execute_main_toolbar_plan(clear_canvas.value(), services);
|
||||
PP_EXPECT(harness, status.ok());
|
||||
PP_EXPECT(harness, services.clear_canvas_calls == 1);
|
||||
}
|
||||
|
||||
auto redo_empty = pp::app::plan_main_toolbar_command(pp::app::MainToolbarCommand::redo);
|
||||
PP_EXPECT(harness, redo_empty);
|
||||
if (redo_empty) {
|
||||
const int calls_before = services.total_calls();
|
||||
const auto status = pp::app::execute_main_toolbar_plan(redo_empty.value(), services);
|
||||
PP_EXPECT(harness, status.ok());
|
||||
PP_EXPECT(harness, services.total_calls() == calls_before);
|
||||
}
|
||||
}
|
||||
|
||||
} // namespace
|
||||
|
||||
int main()
|
||||
@@ -110,5 +186,6 @@ int main()
|
||||
harness.run("history commands reuse history breakpoints", history_commands_reuse_history_breakpoints);
|
||||
harness.run("canvas clear requires live canvas", canvas_clear_requires_live_canvas);
|
||||
harness.run("rejects negative history metrics", rejects_negative_history_metrics);
|
||||
harness.run("executor dispatches to service boundary", executor_dispatches_to_service_boundary);
|
||||
return harness.finish();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user