ladybird/Libraries/LibJS/Tests/Proxy.handler-preventExtensions.js
Matthew Olsson 78155a6668 LibJS: Consolidate error messages into ErrorTypes.h
Now, exceptions can be thrown with
interpreter.throw_exception<T>(ErrorType:TYPE, "format", "args",
"here").
2020-06-11 07:46:20 +02:00

55 lines
1.3 KiB
JavaScript

load("test-common.js");
try {
let p = new Proxy({}, { preventExtensions: null });
assert(Object.preventExtensions(p) === p);
p = new Proxy({}, { preventExtensions: undefined });
assert(Object.preventExtensions(p) === p);
p = new Proxy({}, {});
assert(Object.preventExtensions(p) == p);
let o = {};
p = new Proxy(o, {
preventExtensions(target) {
assert(target === o);
return true;
}
});
Object.preventExtensions(o);
Object.preventExtensions(p);
// Invariants
p = new Proxy({}, {
preventExtensions() {
return false;
},
});
assertThrowsError(() => {
Object.preventExtensions(p);
}, {
error: TypeError,
message: "Object's [[PreventExtensions]] method returned false",
});
o = {};
p = new Proxy(o, {
preventExtensions() {
return true;
},
});
assertThrowsError(() => {
Object.preventExtensions(p);
}, {
error: TypeError,
message: "Proxy handler's preventExtensions trap violates invariant: cannot return true if the target object is extensible"
});
Object.preventExtensions(o);
assert(Object.preventExtensions(p) === p);
console.log("PASS");
} catch (e) {
console.log("FAIL: " + e);
}