blob: cdbd6845c84e35ffd5a282612f180dc59904878e [file] [log] [blame]
{{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)');
expectError('this.addIcon("myicon", undefined)');
// 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 testGetAnnot() {
// Method is present.
expect('typeof this.getAnnot', 'function');
// Method needs two arguments.
expectError('this.getAnnot()');
expectError('this.getAnnot(0)');
expectError('this.getAnnot(0, "test", 0)');
// TODO(tonikitoo): 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 testGotoNamedDest() {
// Method is present.
expect('typeof this.gotoNamedDest', 'function');
// Method needs exactly one argument.
expectError('this.gotoNamedDest()');
expectError('this.gotoNamedDest(1, 2)');
// TODO(tonikitoo): 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 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.deletePages');
testUnsupported('this.exportAsFDF');
testUnsupported('this.exportAsText');
testUnsupported('this.exportAsXFDF');
testUnsupported('this.extractPages');
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.removeIcon');
testUnsupported('this.replacePages');
testUnsupported('this.saveAs');
testUnsupported('this.syncAnnotScan');
app.alert('*** Testing Supported Methods ***');
testAddIcon();
testCalculateNow();
testGetAnnot();
testGetField();
testGetIcon();
testGetNthFieldName();
testGetPageNthWord();
testGetPageNthWordQuads();
testGetPageNumWords();
testGetPrintParams();
testGotoNamedDest();
testMailDoc();
testMailForm();
testPrint();
testRemoveField();
testResetForm();
testSubmitForm();
} catch (e) {
app.alert('FATAL: ' + e.toString());
}
endstream
endobj
{{xref}}
trailer <<
/Root 1 0 R
/Info 9 0 R
>>
{{startxref}}
%%EOF