{{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}} <<
  {{streamlen}}
>>
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}} <<
  {{streamlen}}
>>
stream
{{include expect.js}}

// "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.

   expect('this.calculateNow()', undefined)
}

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 testGetAnnots() {
   // Method is present.
   expect('typeof this.getAnnots', 'function');

   // 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)');

  // Argument can not be huge.
  expectError('this.getNthFieldName(400000)');

  // TODO(tsepez): add field object so this case works.
  expectError('this.getNthFieldName(0)');
}

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.

  expectError('this.getPageNthWordQuads()');
}

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');

  // Method always returns in error.
  expectError('this.getPrintParams()');
  expectError('this.getPrintParams(42)');
}

function testGotoNamedDest() {
  // Method is present.
  expect('typeof this.gotoNamedDest', 'function');

  // Method needs exactly one argument.
  expectError('this.gotoNamedDest()');
  expectError('this.gotoNamedDest(1, 2)');

  // TODO(tsepez): add actual named dest matching this.
  expectError('this.gotoNamedDest("chicago")');
}

function testMailDoc() {
  // Method is present.
  expect('typeof this.mailDoc', 'function');

  // TODO(tsepez): test with no permissions.

  // Success cases.
  expect('this.mailDoc()', undefined);
  expect('this.mailDoc(false, "user@example.com", "cc@example.com", ' +
             '"bcc@example.com", "Lottery Winner", "You won the lottery!")',
         undefined);
  expect('this.mailDoc({})', undefined);
  expect('this.mailDoc({"bUI": false, "cTo": "user@example.com", ' +
            '"cCc": "cc@example.com", "cBcc": "bcc@example.com", ' +
            '"cSubject": "LotteryWinner", "cMsg": "You won the lottery!", ' +
            '"bogus": "yes"})',
         undefined);
}

function testMailForm() {
   // Method is present.
   expect('typeof this.mailForm', 'function');

  // TODO(tsepez): test with no permissions.

  // Success cases.
  expect('this.mailForm()', undefined);
  expect('this.mailForm(false, "user@example.com", "cc@example.com", ' +
             '"bcc@example.com", "Lottery Winner", "You won the lottery!")',
         undefined);
  expect('this.mailForm({})', undefined);
  expect('this.mailForm({"bUI": false, "cTo": "user@example.com", ' +
            '"cCc": "cc@example.com", "cBcc": "bcc@example.com", ' +
            '"cSubject": "LotteryWinner", "cMsg": "You won the lottery!", ' +
            '"bogus": "yes"})',
         undefined);
}

function testPrint() {
  // Method is present.
  expect('typeof this.print', 'function');

  // Successful only when invoked by a user gesture.
  expectError('this.print()', undefined);
}

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): Add form to document to match these arguments.
  expect('this.resetForm()', undefined);
  expect('this.resetForm("myform")', undefined);
}

function testSubmitForm() {
   // Method is present.
   expect('typeof this.submitForm', 'function');

  // Method requires at least one argument.
  expectError('this.submitForm()');

  // Successful only when invoked by a user gesture.
  expectError('this.submitForm("myform", true, true, ["name", "age"])');
}

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.getAnnots3D');
  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();
  testGetAnnots();
  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
