ES6 class syntax should use block scoping
[WebKit.git] / LayoutTests / js / script-tests / intl-datetimeformat.js
1 description("This test checks the behavior of Intl.DateTimeFormat as described in the ECMAScript Internationalization API Specification (ECMA-402 2.0).");
2
3 // 12.1 The Intl.DateTimeFormat Constructor
4
5 // The Intl.DateTimeFormat constructor is a standard built-in property of the Intl object.
6 shouldBeType("Intl.DateTimeFormat", "Function");
7
8 // 12.1.2 Intl.DateTimeFormat([ locales [, options]])
9 shouldBeType("Intl.DateTimeFormat()", "Intl.DateTimeFormat");
10 shouldBeType("Intl.DateTimeFormat.call({})", "Intl.DateTimeFormat");
11 shouldBeType("new Intl.DateTimeFormat()", "Intl.DateTimeFormat");
12
13 // Subclassable
14 var classPrefix = "class DerivedDateTimeFormat extends Intl.DateTimeFormat {};";
15 shouldBeTrue(classPrefix + "(new DerivedDateTimeFormat) instanceof DerivedDateTimeFormat");
16 shouldBeTrue(classPrefix + "(new DerivedDateTimeFormat) instanceof Intl.DateTimeFormat");
17 shouldBeTrue(classPrefix + "new DerivedDateTimeFormat().format(0).length > 0");
18 shouldBeTrue(classPrefix + "Object.getPrototypeOf(new DerivedDateTimeFormat) === DerivedDateTimeFormat.prototype");
19 shouldBeTrue(classPrefix + "Object.getPrototypeOf(Object.getPrototypeOf(new DerivedDateTimeFormat)) === Intl.DateTimeFormat.prototype");
20
21 // 12.2 Properties of the Intl.DateTimeFormat Constructor
22
23 // length property (whose value is 0)
24 shouldBe("Intl.DateTimeFormat.length", "0");
25
26 // 12.2.1 Intl.DateTimeFormat.prototype
27
28 // This property has the attributes { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false }.
29 shouldBeFalse("Object.getOwnPropertyDescriptor(Intl.DateTimeFormat, 'prototype').writable");
30 shouldBeFalse("Object.getOwnPropertyDescriptor(Intl.DateTimeFormat, 'prototype').enumerable");
31 shouldBeFalse("Object.getOwnPropertyDescriptor(Intl.DateTimeFormat, 'prototype').configurable");
32
33 // 12.2.2 Intl.DateTimeFormat.supportedLocalesOf (locales [, options ])
34
35 // The value of the length property of the supportedLocalesOf method is 1.
36 shouldBe("Intl.DateTimeFormat.supportedLocalesOf.length", "1");
37
38 // Returns SupportedLocales
39 shouldBeType("Intl.DateTimeFormat.supportedLocalesOf()", "Array");
40
41 // 12.3 Properties of the Intl.DateTimeFormat Prototype Object
42
43 // The value of Intl.DateTimeFormat.prototype.constructor is %DateTimeFormat%.
44 shouldBe("Intl.DateTimeFormat.prototype.constructor", "Intl.DateTimeFormat");
45
46 // 12.3.3 Intl.DateTimeFormat.prototype.format
47
48 // This named accessor property returns a function that formats a date according to the effective locale and the formatting options of this DateTimeFormat object.
49 shouldBeType("Intl.DateTimeFormat.prototype.format", "Function");
50
51 // The value of the [[Get]] attribute is a function
52 shouldBeType("Object.getOwnPropertyDescriptor(Intl.DateTimeFormat.prototype, 'format').get", "Function");
53
54 // The value of the [[Set]] attribute is undefined.
55 shouldBe("Object.getOwnPropertyDescriptor(Intl.DateTimeFormat.prototype, 'format').set", "undefined");
56
57 // Match Firefox where unspecifed.
58 shouldBeFalse("Object.getOwnPropertyDescriptor(Intl.DateTimeFormat.prototype, 'format').enumerable");
59 shouldBeTrue("Object.getOwnPropertyDescriptor(Intl.DateTimeFormat.prototype, 'format').configurable");
60
61 // The value of F’s length property is 1.
62 shouldBe("Intl.DateTimeFormat.prototype.format.length", "1");
63
64 // Throws on non-DateTimeFormat this.
65 shouldThrow("Object.defineProperty({}, 'format', Object.getOwnPropertyDescriptor(Intl.DateTimeFormat.prototype, 'format')).format", "'TypeError: Intl.DateTimeFormat.prototype.format called on value that\\'s not an object initialized as a DateTimeFormat'");
66
67 // The format function is unique per instance.
68 shouldBeTrue("Intl.DateTimeFormat.prototype.format !== Intl.DateTimeFormat().format");
69 shouldBeTrue("new Intl.DateTimeFormat().format !== new Intl.DateTimeFormat().format");
70
71 // 12.3.4 DateTime Format Functions
72
73 // 1. Let dtf be the this value.
74 // 2. Assert: Type(dtf) is Object and dtf has an [[initializedDateTimeFormat]] internal slot whose value is true.
75 // This should not be reachable, since format is bound to an initialized datetimeformat.
76
77 // 3. If date is not provided or is undefined, then
78 // a. Let x be %Date_now%().
79 // 4. Else
80 // a. Let x be ToNumber(date).
81 // b. ReturnIfAbrupt(x).
82 shouldThrow("Intl.DateTimeFormat.prototype.format({ valueOf() { throw Error('4b') } })", "'Error: 4b'");
83
84 // 12.3.4 FormatDateTime abstract operation
85
86 // 1. If x is not a finite Number, then throw a RangeError exception.
87 shouldThrow("Intl.DateTimeFormat.prototype.format(Infinity)", "'RangeError: date value is not finite in DateTimeFormat.format()'");
88
89 // Format is bound, so calling with alternate "this" has no effect.
90 shouldBe("Intl.DateTimeFormat.prototype.format.call(null, 0)", "Intl.DateTimeFormat().format(0)");
91 shouldBe("Intl.DateTimeFormat.prototype.format.call(Intl.DateTimeFormat('ar'), 0)", "Intl.DateTimeFormat().format(0)");
92 shouldBe("Intl.DateTimeFormat.prototype.format.call(5, 0)", "Intl.DateTimeFormat().format(0)");
93 shouldBe("new Intl.DateTimeFormat().format.call(null, 0)", "Intl.DateTimeFormat().format(0)");
94 shouldBe("new Intl.DateTimeFormat().format.call(Intl.DateTimeFormat('ar'), 0)", "Intl.DateTimeFormat().format(0)");
95 shouldBe("new Intl.DateTimeFormat().format.call(5, 0)", "Intl.DateTimeFormat().format(0)");
96
97 // 12.3.5 Intl.DateTimeFormat.prototype.resolvedOptions ()
98
99 shouldBe("Intl.DateTimeFormat.prototype.resolvedOptions.length", "0");
100
101 // Returns a new object whose properties and attributes are set as if constructed by an object literal.
102 shouldBeType("Intl.DateTimeFormat.prototype.resolvedOptions()", "Object");
103
104 // Returns a new object each time.
105 shouldBeFalse("Intl.DateTimeFormat.prototype.resolvedOptions() === Intl.DateTimeFormat.prototype.resolvedOptions()");
106
107 // Throws on non-DateTimeFormat this.
108 shouldThrow("Intl.DateTimeFormat.prototype.resolvedOptions.call(5)", "'TypeError: Intl.DateTimeFormat.prototype.resolvedOptions called on value that\\'s not an object initialized as a DateTimeFormat'");
109