{{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]
  /Annots [
    5 0 R
    6 0 R
    7 0 R
    8 0 R
    9 0 R
  ]
>>
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");
    testRIProperty(field, "defaultValue", "", "clams");
    testRIProperty(field, "doNotScroll", false, true);
    testRIProperty(field, "doNotSpellCheck", false, true);
    testRWProperty(field, "display", 2, 3);
    testROProperty(field, "doc", "[object global]");
    // testROProperty(field, "editable", "clams");
    // testROProperty(field, "exportValues", "clams");
    testRWProperty(field, "hidden", false, true);
    testRIProperty(field, "fileSelect", false, true);
    testRIProperty(field, "fillColor", "T", ["RGB", 0, 0, 0]);
    testRWProperty(field, "lineWidth", 1, 4);
    // testROProperty(field, "highlight", "clams");
    testRIProperty(field, "multiline", false, true);
    // testROProperty(field, "multipleSelection", "clams");
    testROProperty(field, "name", "MyField");
    // testROProperty(field, "numItems", "clams");
    testROProperty(field, "page", 0);
    testRIProperty(field, "password", false, 42);
    testRWProperty(field, "print", true, false);
    // 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
