[Win] Skip failing INTL test.
[WebKit-https.git] / LayoutTests / js / script-tests / string-localeCompare.js
1 //@ skip if $hostOS == "windows"
2 description("This test checks the behavior of String.prototype.localeCompare as described in the ECMAScript Internationalization API Specification (ECMA-402 2.0).");
3
4 shouldBe("String.prototype.localeCompare.length", "1");
5 shouldBeFalse("Object.getOwnPropertyDescriptor(String.prototype, 'localeCompare').enumerable");
6 shouldBeTrue("Object.getOwnPropertyDescriptor(String.prototype, 'localeCompare').configurable");
7 shouldBeTrue("Object.getOwnPropertyDescriptor(String.prototype, 'localeCompare').writable");
8
9 // Test RequireObjectCoercible.
10 shouldThrow("String.prototype.localeCompare.call()", "'TypeError: String.prototype.localeCompare requires that |this| not be undefined'");
11 shouldThrow("String.prototype.localeCompare.call(undefined)", "'TypeError: String.prototype.localeCompare requires that |this| not be undefined'");
12 shouldThrow("String.prototype.localeCompare.call(null)", "'TypeError: String.prototype.localeCompare requires that |this| not be null'");
13 shouldNotThrow("String.prototype.localeCompare.call({}, '')");
14 shouldNotThrow("String.prototype.localeCompare.call([], '')");
15 shouldNotThrow("String.prototype.localeCompare.call(NaN, '')");
16 shouldNotThrow("String.prototype.localeCompare.call(5, '')");
17 shouldNotThrow("String.prototype.localeCompare.call('', '')");
18 shouldNotThrow("String.prototype.localeCompare.call(() => {}, '')");
19
20 // Test toString fails.
21 shouldThrow("''.localeCompare.call({ toString() { throw 'thisFail' } }, '')", "'thisFail'");
22 shouldThrow("''.localeCompare({ toString() { throw 'thatFail' } })", "'thatFail'");
23 shouldNotThrow("''.localeCompare()");
24 shouldNotThrow("''.localeCompare(null)");
25
26 // Basic support.
27 shouldBeTrue('"a".localeCompare("aa") < 0');
28 shouldBeTrue('"a".localeCompare("b") < 0');
29
30 shouldBeTrue('"a".localeCompare("a") === 0');
31 shouldBeTrue('"a\u0308\u0323".localeCompare("a\u0323\u0308") === 0');
32
33 shouldBeTrue('"aa".localeCompare("a") > 0');
34 shouldBeTrue('"b".localeCompare("a") > 0');
35
36 // Uses Intl.Collator.
37 shouldThrow("'a'.localeCompare('b', '$')", "'RangeError: invalid language tag: $'");
38 shouldThrow("'a'.localeCompare('b', 'en', {usage: 'Sort'})", '\'RangeError: usage must be either "sort" or "search"\'');
39
40 shouldBe("'ä'.localeCompare('z', 'en')", "-1");
41 shouldBe("'ä'.localeCompare('z', 'sv')", "1");
42
43 shouldBe("'a'.localeCompare('b', 'en', { sensitivity:'base' })", "-1");
44 shouldBe("'a'.localeCompare('ä', 'en', { sensitivity:'base' })", "0");
45 shouldBe("'a'.localeCompare('A', 'en', { sensitivity:'base' })", "0");
46 shouldBe("'a'.localeCompare('ⓐ', 'en', { sensitivity:'base' })", "0");
47
48 shouldBe("'a'.localeCompare('b', 'en', { sensitivity:'accent' })", "-1");
49 shouldBe("'a'.localeCompare('ä', 'en', { sensitivity:'accent' })", "-1");
50 shouldBe("'a'.localeCompare('A', 'en', { sensitivity:'accent' })", "0");
51 shouldBe("'a'.localeCompare('ⓐ', 'en', { sensitivity:'accent' })", "0");
52
53 shouldBe("'a'.localeCompare('b', 'en', { sensitivity:'case' })", "-1");
54 shouldBe("'a'.localeCompare('ä', 'en', { sensitivity:'case' })", "0");
55 shouldBe("'a'.localeCompare('A', 'en', { sensitivity:'case' })", "-1");
56 shouldBe("'a'.localeCompare('ⓐ', 'en', { sensitivity:'case' })", "0");
57
58 shouldBe("'a'.localeCompare('b', 'en', { sensitivity:'variant' })", "-1");
59 shouldBe("'a'.localeCompare('ä', 'en', { sensitivity:'variant' })", "-1");
60 shouldBe("'a'.localeCompare('A', 'en', { sensitivity:'variant' })", "-1");
61 shouldBe("'a'.localeCompare('ⓐ', 'en', { sensitivity:'variant' })", "-1");
62
63 shouldBe("'1'.localeCompare('2', 'en', { numeric:false })", "-1");
64 shouldBe("'2'.localeCompare('10', 'en', { numeric:false })", "1");
65 shouldBe("'01'.localeCompare('1', 'en', { numeric:false })", "-1");
66 shouldBe("'๑'.localeCompare('๒', 'en', { numeric:false })", "-1");
67 shouldBe("'๒'.localeCompare('๑๐', 'en', { numeric:false })", "1");
68 shouldBe("'๐๑'.localeCompare('๑', 'en', { numeric:false })", "-1");
69
70 shouldBe("'1'.localeCompare('2', 'en', { numeric:true })", "-1");
71 shouldBe("'2'.localeCompare('10', 'en', { numeric:true })", "-1");
72 shouldBe("'01'.localeCompare('1', 'en', { numeric:true })", "0");
73 shouldBe("'๑'.localeCompare('๒', 'en', { numeric:true })", "-1");
74 shouldBe("'๒'.localeCompare('๑๐', 'en', { numeric:true })", "-1");
75 shouldBe("'๐๑'.localeCompare('๑', 'en', { numeric:true })", "0");
76