Extract layer menu action planning

This commit is contained in:
2026-06-03 12:05:13 +02:00
parent 6dac909869
commit fb844f79fd
7 changed files with 440 additions and 40 deletions

View File

@@ -178,6 +178,115 @@ void layer_highlight_is_transient(pp::tests::Harness& harness)
PP_EXPECT(harness, !pp::app::plan_document_layer_highlight(2, 2, true));
}
void layer_menu_labels_selected_layer_commands(pp::tests::Harness& harness)
{
const auto clear = pp::app::plan_document_layer_menu(
pp::app::DocumentLayerMenuCommand::clear,
true,
1,
1,
"Paint",
"Base");
const auto rename = pp::app::plan_document_layer_menu(
pp::app::DocumentLayerMenuCommand::rename,
true,
1,
1,
"Paint",
"Base");
PP_EXPECT(harness, clear);
PP_EXPECT(harness, rename);
if (clear) {
PP_EXPECT(harness, clear.value().label == "Clear Layer Paint");
PP_EXPECT(harness, clear.value().action == pp::app::DocumentLayerMenuAction::clear_current_layer);
}
if (rename) {
PP_EXPECT(harness, rename.value().label == "Rename Layer Paint");
PP_EXPECT(harness, rename.value().action == pp::app::DocumentLayerMenuAction::show_rename_dialog);
}
}
void layer_menu_plans_merge_down_or_blocks_it(pp::tests::Harness& harness)
{
const auto merge = pp::app::plan_document_layer_menu(
pp::app::DocumentLayerMenuCommand::merge_down,
true,
2,
1,
"Ink",
"Paint");
const auto base_layer = pp::app::plan_document_layer_menu(
pp::app::DocumentLayerMenuCommand::merge_down,
true,
0,
1,
"Base",
"");
const auto animated = pp::app::plan_document_layer_menu(
pp::app::DocumentLayerMenuCommand::merge_down,
true,
2,
3,
"Ink",
"Paint");
PP_EXPECT(harness, merge);
PP_EXPECT(harness, base_layer);
PP_EXPECT(harness, animated);
if (merge) {
PP_EXPECT(harness, merge.value().label == "Merge with Paint");
PP_EXPECT(harness, merge.value().from_index == 2);
PP_EXPECT(harness, merge.value().to_index == 1);
PP_EXPECT(harness, merge.value().action == pp::app::DocumentLayerMenuAction::merge_with_lower_layer);
}
if (base_layer) {
PP_EXPECT(harness, base_layer.value().action == pp::app::DocumentLayerMenuAction::no_op_select_upper_layer);
PP_EXPECT(harness, base_layer.value().label == "Merge Layer (Select upper layers)");
}
if (animated) {
PP_EXPECT(
harness,
animated.value().action == pp::app::DocumentLayerMenuAction::show_merge_animated_not_supported);
}
}
void layer_menu_handles_missing_selection_and_bad_state(pp::tests::Harness& harness)
{
const auto missing = pp::app::plan_document_layer_menu(
pp::app::DocumentLayerMenuCommand::rename,
false,
0,
1,
"",
"");
PP_EXPECT(harness, missing);
if (missing) {
PP_EXPECT(harness, missing.value().action == pp::app::DocumentLayerMenuAction::no_op_select_layer);
PP_EXPECT(harness, missing.value().label == "Rename Layer (Select a layer)");
}
PP_EXPECT(
harness,
!pp::app::plan_document_layer_menu(
pp::app::DocumentLayerMenuCommand::merge_down,
true,
-1,
1,
"Ink",
"Paint"));
PP_EXPECT(
harness,
!pp::app::plan_document_layer_menu(
pp::app::DocumentLayerMenuCommand::merge_down,
true,
1,
-1,
"Ink",
"Paint"));
}
}
int main()
@@ -192,5 +301,8 @@ int main()
harness.run("layer remove keeps at least one layer", layer_remove_keeps_at_least_one_layer);
harness.run("layer metadata plans validate values", layer_metadata_plans_validate_values);
harness.run("layer highlight is transient", layer_highlight_is_transient);
harness.run("layer menu labels selected layer commands", layer_menu_labels_selected_layer_commands);
harness.run("layer menu plans merge down or blocks it", layer_menu_plans_merge_down_or_blocks_it);
harness.run("layer menu handles missing selection and bad state", layer_menu_handles_missing_selection_and_bad_state);
return harness.finish();
}