1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
|
// |reftest| skip-if(!this.hasOwnProperty("Intl"))
var log;
var proxy = new Proxy({
year: "numeric",
hour: "numeric",
}, new Proxy({
get(t, pk, r) {
log.push(pk);
return Reflect.get(t, pk, r);
}
}, {
get(t, pk, r) {
assertEq(pk, "get");
return Reflect.get(t, pk, r);
}
}));
var constructorAccesses = [
// ToDateTimeOptions(options, "any", "date").
"weekday", "year", "month", "day",
"dayPeriod", "hour", "minute", "second", "fractionalSecondDigits",
"dateStyle", "timeStyle",
// InitializeDateTimeFormat
"localeMatcher", "calendar", "numberingSystem", "hour12", "hourCycle", "timeZone",
// Table 5: Components of date and time formats
"weekday", "era", "year", "month", "day", "dayPeriod", "hour", "minute", "second",
"fractionalSecondDigits", "timeZoneName",
// InitializeDateTimeFormat
"formatMatcher",
"dateStyle", "timeStyle",
];
log = [];
new Intl.DateTimeFormat(undefined, proxy);
assertEqArray(log, constructorAccesses);
log = [];
new Date().toLocaleString(undefined, proxy);
assertEqArray(log, [
// ToDateTimeOptions(options, "any", "all").
"weekday", "year", "month", "day",
"dayPeriod", "hour", "minute", "second", "fractionalSecondDigits",
"dateStyle", "timeStyle",
...constructorAccesses
]);
log = [];
new Date().toLocaleDateString(undefined, proxy);
assertEqArray(log, [
// ToDateTimeOptions(options, "date", "date").
"weekday", "year", "month", "day",
"dateStyle", "timeStyle",
...constructorAccesses
]);
log = [];
new Date().toLocaleTimeString(undefined, proxy);
assertEqArray(log, [
// ToDateTimeOptions(options, "time", "time").
"dayPeriod", "hour", "minute", "second", "fractionalSecondDigits",
"dateStyle", "timeStyle",
...constructorAccesses
]);
if (typeof reportCompare === "function")
reportCompare(0, 0);
|