Add another test case for marked_content_id.pdf. Add FPDFEditEmbedderTest.TraverseMarkedContentID to show how FPDFPageObj_GetMark() and related APIs interact with this PDF. In contrast to FPDFStructTreeEmbedderTest.GetMarkedContentID which uses FPDF_StructTree_GetForPage() and related APIs. Change-Id: I688a4a64d11919a84ff4241a3cf43da2ea7dcb4b Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/90250 Reviewed-by: Nigi <nigi@chromium.org> Commit-Queue: Lei Zhang <thestig@chromium.org>
diff --git a/fpdfsdk/fpdf_edit_embeddertest.cpp b/fpdfsdk/fpdf_edit_embeddertest.cpp index dbca269..56c12ce 100644 --- a/fpdfsdk/fpdf_edit_embeddertest.cpp +++ b/fpdfsdk/fpdf_edit_embeddertest.cpp
@@ -3557,6 +3557,67 @@ UnloadPage(page); } +// See also FPDFStructTreeEmbedderTest.GetMarkedContentID, which traverses the +// marked contents using FPDF_StructTree_GetForPage() and related API. +TEST_F(FPDFEditEmbedderTest, TraverseMarkedContentID) { + ASSERT_TRUE(OpenDocument("marked_content_id.pdf")); + FPDF_PAGE page = LoadPage(0); + ASSERT_TRUE(page); + + ASSERT_EQ(2, FPDFPage_CountObjects(page)); + FPDF_PAGEOBJECT object1 = FPDFPage_GetObject(page, 0); + ASSERT_TRUE(object1); + ASSERT_EQ(1, FPDFPageObj_CountMarks(object1)); + + FPDF_PAGEOBJECTMARK mark11 = FPDFPageObj_GetMark(object1, 0); + ASSERT_TRUE(mark11); + unsigned long len = 0; + unsigned short buf[40]; + ASSERT_TRUE(FPDFPageObjMark_GetName(mark11, buf, sizeof(buf), &len)); + EXPECT_EQ(18u, len); + EXPECT_EQ(L"Artifact", GetPlatformWString(buf)); + ASSERT_EQ(2, FPDFPageObjMark_CountParams(mark11)); + ASSERT_TRUE(FPDFPageObjMark_GetParamKey(mark11, 0, buf, sizeof(buf), &len)); + EXPECT_EQ(10u, len); + EXPECT_EQ(L"BBox", GetPlatformWString(buf)); + EXPECT_EQ(FPDF_OBJECT_ARRAY, + FPDFPageObjMark_GetParamValueType(mark11, "BBox")); + ASSERT_TRUE(FPDFPageObjMark_GetParamKey(mark11, 1, buf, sizeof(buf), &len)); + EXPECT_EQ(10u, len); + EXPECT_EQ(L"Type", GetPlatformWString(buf)); + EXPECT_EQ(FPDF_OBJECT_NAME, + FPDFPageObjMark_GetParamValueType(mark11, "Type")); + + FPDF_PAGEOBJECT object2 = FPDFPage_GetObject(page, 1); + ASSERT_TRUE(object2); + ASSERT_EQ(2, FPDFPageObj_CountMarks(object2)); + EXPECT_EQ(FPDF_PAGEOBJ_IMAGE, FPDFPageObj_GetType(object2)); + + FPDF_PAGEOBJECTMARK mark21 = FPDFPageObj_GetMark(object2, 0); + ASSERT_TRUE(mark21); + ASSERT_TRUE(FPDFPageObjMark_GetName(mark21, buf, sizeof(buf), &len)); + EXPECT_EQ(14u, len); + EXPECT_EQ(L"Figure", GetPlatformWString(buf)); + ASSERT_EQ(1, FPDFPageObjMark_CountParams(mark21)); + ASSERT_TRUE(FPDFPageObjMark_GetParamKey(mark21, 0, buf, sizeof(buf), &len)); + EXPECT_EQ(10u, len); + EXPECT_EQ(L"MCID", GetPlatformWString(buf)); + ASSERT_EQ(FPDF_OBJECT_NUMBER, + FPDFPageObjMark_GetParamValueType(mark21, "MCID")); + int mcid = -1; + ASSERT_TRUE(FPDFPageObjMark_GetParamIntValue(mark21, "MCID", &mcid)); + EXPECT_EQ(0, mcid); + + FPDF_PAGEOBJECTMARK mark22 = FPDFPageObj_GetMark(object2, 1); + ASSERT_TRUE(mark22); + ASSERT_TRUE(FPDFPageObjMark_GetName(mark22, buf, sizeof(buf), &len)); + EXPECT_EQ(18u, len); + EXPECT_EQ(L"ClipSpan", GetPlatformWString(buf)); + EXPECT_EQ(0, FPDFPageObjMark_CountParams(mark22)); + + UnloadPage(page); +} + TEST_F(FPDFEditEmbedderTest, GetBitmap) { ASSERT_TRUE(OpenDocument("embedded_images.pdf")); FPDF_PAGE page = LoadPage(0);
diff --git a/fpdfsdk/fpdf_structtree_embeddertest.cpp b/fpdfsdk/fpdf_structtree_embeddertest.cpp index 858bd48..6781a48 100644 --- a/fpdfsdk/fpdf_structtree_embeddertest.cpp +++ b/fpdfsdk/fpdf_structtree_embeddertest.cpp
@@ -261,6 +261,8 @@ UnloadPage(page); } +// See also FPDFEditEmbedderTest.TraverseMarkedContentID, which traverses the +// marked contents using FPDFPageObj_GetMark() and related API. TEST_F(FPDFStructTreeEmbedderTest, GetMarkedContentID) { ASSERT_TRUE(OpenDocument("marked_content_id.pdf")); FPDF_PAGE page = LoadPage(0);