// Copyright 2015 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 "public/fpdf_text.h"
#include "testing/embedder_test.h"
#include "testing/gtest/include/gtest/gtest.h"

class CPDFParserEmbedderTest : public EmbedderTest {};

TEST_F(CPDFParserEmbedderTest, LoadErrorBug454695) {
  // Test a dictionary with hex string instead of correct content.
  // Verify that the defective pdf shouldn't be opened correctly.
  EXPECT_FALSE(OpenDocument("bug_454695.pdf"));
}

TEST_F(CPDFParserEmbedderTest, Bug481363) {
  // Test colorspace object with malformed dictionary.
  ASSERT_TRUE(OpenDocument("bug_481363.pdf"));
  FPDF_PAGE page = LoadPage(0);
  EXPECT_TRUE(page);
  UnloadPage(page);
}

TEST_F(CPDFParserEmbedderTest, Bug544880) {
  // Test self referencing /Pages object.
  ASSERT_TRUE(OpenDocument("bug_544880.pdf"));
  // Shouldn't crash. We don't check the return value here because we get the
  // the count from the "/Count 1" in the testcase (at the time of writing)
  // rather than the actual count (0).
  (void)GetPageCount();
}

TEST_F(CPDFParserEmbedderTest, Bug325a) {
  EXPECT_FALSE(OpenDocument("bug_325_a.pdf"));
}

TEST_F(CPDFParserEmbedderTest, Bug325b) {
  EXPECT_FALSE(OpenDocument("bug_325_b.pdf"));
}

TEST_F(CPDFParserEmbedderTest, Bug602650) {
  // Test the case that cross reference entries, which are well formed,
  // but do not match with the objects.
  ASSERT_TRUE(OpenDocument("bug_602650.pdf"));
  FPDF_PAGE page = LoadPage(0);
  EXPECT_TRUE(page);
  FPDF_TEXTPAGE text_page = FPDFText_LoadPage(page);
  EXPECT_TRUE(text_page);
  // The page should not be blank.
  EXPECT_LT(0, FPDFText_CountChars(text_page));

  FPDFText_ClosePage(text_page);
  UnloadPage(page);
}

TEST_F(CPDFParserEmbedderTest, Bug757705) {
  ASSERT_TRUE(OpenDocument("bug_757705.pdf"));
}

TEST_F(CPDFParserEmbedderTest, LoadMainCrossRefTable) {
  ASSERT_TRUE(OpenDocumentLinearized("feature_linearized_loading.pdf"));
  // To check that main cross ref table is loaded correctly,will be enough to
  // check that the second page was correctly loaded. Because it is contains
  // crossrefs for second page.
  EXPECT_EQ(2, GetPageCount());
  FPDF_PAGE page = LoadPage(1);
  EXPECT_TRUE(page);
  FPDF_TEXTPAGE text_page = FPDFText_LoadPage(page);
  EXPECT_TRUE(text_page);
  // The page should not be blank.
  EXPECT_LT(0, FPDFText_CountChars(text_page));
  FPDFText_ClosePage(text_page);
  UnloadPage(page);
}

TEST_F(CPDFParserEmbedderTest, Bug828049) {
  ASSERT_TRUE(OpenDocument("bug_828049.pdf"));
  FPDF_PAGE page = LoadPage(0);
  EXPECT_TRUE(page);
  UnloadPage(page);
}

// crbug.com/1191313
TEST_F(CPDFParserEmbedderTest, InvalidDictionaryKeys) {
  ASSERT_TRUE(OpenDocument("bad_dict_keys.pdf"));
}
