diff -r 000000000000 -r 6474c204b198 js/src/jit-test/tests/proxy/bug901979-2.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/js/src/jit-test/tests/proxy/bug901979-2.js Wed Dec 31 06:09:35 2014 +0100 @@ -0,0 +1,31 @@ +// A proxy on the prototype chain of the global should not observe anything at +// all about lazy resolution of globals. + +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); +this.__proto__ = angryProxy; +Object.prototype.__proto__ = angryProxy; + +// Trip the alarm once, to make sure the proxies are working. +this.nonExistingProperty; +assertEq(status, "SMASH"); + +// OK. Reset the status and run the actual test. +status = "pass"; +Map; +ArrayBuffer; +Date; +assertEq(status, "pass");