mirror of
https://github.com/RGBCube/serenity
synced 2025-07-27 14:07:45 +00:00
LibJS/Tests: Consolidate Error.prototype.stack tests
We don't usually separate tests for the getter and setter of a property, and that error-stack.js (getter) test belongs in builtins/.
This commit is contained in:
parent
ecba29c158
commit
37e988675f
2 changed files with 44 additions and 30 deletions
|
@ -1,7 +1,49 @@
|
||||||
const stackDescriptor = Object.getOwnPropertyDescriptor(Error.prototype, "stack");
|
const stackDescriptor = Object.getOwnPropertyDescriptor(Error.prototype, "stack");
|
||||||
const stackSetter = stackDescriptor.set;
|
const stackSetter = stackDescriptor.set;
|
||||||
|
|
||||||
describe("normal behavior", () => {
|
describe("getter - normal behavior", () => {
|
||||||
|
test("basic functionality", () => {
|
||||||
|
const stackFrames = [
|
||||||
|
/^ at .*Error \(.*\/Error\.prototype\.stack\.js:\d+:\d+\)$/,
|
||||||
|
/^ at .+\/Error\/Error\.prototype\.stack\.js:\d+:\d+$/,
|
||||||
|
/^ at test \(.+\/test-common.js:557:21\)$/,
|
||||||
|
/^ at .+\/Error\/Error\.prototype\.stack\.js:5:33$/,
|
||||||
|
/^ at describe \(.+\/test-common\.js:534:21\)$/,
|
||||||
|
/^ at .+\/Error\/Error\.prototype\.stack\.js:4:38$/,
|
||||||
|
];
|
||||||
|
const values = [
|
||||||
|
{
|
||||||
|
error: new Error(),
|
||||||
|
header: "Error",
|
||||||
|
stackFrames,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
error: new TypeError(),
|
||||||
|
header: "TypeError",
|
||||||
|
stackFrames,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
error: new Error("Something went wrong!"),
|
||||||
|
header: "Error: Something went wrong!",
|
||||||
|
stackFrames,
|
||||||
|
},
|
||||||
|
];
|
||||||
|
|
||||||
|
for (const { error, header: expectedHeader, stackFrames: expectedStackFrames } of values) {
|
||||||
|
const [header, ...stackFrames] = error.stack.trim().split("\n");
|
||||||
|
|
||||||
|
expect(header).toBe(expectedHeader);
|
||||||
|
expect(stackFrames).toHaveLength(expectedStackFrames.length);
|
||||||
|
for (let i = 0; i < stackFrames.length; ++i) {
|
||||||
|
const stackFrame = stackFrames[i];
|
||||||
|
const expectedStackFrame = expectedStackFrames[i];
|
||||||
|
expect(!!stackFrame.match(expectedStackFrame)).toBeTrue();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
describe("setter - normal behavior", () => {
|
||||||
test("basic functionality", () => {
|
test("basic functionality", () => {
|
||||||
"use strict";
|
"use strict";
|
||||||
const error = new Error();
|
const error = new Error();
|
||||||
|
@ -38,7 +80,7 @@ describe("normal behavior", () => {
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
describe("errors", () => {
|
describe("setter - errors", () => {
|
||||||
test("this is not an object", () => {
|
test("this is not an object", () => {
|
||||||
expect(() => {
|
expect(() => {
|
||||||
stackSetter.call(undefined);
|
stackSetter.call(undefined);
|
|
@ -1,28 +0,0 @@
|
||||||
test("Anonymous function", function () {
|
|
||||||
let stackString = (() => {
|
|
||||||
return Error();
|
|
||||||
})().stack;
|
|
||||||
let [header, ...stackFrames] = stackString.split("\n");
|
|
||||||
|
|
||||||
expect(header).toBe("Error");
|
|
||||||
expect(!!stackFrames[0].match(/^ at Error \(.*\/error-stack\.js:3:\d+\)$/)).toBeTrue();
|
|
||||||
expect(!!stackFrames[1].match(/^ at .*\/error-stack\.js:3:\d+$/)).toBeTrue();
|
|
||||||
expect(!!stackFrames[2].match(/^ at .*\/error-stack\.js:2:\d+$/)).toBeTrue();
|
|
||||||
});
|
|
||||||
|
|
||||||
test("Named function with message", function () {
|
|
||||||
function f() {
|
|
||||||
throw Error("You Shalt Not Pass!");
|
|
||||||
}
|
|
||||||
try {
|
|
||||||
f();
|
|
||||||
} catch (e) {
|
|
||||||
let stackString = e.stack;
|
|
||||||
let [header, ...stack_frames] = stackString.split("\n");
|
|
||||||
|
|
||||||
expect(header).toBe("Error: You Shalt Not Pass!");
|
|
||||||
expect(!!stack_frames[0].match(/^ at Error \(.*\/error-stack\.js:15:\d+\)$/)).toBeTrue();
|
|
||||||
expect(!!stack_frames[1].match(/^ at f \(.*\/error-stack\.js:15:\d+\)$/)).toBeTrue();
|
|
||||||
expect(!!stack_frames[2].match(/^ at .*\/error-stack\.js:18:\d+$/)).toBeTrue();
|
|
||||||
}
|
|
||||||
});
|
|
Loading…
Add table
Add a link
Reference in a new issue