Extract export menu action planning

This commit is contained in:
2026-06-03 11:48:34 +02:00
parent ef50f4a361
commit 65b262207c
7 changed files with 394 additions and 9 deletions

View File

@@ -631,6 +631,30 @@ if(TARGET pano_cli)
LABELS "app;integration;desktop-fast;fuzz"
PASS_REGULAR_EXPRESSION "\"command\":\"plan-export-start\".*\"requiresLicense\":false.*\"hasCanvas\":false.*\"decision\":\"unavailable-no-canvas\"")
add_test(NAME pano_cli_plan_export_menu_png_smoke
COMMAND pano_cli plan-export-menu --kind png)
set_tests_properties(pano_cli_plan_export_menu_png_smoke PROPERTIES
LABELS "app;integration;desktop-fast"
PASS_REGULAR_EXPRESSION "\"command\":\"plan-export-menu\".*\"kind\":\"png\".*\"action\":\"show-png-dialog\".*\"opensDialog\":true")
add_test(NAME pano_cli_plan_export_menu_mp4_demo_blocked_smoke
COMMAND pano_cli plan-export-menu --kind animation-mp4 --demo)
set_tests_properties(pano_cli_plan_export_menu_mp4_demo_blocked_smoke PROPERTIES
LABELS "app;integration;desktop-fast"
PASS_REGULAR_EXPRESSION "\"command\":\"plan-export-menu\".*\"kind\":\"animation-mp4\".*\"licenseValid\":false.*\"action\":\"show-license-disabled\".*\"opensDialog\":false")
add_test(NAME pano_cli_plan_export_menu_no_canvas_smoke
COMMAND pano_cli plan-export-menu --kind layers --no-canvas)
set_tests_properties(pano_cli_plan_export_menu_no_canvas_smoke PROPERTIES
LABELS "app;integration;desktop-fast"
PASS_REGULAR_EXPRESSION "\"command\":\"plan-export-menu\".*\"kind\":\"layers\".*\"hasCanvas\":false.*\"action\":\"unavailable-no-canvas\".*\"opensDialog\":false")
add_test(NAME pano_cli_plan_export_menu_rejects_unknown
COMMAND pano_cli plan-export-menu --kind unknown)
set_tests_properties(pano_cli_plan_export_menu_rejects_unknown PROPERTIES
LABELS "app;integration;desktop-fast;fuzz"
WILL_FAIL TRUE)
add_test(NAME pano_cli_plan_export_target_file_smoke
COMMAND pano_cli plan-export-target --kind file --work-dir D:/Paint --doc-name demo --extension .png)
set_tests_properties(pano_cli_plan_export_target_file_smoke PROPERTIES

View File

@@ -78,6 +78,51 @@ void export_start_reports_missing_canvas_after_license_gate(pp::tests::Harness&
== pp::app::DocumentExportStartDecision::show_license_disabled);
}
void export_menu_routes_image_dialogs_without_license(pp::tests::Harness& harness)
{
const auto jpeg = pp::app::plan_document_export_menu_action(
pp::app::DocumentExportMenuKind::jpeg,
true,
false);
const auto png = pp::app::plan_document_export_menu_action(
pp::app::DocumentExportMenuKind::png,
true,
false);
PP_EXPECT(harness, jpeg.action == pp::app::DocumentExportMenuAction::show_jpeg_dialog);
PP_EXPECT(harness, jpeg.opens_dialog);
PP_EXPECT(harness, png.action == pp::app::DocumentExportMenuAction::show_png_dialog);
PP_EXPECT(harness, png.opens_dialog);
}
void export_menu_blocks_video_when_license_is_missing(pp::tests::Harness& harness)
{
const auto mp4 = pp::app::plan_document_export_menu_action(
pp::app::DocumentExportMenuKind::animation_mp4,
true,
false);
const auto timelapse = pp::app::plan_document_export_menu_action(
pp::app::DocumentExportMenuKind::timelapse,
true,
false);
PP_EXPECT(harness, mp4.action == pp::app::DocumentExportMenuAction::show_license_disabled);
PP_EXPECT(harness, !mp4.opens_dialog);
PP_EXPECT(harness, timelapse.action == pp::app::DocumentExportMenuAction::show_license_disabled);
PP_EXPECT(harness, !timelapse.opens_dialog);
}
void export_menu_reports_missing_canvas_for_unlicensed_image_exports(pp::tests::Harness& harness)
{
const auto plan = pp::app::plan_document_export_menu_action(
pp::app::DocumentExportMenuKind::layers,
false,
true);
PP_EXPECT(harness, plan.action == pp::app::DocumentExportMenuAction::unavailable_no_canvas);
PP_EXPECT(harness, !plan.opens_dialog);
}
}
int main()
@@ -91,5 +136,8 @@ int main()
harness.run("export start allows valid canvas state", export_start_allows_valid_canvas_state);
harness.run("export start blocks demo only when license required", export_start_blocks_demo_only_when_license_required);
harness.run("export start reports missing canvas after license gate", export_start_reports_missing_canvas_after_license_gate);
harness.run("export menu routes image dialogs without license", export_menu_routes_image_dialogs_without_license);
harness.run("export menu blocks video when license is missing", export_menu_blocks_video_when_license_is_missing);
harness.run("export menu reports missing canvas for unlicensed image exports", export_menu_reports_missing_canvas_for_unlicensed_image_exports);
return harness.finish();
}