1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/toolkit/devtools/server/tests/unit/test_trace_actor-07.js Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,100 @@ 1.4 +/* Any copyright is dedicated to the Public Domain. 1.5 + http://creativecommons.org/publicdomain/zero/1.0/ */ 1.6 + 1.7 +/** 1.8 + * Tests that the exit frame packets get the correct `why` value. 1.9 + */ 1.10 + 1.11 +var gDebuggee; 1.12 +var gClient; 1.13 +var gTraceClient; 1.14 + 1.15 +function run_test() 1.16 +{ 1.17 + initTestTracerServer(); 1.18 + gDebuggee = addTestGlobal("test-tracer-actor"); 1.19 + gClient = new DebuggerClient(DebuggerServer.connectPipe()); 1.20 + gClient.connect(function() { 1.21 + attachTestTab(gClient, "test-tracer-actor", function(aResponse, aTabClient) { 1.22 + gClient.attachTracer(aResponse.traceActor, function(aResponse, aTraceClient) { 1.23 + gTraceClient = aTraceClient; 1.24 + test_exit_frame_whys(); 1.25 + }); 1.26 + }); 1.27 + }); 1.28 + do_test_pending(); 1.29 +} 1.30 + 1.31 +function test_exit_frame_whys() 1.32 +{ 1.33 + gClient.addListener("traces", (aEvent, { traces }) => { 1.34 + for (let t of traces) { 1.35 + if (t.type == "exitedFrame") { 1.36 + check_trace(t); 1.37 + } 1.38 + } 1.39 + }); 1.40 + 1.41 + start_trace() 1.42 + .then(eval_code) 1.43 + .then(stop_trace) 1.44 + .then(function() { 1.45 + finishClient(gClient); 1.46 + }).then(null, error => { 1.47 + do_check_true(false, "Should not get an error, got: " + error); 1.48 + }); 1.49 +} 1.50 + 1.51 +function start_trace() 1.52 +{ 1.53 + let deferred = promise.defer(); 1.54 + gTraceClient.startTrace(["name"], null, function() { deferred.resolve(); }); 1.55 + return deferred.promise; 1.56 +} 1.57 + 1.58 +function eval_code() 1.59 +{ 1.60 + gDebuggee.eval("(" + function() { 1.61 + function thrower() { 1.62 + throw new Error(); 1.63 + } 1.64 + 1.65 + function* yielder() { 1.66 + yield 1; 1.67 + } 1.68 + 1.69 + function returner() { 1.70 + return 1; 1.71 + } 1.72 + 1.73 + try { 1.74 + thrower(); 1.75 + } catch(e) {} 1.76 + 1.77 + // XXX bug 923729: Can't test yielding yet. 1.78 + // for (let x of yielder()) { 1.79 + // break; 1.80 + // } 1.81 + 1.82 + returner(); 1.83 + } + ")()"); 1.84 +} 1.85 + 1.86 +function stop_trace() 1.87 +{ 1.88 + let deferred = promise.defer(); 1.89 + gTraceClient.stopTrace(null, function() { deferred.resolve(); }); 1.90 + return deferred.promise; 1.91 +} 1.92 + 1.93 +function check_trace(aEvent, { sequence, why }) 1.94 +{ 1.95 + switch(sequence) { 1.96 + case 3: 1.97 + do_check_eq(why, "throw"); 1.98 + break; 1.99 + case 5: 1.100 + do_check_eq(why, "return"); 1.101 + break; 1.102 + } 1.103 +}