| {{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 |