Extract main toolbar action planning
This commit is contained in:
114
tests/app_core/main_toolbar_tests.cpp
Normal file
114
tests/app_core/main_toolbar_tests.cpp
Normal file
@@ -0,0 +1,114 @@
|
||||
#include "app_core/main_toolbar.h"
|
||||
#include "test_harness.h"
|
||||
|
||||
namespace {
|
||||
|
||||
void direct_dialog_commands_are_available(pp::tests::Harness& harness)
|
||||
{
|
||||
const auto open = pp::app::plan_main_toolbar_command(pp::app::MainToolbarCommand::open_document);
|
||||
PP_EXPECT(harness, open);
|
||||
if (open) {
|
||||
PP_EXPECT(harness, open.value().action == pp::app::MainToolbarAction::show_open_dialog);
|
||||
PP_EXPECT(harness, open.value().label == "Open");
|
||||
PP_EXPECT(harness, !open.value().no_op);
|
||||
}
|
||||
|
||||
const auto save = pp::app::plan_main_toolbar_command(pp::app::MainToolbarCommand::save_document);
|
||||
PP_EXPECT(harness, save);
|
||||
if (save) {
|
||||
PP_EXPECT(harness, save.value().action == pp::app::MainToolbarAction::show_save_dialog);
|
||||
PP_EXPECT(harness, save.value().label == "Save");
|
||||
}
|
||||
|
||||
const auto settings = pp::app::plan_main_toolbar_command(pp::app::MainToolbarCommand::show_settings);
|
||||
PP_EXPECT(harness, settings);
|
||||
if (settings) {
|
||||
PP_EXPECT(harness, settings.value().action == pp::app::MainToolbarAction::show_settings_dialog);
|
||||
PP_EXPECT(harness, settings.value().label == "Settings");
|
||||
}
|
||||
}
|
||||
|
||||
void history_commands_reuse_history_breakpoints(pp::tests::Harness& harness)
|
||||
{
|
||||
const auto undo = pp::app::plan_main_toolbar_command(pp::app::MainToolbarCommand::undo, 2);
|
||||
PP_EXPECT(harness, undo);
|
||||
if (undo) {
|
||||
PP_EXPECT(harness, undo.value().action == pp::app::MainToolbarAction::invoke_undo);
|
||||
PP_EXPECT(harness, undo.value().updates_memory_label);
|
||||
PP_EXPECT(harness, undo.value().updates_title);
|
||||
PP_EXPECT(harness, !undo.value().no_op);
|
||||
}
|
||||
|
||||
const auto redo_empty = pp::app::plan_main_toolbar_command(pp::app::MainToolbarCommand::redo, 0, 0);
|
||||
PP_EXPECT(harness, redo_empty);
|
||||
if (redo_empty) {
|
||||
PP_EXPECT(harness, redo_empty.value().action == pp::app::MainToolbarAction::no_op_unavailable);
|
||||
PP_EXPECT(harness, redo_empty.value().label == "Redo (No history)");
|
||||
PP_EXPECT(harness, redo_empty.value().no_op);
|
||||
}
|
||||
|
||||
const auto clear = pp::app::plan_main_toolbar_command(
|
||||
pp::app::MainToolbarCommand::clear_history,
|
||||
0,
|
||||
0,
|
||||
2048);
|
||||
PP_EXPECT(harness, clear);
|
||||
if (clear) {
|
||||
PP_EXPECT(harness, clear.value().action == pp::app::MainToolbarAction::clear_history);
|
||||
PP_EXPECT(harness, clear.value().updates_memory_label);
|
||||
PP_EXPECT(harness, !clear.value().updates_title);
|
||||
}
|
||||
}
|
||||
|
||||
void canvas_clear_requires_live_canvas(pp::tests::Harness& harness)
|
||||
{
|
||||
const auto clear = pp::app::plan_main_toolbar_command(
|
||||
pp::app::MainToolbarCommand::clear_canvas,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
true);
|
||||
PP_EXPECT(harness, clear);
|
||||
if (clear) {
|
||||
PP_EXPECT(harness, clear.value().action == pp::app::MainToolbarAction::clear_canvas);
|
||||
PP_EXPECT(harness, clear.value().requires_canvas);
|
||||
PP_EXPECT(harness, clear.value().records_undo);
|
||||
PP_EXPECT(harness, clear.value().marks_unsaved);
|
||||
PP_EXPECT(harness, !clear.value().no_op);
|
||||
}
|
||||
|
||||
const auto missing_canvas = pp::app::plan_main_toolbar_command(
|
||||
pp::app::MainToolbarCommand::clear_canvas,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
false);
|
||||
PP_EXPECT(harness, missing_canvas);
|
||||
if (missing_canvas) {
|
||||
PP_EXPECT(harness, missing_canvas.value().action == pp::app::MainToolbarAction::no_op_unavailable);
|
||||
PP_EXPECT(harness, missing_canvas.value().label == "Clear Canvas (No canvas)");
|
||||
PP_EXPECT(harness, missing_canvas.value().requires_canvas);
|
||||
PP_EXPECT(harness, !missing_canvas.value().records_undo);
|
||||
PP_EXPECT(harness, !missing_canvas.value().marks_unsaved);
|
||||
PP_EXPECT(harness, missing_canvas.value().no_op);
|
||||
}
|
||||
}
|
||||
|
||||
void rejects_negative_history_metrics(pp::tests::Harness& harness)
|
||||
{
|
||||
PP_EXPECT(harness, !pp::app::plan_main_toolbar_command(pp::app::MainToolbarCommand::undo, -1));
|
||||
PP_EXPECT(harness, !pp::app::plan_main_toolbar_command(pp::app::MainToolbarCommand::redo, 0, -1));
|
||||
PP_EXPECT(harness, !pp::app::plan_main_toolbar_command(pp::app::MainToolbarCommand::clear_history, 0, 0, -1));
|
||||
}
|
||||
|
||||
} // namespace
|
||||
|
||||
int main()
|
||||
{
|
||||
pp::tests::Harness harness;
|
||||
harness.run("direct dialog commands are available", direct_dialog_commands_are_available);
|
||||
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);
|
||||
return harness.finish();
|
||||
}
|
||||
Reference in New Issue
Block a user