1bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.org// Copyright 2013 the V8 project authors. All rights reserved.
2bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.org// Redistribution and use in source and binary forms, with or without
3bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.org// modification, are permitted provided that the following conditions are
4bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.org// met:
5bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.org//
6bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.org//     * Redistributions of source code must retain the above copyright
7bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.org//       notice, this list of conditions and the following disclaimer.
8bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.org//     * Redistributions in binary form must reproduce the above
9bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.org//       copyright notice, this list of conditions and the following
10bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.org//       disclaimer in the documentation and/or other materials provided
11bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.org//       with the distribution.
12bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.org//     * Neither the name of Google Inc. nor the names of its
13bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.org//       contributors may be used to endorse or promote products derived
14bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.org//       from this software without specific prior written permission.
15bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.org//
16bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.org// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
17bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.org// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
18bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.org// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
19bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.org// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
20bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.org// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
21bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.org// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
22bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.org// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.org// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.org// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.org// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
26bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.org// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.org
28bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.org// Test if resolvedOptions() returns expected fields/values.
29bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.org
30bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.org// Default (year, month, day) formatter.
31bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.orgvar dtfDefault = Intl.DateTimeFormat('en-US');
32bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.orgvar resolved = dtfDefault.resolvedOptions();
33bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.org
34bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.orgassertTrue(resolved.hasOwnProperty('locale'));
35bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.orgassertEquals('en-US', resolved.locale);
36bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.orgassertTrue(resolved.hasOwnProperty('numberingSystem'));
37bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.orgassertEquals('latn', resolved.numberingSystem);
38bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.orgassertTrue(resolved.hasOwnProperty('calendar'));
39bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.orgassertEquals('gregory', resolved.calendar);
40bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.orgassertTrue(resolved.hasOwnProperty('timeZone'));
41bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.orgassertEquals(getDefaultTimeZone(), resolved.timeZone);
42bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.org// These are in by default.
43bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.orgassertTrue(resolved.hasOwnProperty('year'));
44bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.orgassertEquals('numeric', resolved.year);
45bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.orgassertTrue(resolved.hasOwnProperty('month'));
46bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.orgassertEquals('numeric', resolved.month);
47bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.orgassertTrue(resolved.hasOwnProperty('day'));
48bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.orgassertEquals('numeric', resolved.day);
49bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.org// These shouldn't be in by default.
50bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.orgassertFalse(resolved.hasOwnProperty('era'));
51bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.orgassertFalse(resolved.hasOwnProperty('timeZoneName'));
52bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.orgassertFalse(resolved.hasOwnProperty('weekday'));
53bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.orgassertFalse(resolved.hasOwnProperty('hour12'));
54bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.orgassertFalse(resolved.hasOwnProperty('hour'));
55bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.orgassertFalse(resolved.hasOwnProperty('minute'));
56bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.orgassertFalse(resolved.hasOwnProperty('second'));
57bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.org
58bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.org// Time formatter.
59bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.orgvar dtfTime = Intl.DateTimeFormat(
60bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.org  'sr-RS', {hour: 'numeric', minute: 'numeric', second: 'numeric'});
61bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.orgresolved = dtfTime.resolvedOptions();
62bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.org
63bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.orgassertTrue(resolved.hasOwnProperty('locale'));
64bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.orgassertTrue(resolved.hasOwnProperty('numberingSystem'));
65bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.orgassertTrue(resolved.hasOwnProperty('calendar'));
66bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.orgassertTrue(resolved.hasOwnProperty('timeZone'));
67bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.orgassertTrue(resolved.hasOwnProperty('hour12'));
68bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.orgassertEquals(false, resolved.hour12);
69bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.orgassertTrue(resolved.hasOwnProperty('hour'));
70bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.orgassertEquals('2-digit', resolved.hour);
71bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.orgassertTrue(resolved.hasOwnProperty('minute'));
72bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.orgassertEquals('2-digit', resolved.minute);
73bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.orgassertTrue(resolved.hasOwnProperty('second'));
74bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.orgassertEquals('2-digit', resolved.second);
75bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.org// Didn't ask for them.
76bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.orgassertFalse(resolved.hasOwnProperty('year'));
77bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.orgassertFalse(resolved.hasOwnProperty('month'));
78bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.orgassertFalse(resolved.hasOwnProperty('day'));
79bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.orgassertFalse(resolved.hasOwnProperty('era'));
80bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.orgassertFalse(resolved.hasOwnProperty('timeZoneName'));
81bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.orgassertFalse(resolved.hasOwnProperty('weekday'));
82bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.org
83bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.org// Full formatter.
84bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.orgvar dtfFull = Intl.DateTimeFormat(
85bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.org  'en-US', {weekday: 'short', era: 'short', year: 'numeric', month: 'short',
86bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.org            day: 'numeric', hour: 'numeric', minute: 'numeric',
87bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.org            second: 'numeric', timeZoneName: 'short', timeZone: 'UTC'});
88bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.orgresolved = dtfFull.resolvedOptions();
89bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.org
90bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.orgassertTrue(resolved.hasOwnProperty('locale'));
91bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.orgassertTrue(resolved.hasOwnProperty('numberingSystem'));
92bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.orgassertTrue(resolved.hasOwnProperty('calendar'));
93bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.orgassertTrue(resolved.hasOwnProperty('timeZone'));
94bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.orgassertTrue(resolved.hasOwnProperty('hour12'));
95bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.orgassertEquals(true, resolved.hour12);
96bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.orgassertTrue(resolved.hasOwnProperty('hour'));
97bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.orgassertTrue(resolved.hasOwnProperty('minute'));
98bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.orgassertTrue(resolved.hasOwnProperty('second'));
99bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.orgassertTrue(resolved.hasOwnProperty('year'));
100bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.orgassertTrue(resolved.hasOwnProperty('month'));
101bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.orgassertTrue(resolved.hasOwnProperty('day'));
102bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.orgassertTrue(resolved.hasOwnProperty('era'));
103bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.orgassertEquals('short', resolved.era);
104bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.orgassertTrue(resolved.hasOwnProperty('timeZoneName'));
105bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.orgassertEquals('short', resolved.timeZoneName);
106bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.orgassertTrue(resolved.hasOwnProperty('weekday'));
107bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.orgassertEquals('short', resolved.weekday);
108