[ARM,MIPS] Skip slow tests
[WebKit-https.git] / JSTests / stress / error-stack-trace-limit.js
1 function assertEquals(testID, a, b) {
2     if (a != b)
3         throw new Error("FAILED test " + testID + " got: " + a);
4 }
5
6 var desc = Object.getOwnPropertyDescriptor(Error, "stackTraceLimit");
7
8 assertEquals(100, typeof desc.value, "number");
9 assertEquals(200, desc.writable, true);
10 assertEquals(300, desc.enumerable, true);
11 assertEquals(400, desc.configurable, true);
12 assertEquals(500, desc.get, undefined);
13 assertEquals(600, desc.set, undefined);
14
15 function recurse(x) {
16     if (x)
17         recurse(x - 1);
18     else
19         throw Error();
20 }
21
22 function numberOfFrames(str) {
23     if (str === undefined || str === "")
24         return 0;
25     var lines = str.split(/\r\n|\r|\n/);
26     // note: Chrome always prints a header line. So, for Chrome, use lines.length - 1.
27     return lines.length;
28 }
29
30 var exception = undefined;
31
32 function testLimit(testID, updateLimit, reentryCount, expectedLimit, expectedNumberOfFrames) {
33     exception = undefined;
34     updateLimit();
35     assertEquals(testID, Error.stackTraceLimit, expectedLimit);
36
37     try {
38         recurse(reentryCount);
39     } catch (e) {
40         exception = e;
41     }
42
43     assertEquals(testID + 1, exception, "Error");
44     if (typeof expectedNumberOfFrames == "undefined")
45         assertEquals(testID + 2, exception.stack, undefined);
46     else
47         assertEquals(testID + 3, numberOfFrames(exception.stack), expectedNumberOfFrames);
48 }
49
50 testLimit(1000, () => { Error.stackTraceLimit = 0 }, 1000, 0, 0);
51 // note: Chrome always prints a header line. So, Chrome expects "Error" here.
52 assertEquals(1100, exception.stack, undefined);
53
54 testLimit(2000, () => { Error.stackTraceLimit = 10 }, 1000, 10, 10);
55 testLimit(3000, () => { Error.stackTraceLimit = 100 }, 1000, 100, 100);
56 testLimit(4000, () => { Error.stackTraceLimit = 1000 }, 1000, 1000, 1000);
57
58 // expectedNumberOfFrames includes (1) global + (2) testLimit + (3) 1000 recursion of
59 // recurse() + (4) recurse() which discovered x == 0 i.e. expectedNumberOfFrames == 1003.
60 testLimit(5000, () => { Error.stackTraceLimit = 2000 }, 1000, 2000, 1003);
61
62 var value = { };
63 testLimit(6000, () => { Error.stackTraceLimit = value }, 1000, value, undefined);
64
65 var value = { valueOf() { return 5 } };
66 testLimit(7000, () => { Error.stackTraceLimit = value }, 1000, value, undefined);
67
68 var value = [ 1, 2, 3 ];
69 testLimit(8000, () => { Error.stackTraceLimit = value }, 1000, value, undefined);
70
71 var value = "hello";
72 testLimit(9000, () => { Error.stackTraceLimit = value }, 1000, value, undefined);
73
74 var value = Symbol("hello");
75 testLimit(10000, () => { Error.stackTraceLimit = value }, 1000, value, undefined);
76
77 var value = true;
78 testLimit(11000, () => { Error.stackTraceLimit = value }, 1000, value, undefined);
79
80 var value = false;
81 testLimit(12000, () => { Error.stackTraceLimit = value }, 1000, value, undefined);
82
83 var value = undefined;
84 testLimit(13000, () => { Error.stackTraceLimit = value }, 1000, value, undefined);
85
86 testLimit(14000, () => { Error.stackTraceLimit = 10 }, 1000, 10, 10);
87
88 testLimit(15000, () => { delete Error.stackTraceLimit; }, 1000, undefined, undefined);
89
90 testLimit(16000, () => { Error.stackTraceLimit = 10 }, 1000, 10, 10);