{{header}}
{{object 1 0}} <<
  /Type /Catalog
  /Pages 2 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]
>>
% OpenAction action
{{object 10 0}} <<
  /Type /Action
  /S /JavaScript
  /JS 11 0 R
>>
endobj
% JS program to exexute
{{object 11 0}} <<
>>
stream

function doTest(name, props) {
  try {
    for (var i = 0; i < props.length; ++i) {
      var expr = name + "." + props[i];
      app.alert(expr + " is " + eval(expr));
    }
  } catch (e) {
    app.alert("ERROR: " + e.toString());
  }
}

function doGlobalTest(props) {
  try {
    for (var i = 0; i < props.length; ++i) {
      app.alert(props[i] + " is " + eval(props[i]));
    }
  } catch (e) {
    app.alert("ERROR: " + e.toString());
  }
}

function doGlobalArrayTest(props) {
  try {
    for (var i = 0; i < props.length; ++i) {
      app.alert(props[i] + " is\n  " + eval(props[i]).join(",\n  "));
    }
  } catch (e) {
    app.alert("ERROR: " + e.toString());
  }
}

function doEqualityTests() {
  app.alert("String equality test (==): " +
            (IDS_GREATER_THAN == IDS_GREATER_THAN));
  app.alert("String equality test (===): " +
            (IDS_GREATER_THAN === IDS_GREATER_THAN));
  app.alert("Array equality test (==): " +
            (RE_PHONE_COMMIT == RE_PHONE_COMMIT));
  app.alert("Array equality test (===): " +
            (RE_PHONE_COMMIT === RE_PHONE_COMMIT));
}

try {
  doTest("border", ["s", "b", "d", "i", "u", "nonesuch"]);
  doTest("display", ["visible", "hidden", "noPrint", "noView", "nonesuch"]);
  doTest("font", ["Times", "TimesB", "TimesI", "TimesBI", "Helv", "HelvB",
                  "HelvI", "HelvBI", "Cour", "CourB", "CourI", "CourBI",
                  "Symbol", "ZapfD", "Nonesuch"]);

  doTest("highlight", ["n", "i", "p", "o", "nonesuch"]);
  doTest("position", ["textOnly", "iconOnly", "iconTextV", "textIconV",
                      "iconTextH", "textIconH", "overlay", "nonesuch"]);

  doTest("scaleHow", ["proportional", "anamorphic", "nonesuch"]);
  doTest("scaleWhen", ["always", "never", "tooBig", "tooSmall", "nonesuch"]);
  doTest("style", ["ch", "cr", "di", "ci", "st", "sq", "nonesuch"]);
  doTest("zoomtype", ["none", "fitP", "fitW", "fitH", "fitV", "pref", "refW",
                      "nonesuch"]);

  doGlobalTest([
    "IDS_GREATER_THAN",
    "IDS_GT_AND_LT",
    "IDS_LESS_THAN",
    "IDS_INVALID_MONTH",
    "IDS_INVALID_DATE",
    "IDS_INVALID_VALUE",
    "IDS_AM",
    "IDS_PM",
    "IDS_MONTH_INFO",
    "IDS_STARTUP_CONSOLE_MSG"
  ]);

  doGlobalArrayTest([
    "RE_NUMBER_ENTRY_DOT_SEP",
    "RE_NUMBER_COMMIT_DOT_SEP",
    "RE_NUMBER_ENTRY_COMMA_SEP",
    "RE_NUMBER_COMMIT_COMMA_SEP",
    "RE_ZIP_ENTRY",
    "RE_ZIP_COMMIT",
    "RE_ZIP4_ENTRY",
    "RE_ZIP4_COMMIT",
    "RE_PHONE_ENTRY",
    "RE_PHONE_COMMIT",
    "RE_SSN_ENTRY",
    "RE_SSN_COMMIT"
  ]);

  doEqualityTests();
} catch (e) {
  app.alert("ERROR: " + e.toString());
}
endstream
endobj
{{xref}}
trailer <<
  /Root 1 0 R
>>
{{startxref}}
%%EOF

