summaryrefslogtreecommitdiffstats
path: root/js/src/jit-test/tests/proxy/bug901979-2.js
blob: 93f45dc891059c496d63b44fe108ff21d8c4d552 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
// 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");