summaryrefslogtreecommitdiff
path: root/testing/embedder_test.h
blob: b127eadbdef5624a82a6647fa99c6b74462b7f52 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
// Copyright (c) 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.

#ifndef TESTING_EMBEDDER_TEST_H_
#define TESTING_EMBEDDER_TEST_H_

#include <string>

#include "../core/include/fxcrt/fx_system.h"
#include "../fpdfsdk/include/fpdf_dataavail.h"
#include "../fpdfsdk/include/fpdfformfill.h"
#include "../fpdfsdk/include/fpdfview.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "v8/include/v8.h"

// This class is used to load a PDF document, and then run programatic
// API tests against it.
class EmbedderTest : public ::testing::Test {
 public:
  EmbedderTest() :
      document_(nullptr),
      avail_(nullptr),
      file_length_(0),
      file_contents_(nullptr) {
    memset(&hints_, 0, sizeof(hints_));
    memset(&file_access_, 0, sizeof(file_access_));
    memset(&file_avail_, 0, sizeof(file_avail_));
  }

  virtual ~EmbedderTest() { }

  void SetUp() override;
  void TearDown() override;

  FPDF_DOCUMENT document() { return document_; }

  // Open the document specified by |filename|, or return false on failure.
  virtual bool OpenDocument(const std::string& filename);

  // Create and return a handle to the form fill module for use with the
  // FORM_ family of functions from fpdfformfill.h, or return NULL on failure.
  virtual FPDF_FORMHANDLE SetFormFillEnvironment();

  // Release the resources obtained from SetFormFillEnvironment().
  virtual void ClearFormFillEnvironment(FPDF_FORMHANDLE form);

  // Perform JavaScript actions that are to run at document open time.
  virtual void DoOpenActions(FPDF_FORMHANDLE form);

  // Determine the page numbers present in the document.
  virtual int GetFirstPageNum();
  virtual int GetPageCount();

  // Load a specific page of the open document.
  virtual FPDF_PAGE LoadPage(int page_number, FPDF_FORMHANDLE form);

  // Convert a loaded page into a bitmap.
  virtual FPDF_BITMAP RenderPage(FPDF_PAGE page, FPDF_FORMHANDLE form);

  // Relese the resources obtained from LoadPage(). Further use of |page|
  // is prohibited after this call is made.
  virtual void UnloadPage(FPDF_PAGE page, FPDF_FORMHANDLE form);

 private:
  FPDF_DOCUMENT document_;
  FPDF_AVAIL avail_;
  FX_DOWNLOADHINTS hints_;
  FPDF_FILEACCESS file_access_;
  FX_FILEAVAIL file_avail_;
  v8::StartupData natives_;
  v8::StartupData snapshot_;
  size_t file_length_;
  char* file_contents_;
};

#endif  // TESTING_EMBEDDER_TEST_H_