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: // Test that the EnvironmentClient's getBindings() method works as expected. michael@0: function run_test() michael@0: { michael@0: initTestDebuggerServer(); michael@0: gDebuggee = addTestGlobal("test-bindings"); michael@0: michael@0: gClient = new DebuggerClient(DebuggerServer.connectPipe()); michael@0: gClient.connect(function() { michael@0: attachTestTabAndResume(gClient, "test-bindings", 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", function(aEvent, aPacket) { michael@0: let environment = aPacket.frame.environment; michael@0: do_check_eq(environment.type, "function"); michael@0: michael@0: let parent = environment.parent; michael@0: do_check_eq(parent.type, "block"); michael@0: michael@0: let grandpa = parent.parent; michael@0: do_check_eq(grandpa.type, "function"); michael@0: michael@0: let envClient = gThreadClient.environment(environment); michael@0: envClient.getBindings(aResponse => { michael@0: do_check_eq(aResponse.bindings.arguments[0].z.value, "z"); michael@0: michael@0: let parentClient = gThreadClient.environment(parent); michael@0: parentClient.getBindings(aResponse => { michael@0: do_check_eq(aResponse.bindings.variables.banana3.value.class, "Function"); michael@0: michael@0: let grandpaClient = gThreadClient.environment(grandpa); michael@0: grandpaClient.getBindings(aResponse => { michael@0: do_check_eq(aResponse.bindings.arguments[0].y.value, "y"); michael@0: gThreadClient.resume(() => finishClient(gClient)); michael@0: }); michael@0: }); 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: }