michael@0: // Adding a debuggee allowed with scripts on stack from stranger places. michael@0: michael@0: // Test CCW. michael@0: (function testCCW() { michael@0: var g = newGlobal(); michael@0: var dbg = new Debugger; michael@0: g.dbg = dbg; michael@0: g.GLOBAL = g; michael@0: michael@0: g.turnOnDebugger = function () { michael@0: dbg.addDebuggee(g); michael@0: }; michael@0: michael@0: g.eval("" + function f(d) { michael@0: turnOnDebugger(); michael@0: assertEq(dbg.hasDebuggee(GLOBAL), true); michael@0: }); michael@0: michael@0: g.eval("(" + function test() { michael@0: f(false); michael@0: f(false); michael@0: f(true); michael@0: f(true); michael@0: } + ")();"); michael@0: })(); michael@0: michael@0: // Test getter. michael@0: (function testGetter() { michael@0: var g = newGlobal(); michael@0: g.dbg = new Debugger; michael@0: g.GLOBAL = g; michael@0: michael@0: g.eval("" + function f(obj) { michael@0: obj.foo; michael@0: assertEq(dbg.hasDebuggee(GLOBAL), true); michael@0: }); michael@0: michael@0: g.eval("(" + function test() { michael@0: f({ get foo() { dbg.addDebuggee(GLOBAL); } }); michael@0: } + ")();"); michael@0: })(); michael@0: michael@0: // Test setter. michael@0: (function testSetter() { michael@0: var g = newGlobal(); michael@0: g.dbg = new Debugger; michael@0: g.GLOBAL = g; michael@0: michael@0: g.eval("" + function f(obj) { michael@0: obj.foo = 42; michael@0: assertEq(dbg.hasDebuggee(GLOBAL), true); michael@0: }); michael@0: michael@0: g.eval("(" + function test() { michael@0: f({ set foo(v) { dbg.addDebuggee(GLOBAL); } }); michael@0: } + ")();"); michael@0: })(); michael@0: michael@0: // Test toString. michael@0: (function testToString() { michael@0: var g = newGlobal(); michael@0: g.dbg = new Debugger; michael@0: g.GLOBAL = g; michael@0: michael@0: g.eval("" + function f(obj) { michael@0: obj + ""; michael@0: assertEq(dbg.hasDebuggee(GLOBAL), true); michael@0: }); michael@0: michael@0: g.eval("(" + function test() { michael@0: f({ toString: function () { dbg.addDebuggee(GLOBAL); }}); michael@0: } + ")();"); michael@0: })(); michael@0: michael@0: // Test valueOf. michael@0: (function testValueOf() { michael@0: var g = newGlobal(); michael@0: g.dbg = new Debugger; michael@0: g.GLOBAL = g; michael@0: michael@0: g.eval("" + function f(obj) { michael@0: obj + ""; michael@0: assertEq(dbg.hasDebuggee(GLOBAL), true); michael@0: }); michael@0: michael@0: g.eval("(" + function test() { michael@0: f({ valueOf: function () { dbg.addDebuggee(GLOBAL); }}); michael@0: } + ")();"); michael@0: })(); michael@0: michael@0: // Test proxy trap. michael@0: (function testProxyTrap() { michael@0: var g = newGlobal(); michael@0: g.dbg = new Debugger; michael@0: g.GLOBAL = g; michael@0: michael@0: g.eval("" + function f(proxy) { michael@0: proxy["foo"]; michael@0: assertEq(dbg.hasDebuggee(GLOBAL), true); michael@0: }); michael@0: michael@0: g.eval("(" + function test() { michael@0: var handler = { get: function () { dbg.addDebuggee(GLOBAL); } }; michael@0: var proxy = new Proxy({}, handler); michael@0: f(proxy); michael@0: } + ")();"); michael@0: })();