Dispatch layer rename through app core

This commit is contained in:
2026-06-03 20:06:11 +02:00
parent 921fc8f00b
commit 10c995f1da
6 changed files with 185 additions and 51 deletions

View File

@@ -31,6 +31,23 @@ public:
int last_to_index = -1;
};
class FakeDocumentLayerRenameServices final : public pp::app::DocumentLayerRenameServices {
public:
void rename_layer(std::string_view old_name, std::string_view new_name) override
{
rename_calls += 1;
last_old_name = std::string(old_name);
last_new_name = std::string(new_name);
}
void finish_layer_rename() override { finish_calls += 1; }
int rename_calls = 0;
int finish_calls = 0;
std::string last_old_name;
std::string last_new_name;
};
class FakeDocumentLayerOperationServices final : public pp::app::DocumentLayerOperationServices {
public:
void add_layer(std::string_view name, int insert_index) override
@@ -180,6 +197,49 @@ void layer_rename_rejects_overlong_name(pp::tests::Harness& harness)
}
}
void layer_rename_executor_dispatches_changed_name(pp::tests::Harness& harness)
{
FakeDocumentLayerRenameServices services;
const auto plan = pp::app::plan_document_layer_rename("Base", "Paint");
PP_EXPECT(harness, plan);
if (plan) {
PP_EXPECT(harness, pp::app::execute_document_layer_rename_plan(plan.value(), services).ok());
PP_EXPECT(harness, services.rename_calls == 1);
PP_EXPECT(harness, services.finish_calls == 1);
PP_EXPECT(harness, services.last_old_name == "Base");
PP_EXPECT(harness, services.last_new_name == "Paint");
}
}
void layer_rename_executor_finishes_no_op(pp::tests::Harness& harness)
{
FakeDocumentLayerRenameServices services;
const auto plan = pp::app::plan_document_layer_rename("Ink", "Ink");
PP_EXPECT(harness, plan);
if (plan) {
PP_EXPECT(harness, pp::app::execute_document_layer_rename_plan(plan.value(), services).ok());
PP_EXPECT(harness, services.rename_calls == 0);
PP_EXPECT(harness, services.finish_calls == 1);
}
}
void layer_rename_executor_rejects_malformed_changed_plan(pp::tests::Harness& harness)
{
FakeDocumentLayerRenameServices services;
pp::app::DocumentLayerRenamePlan malformed;
malformed.old_name = "Ink";
malformed.action = pp::app::DocumentLayerRenameAction::rename_and_record_undo;
const auto status = pp::app::execute_document_layer_rename_plan(malformed, services);
PP_EXPECT(harness, !status.ok());
PP_EXPECT(harness, status.code == pp::foundation::StatusCode::invalid_argument);
PP_EXPECT(harness, services.rename_calls == 0);
PP_EXPECT(harness, services.finish_calls == 0);
}
void layer_add_validates_insert_index_and_name(pp::tests::Harness& harness)
{
const auto plan = pp::app::plan_document_layer_add(2, 1, "Paint");
@@ -673,6 +733,9 @@ int main()
harness.run("layer rename ignores unchanged name", layer_rename_ignores_unchanged_name);
harness.run("layer rename rejects empty name", layer_rename_rejects_empty_name);
harness.run("layer rename rejects overlong name", layer_rename_rejects_overlong_name);
harness.run("layer rename executor dispatches changed name", layer_rename_executor_dispatches_changed_name);
harness.run("layer rename executor finishes no op", layer_rename_executor_finishes_no_op);
harness.run("layer rename executor rejects malformed changed plan", layer_rename_executor_rejects_malformed_changed_plan);
harness.run("layer add validates insert index and name", layer_add_validates_insert_index_and_name);
harness.run("layer duplicate select and reorder validate indices", layer_duplicate_select_and_reorder_validate_indices);
harness.run("layer remove keeps at least one layer", layer_remove_keeps_at_least_one_layer);