summaryrefslogtreecommitdiff
path: root/fpdfsdk/fpdfattachment_embeddertest.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'fpdfsdk/fpdfattachment_embeddertest.cpp')
-rw-r--r--fpdfsdk/fpdfattachment_embeddertest.cpp69
1 files changed, 67 insertions, 2 deletions
diff --git a/fpdfsdk/fpdfattachment_embeddertest.cpp b/fpdfsdk/fpdfattachment_embeddertest.cpp
index 2cbda8a429..d873d9b5ce 100644
--- a/fpdfsdk/fpdfattachment_embeddertest.cpp
+++ b/fpdfsdk/fpdfattachment_embeddertest.cpp
@@ -3,6 +3,7 @@
// found in the LICENSE file.
#include "public/fpdf_attachment.h"
+#include "public/fpdfview.h"
#include "testing/embedder_test.h"
class FPDFAttachmentEmbeddertest : public EmbedderTest {};
@@ -12,11 +13,75 @@ TEST_F(FPDFAttachmentEmbeddertest, ExtractAttachments) {
ASSERT_TRUE(OpenDocument("embedded_attachments.pdf"));
EXPECT_EQ(2, FPDFDoc_GetAttachmentCount(document()));
+ // Retrieve the first attachment.
+ FPDF_ATTACHMENT attachment = FPDFDoc_GetAttachment(document(), 0);
+ ASSERT_TRUE(attachment);
+
// Check that the name of the first attachment is correct.
- unsigned long len = FPDFDoc_GetAttachmentName(document(), 0, nullptr, 0);
+ unsigned long len = FPDFAttachment_GetName(attachment, nullptr, 0);
std::vector<char> buf(len);
- EXPECT_EQ(12u, FPDFDoc_GetAttachmentName(document(), 0, buf.data(), len));
+ EXPECT_EQ(12u, FPDFAttachment_GetName(attachment, buf.data(), len));
EXPECT_STREQ(L"1.txt",
GetPlatformWString(reinterpret_cast<unsigned short*>(buf.data()))
.c_str());
+
+ // Check that the content of the first attachment is correct.
+ len = FPDFAttachment_GetFile(attachment, nullptr, 0);
+ buf.clear();
+ buf.resize(len);
+ ASSERT_EQ(4u, FPDFAttachment_GetFile(attachment, buf.data(), len));
+ EXPECT_EQ(std::string("test"), std::string(buf.data(), 4));
+
+ // Check that a non-existent key does not exist.
+ EXPECT_FALSE(
+ FPDFAttachment_HasKey(attachment, GetFPDFWideString(L"none").get()));
+
+ // Check that the string value of a non-string dictionary entry is empty.
+ std::unique_ptr<unsigned short, pdfium::FreeDeleter> size_key =
+ GetFPDFWideString(L"Size");
+ EXPECT_EQ(FPDF_OBJECT_NUMBER,
+ FPDFAttachment_GetValueType(attachment, size_key.get()));
+ EXPECT_EQ(2u, FPDFAttachment_GetStringValue(attachment, size_key.get(),
+ nullptr, 0));
+
+ // Check that the creation date of the first attachment is correct.
+ std::unique_ptr<unsigned short, pdfium::FreeDeleter> date_key =
+ GetFPDFWideString(L"CreationDate");
+ len = FPDFAttachment_GetStringValue(attachment, date_key.get(), nullptr, 0);
+ buf.clear();
+ buf.resize(len);
+ EXPECT_EQ(48u, FPDFAttachment_GetStringValue(attachment, date_key.get(),
+ buf.data(), len));
+ EXPECT_STREQ(L"D:20170712214438-07'00'",
+ GetPlatformWString(reinterpret_cast<unsigned short*>(buf.data()))
+ .c_str());
+
+ // Retrieve the second attachment.
+ attachment = FPDFDoc_GetAttachment(document(), 1);
+ ASSERT_TRUE(attachment);
+
+ // Retrieve the second attachment file.
+ len = FPDFAttachment_GetFile(attachment, nullptr, 0);
+ buf.clear();
+ buf.resize(len);
+ EXPECT_EQ(5869u, FPDFAttachment_GetFile(attachment, buf.data(), len));
+
+ // Check that the calculated checksum of the file data matches expectation.
+ const char kCheckSum[] = "72afcddedf554dda63c0c88e06f1ce18";
+ const wchar_t kCheckSumW[] = L"<72AFCDDEDF554DDA63C0C88E06F1CE18>";
+ const std::string generated_checksum =
+ GenerateMD5Base16(reinterpret_cast<uint8_t*>(buf.data()), len);
+ EXPECT_EQ(kCheckSum, generated_checksum);
+
+ // Check that the stored checksum matches expectation.
+ std::unique_ptr<unsigned short, pdfium::FreeDeleter> checksum_key =
+ GetFPDFWideString(L"CheckSum");
+ len =
+ FPDFAttachment_GetStringValue(attachment, checksum_key.get(), nullptr, 0);
+ buf.clear();
+ buf.resize(len);
+ EXPECT_EQ(70u, FPDFAttachment_GetStringValue(attachment, checksum_key.get(),
+ buf.data(), len));
+ EXPECT_EQ(kCheckSumW,
+ GetPlatformWString(reinterpret_cast<unsigned short*>(buf.data())));
}