| {{header}} | |
| {{object 1 0}} << | |
| /Type /Catalog | |
| /Pages 2 0 R | |
| /AcroForm 4 0 R | |
| /OpenAction 10 0 R | |
| >> | |
| endobj | |
| {{object 2 0}} << | |
| /Type /Pages | |
| /Count 1 | |
| /Kids [ | |
| 3 0 R | |
| ] | |
| >> | |
| endobj | |
| % Page number 0. | |
| {{object 3 0}} << | |
| /Type /Page | |
| /Parent 2 0 R | |
| /MediaBox [0 0 612 792] | |
| >> | |
| endobj | |
| % Forms | |
| {{object 4 0}} << | |
| /Fields [5 0 R] | |
| >> | |
| endobj | |
| % Fields | |
| {{object 5 0}} << | |
| /T (MyField) | |
| /Type /Annot | |
| /Subtype /Widget | |
| /Rect [100 100 400 400] | |
| /Kids [ | |
| 6 0 R | |
| 7 0 R | |
| 8 0 R | |
| 9 0 R | |
| ] | |
| >> | |
| endobj | |
| {{object 6 0}} << | |
| /FT /Tx | |
| /Parent 5 0 R | |
| /T (Sub_X) | |
| /Type /Annot | |
| /Subtype /Widget | |
| /Rect [200 200 220 220] | |
| >> | |
| endobj | |
| {{object 7 0}} << | |
| /FT /Tx | |
| /Parent 5 0 R | |
| /T (Sub_A) | |
| /Type /Annot | |
| /Subtype /Widget | |
| /Rect [220 220 240 240] | |
| >> | |
| endobj | |
| {{object 8 0}} << | |
| /FT /Tx | |
| /Parent 5 0 R | |
| /T (Sub_Z) | |
| /Type /Annot | |
| /Subtype /Widget | |
| /Rect [240 240 260 260] | |
| >> | |
| endobj | |
| {{object 9 0}} << | |
| /FT /Tx | |
| /Parent 5 0 R | |
| /T (Sub_B) | |
| /Type /Annot | |
| /Subtype /Widget | |
| /Rect [260 260 280 280] | |
| >> | |
| endobj | |
| % OpenAction action | |
| {{object 10 0}} << | |
| /Type /Action | |
| /S /JavaScript | |
| /JS 11 0 R | |
| >> | |
| endobj | |
| % JS program to exexute | |
| {{object 11 0}} << | |
| {{streamlen}} | |
| >> | |
| stream | |
| function testReadProperty(field, prop, expected) { | |
| try { | |
| var actual = field[prop]; | |
| if (actual == expected) { | |
| app.alert('PASS: ' + prop + ' = ' + actual); | |
| } else { | |
| app.alert('FAIL: ' + prop + ' = ' + actual + ', expected = ' + expected); | |
| } | |
| } catch (e) { | |
| app.alert('ERROR: ' + e.toString()); | |
| } | |
| } | |
| function testUnreadableProperty(field, prop) { | |
| try { | |
| var value = field[prop]; | |
| app.alert('FAIL: ' + prop + ', expected to throw error'); | |
| } catch (e) { | |
| app.alert('PASS: ' + prop + ' threw error ' + e.toString()); | |
| } | |
| } | |
| function testWriteProperty(field, prop, newValue) { | |
| try { | |
| field[prop] = newValue; | |
| var actual = field[prop]; | |
| if (actual == newValue) { | |
| app.alert('PASS: ' + prop + ' = ' + actual); | |
| } else { | |
| app.alert('FAIL: ' + prop + ' = ' + actual + ', expected = ' + newValue); | |
| } | |
| } catch (e) { | |
| app.alert('ERROR: ' + e.toString()); | |
| } | |
| } | |
| function testWriteIgnoredProperty(field, prop, expected, newValue) { | |
| try { | |
| field[prop] = newValue; | |
| var actual = field[prop]; | |
| if (actual == expected) { | |
| app.alert('PASS: ' + prop + ' = ' + actual); | |
| } else { | |
| app.alert('FAIL: ' + prop + ' = ' + actual + ', expected = ' + expected); | |
| } | |
| } catch (e) { | |
| app.alert('ERROR: ' + e.toString()); | |
| } | |
| } | |
| function testUnwritableProperty(field, prop, newValue) { | |
| try { | |
| field[prop] = newValue; | |
| app.alert('FAIL: ' + prop + ' = ' + newValue + ', expected to throw error'); | |
| } catch (e) { | |
| app.alert('PASS: ' + prop + ' threw error ' + e.toString()); | |
| } | |
| } | |
| function testRWProperty(field, prop, expected, newValue) { | |
| testReadProperty(field, prop, expected); | |
| testWriteProperty(field, prop, newValue); | |
| } | |
| function testRIProperty(field, prop, expected, newValue) { | |
| testReadProperty(field, prop, expected); | |
| testWriteIgnoredProperty(field, prop, expected, newValue); | |
| } | |
| function testROProperty(field, prop, expected) { | |
| testReadProperty(field, prop, expected); | |
| testUnwritableProperty(field, prop, 42); | |
| } | |
| function testXXProperty(field, prop) { | |
| testUnreadableProperty(field, prop); | |
| testUnwritableProperty(field, prop, 42); | |
| } | |
| function testProperties() { | |
| try { | |
| var field = this.getField("MyField"); | |
| app.alert('Testing properties under delay'); | |
| testRWProperty(field, "delay", false, true); | |
| // TODO(tsepez): try this case, too. | |
| // testPropertiesCase(field); | |
| app.alert('Testing properties under non-delay'); | |
| testRWProperty(field, "delay", true, false); | |
| testPropertiesCase(field); | |
| } catch (e) { | |
| app.alert("Unexpected error: " + e); | |
| } | |
| } | |
| function testPropertiesCase(field) { | |
| try { | |
| // TODO(tsepez): devise tests and uncomment. | |
| testRIProperty(field, "alignment", "left", "center"); | |
| // testRWProperty(field, "borderStyle", "solid", "inset"); | |
| // testROProperty(field, "buttonAlignX", "clams"); | |
| // testROProperty(field, "buttonAlignY", "clams"); | |
| // testROProperty(field, "buttonFitBounds", "clams"); | |
| // testROProperty(field, "buttonPosition", "clams"); | |
| // testROProperty(field, "buttonScaleHow", "clams"); | |
| // testROProperty(field, "buttonScaleWhen", "clams"); | |
| testRIProperty(field, "calcOrderIndex", -1, 100); | |
| testRIProperty(field, "charLimit", 0, 100); | |
| testRIProperty(field, "comb", false, true); | |
| // testRIProperty(field, "commitOnSelChange", false, true); | |
| // testROProperty(field, "currentValueIndices", "clams"); | |
| testXXProperty(field, "defaultStyle"); | |
| // testROProperty(field, "defaultValue", "clams"); | |
| testRIProperty(field, "doNotScroll", false, true); | |
| testRIProperty(field, "doNotSpellCheck", false, true); | |
| // testROProperty(field, "display", "clams"); | |
| testROProperty(field, "doc", "[object global]"); | |
| // testROProperty(field, "editable", "clams"); | |
| // testROProperty(field, "exportValues", "clams"); | |
| // testROProperty(field, "hidden", "clams"); | |
| testRIProperty(field, "fileSelect", false, true); | |
| testRIProperty(field, "fillColor", "T", ["RGB", 0, 0, 0]); | |
| // testROProperty(field, "lineWidth", "clams"); | |
| // testROProperty(field, "highlight", "clams"); | |
| testRIProperty(field, "multiline", false, true); | |
| // testROProperty(field, "multipleSelection", "clams"); | |
| testROProperty(field, "name", "MyField"); | |
| // testROProperty(field, "numItems", "clams"); | |
| testROProperty(field, "page", -1); | |
| testRIProperty(field, "password", false, 42); | |
| // testROProperty(field, "print", "clams"); | |
| // testROProperty(field, "radiosInUnison", "clams"); | |
| testRIProperty(field, "readonly", false, true); | |
| // testRWProperty(field, "rect", [0,0,0,0], [0,0,0,0]); | |
| // testROProperty(field, "required", "clams"); | |
| testRIProperty(field, "richText", false, true); | |
| testRIProperty(field, "richValue", undefined, "clams"); | |
| testRIProperty(field, "rotation", 0, 42); | |
| testRIProperty(field, "source", undefined, "clams"); | |
| testRIProperty(field, "strokeColor", "T", ["RGB", 0, 0, 0]); | |
| // testROProperty(field, "style", "clams"); | |
| testRIProperty(field, "submitName", undefined, "clams"); | |
| testRIProperty(field, "textColor", "T", ["RGB", 0, 0, 0]); | |
| // testROProperty(field, "textFont", "clams"); | |
| testRIProperty(field, "textSize", 0, 32); | |
| testROProperty(field, "type", "text"); | |
| testRIProperty(field, "userName", ""); | |
| testRIProperty(field, "value", "", "clams"); | |
| testROProperty(field, "valueAsString", ""); | |
| } catch (e) { | |
| app.alert("Unexpected error: " + e); | |
| } | |
| } | |
| testProperties(); | |
| endstream | |
| endobj | |
| {{xref}} | |
| {{trailer}} | |
| {{startxref}} | |
| %%EOF |