mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-04-26 06:18:59 +00:00
61 lines
1.4 KiB
JavaScript
61 lines
1.4 KiB
JavaScript
test("basic functionality", () => {
|
|
function foo() {
|
|
return new.target;
|
|
}
|
|
expect(foo()).toBeUndefined();
|
|
expect(new foo()).toEqual(foo);
|
|
|
|
function bar() {
|
|
const baz = () => new.target;
|
|
return baz();
|
|
}
|
|
expect(bar()).toBeUndefined();
|
|
expect(new bar()).toEqual(bar);
|
|
|
|
class baz {
|
|
constructor() {
|
|
this.newTarget = new.target;
|
|
}
|
|
}
|
|
expect(new baz().newTarget).toEqual(baz);
|
|
});
|
|
|
|
test("retrieving new.target from direct eval", () => {
|
|
function foo() {
|
|
return eval("new.target");
|
|
}
|
|
|
|
let result;
|
|
|
|
expect(() => {
|
|
result = foo();
|
|
}).not.toThrowWithMessage(SyntaxError, "'new.target' not allowed outside of a function");
|
|
|
|
expect(result).toBe(undefined);
|
|
|
|
expect(() => {
|
|
result = new foo();
|
|
}).not.toThrowWithMessage(SyntaxError, "'new.target' not allowed outside of a function");
|
|
|
|
expect(result).toBe(foo);
|
|
});
|
|
|
|
test("cannot retrieve new.target from indirect eval", () => {
|
|
const indirect = eval;
|
|
|
|
function foo() {
|
|
return indirect("new.target");
|
|
}
|
|
|
|
expect(() => {
|
|
foo();
|
|
}).toThrowWithMessage(SyntaxError, "'new.target' not allowed outside of a function");
|
|
|
|
expect(() => {
|
|
new foo();
|
|
}).toThrowWithMessage(SyntaxError, "'new.target' not allowed outside of a function");
|
|
});
|
|
|
|
test("syntax error outside of function", () => {
|
|
expect("new.target").not.toEval();
|
|
});
|