{{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
  /Resources <<
    /Font <</F1 15 0 R>>
  >>
  /Contents [21 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 testGetField() {
  try {
    var field = this.getField("MyField");
    app.alert("field is " + field.name);
    var sub_a = this.getField("MyField.Sub_A");
    app.alert("sub_a is " + sub_a.name);
    var nonesuch = this.getField("MyField.nonesuch");
    app.alert("nonesuch is " + nonesuch);
  } catch (e) {
    app.alert("Unexpected error: " + e);
  }
}

function testGetArray() {
  try {
    var subs = this.getField("MyField").getArray();
    app.alert("found " + subs.length + " sub-fields:");
    for (i = 0; i < subs.length; ++i) {
      app.alert(subs[i].name);
    }
  } catch (e) {
    app.alert("Unexpected error: " + e);
  }
}

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

function testMethods() {
  try {
    var field = this.getField("MyField");
  } catch (e) {
    app.alert("Unexpected error: " + e);
  }
}

testGetField();
testGetArray();
testProperties();
testMethods();
endstream
endobj
{{xref}}
{{trailer}}
{{startxref}}
%%EOF
