diff options
author | Tom Sepez <tsepez@chromium.org> | 2015-02-25 16:00:06 -0800 |
---|---|---|
committer | Tom Sepez <tsepez@chromium.org> | 2015-02-25 16:00:06 -0800 |
commit | 42a8adad1c53c060bb93457902243a53270cec36 (patch) | |
tree | 5e047c66f44f0f8cf555dd9d984f834c9ff0f8b0 /testing/embedder_test.h | |
parent | 57e4c86145a247915c59ae5130cfc3ef9b36aa4c (diff) | |
download | pdfium-42a8adad1c53c060bb93457902243a53270cec36.tar.xz |
Implement a delegate for EmbedderTests.
This is the first step in allowing an embedder test to
someday gMock its callbacks, so that it can check that they
fired as expected. gMock wants a class, not a C-style
function-based API, and EmbedderTest is made to bridge
between the two.
The EmbedderTest class itself is modified to inherit from
the C JS API classes themselves, to make finding the
delegate easier.
For example, a future embedder test might send a keystroke
to a page, which would then trigger JS, which would then
trigger an Alert(). Mocking the Alert() callback would
allow the test to check that the alert happened as
expected.
R=thestig@chromium.org
Review URL: https://codereview.chromium.org/960663002
Diffstat (limited to 'testing/embedder_test.h')
-rw-r--r-- | testing/embedder_test.h | 44 |
1 files changed, 31 insertions, 13 deletions
diff --git a/testing/embedder_test.h b/testing/embedder_test.h index 072dce3bc3..ea93131749 100644 --- a/testing/embedder_test.h +++ b/testing/embedder_test.h @@ -9,6 +9,7 @@ #include "../core/include/fxcrt/fx_system.h" #include "../fpdfsdk/include/fpdf_dataavail.h" +#include "../fpdfsdk/include/fpdf_ext.h" #include "../fpdfsdk/include/fpdfformfill.h" #include "../fpdfsdk/include/fpdfview.h" #include "testing/gtest/include/gtest/gtest.h" @@ -18,25 +19,35 @@ class TestLoader; // This class is used to load a PDF document, and then run programatic // API tests against it. -class EmbedderTest : public ::testing::Test { +class EmbedderTest : public ::testing::Test, + public UNSUPPORT_INFO, + public IPDF_JSPLATFORM, + public FPDF_FORMFILLINFO { public: - EmbedderTest() : - document_(nullptr), - form_handle_(nullptr), - avail_(nullptr), - loader_(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_)); - } + class Delegate { + public: + virtual ~Delegate() { } + + // Equivalent to UNSUPPORT_INFO::FSDK_UnSupport_Handler(). + virtual void UnsupportedHandler(int type) { } + + // Equivalent to IPDF_JSPLATFORM::app_alert(). + virtual int Alert(FPDF_WIDESTRING message, FPDF_WIDESTRING title, + int type, int icon) { + return 0; + } + }; - virtual ~EmbedderTest() { } + EmbedderTest(); + virtual ~EmbedderTest(); void SetUp() override; void TearDown() override; + void SetDelegate(Delegate* delegate) { + delegate_ = delegate ? delegate : default_delegate_; + } + FPDF_DOCUMENT document() { return document_; } FPDF_FORMHANDLE form_handle() { return form_handle_; } @@ -62,6 +73,8 @@ class EmbedderTest : public ::testing::Test { virtual void UnloadPage(FPDF_PAGE page); protected: + Delegate* delegate_; + Delegate* default_delegate_; FPDF_DOCUMENT document_; FPDF_FORMHANDLE form_handle_; FPDF_AVAIL avail_; @@ -73,6 +86,11 @@ class EmbedderTest : public ::testing::Test { TestLoader* loader_; size_t file_length_; char* file_contents_; + + private: + static void UnsupportedHandlerTrampoline(UNSUPPORT_INFO*, int type); + static int AlertTrampoline(IPDF_JSPLATFORM* plaform, FPDF_WIDESTRING message, + FPDF_WIDESTRING title, int type, int icon); }; #endif // TESTING_EMBEDDER_TEST_H_ |