Clean up CPDF_AnnotList.
[pdfium.git] / testing / resources / javascript / document_methods.in
1 {{header}}
2 {{object 1 0}} <<
3   /Type /Catalog
4   /Pages 2 0 R
5   /OpenAction 10 0 R
6 >>
7 endobj
8 {{object 2 0}} <<
9   /Type /Pages
10   /Count 4
11   /Kids [
12     3 0 R
13     4 0 R
14     5 0 R
15     6 0 R
16   ]
17 >>
18 endobj
19 % Page number 0.
20 {{object 3 0}} <<
21   /Type /Page
22   /Parent 2 0 R
23   /Resources <<
24     /Font <</F1 15 0 R>>
25   >>
26   /MediaBox [0 0 612 792]
27   /Contents 8 0 R
28 >>
29 % Page number 1.
30 {{object 4 0}} <<
31   /Type /Page
32   /Parent 2 0 R
33   /Resources <<
34     /Font <</F1 15 0 R>>
35   >>
36   /MediaBox [0 0 612 792]
37 >>
38 % Page number 2.
39 {{object 5 0}} <<
40   /Type /Page
41   /Parent 2 0 R
42   /Resources <<
43     /Font <</F1 15 0 R>>
44   >>
45   /MediaBox [0 0 612 792]
46 >>
47 % Page number 3.
48 {{object 6 0}} <<
49   /Type /Page
50   /Parent 2 0 R
51   /Resources <<
52     /Font <</F1 15 0 R>>
53   >>
54   /MediaBox [0 0 612 792]
55 >>
56 % Contents of the page.
57 {{object 8 0}} <<
58 >>
59 stream
60 BT
61 20 50 Td
62 /F1 12 Tf
63 (Hello, world!) Tj
64 0 50 Td
65 endstream
66 endobj
67 % Info
68 {{object 9 0}} <<
69   /Author (Joe Random Author)
70   /Creator (Joe Random Creator)
71 >>
72 endobj
73 % OpenAction action
74 {{object 10 0}} <<
75   /Type /Action
76   /S /JavaScript
77   /JS 11 0 R
78 >>
79 endobj
80 % JS program to exexute
81 {{object 11 0}} <<
82 >>
83 stream
84 function expect(str, expected) {
85   try {
86     var result = eval(str);
87     if (result == expected) {
88       app.alert('PASS: ' + str + ' = ' + result);
89     } else {
90       app.alert('FAIL: ' + str + ' = ' + result + ', expected = ' + expected);
91     }
92   } catch (e) {
93     app.alert('ERROR: ' + e.toString());
94   }
95 }
96
97 function expectError(str) {
98   try {
99     var result = eval(str);
100     app.alert('FAIL: ' + str + ' = ' + result + ', expected to throw error');
101   } catch (e) {
102     app.alert('PASS: ' + str + ' threw error ' + e.toString());
103   }
104 }
105
106 // "Unsupported" methods are present in the document object, but not
107 // implemented. They always return |undefined| regardless of arguments.
108 function testUnsupported(str) {
109   expect('typeof ' + str, 'function');
110   expect(str + '()', undefined);
111   expect(str + '(1, 2, "clams", [1, 2, 3])', undefined);
112 }
113
114 function testAddIcon() {
115    // Method is present.
116    expect('typeof this.addIcon', 'function');
117
118    // Method takes exactly two arguments.
119    expectError('this.addIcon()');
120    expectError('this.addIcon(1)');
121    expectError('this.addIcon(1, 2, 3)');
122
123    // Second argument must actually be an icon.
124    expectError('this.addIcon("myicon", 3)');
125    expectError('this.addIcon("myicon", undefined)');
126
127    // TODO(tsepez): test success cases.
128 }
129
130 function testCalculateNow() {
131    // Method is present.
132    expect('typeof this.calculateNow', 'function');
133
134    // TODO(tsepez): test with no permissions.
135    // TODO(tsepez): test success cases.
136 }
137
138 function testGetField() {
139    // Method is present.
140    expect('typeof this.getField', 'function');
141
142    // Method needs at least one argument.
143    expectError('this.getField()');
144
145    // TODO(tsepez): test success cases.
146 }
147
148 function testGetIcon() {
149    // Method is present.
150    expect('typeof this.getIcon', 'function');
151
152    // Method needs exactly one argument.
153    expectError('this.getIcon()');
154    expectError('this.getIcon(1, 2)');
155
156   // TODO(tsepez): test success cases.
157 }
158
159 function testGetNthFieldName() {
160   // Method is present.
161   expect('typeof this.getNthFieldName', 'function');
162
163   // Method needs at least one argument.
164   expectError('this.getNthFieldName()');
165
166   // Argument can not be negative.
167   expectError('this.getNthFieldName(-1)');
168
169   // TODO(tsepez): test success cases.
170 }
171
172 function testGetPageNthWord() {
173   // Method is present.
174   expect('typeof this.getPageNthWord', 'function');
175
176   // Method accepts any number of parameters.
177   expect('this.getPageNthWord(0, 0, true, "clams", [1, 2])', 'Hello,');
178
179   // Arguments can't be negative or out of range.
180   expectError('this.getPageNthWord(-1, 0, true)');
181   expectError('this.getPageNthWord(6, 0, true)');
182
183   // TODO(tsepez): test with no permissions.
184   // TODO(tsepez): test success cases.
185 }
186
187 function testGetPageNthWordQuads() {
188    // Method is present.
189    expect('typeof this.getPageNthWordQuads', 'function');
190
191   // TODO(tsepez): test with no permissions.
192   // TODO(tsepez): test success cases.
193 }
194
195 function testGetPageNumWords() {
196    // Method is present.
197    expect('typeof this.getPageNumWords', 'function');
198
199   // Method accepts any number of parameters.
200   expect('this.getPageNumWords(0, "clams", [1, 2])', 2);
201
202   // Arguments can't be negative or out of range.
203   expectError('this.getPageNumWords(-1)');
204   expectError('this.getPageNumWords(6)');
205
206   // TODO(tsepez): test with no permissions.
207   // TODO(tsepez): test success cases.
208 }
209
210 function testGetPrintParams() {
211    // Method is present.
212    expect('typeof this.getPrintParams', 'function');
213
214   // TODO(tsepez): test success cases.
215 }
216
217 function testMailDoc() {
218    // Method is present.
219    expect('typeof this.mailDoc', 'function');
220
221   // TODO(tsepez): test with no permissions.
222   // TODO(tsepez): test success cases.
223 }
224
225 function testMailForm() {
226    // Method is present.
227    expect('typeof this.mailForm', 'function');
228
229   // TODO(tsepez): test with no permissions.
230   // TODO(tsepez): test success cases.
231 }
232
233 function testPrint() {
234    // Method is present.
235    expect('typeof this.print', 'function');
236
237   // TODO(tsepez): test success cases.
238 }
239
240 function testRemoveField() {
241   // Method is present.
242   expect('typeof this.removeField', 'function');
243
244   // Method requires at least one argument.
245   expectError('this.removeField()');
246
247   // TODO(tsepez): test with no permissions.
248   // TODO(tsepez): test success cases.
249 }
250
251 function testResetForm() {
252    // Method is present.
253    expect('typeof this.resetForm', 'function');
254
255   // TODO(tsepez): test with no permissions.
256   // TODO(tsepez): test success cases.
257 }
258
259 function testSubmitForm() {
260    // Method is present.
261    expect('typeof this.submitForm', 'function');
262
263   // Method requires at least one argument.
264   expectError('this.submitForm()');
265
266   // TODO(tsepez): test success cases.
267 }
268
269 try {
270   app.alert('*** Testing Unsupported Methods ***');
271   testUnsupported('this.addAnnot');
272   testUnsupported('this.addField');
273   testUnsupported('this.addLink');
274   testUnsupported('this.closeDoc');
275   testUnsupported('this.createDataObject');
276   testUnsupported('this.deletePages');
277   testUnsupported('this.exportAsFDF');
278   testUnsupported('this.exportAsText');
279   testUnsupported('this.exportAsXFDF');
280   testUnsupported('this.extractPages');
281   testUnsupported('this.getAnnot');
282   testUnsupported('this.getAnnot3D');
283   testUnsupported('this.getAnnots');
284   testUnsupported('this.getLinks');
285   testUnsupported('this.getOCGs');
286   testUnsupported('this.getPageBox');
287   testUnsupported('this.getURL');
288   testUnsupported('this.importAnFDF');
289   testUnsupported('this.importAnXFDF');
290   testUnsupported('this.importTextData');
291   testUnsupported('this.insertPages');
292   testUnsupported('this.removeIcon');
293   testUnsupported('this.replacePages');
294   testUnsupported('this.saveAs');
295
296   app.alert('*** Testing Supported Methods ***');
297   testAddIcon();
298   testCalculateNow();
299   testGetField();
300   testGetIcon();
301   testGetNthFieldName();
302   testGetPageNthWord();
303   testGetPageNthWordQuads();
304   testGetPageNumWords();
305   testGetPrintParams();
306   testMailDoc();
307   testMailForm();
308   testPrint();
309   testRemoveField();
310   testResetForm();
311   testSubmitForm();
312 } catch (e) {
313   app.alert('FATAL: ' + e.toString());
314 }
315 endstream
316 endobj
317 {{xref}}
318 trailer <<
319   /Root 1 0 R
320   /Info 9 0 R
321 >>
322 {{startxref}}
323 %%EOF