Index PPI project layers

This commit is contained in:
2026-06-01 12:53:48 +02:00
parent 677d0b33a8
commit 7319cb9aa9
8 changed files with 317 additions and 47 deletions

View File

@@ -9,6 +9,7 @@
#include <vector>
using pp::assets::parse_ppi_header;
using pp::assets::parse_ppi_project_index;
using pp::assets::parse_ppi_project_summary;
using pp::assets::parse_ppi_project_layout;
using pp::assets::ppi_header_size;
@@ -257,6 +258,26 @@ void parses_minimal_project_body_summary(pp::tests::Harness& h)
PP_EXPECT(h, summary.value().body.info_bytes == 0U);
}
void indexes_project_layers_frames_and_faces(pp::tests::Harness& h)
{
const auto project = project_with_single_face_payload(png_ihdr_payload(8, 4));
const auto index = parse_ppi_project_index(project);
PP_EXPECT(h, index.ok());
PP_EXPECT(h, index.value().body.layers.size() == 1U);
PP_EXPECT(h, index.value().body.layers[0].stored_order == 0U);
PP_EXPECT(h, index.value().body.layers[0].name == "Ink");
PP_EXPECT(h, index.value().body.layers[0].visible);
PP_EXPECT(h, index.value().body.layers[0].frames.size() == 1U);
PP_EXPECT(h, index.value().body.layers[0].frames[0].duration_ms == 100U);
PP_EXPECT(h, index.value().body.layers[0].frames[0].faces[0].has_data);
PP_EXPECT(h, index.value().body.layers[0].frames[0].faces[0].x0 == 2U);
PP_EXPECT(h, index.value().body.layers[0].frames[0].faces[0].x1 == 10U);
PP_EXPECT(h, index.value().body.layers[0].frames[0].faces[0].payload_bytes == 33U);
PP_EXPECT(h, index.value().body.layers[0].frames[0].faces[0].png_width == 8U);
PP_EXPECT(h, !index.value().body.layers[0].frames[0].faces[1].has_data);
}
void validates_dirty_face_png_payload_metadata(pp::tests::Harness& h)
{
const auto project = project_with_single_face_payload(png_ihdr_payload(8, 4));
@@ -322,6 +343,7 @@ int main()
harness.run("parses_project_layout_with_thumbnail_and_body", parses_project_layout_with_thumbnail_and_body);
harness.run("rejects_project_layout_with_truncated_thumbnail", rejects_project_layout_with_truncated_thumbnail);
harness.run("parses_minimal_project_body_summary", parses_minimal_project_body_summary);
harness.run("indexes_project_layers_frames_and_faces", indexes_project_layers_frames_and_faces);
harness.run("validates_dirty_face_png_payload_metadata", validates_dirty_face_png_payload_metadata);
harness.run("rejects_invalid_dirty_face_png_payloads", rejects_invalid_dirty_face_png_payloads);
harness.run("rejects_invalid_project_body_summaries", rejects_invalid_project_body_summaries);