michael@0: /* Any copyright is dedicated to the Public Domain. michael@0: http://creativecommons.org/publicdomain/zero/1.0/ */ michael@0: michael@0: var gDebuggee; michael@0: var gClient; michael@0: var gThreadClient; michael@0: michael@0: function run_test() michael@0: { michael@0: initTestDebuggerServer(); michael@0: gDebuggee = addTestGlobal("test-grips"); michael@0: michael@0: gClient = new DebuggerClient(DebuggerServer.connectPipe()); michael@0: gClient.connect(function() { michael@0: attachTestTabAndResume(gClient, "test-grips", function(aResponse, aTabClient, aThreadClient) { michael@0: gThreadClient = aThreadClient; michael@0: test_banana_environment(); michael@0: }); michael@0: }); michael@0: do_test_pending(); michael@0: } michael@0: michael@0: function test_banana_environment() michael@0: { michael@0: michael@0: gThreadClient.addOneTimeListener("paused", michael@0: function(aEvent, aPacket) { michael@0: do_check_matches({type:"paused", frame: michael@0: {environment: michael@0: {type: "function", function: {name: "banana3"}, michael@0: parent: michael@0: {type: "block", bindings: {variables: {banana3:undefined}}, michael@0: parent: michael@0: {type: "function", function: {name: "banana2"}, michael@0: parent: michael@0: {type:"block", bindings: {variables: {banana2:undefined}}, michael@0: parent: michael@0: {type:"block", bindings: {variables: {banana2:undefined}}, michael@0: parent: michael@0: {type:"function", function: {name: "banana"}}}}}}}}}, michael@0: aPacket, michael@0: { Object:Object, Array:Array }); michael@0: gThreadClient.resume(function () { michael@0: finishClient(gClient); michael@0: }); michael@0: }); michael@0: michael@0: gDebuggee.eval("\ michael@0: function banana(x) { \n\ michael@0: return function banana2(y) { \n\ michael@0: return function banana3(z) { \n\ michael@0: debugger; \n\ michael@0: }; \n\ michael@0: }; \n\ michael@0: } \n\ michael@0: banana('x')('y')('z'); \n\ michael@0: "); michael@0: }