From 603533fb0e5968923d67c1d8f2e00a640f41b5e5 Mon Sep 17 00:00:00 2001 From: Tom Sepez Date: Tue, 5 Jan 2016 14:17:37 -0800 Subject: Add embedder test for fpdfsave.cpp and bug 342 R=thestig@chromium.org Review URL: https://codereview.chromium.org/1556033002 . --- BUILD.gn | 1 + fpdfsdk/src/fpdfsave_embeddertest.cpp | 72 +++++++++++++++++++++++++++++++++++ pdfium.gyp | 1 + 3 files changed, 74 insertions(+) create mode 100644 fpdfsdk/src/fpdfsave_embeddertest.cpp 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 + +#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(pFileWrite); + pThis->m_String.append(static_cast(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', -- cgit v1.2.3