// 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");