Source code
Revision control
Copy as Markdown
Other Tools
// A proxy on the prototype chain of the global should not observe anything at
// all about lazy resolution of globals.
load(libdir + "immutable-prototype.js");
var global = this;
var status = "pass";
// This is a little tricky. There are two proxies.
// 1. handler is a proxy that fails the test if you try to call a method on it.
var metaHandler = {
get: _ => { status = "SMASH"; },
has: _ => { status = "SMASH"; },
invoke: _ => { status = "SMASH"; }
};
var handler = new Proxy({}, metaHandler);
// 2. Then we create a proxy using 'handler' as its handler. This means the test
// will fail if *any* method of the handler is called, not just get/has/invoke.
var angryProxy = new Proxy(Object.create(null), handler);
if (globalPrototypeChainIsMutable()) {
this.__proto__ = angryProxy;
Object.prototype.__proto__ = angryProxy;
}
// Trip the alarm once, to make sure the proxies are working.
this.nonExistingProperty;
if (globalPrototypeChainIsMutable())
assertEq(status, "SMASH");
else
assertEq(status, "pass");
// OK. Reset the status and run the actual test.
status = "pass";
Map;
ArrayBuffer;
Date;
assertEq(status, "pass");