summaryrefslogtreecommitdiffstats
path: root/js/src/jit-test/tests/debug/Object-proxy.js
blob: c32233c9c7bcd8fe9c5e4f14718a2acead7fa360 (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
38
39
40
41
42
43
44
// Debugger.Object.prototype.isProxy recognizes (scripted) proxies.
// Debugger.Object.prototype.proxyTarget exposes the [[Proxytarget]] of a proxy.
// Debugger.Object.prototype.proxyHandler exposes the [[ProxyHandler]] of a proxy.

var g = newGlobal({newCompartment: true});
var dbg = new Debugger;
var gDO = dbg.addDebuggee(g);

g.eval('var target = [1,2,3];');
g.eval('var handler = {has: ()=>false};');
g.eval('var proxy = new Proxy(target, handler);');
g.eval('var proxyProxy = new Proxy(proxy, proxy);');
g.eval('var revoker = Proxy.revocable(target, handler);');
g.eval('var revocable = revoker.proxy;');

var target = gDO.getOwnPropertyDescriptor('target').value;
var handler = gDO.getOwnPropertyDescriptor('handler').value;
var proxy = gDO.getOwnPropertyDescriptor('proxy').value;
var proxyProxy = gDO.getOwnPropertyDescriptor('proxyProxy').value;
var revocable = gDO.getOwnPropertyDescriptor('revocable').value;

assertEq(target.isProxy, false);
assertEq(target.proxyTarget, undefined);
assertEq(target.proxyHandler, undefined);

assertEq(handler.isProxy, false);
assertEq(handler.proxyTarget, undefined);
assertEq(handler.proxyHandler, undefined);

assertEq(proxy.isProxy, true);
assertEq(proxy.proxyTarget, target);
assertEq(proxy.proxyHandler, handler);

assertEq(proxyProxy.isProxy, true);
assertEq(proxyProxy.proxyTarget, proxy);
assertEq(proxyProxy.proxyHandler, proxy);

assertEq(revocable.isProxy, true);
assertEq(revocable.proxyTarget, target);
assertEq(revocable.proxyHandler, handler);
g.eval('revoker.revoke();');
assertEq(revocable.isProxy, true);
assertEq(revocable.proxyTarget, null);
assertEq(revocable.proxyHandler, null);