blob: 34b5993879c2026a65aeef03ff996c76fa95e27f [file] [log] [blame]
Tom Sepezd483eb42016-01-06 10:03:59 -08001// Copyright 2016 PDFium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "public/fpdf_edit.h"
6#include "public/fpdfview.h"
7#include "testing/embedder_test.h"
Tom Sepez0aec19b2016-01-07 12:22:44 -08008#include "testing/gmock/include/gmock/gmock-matchers.h"
Tom Sepezd483eb42016-01-06 10:03:59 -08009#include "testing/gtest/include/gtest/gtest.h"
Tom Sepez0aec19b2016-01-07 12:22:44 -080010#include "testing/test_support.h"
Tom Sepezd483eb42016-01-06 10:03:59 -080011
Tom Sepez0aec19b2016-01-07 12:22:44 -080012class FPDFEditEmbeddertest : public EmbedderTest, public TestSaver {};
Tom Sepezd483eb42016-01-06 10:03:59 -080013
etienneb7712c262016-04-26 08:13:45 -070014namespace {
15const char kExpectedPDF[] =
16 "%PDF-1.7\r\n"
17 "%\xA1\xB3\xC5\xD7\r\n"
18 "1 0 obj\r\n"
19 "<</Pages 2 0 R /Type/Catalog>>\r\n"
20 "endobj\r\n"
21 "2 0 obj\r\n"
22 "<</Count 1/Kids\\[ 4 0 R \\]/Type/Pages>>\r\n"
23 "endobj\r\n"
24 "3 0 obj\r\n"
25 "<</CreationDate\\(D:.*\\)/Creator\\(PDFium\\)>>\r\n"
26 "endobj\r\n"
27 "4 0 obj\r\n"
28 "<</Contents 5 0 R /MediaBox\\[ 0 0 640 480\\]"
29 "/Parent 2 0 R /Resources<<>>/Rotate 0/Type/Page"
30 ">>\r\n"
31 "endobj\r\n"
32 "5 0 obj\r\n"
33 "<</Filter/FlateDecode/Length 8>>stream\r\n"
34 // Character '_' is matching '\0' (see comment below).
35 "x\x9C\x3____\x1\r\n"
36 "endstream\r\n"
37 "endobj\r\n"
38 "xref\r\n"
39 "0 6\r\n"
40 "0000000000 65535 f\r\n"
41 "0000000017 00000 n\r\n"
42 "0000000066 00000 n\r\n"
43 "0000000122 00000 n\r\n"
44 "0000000192 00000 n\r\n"
45 "0000000301 00000 n\r\n"
46 "trailer\r\n"
47 "<<\r\n"
48 "/Root 1 0 R\r\n"
49 "/Info 3 0 R\r\n"
50 "/Size 6/ID\\[<.*><.*>\\]>>\r\n"
51 "startxref\r\n"
52 "379\r\n"
53 "%%EOF\r\n";
54} // namespace
55
Tom Sepezd483eb42016-01-06 10:03:59 -080056TEST_F(FPDFEditEmbeddertest, EmptyCreation) {
57 EXPECT_TRUE(CreateEmptyDocument());
weili9b777de2016-08-19 16:19:46 -070058 FPDF_PAGE page = FPDFPage_New(document(), 0, 640.0, 480.0);
Tom Sepezd483eb42016-01-06 10:03:59 -080059 EXPECT_NE(nullptr, page);
60 EXPECT_TRUE(FPDFPage_GenerateContent(page));
Tom Sepez0aec19b2016-01-07 12:22:44 -080061 EXPECT_TRUE(FPDF_SaveAsCopy(document(), this, 0));
etienneb7712c262016-04-26 08:13:45 -070062
63 // The MatchesRegexp doesn't support embedded NUL ('\0') characters. They are
64 // replaced by '_' for the purpose of the test.
65 std::string result = GetString();
66 std::replace(result.begin(), result.end(), '\0', '_');
67 EXPECT_THAT(result, testing::MatchesRegex(
68 std::string(kExpectedPDF, sizeof(kExpectedPDF))));
weili9b777de2016-08-19 16:19:46 -070069 FPDF_ClosePage(page);
Tom Sepezd483eb42016-01-06 10:03:59 -080070}