Function object should convert params to string before throw a parsing error
[WebKit-https.git] / JSTests / stress / function-body-to-string-before-parameter-syntax-check.js
1 function shouldBe(actual, expected) {
2     if (actual !== expected)
3         throw new Error('bad value: ' + 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     Function("@", { toString() { throw 42; } })
23 }, `42`);
24
25 var counter = 0;
26 class Parameter {
27     constructor(index)
28     {
29         this.index = index;
30     }
31
32     toString() {
33         shouldBe(this.index, counter);
34         counter++;
35         return `x${this.index}`;
36     }
37 };
38
39 class Body {
40     constructor(index)
41     {
42         this.index = index;
43     }
44
45     toString() {
46         shouldBe(this.index, counter);
47         counter++;
48         return `42`;
49     }
50 };
51
52 var parameters = [];
53 for (var i = 0; i < 50; ++i) {
54     parameters.push(new Parameter(parameters.length));
55     var args = parameters.slice();
56     args.push(new Body(args.length));
57     counter = 0;
58     Function.apply(this, args);
59     shouldBe(counter, args.length);
60 }