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

changeset 0
6474c204b198
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/toolkit/devtools/server/tests/unit/test_trace_actor-06.js	Wed Dec 31 06:09:35 2014 +0100
     1.3 @@ -0,0 +1,234 @@
     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 values are correctly serialized and sent in enteredFrame
     1.9 + * and exitedFrame packets.
    1.10 + */
    1.11 +
    1.12 +var gDebuggee;
    1.13 +var gClient;
    1.14 +var gTraceClient;
    1.15 +
    1.16 +function run_test()
    1.17 +{
    1.18 +  initTestTracerServer();
    1.19 +  gDebuggee = addTestGlobal("test-tracer-actor");
    1.20 +  gClient = new DebuggerClient(DebuggerServer.connectPipe());
    1.21 +  gClient.connect(function() {
    1.22 +    attachTestTab(gClient, "test-tracer-actor", function(aResponse, aTabClient) {
    1.23 +      gClient.attachTracer(aResponse.traceActor, function(aResponse, aTraceClient) {
    1.24 +        gTraceClient = aTraceClient;
    1.25 +        test_enter_exit_frame();
    1.26 +      });
    1.27 +    });
    1.28 +  });
    1.29 +  do_test_pending();
    1.30 +}
    1.31 +
    1.32 +function test_enter_exit_frame()
    1.33 +{
    1.34 +  const traceStopped = promise.defer();
    1.35 +
    1.36 +  gClient.addListener("traces", (aEvent, { traces }) => {
    1.37 +    for (let t of traces) {
    1.38 +      check_trace(t);
    1.39 +      if (t.sequence === 27) {
    1.40 +        traceStopped.resolve();
    1.41 +      }
    1.42 +    }
    1.43 +  });
    1.44 +
    1.45 +  start_trace()
    1.46 +    .then(eval_code)
    1.47 +    .then(() => traceStopped.promise)
    1.48 +    .then(stop_trace)
    1.49 +    .then(function() {
    1.50 +      finishClient(gClient);
    1.51 +    });
    1.52 +}
    1.53 +
    1.54 +function start_trace()
    1.55 +{
    1.56 +  let deferred = promise.defer();
    1.57 +  gTraceClient.startTrace(["arguments", "return"], null, function() { deferred.resolve(); });
    1.58 +  return deferred.promise;
    1.59 +}
    1.60 +
    1.61 +function eval_code()
    1.62 +{
    1.63 +  gDebuggee.eval("(" + function() {
    1.64 +    function identity(x) {
    1.65 +      return x;
    1.66 +    }
    1.67 +
    1.68 +    let circular = {};
    1.69 +    circular.self = circular;
    1.70 +
    1.71 +    // Make sure there is only 3 properties per object because that is the value
    1.72 +    // of MAX_PROPERTIES in the server.
    1.73 +    let obj = {
    1.74 +      num: 0,
    1.75 +      str: "foo",
    1.76 +      bool: false,
    1.77 +    };
    1.78 +    let obj2 = {
    1.79 +      undef: undefined,
    1.80 +      nil: null,
    1.81 +      inf: Infinity
    1.82 +    };
    1.83 +    let obj3 = {
    1.84 +      ninf: -Infinity,
    1.85 +      nan: NaN,
    1.86 +      nzero: -0
    1.87 +    };
    1.88 +    let obj4 = {
    1.89 +      obj: circular,
    1.90 +      arr: [1,2,3,4,5]
    1.91 +    };
    1.92 +
    1.93 +    identity();
    1.94 +    identity(0);
    1.95 +    identity("");
    1.96 +    identity(false);
    1.97 +    identity(undefined);
    1.98 +    identity(null);
    1.99 +    identity(Infinity);
   1.100 +    identity(-Infinity);
   1.101 +    identity(NaN);
   1.102 +    identity(-0);
   1.103 +    identity(obj);
   1.104 +    identity(obj2);
   1.105 +    identity(obj3);
   1.106 +    identity(obj4);
   1.107 +  } + ")()");
   1.108 +}
   1.109 +
   1.110 +function stop_trace()
   1.111 +{
   1.112 +  let deferred = promise.defer();
   1.113 +  gTraceClient.stopTrace(null, function() { deferred.resolve(); });
   1.114 +  return deferred.promise;
   1.115 +}
   1.116 +
   1.117 +function check_trace(aTrace)
   1.118 +{
   1.119 +  let value = (aTrace.type === "enteredFrame" && aTrace.arguments)
   1.120 +        ? aTrace.arguments[0]
   1.121 +        : aTrace.return;
   1.122 +  switch(aTrace.sequence) {
   1.123 +  case 2:
   1.124 +    do_check_eq(typeof aTrace.arguments, "object");
   1.125 +    do_check_eq(aTrace.arguments.length, 0);
   1.126 +    break;
   1.127 +  case 3:
   1.128 +    check_value(value, "object", "undefined");
   1.129 +    break;
   1.130 +  case 4:
   1.131 +  case 5:
   1.132 +    check_value(value, "number", 0);
   1.133 +    break;
   1.134 +  case 6:
   1.135 +  case 7:
   1.136 +    check_value(value, "string", "");
   1.137 +    break;
   1.138 +  case 8:
   1.139 +  case 9:
   1.140 +    check_value(value, "boolean", false);
   1.141 +    break;
   1.142 +  case 10:
   1.143 +  case 11:
   1.144 +    check_value(value, "object", "undefined");
   1.145 +    break;
   1.146 +  case 12:
   1.147 +  case 13:
   1.148 +    check_value(value, "object", "null");
   1.149 +    break;
   1.150 +  case 14:
   1.151 +  case 15:
   1.152 +    check_value(value, "object", "Infinity");
   1.153 +    break;
   1.154 +  case 16:
   1.155 +  case 17:
   1.156 +    check_value(value, "object", "-Infinity");
   1.157 +    break;
   1.158 +  case 18:
   1.159 +  case 19:
   1.160 +    check_value(value, "object", "NaN");
   1.161 +    break;
   1.162 +  case 20:
   1.163 +  case 21:
   1.164 +    check_value(value, "object", "-0");
   1.165 +    break;
   1.166 +  case 22:
   1.167 +  case 23:
   1.168 +    check_obj(aTrace.type, value);
   1.169 +    break;
   1.170 +  case 24:
   1.171 +  case 25:
   1.172 +    check_obj2(aTrace.type, value);
   1.173 +    break;
   1.174 +  case 26:
   1.175 +  case 27:
   1.176 +    check_obj3(aTrace.type, value);
   1.177 +    break;
   1.178 +  case 28:
   1.179 +  case 29:
   1.180 +    check_obj4(aTrace.type, value);
   1.181 +    break;
   1.182 +  }
   1.183 +}
   1.184 +
   1.185 +function check_value(aActual, aExpectedType, aExpectedValue)
   1.186 +{
   1.187 +  do_check_eq(typeof aActual, aExpectedType);
   1.188 +  do_check_eq(aExpectedType === "object" ? aActual.type : aActual, aExpectedValue);
   1.189 +}
   1.190 +
   1.191 +function check_obj(aType, aObj) {
   1.192 +  do_check_eq(typeof aObj, "object");
   1.193 +  do_check_eq(typeof aObj.ownProperties, "object");
   1.194 +
   1.195 +  do_check_eq(typeof aObj.ownProperties.num, "object");
   1.196 +  do_check_eq(aObj.ownProperties.num.value, 0);
   1.197 +
   1.198 +  do_check_eq(typeof aObj.ownProperties.str, "object");
   1.199 +  do_check_eq(aObj.ownProperties.str.value, "foo");
   1.200 +
   1.201 +  do_check_eq(typeof aObj.ownProperties.bool, "object");
   1.202 +  do_check_eq(aObj.ownProperties.bool.value, false);
   1.203 +}
   1.204 +
   1.205 +function check_obj2(aType, aObj) {
   1.206 +  do_check_eq(typeof aObj.ownProperties.undef, "object");
   1.207 +  do_check_eq(typeof aObj.ownProperties.undef.value, "object");
   1.208 +  do_check_eq(aObj.ownProperties.undef.value.type, "undefined");
   1.209 +
   1.210 +  do_check_eq(typeof aObj.ownProperties.nil, "object");
   1.211 +  do_check_eq(typeof aObj.ownProperties.nil.value, "object");
   1.212 +  do_check_eq(aObj.ownProperties.nil.value.type, "null");
   1.213 +
   1.214 +  do_check_eq(typeof aObj.ownProperties.inf, "object");
   1.215 +  do_check_eq(typeof aObj.ownProperties.inf.value, "object");
   1.216 +  do_check_eq(aObj.ownProperties.inf.value.type, "Infinity");
   1.217 +}
   1.218 +
   1.219 +function check_obj3(aType, aObj) {
   1.220 +  do_check_eq(typeof aObj.ownProperties.ninf, "object");
   1.221 +  do_check_eq(typeof aObj.ownProperties.ninf.value, "object");
   1.222 +  do_check_eq(aObj.ownProperties.ninf.value.type, "-Infinity");
   1.223 +
   1.224 +  do_check_eq(typeof aObj.ownProperties.nan, "object");
   1.225 +  do_check_eq(typeof aObj.ownProperties.nan.value, "object");
   1.226 +  do_check_eq(aObj.ownProperties.nan.value.type, "NaN");
   1.227 +
   1.228 +  do_check_eq(typeof aObj.ownProperties.nzero, "object");
   1.229 +  do_check_eq(typeof aObj.ownProperties.nzero.value, "object");
   1.230 +  do_check_eq(aObj.ownProperties.nzero.value.type, "-0");
   1.231 +}
   1.232 +
   1.233 +function check_obj4(aType, aObj) {
   1.234 +  // Sub-objects aren't added.
   1.235 +  do_check_eq(typeof aObj.ownProperties.obj, "undefined");
   1.236 +  do_check_eq(typeof aObj.ownProperties.arr, "undefined");
   1.237 +}

mercurial