{{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
