summaryrefslogtreecommitdiff
path: root/testing/resources/javascript/document_methods.in
diff options
context:
space:
mode:
authorTom Sepez <tsepez@chromium.org>2015-04-23 17:50:57 -0700
committerTom Sepez <tsepez@chromium.org>2015-04-23 17:50:57 -0700
commitef25d9995e494bd596ffea8fb8c09c2e48daa9a0 (patch)
tree53e22c58375eb36abe97f5b8f2631b4eba111fbc /testing/resources/javascript/document_methods.in
parente4fde52cc2c827e637c96e8e1f76ba4644cf718a (diff)
downloadpdfium-ef25d9995e494bd596ffea8fb8c09c2e48daa9a0.tar.xz
Remove unused nParamNum values from JS method tables.
The code to validate the number of parameters happens inside each particular method, rather than prior to method dispatch. As such, there's no point in having this number take up space in the table. Add some test to cover at least some of the per-method validations, and update error messages to be more useful. R=thestig@chromium.org Review URL: https://codereview.chromium.org/1084183008
Diffstat (limited to 'testing/resources/javascript/document_methods.in')
-rw-r--r--testing/resources/javascript/document_methods.in340
1 files changed, 340 insertions, 0 deletions
diff --git a/testing/resources/javascript/document_methods.in b/testing/resources/javascript/document_methods.in
new file mode 100644
index 0000000000..662c05c8e0
--- /dev/null
+++ b/testing/resources/javascript/document_methods.in
@@ -0,0 +1,340 @@
+{{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]
+ /Contents 8 0 R
+>>
+% 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]
+>>
+% Contents of the page.
+{{object 8 0}} <<
+>>
+stream
+BT
+20 50 Td
+/F1 12 Tf
+(Hello, world!) Tj
+0 50 Td
+endstream
+endobj
+% 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
+function expect(str, expected) {
+ try {
+ var result = eval(str);
+ if (result == expected) {
+ app.alert('PASS: ' + str + ' = ' + result);
+ } else {
+ app.alert('FAIL: ' + str + ' = ' + result + ', expected = ' + expected);
+ }
+ } catch (e) {
+ app.alert('ERROR: ' + e.toString());
+ }
+}
+
+function expectError(str) {
+ try {
+ var result = eval(str);
+ app.alert('FAIL: ' + str + ' = ' + result + ', expected to throw error');
+ } catch (e) {
+ app.alert('PASS: ' + str + ' threw error ' + e.toString());
+ }
+}
+
+// "Unsupported" methods are present in the document object, but not
+// implemented. They always return |undefined| regardless of arguments.
+function testUnsupported(str) {
+ expect('typeof ' + str, 'function');
+ expect(str + '()', undefined);
+ expect(str + '(1, 2, "clams", [1, 2, 3])', undefined);
+}
+
+function testAddIcon() {
+ // Method is present.
+ expect('typeof this.addIcon', 'function');
+
+ // Method takes exactly two arguments.
+ expectError('this.addIcon()');
+ expectError('this.addIcon(1)');
+ expectError('this.addIcon(1, 2, 3)');
+
+ // Second argument must actually be an icon.
+ expectError('this.addIcon("myicon", 3)');
+
+ // TODO(tsepez): test success cases.
+}
+
+function testCalculateNow() {
+ // Method is present.
+ expect('typeof this.calculateNow', 'function');
+
+ // TODO(tsepez): test with no permissions.
+ // TODO(tsepez): test success cases.
+}
+
+function testDeletePages() {
+ // Method is present.
+ expect('typeof this.deletePages', 'function');
+
+ // TODO(tsepez): test with no permissions.
+ // TODO(tsepez): test success cases.
+}
+
+function testGetField() {
+ // Method is present.
+ expect('typeof this.getField', 'function');
+
+ // Method needs at least one argument.
+ expectError('this.getField()');
+
+ // TODO(tsepez): test success cases.
+}
+
+function testGetIcon() {
+ // Method is present.
+ expect('typeof this.getIcon', 'function');
+
+ // Method needs exactly one argument.
+ expectError('this.getIcon()');
+ expectError('this.getIcon(1, 2)');
+
+ // TODO(tsepez): test success cases.
+}
+
+function testGetNthFieldName() {
+ // Method is present.
+ expect('typeof this.getNthFieldName', 'function');
+
+ // Method needs at least one argument.
+ expectError('this.getNthFieldName()');
+
+ // Argument can not be negative.
+ expectError('this.getNthFieldName(-1)');
+
+ // TODO(tsepez): test success cases.
+}
+
+function testGetPageNthWord() {
+ // Method is present.
+ expect('typeof this.getPageNthWord', 'function');
+
+ // Method accepts any number of parameters.
+ expect('this.getPageNthWord(0, 0, true, "clams", [1, 2])', 'Hello,');
+
+ // Arguments can't be negative or out of range.
+ expectError('this.getPageNthWord(-1, 0, true)');
+ expectError('this.getPageNthWord(6, 0, true)');
+
+ // TODO(tsepez): test with no permissions.
+ // TODO(tsepez): test success cases.
+}
+
+function testGetPageNthWordQuads() {
+ // Method is present.
+ expect('typeof this.getPageNthWordQuads', 'function');
+
+ // TODO(tsepez): test with no permissions.
+ // TODO(tsepez): test success cases.
+}
+
+function testGetPageNumWords() {
+ // Method is present.
+ expect('typeof this.getPageNumWords', 'function');
+
+ // Method accepts any number of parameters.
+ expect('this.getPageNumWords(0, "clams", [1, 2])', 2);
+
+ // Arguments can't be negative or out of range.
+ expectError('this.getPageNumWords(-1)');
+ expectError('this.getPageNumWords(6)');
+
+ // TODO(tsepez): test with no permissions.
+ // TODO(tsepez): test success cases.
+}
+
+function testGetPrintParams() {
+ // Method is present.
+ expect('typeof this.getPrintParams', 'function');
+
+ // TODO(tsepez): test success cases.
+}
+
+function testMailDoc() {
+ // Method is present.
+ expect('typeof this.mailDoc', 'function');
+
+ // TODO(tsepez): test with no permissions.
+ // TODO(tsepez): test success cases.
+}
+
+function testMailForm() {
+ // Method is present.
+ expect('typeof this.mailForm', 'function');
+
+ // TODO(tsepez): test with no permissions.
+ // TODO(tsepez): test success cases.
+}
+
+function testPrint() {
+ // Method is present.
+ expect('typeof this.print', 'function');
+
+ // TODO(tsepez): test success cases.
+}
+
+function testRemoveField() {
+ // Method is present.
+ expect('typeof this.removeField', 'function');
+
+ // Method requires at least one argument.
+ expectError('this.removeField()');
+
+ // TODO(tsepez): test with no permissions.
+ // TODO(tsepez): test success cases.
+}
+
+function testRemoveIcon() {
+ // Method is present.
+ expect('typeof this.removeIcon', 'function');
+
+ // Method requires at least one argument.
+ expectError('this.removeIcon()');
+
+ // TODO(tsepez): test success cases.
+}
+
+function testResetForm() {
+ // Method is present.
+ expect('typeof this.resetForm', 'function');
+
+ // TODO(tsepez): test with no permissions.
+ // TODO(tsepez): test success cases.
+}
+
+function testSubmitForm() {
+ // Method is present.
+ expect('typeof this.submitForm', 'function');
+
+ // Method requires at least one argument.
+ expectError('this.submitForm()');
+
+ // TODO(tsepez): test success cases.
+}
+
+try {
+ app.alert('*** Testing Unsupported Methods ***');
+ testUnsupported('this.addAnnot');
+ testUnsupported('this.addField');
+ testUnsupported('this.addLink');
+ testUnsupported('this.closeDoc');
+ testUnsupported('this.createDataObject');
+ testUnsupported('this.exportAsFDF');
+ testUnsupported('this.exportAsText');
+ testUnsupported('this.exportAsXFDF');
+ testUnsupported('this.extractPages');
+ testUnsupported('this.getAnnot');
+ testUnsupported('this.getAnnot3D');
+ testUnsupported('this.getAnnots');
+ testUnsupported('this.getLinks');
+ testUnsupported('this.getOCGs');
+ testUnsupported('this.getPageBox');
+ testUnsupported('this.getURL');
+ testUnsupported('this.importAnFDF');
+ testUnsupported('this.importAnXFDF');
+ testUnsupported('this.importTextData');
+ testUnsupported('this.insertPages');
+ testUnsupported('this.replacePages');
+ testUnsupported('this.saveAs');
+
+ app.alert('*** Testing Supported Methods ***');
+ testAddIcon();
+ testCalculateNow();
+ testDeletePages();
+ testGetField();
+ testGetIcon();
+ testGetNthFieldName();
+ testGetPageNthWord();
+ testGetPageNthWordQuads();
+ testGetPageNumWords();
+ testGetPrintParams();
+ testMailDoc();
+ testMailForm();
+ testPrint();
+ testRemoveField();
+ testRemoveIcon();
+ testResetForm();
+ testSubmitForm();
+} catch (e) {
+ app.alert('FATAL: ' + e.toString());
+}
+endstream
+endobj
+{{xref}}
+trailer <<
+ /Root 1 0 R
+ /Info 9 0 R
+>>
+{{startxref}}
+%%EOF