Move project save write planning to app core
This commit is contained in:
@@ -1530,7 +1530,7 @@ if(TARGET pano_cli)
|
||||
COMMAND pano_cli plan-canvas-project-save-target --data-dir D:/Paint/data --path D:/Paint/projects/demo.ppi)
|
||||
set_tests_properties(pano_cli_plan_canvas_project_save_target_smoke PROPERTIES
|
||||
LABELS "app;document;integration;desktop-fast"
|
||||
PASS_REGULAR_EXPRESSION "\"command\":\"plan-canvas-project-save-target\".*\"dataDirectory\":\"D:/Paint/data\".*\"targetPath\":\"D:/Paint/projects/demo.ppi\".*\"fileName\":\"demo\".*\"temporaryPath\":\"D:/Paint/data/demo.tmp.ppi\".*\"timelapsePath\":\"D:/Paint/data/demo.pptl\"")
|
||||
PASS_REGULAR_EXPRESSION "\"command\":\"plan-canvas-project-save-target\".*\"dataDirectory\":\"D:/Paint/data\".*\"targetPath\":\"D:/Paint/projects/demo.ppi\".*\"fileName\":\"demo\".*\"temporaryPath\":\"D:/Paint/data/demo.tmp.ppi\".*\"timelapsePath\":\"D:/Paint/data/demo.pptl\".*\"writePlan\":\\{\"action\":\"write-direct-to-target\",\"targetExists\":false,\"usesTemporary\":false,\"writePath\":\"D:/Paint/projects/demo.ppi\",\"fallbackDirectOnTemporaryOpenFailure\":false\\}")
|
||||
|
||||
add_test(NAME pano_cli_plan_canvas_project_save_target_backslash_smoke
|
||||
COMMAND pano_cli plan-canvas-project-save-target --data-dir D:/Paint/data --path "D:\\Paint\\projects\\demo.ppi")
|
||||
@@ -1538,6 +1538,12 @@ if(TARGET pano_cli)
|
||||
LABELS "app;document;integration;desktop-fast"
|
||||
PASS_REGULAR_EXPRESSION "\"command\":\"plan-canvas-project-save-target\".*\"fileName\":\"demo\".*\"temporaryPath\":\"D:/Paint/data/demo.tmp.ppi\".*\"timelapsePath\":\"D:/Paint/data/demo.pptl\"")
|
||||
|
||||
add_test(NAME pano_cli_plan_canvas_project_save_target_existing_smoke
|
||||
COMMAND pano_cli plan-canvas-project-save-target --data-dir D:/Paint/data --path D:/Paint/projects/demo.ppi --target-exists)
|
||||
set_tests_properties(pano_cli_plan_canvas_project_save_target_existing_smoke PROPERTIES
|
||||
LABELS "app;document;integration;desktop-fast"
|
||||
PASS_REGULAR_EXPRESSION "\"command\":\"plan-canvas-project-save-target\".*\"targetPath\":\"D:/Paint/projects/demo.ppi\".*\"writePlan\":\\{\"action\":\"write-temporary-then-swap\",\"targetExists\":true,\"usesTemporary\":true,\"writePath\":\"D:/Paint/data/demo.tmp.ppi\",\"fallbackDirectOnTemporaryOpenFailure\":true\\}")
|
||||
|
||||
add_test(NAME pano_cli_plan_canvas_project_save_target_rejects_empty_path
|
||||
COMMAND pano_cli plan-canvas-project-save-target --path "")
|
||||
set_tests_properties(pano_cli_plan_canvas_project_save_target_rejects_empty_path PROPERTIES
|
||||
|
||||
@@ -287,6 +287,72 @@ void project_save_target_plan_rejects_empty_inputs(pp::tests::Harness& harness)
|
||||
PP_EXPECT(harness, no_name.status().code == pp::foundation::StatusCode::invalid_argument);
|
||||
}
|
||||
|
||||
void project_save_write_plan_writes_direct_for_new_targets(pp::tests::Harness& harness)
|
||||
{
|
||||
const auto target = pp::app::plan_document_canvas_project_save_target(
|
||||
"D:/Paint/data",
|
||||
"D:/Paint/projects/demo.ppi");
|
||||
PP_EXPECT(harness, target);
|
||||
if (!target) {
|
||||
return;
|
||||
}
|
||||
|
||||
const auto plan = pp::app::plan_document_canvas_project_save_write(target.value(), false);
|
||||
|
||||
PP_EXPECT(harness, plan);
|
||||
if (!plan) {
|
||||
return;
|
||||
}
|
||||
|
||||
PP_EXPECT(harness, plan.value().action == pp::app::DocumentCanvasProjectSaveWriteAction::write_direct_to_target);
|
||||
PP_EXPECT(harness, plan.value().write_path == "D:/Paint/projects/demo.ppi");
|
||||
PP_EXPECT(harness, plan.value().target_path == "D:/Paint/projects/demo.ppi");
|
||||
PP_EXPECT(harness, !plan.value().target_exists);
|
||||
PP_EXPECT(harness, !plan.value().uses_temporary);
|
||||
PP_EXPECT(harness, !plan.value().falls_back_to_direct_on_temporary_open_failure);
|
||||
}
|
||||
|
||||
void project_save_write_plan_prefers_temporary_for_existing_targets(pp::tests::Harness& harness)
|
||||
{
|
||||
const auto target = pp::app::plan_document_canvas_project_save_target(
|
||||
"D:/Paint/data",
|
||||
"D:/Paint/projects/demo.ppi");
|
||||
PP_EXPECT(harness, target);
|
||||
if (!target) {
|
||||
return;
|
||||
}
|
||||
|
||||
const auto plan = pp::app::plan_document_canvas_project_save_write(target.value(), true);
|
||||
|
||||
PP_EXPECT(harness, plan);
|
||||
if (!plan) {
|
||||
return;
|
||||
}
|
||||
|
||||
PP_EXPECT(harness, plan.value().action == pp::app::DocumentCanvasProjectSaveWriteAction::write_temporary_then_swap);
|
||||
PP_EXPECT(harness, plan.value().write_path == "D:/Paint/data/demo.tmp.ppi");
|
||||
PP_EXPECT(harness, plan.value().target_path == "D:/Paint/projects/demo.ppi");
|
||||
PP_EXPECT(harness, plan.value().temporary_path == "D:/Paint/data/demo.tmp.ppi");
|
||||
PP_EXPECT(harness, plan.value().target_exists);
|
||||
PP_EXPECT(harness, plan.value().uses_temporary);
|
||||
PP_EXPECT(harness, plan.value().falls_back_to_direct_on_temporary_open_failure);
|
||||
}
|
||||
|
||||
void project_save_write_plan_rejects_missing_paths(pp::tests::Harness& harness)
|
||||
{
|
||||
pp::app::DocumentCanvasProjectSaveTargetPlan empty_target;
|
||||
const auto no_target = pp::app::plan_document_canvas_project_save_write(empty_target, false);
|
||||
|
||||
pp::app::DocumentCanvasProjectSaveTargetPlan no_temporary;
|
||||
no_temporary.target_path = "D:/Paint/projects/demo.ppi";
|
||||
const auto missing_temporary = pp::app::plan_document_canvas_project_save_write(no_temporary, true);
|
||||
|
||||
PP_EXPECT(harness, !no_target);
|
||||
PP_EXPECT(harness, !missing_temporary);
|
||||
PP_EXPECT(harness, no_target.status().code == pp::foundation::StatusCode::invalid_argument);
|
||||
PP_EXPECT(harness, missing_temporary.status().code == pp::foundation::StatusCode::invalid_argument);
|
||||
}
|
||||
|
||||
void snapshot_plan_rejects_invalid_canvas_state(pp::tests::Harness& harness)
|
||||
{
|
||||
const std::uint32_t frames[] { 100U };
|
||||
@@ -471,6 +537,9 @@ int main()
|
||||
harness.run("project save target plan preserves legacy paths", project_save_target_plan_preserves_legacy_paths);
|
||||
harness.run("project save target plan accepts windows backslashes", project_save_target_plan_accepts_windows_backslashes);
|
||||
harness.run("project save target plan rejects empty inputs", project_save_target_plan_rejects_empty_inputs);
|
||||
harness.run("project save write plan writes direct for new targets", project_save_write_plan_writes_direct_for_new_targets);
|
||||
harness.run("project save write plan prefers temporary for existing targets", project_save_write_plan_prefers_temporary_for_existing_targets);
|
||||
harness.run("project save write plan rejects missing paths", project_save_write_plan_rejects_missing_paths);
|
||||
harness.run("snapshot plan rejects invalid canvas state", snapshot_plan_rejects_invalid_canvas_state);
|
||||
harness.run("clear plan records legacy canvas effects", clear_plan_records_legacy_canvas_effects);
|
||||
harness.run("clear plan noops without canvas", clear_plan_noops_without_canvas);
|
||||
|
||||
Reference in New Issue
Block a user