Invalid flags in a RegExp literal should be an early SyntaxError
[WebKit-https.git] / JSTests / stress / array-concat-on-frozen-object.js
1 //@ runFTLNoCJIT
2
3 let totalFailed = 0;
4
5 function shouldEqual(testId, actual, expected) {
6     if (actual != expected) {
7         throw testId + ": ERROR: expect " + expected + ", actual " + actual;
8     }
9 }
10
11 function makeArray() {
12     return ['unmodifiable'];
13 }
14
15 function makeArrayLikeObject() {
16     var obj = {};
17     obj[0] = 'unmodifiable';
18     obj.length = 1; 
19     return obj;
20 }
21
22 function emptyArraySourceMaker() {
23     return [];
24 }
25
26 function singleElementArraySourceMaker() {
27     return ['modified_1'];
28 }
29
30 // Make test functions with unique codeblocks.
31 function makeConcatTest(testId) {
32     return new Function("arr", "return arr.concat(['" + testId + "'])");
33 }
34 function makeConcatOnHoleyArrayTest(testId) {
35     return new Function("arr", "var other = ['" + testId + "']; other[1000] = '" + testId + "'; return arr.concat(other);");
36 }
37
38 let numIterations = 10000;
39
40 function runTest(testId, testMaker, targetMaker, sourceMaker, expectedValue, expectedException) {
41     var test = testMaker(testId);
42     noInline(test);
43
44     for (var i = 0; i < numIterations; i++) {
45         var exception = undefined;
46
47         var obj = targetMaker();
48         obj = Object.freeze(obj);
49
50         var arr = sourceMaker();
51         arr.constructor = { [Symbol.species]: function() { return obj; } };
52
53         try {
54             test(arr);
55         } catch (e) {
56             exception = "" + e;
57             exception = exception.substr(0, 10); // Search for "TypeError:".
58         }
59         shouldEqual(testId, exception, expectedException);
60         shouldEqual(testId, obj[0], expectedValue);
61     }
62 }
63
64 runTest(10010, makeConcatTest, makeArray,           emptyArraySourceMaker,         "unmodifiable", "TypeError:");
65 runTest(10011, makeConcatTest, makeArray,           singleElementArraySourceMaker, "unmodifiable", "TypeError:");
66 runTest(10020, makeConcatTest, makeArrayLikeObject, emptyArraySourceMaker,         "unmodifiable", "TypeError:");
67 runTest(10021, makeConcatTest, makeArrayLikeObject, singleElementArraySourceMaker, "unmodifiable", "TypeError:");
68
69 runTest(10110, makeConcatOnHoleyArrayTest, makeArray,           emptyArraySourceMaker,         "unmodifiable", "TypeError:");
70 runTest(10111, makeConcatOnHoleyArrayTest, makeArray,           singleElementArraySourceMaker, "unmodifiable", "TypeError:");
71 runTest(10120, makeConcatOnHoleyArrayTest, makeArrayLikeObject, emptyArraySourceMaker,         "unmodifiable", "TypeError:");
72 runTest(10121, makeConcatOnHoleyArrayTest, makeArrayLikeObject, singleElementArraySourceMaker, "unmodifiable", "TypeError:");