summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--samples/pdfium_test.cc15
-rw-r--r--testing/resources/javascript/document_props.in143
-rw-r--r--testing/resources/javascript/document_props_expected.txt97
3 files changed, 250 insertions, 5 deletions
diff --git a/samples/pdfium_test.cc b/samples/pdfium_test.cc
index 20658fbf4d..8f9c832fb2 100644
--- a/samples/pdfium_test.cc
+++ b/samples/pdfium_test.cc
@@ -216,8 +216,8 @@ void WriteEmf(FPDF_PAGE page, const char* pdf_name, int num) {
}
#endif
-int Form_Alert(IPDF_JSPLATFORM*, FPDF_WIDESTRING msg, FPDF_WIDESTRING,
- int, int) {
+int ExampleAppAlert(IPDF_JSPLATFORM*, FPDF_WIDESTRING msg, FPDF_WIDESTRING,
+ int, int) {
// Deal with differences between UTF16LE and wchar_t on this platform.
size_t characters = 0;
while (msg[characters]) {
@@ -234,7 +234,11 @@ int Form_Alert(IPDF_JSPLATFORM*, FPDF_WIDESTRING msg, FPDF_WIDESTRING,
return 0;
}
-void Unsupported_Handler(UNSUPPORT_INFO*, int type) {
+void ExampleDocGotoPage(IPDF_JSPLATFORM*, int pageNumber) {
+ printf("Goto Page: %d\n", pageNumber);
+}
+
+void ExampleUnsupportedHandler(UNSUPPORT_INFO*, int type) {
std::string feature = "Unknown";
switch (type) {
case FPDF_UNSP_DOC_XFAFORM:
@@ -373,7 +377,8 @@ void RenderPdf(const std::string& name, const char* pBuf, size_t len,
IPDF_JSPLATFORM platform_callbacks;
memset(&platform_callbacks, '\0', sizeof(platform_callbacks));
platform_callbacks.version = 1;
- platform_callbacks.app_alert = Form_Alert;
+ platform_callbacks.app_alert = ExampleAppAlert;
+ platform_callbacks.Doc_gotoPage = ExampleDocGotoPage;
FPDF_FORMFILLINFO form_callbacks;
memset(&form_callbacks, '\0', sizeof(form_callbacks));
@@ -534,7 +539,7 @@ int main(int argc, const char* argv[]) {
UNSUPPORT_INFO unsuppored_info;
memset(&unsuppored_info, '\0', sizeof(unsuppored_info));
unsuppored_info.version = 1;
- unsuppored_info.FSDK_UnSupport_Handler = Unsupported_Handler;
+ unsuppored_info.FSDK_UnSupport_Handler = ExampleUnsupportedHandler;
FSDK_SetUnSpObjProcessHandler(&unsuppored_info);
diff --git a/testing/resources/javascript/document_props.in b/testing/resources/javascript/document_props.in
new file mode 100644
index 0000000000..8ab7e3d566
--- /dev/null
+++ b/testing/resources/javascript/document_props.in
@@ -0,0 +1,143 @@
+{{header}}
+{{object 1 0}} <<
+ /Type /Catalog
+ /Pages 2 0 R
+ /OpenAction 10 0 R
+>>
+endobj
+{{object 2 0}} <<
+ /Type /Pages
+ /Count 4
+ /Kids [
+ 3 0 R
+ 4 0 R
+ 5 0 R
+ 6 0 R
+ ]
+>>
+endobj
+% Page number 0.
+{{object 3 0}} <<
+ /Type /Page
+ /Parent 2 0 R
+ /Resources <<
+ /Font <</F1 15 0 R>>
+ >>
+ /MediaBox [0 0 612 792]
+>>
+% Page number 1.
+{{object 4 0}} <<
+ /Type /Page
+ /Parent 2 0 R
+ /Resources <<
+ /Font <</F1 15 0 R>>
+ >>
+ /MediaBox [0 0 612 792]
+>>
+% Page number 2.
+{{object 5 0}} <<
+ /Type /Page
+ /Parent 2 0 R
+ /Resources <<
+ /Font <</F1 15 0 R>>
+ >>
+ /MediaBox [0 0 612 792]
+>>
+% Page number 3.
+{{object 6 0}} <<
+ /Type /Page
+ /Parent 2 0 R
+ /Resources <<
+ /Font <</F1 15 0 R>>
+ >>
+ /MediaBox [0 0 612 792]
+>>
+
+% Info
+{{object 9 0}} <<
+ /Author (Joe Random Author)
+ /Creator (Joe Random Creator)
+>>
+endobj
+% OpenAction action
+{{object 10 0}} <<
+ /Type /Action
+ /S /JavaScript
+ /JS 11 0 R
+>>
+endobj
+% JS program to exexute
+{{object 11 0}} <<
+>>
+stream
+var document_props = [
+ 'ADBE',
+ 'author',
+ 'baseURL',
+ 'bookmarkRoot',
+ 'calculate',
+ 'Collab',
+ 'creationDate',
+ 'creator',
+ 'delay',
+ 'dirty',
+ 'documentFileName',
+ 'external',
+ 'filesize',
+ 'icons',
+ 'info',
+ 'keywords',
+ 'layout',
+ 'media',
+ 'modDate',
+ 'mouseX',
+ 'mouseY',
+ 'numFields',
+ 'numPages',
+ 'pageNum',
+ 'pageWindowRect',
+ 'path',
+ 'producer',
+ 'subject',
+ 'title',
+ 'zoom',
+ 'zoomType',
+];
+
+function testGetProps(props) {
+ try {
+ app.alert('*** Getting properties ***');
+ for (var i = 0; i < props.length; ++i) {
+ var expr1 = "this." + props[i];
+ var expr2 = "typeof " + expr1;
+ app.alert(expr1 + " is " + eval(expr2) + ' ' + eval(expr1));
+ }
+ } catch (e) {
+ app.alert("ERROR: " + e.toString());
+ }
+}
+
+function testSetProps(props) {
+ try {
+ app.alert('*** Setting properties ***');
+ for (var i = 0; i < props.length; ++i) {
+ var expr1 = "this." + props[i] + ' = 3;'
+ app.alert(expr1 + " yields " + eval(expr1));
+ }
+ } catch (e) {
+ app.alert("ERROR: " + e.toString());
+ }
+}
+
+testGetProps(document_props);
+testSetProps(document_props);
+testGetProps(document_props);
+endstream
+endobj
+{{xref}}
+trailer <<
+ /Root 1 0 R
+ /Info 9 0 R
+>>
+{{startxref}}
+%%EOF
diff --git a/testing/resources/javascript/document_props_expected.txt b/testing/resources/javascript/document_props_expected.txt
new file mode 100644
index 0000000000..38bea97acb
--- /dev/null
+++ b/testing/resources/javascript/document_props_expected.txt
@@ -0,0 +1,97 @@
+Alert: *** Getting properties ***
+Alert: this.ADBE is undefined undefined
+Alert: this.author is string Joe Random Author
+Alert: this.baseURL is string
+Alert: this.bookmarkRoot is undefined undefined
+Alert: this.calculate is boolean true
+Alert: this.Collab is undefined undefined
+Alert: this.creationDate is string
+Alert: this.creator is string Joe Random Creator
+Alert: this.delay is number 0
+Alert: this.dirty is boolean false
+Alert: this.documentFileName is string
+Alert: this.external is number 1
+Alert: this.filesize is number 0
+Alert: this.icons is undefined undefined
+Alert: this.info is object [object Object]
+Alert: this.keywords is string
+Alert: this.layout is undefined undefined
+Alert: this.media is undefined undefined
+Alert: this.modDate is string
+Alert: this.mouseX is undefined undefined
+Alert: this.mouseY is undefined undefined
+Alert: this.numFields is number 0
+Alert: this.numPages is number 4
+Alert: this.pageNum is undefined undefined
+Alert: this.pageWindowRect is undefined undefined
+Alert: this.path is string /
+Alert: this.producer is string
+Alert: this.subject is string
+Alert: this.title is string
+Alert: this.zoom is undefined undefined
+Alert: this.zoomType is undefined undefined
+Alert: *** Setting properties ***
+Alert: this.ADBE = 3; yields 3
+Alert: this.author = 3; yields 3
+Alert: this.baseURL = 3; yields 3
+Alert: this.bookmarkRoot = 3; yields 3
+Alert: this.calculate = 3; yields 3
+Alert: this.Collab = 3; yields 3
+Alert: this.creationDate = 3; yields 3
+Alert: this.creator = 3; yields 3
+Alert: this.delay = 3; yields 3
+Alert: this.dirty = 3; yields 3
+Alert: this.documentFileName = 3; yields 3
+Alert: this.external = 3; yields 3
+Alert: this.filesize = 3; yields 3
+Alert: this.icons = 3; yields 3
+Alert: this.info = 3; yields 3
+Alert: this.keywords = 3; yields 3
+Alert: this.layout = 3; yields 3
+Alert: this.media = 3; yields 3
+Alert: this.modDate = 3; yields 3
+Alert: this.mouseX = 3; yields 3
+Alert: this.mouseY = 3; yields 3
+Alert: this.numFields = 3; yields 3
+Alert: this.numPages = 3; yields 3
+Goto Page: 3
+Alert: this.pageNum = 3; yields 3
+Alert: this.pageWindowRect = 3; yields 3
+Alert: this.path = 3; yields 3
+Alert: this.producer = 3; yields 3
+Alert: this.subject = 3; yields 3
+Alert: this.title = 3; yields 3
+Alert: this.zoom = 3; yields 3
+Alert: this.zoomType = 3; yields 3
+Alert: *** Getting properties ***
+Alert: this.ADBE is undefined undefined
+Alert: this.author is string 3
+Alert: this.baseURL is string 3
+Alert: this.bookmarkRoot is undefined undefined
+Alert: this.calculate is boolean true
+Alert: this.Collab is undefined undefined
+Alert: this.creationDate is string 3
+Alert: this.creator is string 3
+Alert: this.delay is number 1
+Alert: this.dirty is boolean true
+Alert: this.documentFileName is string
+Alert: this.external is number 1
+Alert: this.filesize is number 0
+Alert: this.icons is undefined undefined
+Alert: this.info is object [object Object]
+Alert: this.keywords is string 3
+Alert: this.layout is undefined undefined
+Alert: this.media is undefined undefined
+Alert: this.modDate is string 3
+Alert: this.mouseX is undefined undefined
+Alert: this.mouseY is undefined undefined
+Alert: this.numFields is number 0
+Alert: this.numPages is number 4
+Alert: this.pageNum is undefined undefined
+Alert: this.pageWindowRect is undefined undefined
+Alert: this.path is string /
+Alert: this.producer is string 3
+Alert: this.subject is string 3
+Alert: this.title is string 3
+Alert: this.zoom is undefined undefined
+Alert: this.zoomType is undefined undefined