{{header}}
{{include field.fragment}}

% 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');
  } catch (e) {
    app.alert('PASS: ' + prop + ' threw ' + 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');
  } catch (e) {
    app.alert('PASS: ' + prop + ' threw ' + 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");
    var button = this.getField("MyField.Sub_A");
    var radio = this.getField("MyField.Sub_Z");
    var check = this.getField("MyField.Sub_B");
    app.alert('Testing properties under delay');
    testRWProperty(field, "delay", false, true);
    // TODO(tsepez): try this case, too.
    // testTextPropertiesCase(field);
    app.alert('Testing properties under non-delay');
    testRWProperty(field, "delay", true, false);
    testTextPropertiesCase(field);
    testPushButtonPropertiesCase(button);
    testRadioButtonPropertiesCase(radio);
    testCheckBoxPropertiesCase(check);
  } catch (e) {
    app.alert("Unexpected error: " + e);
  }
}

function testTextPropertiesCase(field) {
  try {
    // TODO(tsepez): devise tests and uncomment.
    testRIProperty(field, "alignment", "left", "center");
    testRWProperty(field, "borderStyle", "solid", "inset");
    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");
    testRWProperty(field, "hidden", false, true);
    testRIProperty(field, "fileSelect", false, true);
    testRIProperty(field, "fillColor", "T", ["RGB", 0, 0, 0]);
    testRWProperty(field, "lineWidth", 1, 4);
    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);
    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]);
    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 testPushButtonPropertiesCase(field) {
  try {
    testRIProperty(field, "buttonAlignX", 0, 50);
    testRIProperty(field, "buttonAlignY", 0, 50);
    testRIProperty(field, "buttonFitBounds", false);
    testRIProperty(field, "buttonPosition", 0);
    testRIProperty(field, "buttonScaleHow", 0);
    testRIProperty(field, "buttonScaleWhen", 0);
    testRIProperty(field, "highlight", "invert");
    testROProperty(field, "type", "button");
  } catch (e) {
    app.alert("Unexpected error: " + e);
  }
}

function testRadioButtonPropertiesCase(field) {
  try {
    testROProperty(field, "exportValues", "N");
    testRIProperty(field, "radiosInUnison", false);
    testRIProperty(field, "style", "check");
    testROProperty(field, "type", "radiobutton");
    testRIProperty(field, "value", "Off");
    testROProperty(field, "valueAsString", "Off");
  } catch (e) {
    app.alert("Unexpected error: " + e);
  }
}

function testCheckBoxPropertiesCase(field) {
  try {
    testROProperty(field, "exportValues", "N");
    testRIProperty(field, "style", "check");
    testROProperty(field, "type", "checkbox");
    testRIProperty(field, "value", "Off");
    testROProperty(field, "valueAsString", "Off");
  } catch (e) {
    app.alert("Unexpected error: " + e);
  }
}

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