mirror of
https://github.com/tc39/test262.git
synced 2025-05-03 22:40:28 +02:00
* [javascriptcore-test262-automation] changes from git@github.com:WebKit/webkit.git at sha 949e26452cfa153a7f4afe593da97e2fe9e1b706 on Tue Jul 03 2018 14:35:15 GMT-0400 (Eastern Daylight Time)
91 lines
3.1 KiB
JavaScript
91 lines
3.1 KiB
JavaScript
function assertEquals(testID, a, b) {
|
|
if (a != b)
|
|
throw new Error("FAILED test " + testID + " got: " + a);
|
|
}
|
|
|
|
var desc = Object.getOwnPropertyDescriptor(Error, "stackTraceLimit");
|
|
|
|
assertEquals(100, typeof desc.value, "number");
|
|
assertEquals(200, desc.writable, true);
|
|
assertEquals(300, desc.enumerable, true);
|
|
assertEquals(400, desc.configurable, true);
|
|
assertEquals(500, desc.get, undefined);
|
|
assertEquals(600, desc.set, undefined);
|
|
|
|
function recurse(x) {
|
|
if (x)
|
|
recurse(x - 1);
|
|
else
|
|
throw Error();
|
|
}
|
|
|
|
function numberOfFrames(str) {
|
|
if (str === undefined || str === "")
|
|
return 0;
|
|
var lines = str.split(/\r\n|\r|\n/);
|
|
// note: Chrome always prints a header line. So, for Chrome, use lines.length - 1.
|
|
return lines.length;
|
|
}
|
|
|
|
var exception = undefined;
|
|
|
|
function testLimit(testID, updateLimit, reentryCount, expectedLimit, expectedNumberOfFrames) {
|
|
exception = undefined;
|
|
updateLimit();
|
|
assertEquals(testID, Error.stackTraceLimit, expectedLimit);
|
|
|
|
try {
|
|
recurse(reentryCount);
|
|
} catch (e) {
|
|
exception = e;
|
|
}
|
|
|
|
assertEquals(testID + 1, exception, "Error");
|
|
if (typeof expectedNumberOfFrames == "undefined")
|
|
assertEquals(testID + 2, exception.stack, undefined);
|
|
else
|
|
assertEquals(testID + 3, numberOfFrames(exception.stack), expectedNumberOfFrames);
|
|
}
|
|
|
|
testLimit(1000, () => { Error.stackTraceLimit = 0 }, 1000, 0, 0);
|
|
// note: Chrome always prints a header line. So, Chrome expects "Error" here.
|
|
assertEquals(1100, exception.stack, undefined);
|
|
|
|
testLimit(2000, () => { Error.stackTraceLimit = 10 }, 1000, 10, 10);
|
|
testLimit(3000, () => { Error.stackTraceLimit = 100 }, 1000, 100, 100);
|
|
testLimit(4000, () => { Error.stackTraceLimit = 1000 }, 1000, 1000, 1000);
|
|
|
|
// expectedNumberOfFrames includes (1) global + (2) testLimit + (3) 1000 recursion of
|
|
// recurse() + (4) recurse() which discovered x == 0 i.e. expectedNumberOfFrames == 1003.
|
|
testLimit(5000, () => { Error.stackTraceLimit = 2000 }, 1000, 2000, 1003);
|
|
|
|
var value = { };
|
|
testLimit(6000, () => { Error.stackTraceLimit = value }, 1000, value, undefined);
|
|
|
|
var value = { valueOf() { return 5 } };
|
|
testLimit(7000, () => { Error.stackTraceLimit = value }, 1000, value, undefined);
|
|
|
|
var value = [ 1, 2, 3 ];
|
|
testLimit(8000, () => { Error.stackTraceLimit = value }, 1000, value, undefined);
|
|
|
|
var value = "hello";
|
|
testLimit(9000, () => { Error.stackTraceLimit = value }, 1000, value, undefined);
|
|
|
|
var value = Symbol("hello");
|
|
testLimit(10000, () => { Error.stackTraceLimit = value }, 1000, value, undefined);
|
|
|
|
var value = true;
|
|
testLimit(11000, () => { Error.stackTraceLimit = value }, 1000, value, undefined);
|
|
|
|
var value = false;
|
|
testLimit(12000, () => { Error.stackTraceLimit = value }, 1000, value, undefined);
|
|
|
|
var value = undefined;
|
|
testLimit(13000, () => { Error.stackTraceLimit = value }, 1000, value, undefined);
|
|
|
|
testLimit(14000, () => { Error.stackTraceLimit = 10 }, 1000, 10, 10);
|
|
|
|
testLimit(15000, () => { delete Error.stackTraceLimit; }, 1000, undefined, undefined);
|
|
|
|
testLimit(16000, () => { Error.stackTraceLimit = 10 }, 1000, 10, 10);
|