TEST_F(FPDFDocEmbedderTest, GetMetaText) { ASSERT_TRUE(OpenDocument("bug_601362.pdf")); // Invalid document / tag results in 0. unsigned short buf[128]; EXPECT_EQ(0u, FPDF_GetMetaText(document(), nullptr, buf, sizeof(buf))); EXPECT_EQ(0u, FPDF_GetMetaText(nullptr, "", buf, sizeof(buf))); // Tags that do not eixst results in an empty wide string. EXPECT_EQ(2u, FPDF_GetMetaText(document(), "", buf, sizeof(buf))); EXPECT_EQ(2u, FPDF_GetMetaText(document(), "foo", buf, sizeof(buf))); ASSERT_EQ(2u, FPDF_GetMetaText(document(), "Title", buf, sizeof(buf))); ASSERT_EQ(2u, FPDF_GetMetaText(document(), "Author", buf, sizeof(buf))); ASSERT_EQ(2u, FPDF_GetMetaText(document(), "Subject", buf, sizeof(buf))); ASSERT_EQ(2u, FPDF_GetMetaText(document(), "Keywords", buf, sizeof(buf))); ASSERT_EQ(2u, FPDF_GetMetaText(document(), "Producer", buf, sizeof(buf))); constexpr wchar_t kExpectedCreator[] = L"Microsoft Word"; ASSERT_EQ(30u, FPDF_GetMetaText(document(), "Creator", buf, sizeof(buf))); EXPECT_EQ(WideString(kExpectedCreator), WideString::FromUTF16LE(buf, FXSYS_len(kExpectedCreator))); constexpr wchar_t kExpectedCreationDate[] = L"D:20160411190039+00'00'"; ASSERT_EQ(48u, FPDF_GetMetaText(document(), "CreationDate", buf, sizeof(buf))); EXPECT_EQ(WideString(kExpectedCreationDate), WideString::FromUTF16LE(buf, FXSYS_len(kExpectedCreationDate))); constexpr wchar_t kExpectedModDate[] = L"D:20160411190039+00'00'"; ASSERT_EQ(48u, FPDF_GetMetaText(document(), "ModDate", buf, sizeof(buf))); EXPECT_EQ(WideString(kExpectedModDate), WideString::FromUTF16LE(buf, FXSYS_len(kExpectedModDate))); }
TEST_F(FPDFStructTreeEmbedderTest, GetType) { ASSERT_TRUE(OpenDocument("tagged_alt_text.pdf")); FPDF_PAGE page = LoadPage(0); ASSERT_TRUE(page); { ScopedFPDFStructTree struct_tree(FPDF_StructTree_GetForPage(page)); ASSERT_TRUE(struct_tree); ASSERT_EQ(1, FPDF_StructTree_CountChildren(struct_tree.get())); FPDF_STRUCTELEMENT element = FPDF_StructTree_GetChildAtIndex(struct_tree.get(), 0); ASSERT_NE(nullptr, element); unsigned short buffer[12]; memset(buffer, 0, sizeof(buffer)); // Deliberately pass in a small buffer size to make sure |buffer| remains // untouched. ASSERT_EQ(18U, FPDF_StructElement_GetType(element, buffer, 1)); for (size_t i = 0; i < FX_ArraySize(buffer); ++i) EXPECT_EQ(0U, buffer[i]); ASSERT_EQ(18U, FPDF_StructElement_GetType(element, buffer, sizeof(buffer))); const wchar_t kExpected[] = L"Document"; EXPECT_EQ(WideString(kExpected), WideString::FromUTF16LE(buffer, FXSYS_len(kExpected))); } UnloadPage(page); }
TEST_F(FPDFDocEmbedderTest, GetMetaTextInAttachmentFile) { ASSERT_TRUE(OpenDocument("embedded_attachments.pdf")); // Make sure this is the date from the PDF itself and not the attached PDF. unsigned short buf[128]; constexpr wchar_t kExpectedModDate[] = L"D:20170712214448-07'00'"; ASSERT_EQ(48u, FPDF_GetMetaText(document(), "ModDate", buf, sizeof(buf))); EXPECT_EQ(WideString(kExpectedModDate), WideString::FromUTF16LE(buf, FXSYS_len(kExpectedModDate))); }
TEST_F(FPDFDocEmbedderTest, Bug_182) { ASSERT_TRUE(OpenDocument("bug_182.pdf")); unsigned short buf[128]; constexpr wchar_t kExpectedTitle[] = L"Super Visual Formade 印刷"; ASSERT_EQ(48u, FPDF_GetMetaText(document(), "Title", buf, sizeof(buf))); EXPECT_EQ(WideString(kExpectedTitle), WideString::FromUTF16LE(buf, FXSYS_len(kExpectedTitle))); }
TEST_F(FPDFDocEmbedderTest, GetMetaTextSameObjectNumber) { ASSERT_TRUE(OpenDocument("annotation_highlight_square_with_ap.pdf")); // The PDF has been edited. It has two %%EOF markers, and 2 objects numbered // (1 0). Both objects are /Info dictionaries, but contain different data. // Make sure ModDate is the date of the last modification. unsigned short buf[128]; constexpr wchar_t kExpectedModDate[] = L"D:20170612232940-04'00'"; ASSERT_EQ(48u, FPDF_GetMetaText(document(), "ModDate", buf, sizeof(buf))); EXPECT_EQ(WideString(kExpectedModDate), WideString::FromUTF16LE(buf, FXSYS_len(kExpectedModDate))); }
TEST_F(FPDFDocEmbedderTest, GetPageLabels) { EXPECT_TRUE(OpenDocument("page_labels.pdf")); EXPECT_EQ(7, FPDF_GetPageCount(document())); // We do not request labels, when use FPDFAvail_IsXXXAvail. // Flush all data, to allow read labels. SetWholeFileAvailable(); unsigned short buf[128]; EXPECT_EQ(0u, FPDF_GetPageLabel(document(), -2, buf, sizeof(buf))); EXPECT_EQ(0u, FPDF_GetPageLabel(document(), -1, buf, sizeof(buf))); const wchar_t kExpectedPageLabel0[] = L"i"; ASSERT_EQ(4u, FPDF_GetPageLabel(document(), 0, buf, sizeof(buf))); EXPECT_EQ(WideString(kExpectedPageLabel0), WideString::FromUTF16LE(buf, FXSYS_len(kExpectedPageLabel0))); const wchar_t kExpectedPageLabel1[] = L"ii"; ASSERT_EQ(6u, FPDF_GetPageLabel(document(), 1, buf, sizeof(buf))); EXPECT_EQ(WideString(kExpectedPageLabel1), WideString::FromUTF16LE(buf, FXSYS_len(kExpectedPageLabel1))); const wchar_t kExpectedPageLabel2[] = L"1"; ASSERT_EQ(4u, FPDF_GetPageLabel(document(), 2, buf, sizeof(buf))); EXPECT_EQ(WideString(kExpectedPageLabel2), WideString::FromUTF16LE(buf, FXSYS_len(kExpectedPageLabel2))); const wchar_t kExpectedPageLabel3[] = L"2"; ASSERT_EQ(4u, FPDF_GetPageLabel(document(), 3, buf, sizeof(buf))); EXPECT_EQ(WideString(kExpectedPageLabel3), WideString::FromUTF16LE(buf, FXSYS_len(kExpectedPageLabel3))); const wchar_t kExpectedPageLabel4[] = L"zzA"; ASSERT_EQ(8u, FPDF_GetPageLabel(document(), 4, buf, sizeof(buf))); EXPECT_EQ(WideString(kExpectedPageLabel4), WideString::FromUTF16LE(buf, FXSYS_len(kExpectedPageLabel4))); const wchar_t kExpectedPageLabel5[] = L"zzB"; ASSERT_EQ(8u, FPDF_GetPageLabel(document(), 5, buf, sizeof(buf))); EXPECT_EQ(WideString(kExpectedPageLabel5), WideString::FromUTF16LE(buf, FXSYS_len(kExpectedPageLabel5))); const wchar_t kExpectedPageLabel6[] = L""; ASSERT_EQ(2u, FPDF_GetPageLabel(document(), 6, buf, sizeof(buf))); EXPECT_EQ(WideString(kExpectedPageLabel6), WideString::FromUTF16LE(buf, FXSYS_len(kExpectedPageLabel6))); ASSERT_EQ(0u, FPDF_GetPageLabel(document(), 7, buf, sizeof(buf))); ASSERT_EQ(0u, FPDF_GetPageLabel(document(), 8, buf, sizeof(buf))); }