[ES6] Allow undefined/null for Symbol.search and Symbol.match
[WebKit-https.git] / Source / JavaScriptCore / tests / stress / string-symbol-customization.js
1 function shouldBe(actual, expected) {
2     if (actual !== expected)
3         throw new Error(`bad value: ${String(actual)}`);
4 }
5
6 function shouldThrow(func, errorMessage) {
7     var errorThrown = false;
8     var error = null;
9     try {
10         func();
11     } catch (e) {
12         errorThrown = true;
13         error = e;
14     }
15     if (!errorThrown)
16         throw new Error('not thrown');
17     if (String(error) !== errorMessage)
18         throw new Error(`bad error: ${String(error)}`);
19 }
20
21 shouldThrow(() => {
22     "Cocoa".search({
23         [Symbol.search]: 42
24     });
25 }, `TypeError: 42 is not a function`);
26
27 shouldThrow(() => {
28     "Cocoa".match({
29         [Symbol.match]: 42
30     });
31 }, `TypeError: 42 is not a function`);
32
33 shouldThrow(() => {
34     "Cocoa".search({
35         [Symbol.search]: {}
36     });
37 }, `TypeError: Object is not a function`);
38
39 shouldThrow(() => {
40     "Cocoa".match({
41         [Symbol.match]: {}
42     });
43 }, `TypeError: Object is not a function`);
44
45 shouldBe("Cocoa".search({
46     [Symbol.search]: null,
47     toString()
48     {
49         return "C"
50     }
51 }), 0);
52
53 shouldBe("Cocoa".match({
54     [Symbol.match]: null,
55     toString()
56     {
57         return "C"
58     }
59 })[0], "C");
60
61 shouldBe("Cocoa".search({
62     [Symbol.search]: undefined,
63     toString()
64     {
65         return "C"
66     }
67 }), 0);
68
69 shouldBe("Cocoa".match({
70     [Symbol.match]: undefined,
71     toString()
72     {
73         return "C"
74     }
75 })[0], "C");
76
77 shouldBe("Cocoa".search({
78     [Symbol.search]()
79     {
80         return 42;
81     }
82 }), 42);
83
84 shouldBe("Cocoa".match({
85     [Symbol.match]()
86     {
87         return 42;
88     }
89 }), 42);
90
91 RegExp.prototype[Symbol.search] = function () { return 42; };
92 RegExp.prototype[Symbol.match] = function () { return 42; };
93
94 shouldBe("Cocoa".search({
95     [Symbol.search]: null
96 }), 42);
97
98 shouldBe("Cocoa".match({
99     [Symbol.match]: null
100 }), 42);
101
102 shouldBe("Cocoa".search({
103     [Symbol.search]: undefined
104 }), 42);
105
106 shouldBe("Cocoa".match({
107     [Symbol.match]: undefined
108 }), 42);