summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Sepez <tsepez@chromium.org>2016-01-05 14:17:37 -0800
committerTom Sepez <tsepez@chromium.org>2016-01-05 14:17:37 -0800
commit603533fb0e5968923d67c1d8f2e00a640f41b5e5 (patch)
treeac2367810a32ce57d4277c293d1d560d8094029e
parentaab8f462ea3368ed4825172231131e1a10db978d (diff)
downloadpdfium-603533fb0e5968923d67c1d8f2e00a640f41b5e5.tar.xz
Add embedder test for fpdfsave.cpp and bug 342
R=thestig@chromium.org Review URL: https://codereview.chromium.org/1556033002 .
-rw-r--r--BUILD.gn1
-rw-r--r--fpdfsdk/src/fpdfsave_embeddertest.cpp72
-rw-r--r--pdfium.gyp1
3 files changed, 74 insertions, 0 deletions
diff --git a/BUILD.gn b/BUILD.gn
index 6ce83350c3..5ff4593ae0 100644
--- a/BUILD.gn
+++ b/BUILD.gn
@@ -758,6 +758,7 @@ test("pdfium_embeddertests") {
"fpdfsdk/src/fpdfdoc_embeddertest.cpp",
"fpdfsdk/src/fpdfext_embeddertest.cpp",
"fpdfsdk/src/fpdfformfill_embeddertest.cpp",
+ "fpdfsdk/src/fpdfsave_embeddertest.cpp",
"fpdfsdk/src/fpdftext_embeddertest.cpp",
"fpdfsdk/src/fpdfview_c_api_test.c",
"fpdfsdk/src/fpdfview_c_api_test.h",
diff --git a/fpdfsdk/src/fpdfsave_embeddertest.cpp b/fpdfsdk/src/fpdfsave_embeddertest.cpp
new file mode 100644
index 0000000000..bee452beaf
--- /dev/null
+++ b/fpdfsdk/src/fpdfsave_embeddertest.cpp
@@ -0,0 +1,72 @@
+// Copyright 2016 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include <string.h>
+
+#include "core/include/fxcrt/fx_string.h"
+#include "public/fpdf_save.h"
+#include "public/fpdfview.h"
+#include "testing/embedder_test.h"
+#include "testing/fx_string_testhelpers.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+class FPDFSaveEmbedderTest : public EmbedderTest, public FPDF_FILEWRITE {
+ public:
+ FPDFSaveEmbedderTest() {
+ FPDF_FILEWRITE::version = 1;
+ FPDF_FILEWRITE::WriteBlock = WriteBlockCallback;
+ }
+ bool SaveDocumentToString() {
+ m_String.clear();
+ return FPDF_SaveAsCopy(document(), this, 0);
+ }
+ bool SaveDocumentWithVersionToString(int version) {
+ m_String.clear();
+ return FPDF_SaveWithVersion(document(), this, 0, version);
+ }
+ const std::string& GetString() const { return m_String; }
+
+ private:
+ static int WriteBlockCallback(FPDF_FILEWRITE* pFileWrite,
+ const void* data,
+ unsigned long size) {
+ FPDFSaveEmbedderTest* pThis =
+ static_cast<FPDFSaveEmbedderTest*>(pFileWrite);
+ pThis->m_String.append(static_cast<const char*>(data), size);
+ return 1;
+ }
+
+ std::string m_String;
+};
+
+TEST_F(FPDFSaveEmbedderTest, SaveSimpleDoc) {
+ EXPECT_TRUE(OpenDocument("hello_world.pdf"));
+ EXPECT_TRUE(SaveDocumentToString());
+ EXPECT_EQ("%PDF-1.7\r\n", GetString().substr(0, 10));
+ EXPECT_EQ(843, GetString().length());
+}
+
+TEST_F(FPDFSaveEmbedderTest, SaveSimpleDocWithVersion) {
+ EXPECT_TRUE(OpenDocument("hello_world.pdf"));
+ EXPECT_TRUE(SaveDocumentWithVersionToString(14));
+ EXPECT_EQ("%PDF-1.4\r\n", GetString().substr(0, 10));
+ EXPECT_EQ(843, GetString().length());
+}
+
+TEST_F(FPDFSaveEmbedderTest, SaveSimpleDocWithBadVersion) {
+ EXPECT_TRUE(OpenDocument("hello_world.pdf"));
+ EXPECT_TRUE(SaveDocumentWithVersionToString(-1));
+ EXPECT_EQ("%PDF-1.7\r\n", GetString().substr(0, 10));
+ EXPECT_TRUE(SaveDocumentWithVersionToString(0));
+ EXPECT_EQ("%PDF-1.7\r\n", GetString().substr(0, 10));
+ EXPECT_TRUE(SaveDocumentWithVersionToString(18));
+ EXPECT_EQ("%PDF-1.7\r\n", GetString().substr(0, 10));
+}
+
+TEST_F(FPDFSaveEmbedderTest, BUG_342) {
+ EXPECT_TRUE(OpenDocument("hello_world.pdf"));
+ EXPECT_TRUE(SaveDocumentToString());
+ EXPECT_EQ(std::string::npos, GetString().find("0000000000 65536 f\r\n"));
+ EXPECT_NE(std::string::npos, GetString().find("0000000000 65535 f\r\n"));
+}
diff --git a/pdfium.gyp b/pdfium.gyp
index d598a6e403..ad36bc4185 100644
--- a/pdfium.gyp
+++ b/pdfium.gyp
@@ -753,6 +753,7 @@
'fpdfsdk/src/fpdfdoc_embeddertest.cpp',
'fpdfsdk/src/fpdfext_embeddertest.cpp',
'fpdfsdk/src/fpdfformfill_embeddertest.cpp',
+ 'fpdfsdk/src/fpdfsave_embeddertest.cpp',
'fpdfsdk/src/fpdftext_embeddertest.cpp',
'fpdfsdk/src/fpdfview_c_api_test.c',
'fpdfsdk/src/fpdfview_c_api_test.h',