diff options
-rw-r--r-- | samples/pdfium_test.cc | 15 | ||||
-rw-r--r-- | testing/resources/javascript/document_props.in | 143 | ||||
-rw-r--r-- | testing/resources/javascript/document_props_expected.txt | 97 |
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 |