toolkit/devtools/server/tests/unit/test_trace_actor-04.js

Wed, 31 Dec 2014 06:09:35 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Wed, 31 Dec 2014 06:09:35 +0100
changeset 0
6474c204b198
permissions
-rw-r--r--

Cloned upstream origin tor-browser at tor-browser-31.3.0esr-4.5-1-build1
revision ID fc1c9ff7c1b2defdbc039f12214767608f46423f for hacking purpose.

     1 /* Any copyright is dedicated to the Public Domain.
     2  http://creativecommons.org/publicdomain/zero/1.0/ */
     4 /**
     5  * Tests that enteredFrame packets are sent on frame entry and
     6  * exitedFrame packets are sent on frame exit. Tests that the "name"
     7  * trace type works for function declarations.
     8  */
    10 var gDebuggee;
    11 var gClient;
    12 var gTraceClient;
    14 function run_test()
    15 {
    16   initTestTracerServer();
    17   gDebuggee = addTestGlobal("test-tracer-actor");
    18   gClient = new DebuggerClient(DebuggerServer.connectPipe());
    19   gClient.connect(function() {
    20     attachTestTab(gClient, "test-tracer-actor", function(aResponse, aTabClient) {
    21       gClient.attachTracer(aResponse.traceActor, function(aResponse, aTraceClient) {
    22         gTraceClient = aTraceClient;
    23         test_enter_exit_frame();
    24       });
    25     });
    26   });
    27   do_test_pending();
    28 }
    30 function test_enter_exit_frame()
    31 {
    32   let tracesSeen = 0;
    33   let traceNames = [];
    34   let traceStopped = promise.defer();
    36   gClient.addListener("traces", function onTraces(aEvent, { traces }) {
    37     for (let t of traces) {
    38       tracesSeen++;
    40       if (t.type == "enteredFrame") {
    41         do_check_eq(t.type, "enteredFrame",
    42                     'enteredFrame response should have type "enteredFrame"');
    43         do_check_eq(typeof t.sequence, "number",
    44                     'enteredFrame response should have sequence number');
    45         do_check_true(!isNaN(t.sequence),
    46                       'enteredFrame sequence should be a number');
    47         do_check_eq(typeof t.name, "string",
    48                     'enteredFrame response should have function name');
    49         traceNames[t.sequence] = t.name;
    50       } else {
    51         do_check_eq(t.type, "exitedFrame",
    52                     'exitedFrame response should have type "exitedFrame"');
    53         do_check_eq(typeof t.sequence, "number",
    54                     'exitedFrame response should have sequence number');
    55         do_check_true(!isNaN(t.sequence),
    56                       'exitedFrame sequence should be a number');
    57       }
    59       if (tracesSeen == 10) {
    60         gClient.removeListener("traces", onTraces);
    61         traceStopped.resolve();
    62       }
    63     }
    64   });
    66   start_trace()
    67     .then(eval_code)
    68     .then(() => traceStopped.promise)
    69     .then(stop_trace)
    70     .then(function() {
    71       do_check_eq(traceNames[2], "baz",
    72                   'Should have entered "baz" frame in third packet');
    73       do_check_eq(traceNames[3], "bar",
    74                   'Should have entered "bar" frame in fourth packet');
    75       do_check_eq(traceNames[4], "foo",
    76                   'Should have entered "foo" frame in fifth packet');
    77       finishClient(gClient);
    78     });
    79 }
    81 function start_trace()
    82 {
    83   let deferred = promise.defer();
    84   gTraceClient.startTrace(["name"], null, function() { deferred.resolve(); });
    85   return deferred.promise;
    86 }
    88 function eval_code()
    89 {
    90   gDebuggee.eval("(" + function() {
    91     function foo() {
    92       return;
    93     }
    94     function bar() {
    95       return foo();
    96     }
    97     function baz() {
    98       return bar();
    99     }
   100     baz();
   101   } + ")()");
   102 }
   104 function stop_trace()
   105 {
   106   let deferred = promise.defer();
   107   gTraceClient.stopTrace(null, function() { deferred.resolve(); });
   108   return deferred.promise;
   109 }

mercurial