Cleanup casting of FX_Alloc() return values.
[pdfium.git] / testing / embedder_test.h
1 // Copyright (c) 2015 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 #ifndef TESTING_EMBEDDER_TEST_H_
6 #define TESTING_EMBEDDER_TEST_H_
7
8 #include <map>
9 #include <string>
10
11 #include "../public/fpdf_dataavail.h"
12 #include "../public/fpdf_ext.h"
13 #include "../public/fpdf_formfill.h"
14 #include "../public/fpdfview.h"
15 #include "testing/gtest/include/gtest/gtest.h"
16 #include "v8/include/v8.h"
17
18 class TestLoader;
19
20 // This class is used to load a PDF document, and then run programatic
21 // API tests against it.
22 class EmbedderTest : public ::testing::Test,
23                      public UNSUPPORT_INFO,
24                      public IPDF_JSPLATFORM,
25                      public FPDF_FORMFILLINFO {
26  public:
27   class Delegate {
28    public:
29     virtual ~Delegate() {}
30
31     // Equivalent to UNSUPPORT_INFO::FSDK_UnSupport_Handler().
32     virtual void UnsupportedHandler(int type) {}
33
34     // Equivalent to IPDF_JSPLATFORM::app_alert().
35     virtual int Alert(FPDF_WIDESTRING message,
36                       FPDF_WIDESTRING title,
37                       int type,
38                       int icon) {
39       return 0;
40     }
41
42     // Equivalent to FPDF_FORMFILLINFO::FFI_SetTimer().
43     virtual int SetTimer(int msecs, TimerCallback fn) { return 0; }
44
45     // Equivalent to FPDF_FORMFILLINFO::FFI_KillTimer().
46     virtual void KillTimer(int id) {}
47
48     // Equivalent to FPDF_FORMFILLINFO::FFI_GetPage().
49     virtual FPDF_PAGE GetPage(FPDF_FORMHANDLE form_handle,
50                               FPDF_DOCUMENT document,
51                               int page_index);
52
53    private:
54     std::map<int, FPDF_PAGE> m_pageMap;
55   };
56
57   EmbedderTest();
58   virtual ~EmbedderTest();
59
60   void SetUp() override;
61   void TearDown() override;
62
63   void SetDelegate(Delegate* delegate) {
64     delegate_ = delegate ? delegate : default_delegate_;
65   }
66
67   FPDF_DOCUMENT document() { return document_; }
68   FPDF_FORMHANDLE form_handle() { return form_handle_; }
69
70   // Open the document specified by |filename|, and create its form fill
71   // environment, or return false on failure.
72   virtual bool OpenDocument(const std::string& filename);
73
74   // Perform JavaScript actions that are to run at document open time.
75   virtual void DoOpenActions();
76
77   // Determine the page numbers present in the document.
78   virtual int GetFirstPageNum();
79   virtual int GetPageCount();
80
81   // Load a specific page of the open document.
82   virtual FPDF_PAGE LoadPage(int page_number);
83
84   // Load a specific page of the open document using delegate_->GetPage.
85   // delegate_->GetPage also caches loaded page.
86   virtual FPDF_PAGE LoadAndCachePage(int page_number);
87
88   // Convert a loaded page into a bitmap.
89   virtual FPDF_BITMAP RenderPage(FPDF_PAGE page);
90
91   // Relese the resources obtained from LoadPage(). Further use of |page|
92   // is prohibited after this call is made.
93   virtual void UnloadPage(FPDF_PAGE page);
94
95  protected:
96   Delegate* delegate_;
97   Delegate* default_delegate_;
98   FPDF_DOCUMENT document_;
99   FPDF_FORMHANDLE form_handle_;
100   FPDF_AVAIL avail_;
101   FX_DOWNLOADHINTS hints_;
102   FPDF_FILEACCESS file_access_;
103   FX_FILEAVAIL file_avail_;
104   v8::Platform* platform_;
105   v8::StartupData natives_;
106   v8::StartupData snapshot_;
107   TestLoader* loader_;
108   size_t file_length_;
109   char* file_contents_;
110
111  private:
112   static void UnsupportedHandlerTrampoline(UNSUPPORT_INFO*, int type);
113   static int AlertTrampoline(IPDF_JSPLATFORM* plaform,
114                              FPDF_WIDESTRING message,
115                              FPDF_WIDESTRING title,
116                              int type,
117                              int icon);
118   static int SetTimerTrampoline(FPDF_FORMFILLINFO* info,
119                                 int msecs,
120                                 TimerCallback fn);
121   static void KillTimerTrampoline(FPDF_FORMFILLINFO* info, int id);
122   static FPDF_PAGE GetPageTrampoline(FPDF_FORMFILLINFO* info,
123                                      FPDF_DOCUMENT document,
124                                      int page_index);
125 };
126
127 #endif  // TESTING_EMBEDDER_TEST_H_