Export captured canvas snapshots through document writer

This commit is contained in:
2026-06-05 18:24:58 +02:00
parent 9a75782891
commit ba5c3069e1
8 changed files with 115 additions and 13 deletions

View File

@@ -1,4 +1,5 @@
#include "app_core/document_canvas.h"
#include "assets/ppi_header.h"
#include "test_harness.h"
#include <cstdint>
@@ -89,6 +90,10 @@ void snapshot_plan_projects_canvas_metadata(pp::tests::Harness& harness)
PP_EXPECT(harness, value.document.layers()[1].blend_mode == pp::paint::BlendMode::overlay);
PP_EXPECT(harness, value.document.layers()[1].frames.size() == 1U);
PP_EXPECT(harness, value.document.face_pixel_payload_count() == 0U);
const auto export_result = pp::app::export_document_canvas_save_snapshot_to_ppi(value);
PP_EXPECT(harness, !export_result);
PP_EXPECT(harness, export_result.status().code == pp::foundation::StatusCode::invalid_argument);
}
void snapshot_plan_defaults_empty_names_and_frames(pp::tests::Harness& harness)
@@ -117,6 +122,16 @@ void snapshot_plan_defaults_empty_names_and_frames(pp::tests::Harness& harness)
PP_EXPECT(harness, !result.value().requires_renderer_payload_readback);
PP_EXPECT(harness, result.value().document.layers()[0].name == "Layer 1");
PP_EXPECT(harness, result.value().document.frames()[0].duration_ms == 100U);
const auto export_result = pp::app::export_document_canvas_save_snapshot_to_ppi(result.value());
PP_EXPECT(harness, export_result);
if (export_result) {
const auto decoded = pp::assets::decode_ppi_project_images(export_result.value().bytes);
PP_EXPECT(harness, decoded);
if (decoded) {
PP_EXPECT(harness, decoded.value().project.body.summary.dirty_face_count == 0U);
}
}
}
void snapshot_plan_attaches_captured_face_payloads(pp::tests::Harness& harness)
@@ -177,6 +192,20 @@ void snapshot_plan_attaches_captured_face_payloads(pp::tests::Harness& harness)
PP_EXPECT(harness, report.captured_face_payloads == 1U);
PP_EXPECT(harness, report.payload_complete);
PP_EXPECT(harness, report.can_export_ppi);
const auto export_result = pp::app::export_document_canvas_save_snapshot_to_ppi(result.value());
PP_EXPECT(harness, export_result);
if (export_result) {
PP_EXPECT(harness, export_result.value().report.can_export_ppi);
PP_EXPECT(harness, export_result.value().bytes.size() > 0U);
const auto decoded = pp::assets::decode_ppi_project_images(export_result.value().bytes);
PP_EXPECT(harness, decoded);
if (decoded) {
PP_EXPECT(harness, decoded.value().project.body.summary.dirty_face_count == 1U);
PP_EXPECT(harness, decoded.value().project.body.summary.rgba_face_payload_count == 1U);
}
}
}
void snapshot_plan_rejects_invalid_canvas_state(pp::tests::Harness& harness)