{{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]
>>
endobj
% OpenAction action
{{object 10 0}} <<
  /Type /Action
  /S /JavaScript
  /JS 11 0 R
>>
endobj
% JS program to execute
{{object 11 0}} <<
  {{streamlen}}
>>
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}}
{{startxref}}
%%EOF

