{{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
{{object 3 0}} <<
  /Type /Page
  /Parent 2 0 R
  /MediaBox [ 0 0 612 792 ]
  /Annots [
    5 0 R
    6 0 R
  ]
>>
endobj
{{object 4 0}} <<
  /Fields [ 5 0 R 6 0 R ]
>>
endobj
{{object 5 0}} <<
  /Type /Annot
  /Subtype /Widget
  /FT /Ch
  /Ff 0
  /T (MyField)
  /Rect [ 100 350 200 380 ]
  /Opt [
    [ (foo) (Foo) ]
    [ (bar) (Bar) ]
    [ (qux) (Qux) ]
  ]
>>
endobj
{{object 6 0}} <<
  /Type /Annot
  /Subtype /Widget
  /FT /Ch
  /Ff 2097152
  /T (MyMultiSelectField)
  /Rect [ 100 400 200 430 ]
  /Opt [ (foo) (bar) (qux) ]
  /V (qux)
>>
endobj
{{object 10 0}} <<
  /Type /Action
  /S /JavaScript
  /JS 11 0 R
>>
endobj
{{object 11 0}} <<
  {{streamlen}}
>>
stream

function getFieldValue(name) {
  try {
    var field = this.getField(name);
    var v = field.value;
    app.alert('Value is: ' + typeof(v) + ' ' + v);
  } catch (e) {
    app.alert('For getField(' + name + ') ERROR: ' + e);
  }
}

function testField(name, x) {
  try {
    var field = this.getField(name);
    field.value = x;
    var y = field.value;
    app.alert('Answer for "' + x + '" is: ' + typeof(y) + ' ' + y);
  } catch (e) {
    app.alert('For testField(' + x + ') ERROR: ' + e);
  }
}

getFieldValue('MyField');

// Valid cases
testField('MyField', 'foo');
testField('MyField', 'bar');
testField('MyField', 'qux');
testField('MyField', ['bar']);
testField('MyField', ['qux']);

getFieldValue('MyField');

// Invalid cases
testField('MyField', '');
testField('MyField', 'goats');
testField('MyField', 'b4');
testField('MyField', 'b4.5');
testField('MyField', '4x');
testField('MyField', '4.5x');
testField('MyField', 4);
testField('MyField', '4');
testField('MyField', ' 4');
testField('MyField', '4 ');
testField('MyField', '                          4                                      ');
testField('MyField', '4 3 2 1');
testField('MyField', '-4');
testField('MyField', '23.00000001');
testField('MyField', '23.00000000000000001');
testField('MyField', 40000000000000000000000000);
testField('MyField', '40000000000000000000000000');
testField('MyField', '25,5');
testField('MyField', '1e+5');
testField('MyField', '1e5');
testField('MyField', '1e-5');
testField('MyField', '-1e-5');
testField('MyField', '1.2e5');
testField('MyField', Infinity);
testField('MyField', 'Infinity');
testField('MyField', 'INFINITY');
testField('MyField', 'INF');
testField('MyField', NaN);
testField('MyField', 'NaN');
testField('MyField', 'NAN');
testField('MyField', '0x100');
testField('MyField', '0x100.1');
testField('MyField', '0x100,1');
testField('MyField', '0x100x1');
testField('MyField', '123x6');
testField('MyField', '123xy6');
testField('MyField', '123.y6');
testField('MyField', '1,000,000');
testField('MyField', '1.2.3');
testField('MyField', '1-3');
testField('MyField', '1+3');
testField('MyField', '1.-3');
testField('MyField', '1.+3');
testField('MyField', [1, 2, 3, 4]);
testField('MyField', '[1, 2, 3, 4]');
testField('MyField', {a: 1, b: 2});
testField('MyField', '{a: 1, b: 2}');
testField('MyField', function(x) { return x+1; });
testField('MyField', 'function(x) { return x+1; }');
testField('MyField', 'Foo');
testField('MyField', 'Bar');
testField('MyField', 'Qux');
testField('MyField', ['bar', 'qux']);
testField('MyField', ['foo', 1]);

getFieldValue('MyField');

getFieldValue('MyMultiSelectField');

// Valid cases
testField('MyMultiSelectField', 'foo');
testField('MyMultiSelectField', 'bar');
testField('MyMultiSelectField', 'qux');
testField('MyMultiSelectField', ['bar']);
testField('MyMultiSelectField', ['bar', 'qux']);
testField('MyMultiSelectField', [1, 2, 3, 4]);
testField('MyMultiSelectField', ['foo', 1]);
testField('MyMultiSelectField', ['qux']);

getFieldValue('MyMultiSelectField');

// Invalid cases
testField('MyMultiSelectField', '');
testField('MyMultiSelectField', 'goats');
testField('MyMultiSelectField', 'b4');
testField('MyMultiSelectField', 'b4.5');
testField('MyMultiSelectField', '4x');
testField('MyMultiSelectField', '4.5x');
testField('MyMultiSelectField', 4);
testField('MyMultiSelectField', '4');
testField('MyMultiSelectField', ' 4');
testField('MyMultiSelectField', '4 ');
testField('MyMultiSelectField', '                          4                                      ');
testField('MyMultiSelectField', '4 3 2 1');
testField('MyMultiSelectField', '-4');
testField('MyMultiSelectField', '23.00000001');
testField('MyMultiSelectField', '23.00000000000000001');
testField('MyMultiSelectField', 40000000000000000000000000);
testField('MyMultiSelectField', '40000000000000000000000000');
testField('MyMultiSelectField', '25,5');
testField('MyMultiSelectField', '1e+5');
testField('MyMultiSelectField', '1e5');
testField('MyMultiSelectField', '1e-5');
testField('MyMultiSelectField', '-1e-5');
testField('MyMultiSelectField', '1.2e5');
testField('MyMultiSelectField', Infinity);
testField('MyMultiSelectField', 'Infinity');
testField('MyMultiSelectField', 'INFINITY');
testField('MyMultiSelectField', 'INF');
testField('MyMultiSelectField', NaN);
testField('MyMultiSelectField', 'NaN');
testField('MyMultiSelectField', 'NAN');
testField('MyMultiSelectField', '0x100');
testField('MyMultiSelectField', '0x100.1');
testField('MyMultiSelectField', '0x100,1');
testField('MyMultiSelectField', '0x100x1');
testField('MyMultiSelectField', '123x6');
testField('MyMultiSelectField', '123xy6');
testField('MyMultiSelectField', '123.y6');
testField('MyMultiSelectField', '1,000,000');
testField('MyMultiSelectField', '1.2.3');
testField('MyMultiSelectField', '1-3');
testField('MyMultiSelectField', '1+3');
testField('MyMultiSelectField', '1.-3');
testField('MyMultiSelectField', '1.+3');
testField('MyMultiSelectField', '[1, 2, 3, 4]');
testField('MyMultiSelectField', {a: 1, b: 2});
testField('MyMultiSelectField', '{a: 1, b: 2}');
testField('MyMultiSelectField', function(x) { return x+1; });
testField('MyMultiSelectField', 'function(x) { return x+1; }');
testField('MyMultiSelectField', 'Foo');
testField('MyMultiSelectField', 'Bar');
testField('MyMultiSelectField', 'Qux');

getFieldValue('MyMultiSelectField');

endstream
endobj
{{xref}}
{{trailer}}
{{startxref}}
%%EOF
