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 . --- fpdfsdk/src/fpdfsave_embeddertest.cpp | 72 +++++++++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 fpdfsdk/src/fpdfsave_embeddertest.cpp (limited to 'fpdfsdk/src') 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")); +} -- cgit v1.2.3