Route document workflow prompts through app core

This commit is contained in:
2026-06-02 22:36:05 +02:00
parent d28aa25358
commit c8d769c02c
10 changed files with 130 additions and 96 deletions

View File

@@ -375,13 +375,13 @@ if(TARGET pano_cli)
COMMAND pano_cli simulate-app-session)
set_tests_properties(pano_cli_simulate_app_session_clean_smoke PROPERTIES
LABELS "app;integration;desktop-fast"
PASS_REGULAR_EXPRESSION "\"command\":\"simulate-app-session\".*\"newDocument\":false.*\"unsaved\":false.*\"closePromptOpen\":false.*\"projectOpen\":\"open-now\".*\"closeRequest\":\"close-now\".*\"saveIntent\":\"save\".*\"saveRequest\":\"no-op\"")
PASS_REGULAR_EXPRESSION "\"command\":\"simulate-app-session\".*\"hasCanvas\":true.*\"newDocument\":false.*\"unsaved\":false.*\"closePromptOpen\":false.*\"projectOpen\":\"open-now\".*\"closeRequest\":\"close-now\".*\"saveIntent\":\"save\".*\"saveRequest\":\"no-op\".*\"workflowStart\":\"continue-now\"")
add_test(NAME pano_cli_simulate_app_session_unsaved_smoke
COMMAND pano_cli simulate-app-session --unsaved)
set_tests_properties(pano_cli_simulate_app_session_unsaved_smoke PROPERTIES
LABELS "app;integration;desktop-fast"
PASS_REGULAR_EXPRESSION "\"command\":\"simulate-app-session\".*\"newDocument\":false.*\"unsaved\":true.*\"closePromptOpen\":false.*\"projectOpen\":\"prompt-discard-unsaved\".*\"closeRequest\":\"show-unsaved-prompt\".*\"saveRequest\":\"save-existing\"")
PASS_REGULAR_EXPRESSION "\"command\":\"simulate-app-session\".*\"hasCanvas\":true.*\"newDocument\":false.*\"unsaved\":true.*\"closePromptOpen\":false.*\"projectOpen\":\"prompt-discard-unsaved\".*\"closeRequest\":\"show-unsaved-prompt\".*\"saveRequest\":\"save-existing\".*\"workflowStart\":\"prompt-save-before-continue\"")
add_test(NAME pano_cli_simulate_app_session_existing_prompt_smoke
COMMAND pano_cli simulate-app-session --unsaved --close-prompt-open)
@@ -413,6 +413,12 @@ if(TARGET pano_cli)
LABELS "app;integration;desktop-fast"
PASS_REGULAR_EXPRESSION "\"command\":\"simulate-app-session\".*\"saveIntent\":\"save-dirty-version\".*\"saveRequest\":\"no-op\"")
add_test(NAME pano_cli_simulate_app_session_no_canvas_smoke
COMMAND pano_cli simulate-app-session --no-canvas)
set_tests_properties(pano_cli_simulate_app_session_no_canvas_smoke PROPERTIES
LABELS "app;integration;desktop-fast"
PASS_REGULAR_EXPRESSION "\"command\":\"simulate-app-session\".*\"hasCanvas\":false.*\"workflowStart\":\"unavailable\"")
add_test(NAME pano_cli_save_project_roundtrip_smoke
COMMAND "${CMAKE_COMMAND}"
-DPANO_CLI=$<TARGET_FILE:pano_cli>

View File

@@ -87,6 +87,34 @@ void save_version_respects_menu_and_hotkey_behaviors(pp::tests::Harness& harness
== pp::app::DocumentSaveDecision::show_save_dialog);
}
void workflow_without_canvas_is_unavailable(pp::tests::Harness& harness)
{
PP_EXPECT(
harness,
pp::app::plan_document_workflow(false, false)
== pp::app::DocumentWorkflowDecision::unavailable);
PP_EXPECT(
harness,
pp::app::plan_document_workflow(false, true)
== pp::app::DocumentWorkflowDecision::unavailable);
}
void workflow_with_clean_canvas_continues_now(pp::tests::Harness& harness)
{
PP_EXPECT(
harness,
pp::app::plan_document_workflow(true, false)
== pp::app::DocumentWorkflowDecision::continue_now);
}
void workflow_with_dirty_canvas_prompts_for_save(pp::tests::Harness& harness)
{
PP_EXPECT(
harness,
pp::app::plan_document_workflow(true, true)
== pp::app::DocumentWorkflowDecision::prompt_save_before_continue);
}
}
int main()
@@ -100,5 +128,8 @@ int main()
harness.run("save new or dirty document has user visible work", save_new_or_dirty_document_has_user_visible_work);
harness.run("save as always shows save dialog", save_as_always_shows_save_dialog);
harness.run("save version respects menu and hotkey behaviors", save_version_respects_menu_and_hotkey_behaviors);
harness.run("workflow without canvas is unavailable", workflow_without_canvas_is_unavailable);
harness.run("workflow with clean canvas continues now", workflow_with_clean_canvas_continues_now);
harness.run("workflow with dirty canvas prompts for save", workflow_with_dirty_canvas_prompts_for_save);
return harness.finish();
}