summaryrefslogtreecommitdiff
path: root/testing
diff options
context:
space:
mode:
Diffstat (limited to 'testing')
-rw-r--r--testing/embedder_test.cpp34
-rw-r--r--testing/embedder_test.h16
2 files changed, 50 insertions, 0 deletions
diff --git a/testing/embedder_test.cpp b/testing/embedder_test.cpp
index 1476522e57..eb16bc70f9 100644
--- a/testing/embedder_test.cpp
+++ b/testing/embedder_test.cpp
@@ -221,6 +221,7 @@ bool EmbedderTest::OpenDocument(const std::string& filename) {
formfillinfo->version = 1;
formfillinfo->FFI_SetTimer = SetTimerTrampoline;
formfillinfo->FFI_KillTimer = KillTimerTrampoline;
+ formfillinfo->FFI_GetPage = GetPageTrampoline;
formfillinfo->m_pJsPlatform = platform;
form_handle_ = FPDFDOC_InitFormFillEnvironment(document_, formfillinfo);
@@ -259,6 +260,15 @@ FPDF_PAGE EmbedderTest::LoadPage(int page_number) {
return page;
}
+FPDF_PAGE EmbedderTest::LoadAndCachePage(int page_number) {
+ FPDF_PAGE page = delegate_->GetPage(form_handle_, document_, page_number);
+ if (!page) {
+ return nullptr;
+ }
+ FORM_DoPageAAction(page, form_handle_, FPDFPAGE_AACTION_OPEN);
+ return page;
+}
+
FPDF_BITMAP EmbedderTest::RenderPage(FPDF_PAGE page) {
int width = static_cast<int>(FPDF_GetPageWidth(page));
int height = static_cast<int>(FPDF_GetPageHeight(page));
@@ -275,6 +285,22 @@ void EmbedderTest::UnloadPage(FPDF_PAGE page) {
FPDF_ClosePage(page);
}
+FPDF_PAGE EmbedderTest::Delegate::GetPage(FPDF_FORMHANDLE form_handle,
+ FPDF_DOCUMENT document,
+ int page_index) {
+ auto it = m_pageMap.find(page_index);
+ if (it != m_pageMap.end()) {
+ return it->second;
+ }
+ FPDF_PAGE page = FPDF_LoadPage(document, page_index);
+ if (!page) {
+ return nullptr;
+ }
+ m_pageMap[page_index] = page;
+ FORM_OnAfterLoadPage(page, form_handle);
+ return page;
+}
+
// static
void EmbedderTest::UnsupportedHandlerTrampoline(UNSUPPORT_INFO* info,
int type) {
@@ -306,6 +332,14 @@ void EmbedderTest::KillTimerTrampoline(FPDF_FORMFILLINFO* info, int id) {
return test->delegate_->KillTimer(id);
}
+// static
+FPDF_PAGE EmbedderTest::GetPageTrampoline(FPDF_FORMFILLINFO* info,
+ FPDF_DOCUMENT document,
+ int page_index) {
+ EmbedderTest* test = static_cast<EmbedderTest*>(info);
+ return test->delegate_->GetPage(test->m_pFormfillinfo, document, page_index);
+}
+
// Can't use gtest-provided main since we need to stash the path to the
// executable in order to find the external V8 binary data files.
int main(int argc, char** argv) {
diff --git a/testing/embedder_test.h b/testing/embedder_test.h
index 4bd9d9713e..f490f82536 100644
--- a/testing/embedder_test.h
+++ b/testing/embedder_test.h
@@ -5,6 +5,7 @@
#ifndef TESTING_EMBEDDER_TEST_H_
#define TESTING_EMBEDDER_TEST_H_
+#include <map>
#include <string>
#include "../public/fpdf_dataavail.h"
@@ -43,6 +44,14 @@ class EmbedderTest : public ::testing::Test,
// Equivalent to FPDF_FORMFILLINFO::FFI_KillTimer().
virtual void KillTimer(int id) {}
+
+ // Equivalent to FPDF_FORMFILLINFO::FFI_GetPage().
+ virtual FPDF_PAGE GetPage(FPDF_FORMHANDLE form_handle,
+ FPDF_DOCUMENT document,
+ int page_index);
+
+ private:
+ std::map<int, FPDF_PAGE> m_pageMap;
};
EmbedderTest();
@@ -72,6 +81,10 @@ class EmbedderTest : public ::testing::Test,
// Load a specific page of the open document.
virtual FPDF_PAGE LoadPage(int page_number);
+ // Load a specific page of the open document using delegate_->GetPage.
+ // delegate_->GetPage also caches loaded page.
+ virtual FPDF_PAGE LoadAndCachePage(int page_number);
+
// Convert a loaded page into a bitmap.
virtual FPDF_BITMAP RenderPage(FPDF_PAGE page);
@@ -106,6 +119,9 @@ class EmbedderTest : public ::testing::Test,
int msecs,
TimerCallback fn);
static void KillTimerTrampoline(FPDF_FORMFILLINFO* info, int id);
+ static FPDF_PAGE GetPageTrampoline(FPDF_FORMFILLINFO* info,
+ FPDF_DOCUMENT document,
+ int page_index);
};
#endif // TESTING_EMBEDDER_TEST_H_