diff -r 000000000000 -r 6474c204b198 toolkit/devtools/server/tests/unit/test_trace_actor-03.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/toolkit/devtools/server/tests/unit/test_trace_actor-03.js Wed Dec 31 06:09:35 2014 +0100 @@ -0,0 +1,67 @@ +/* Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ */ + +/** + * Tests that automatically generated names for traces are unique. + */ + +var gDebuggee; +var gClient; +var gTraceClient; + +function run_test() +{ + initTestTracerServer(); + gDebuggee = addTestGlobal("test-tracer-actor"); + gClient = new DebuggerClient(DebuggerServer.connectPipe()); + gClient.connect(function() { + attachTestTab(gClient, "test-tracer-actor", function(aResponse, aTabClient) { + gClient.attachTracer(aResponse.traceActor, function(aResponse, aTraceClient) { + gTraceClient = aTraceClient; + test_unique_generated_trace_names(); + }); + }); + }); + do_test_pending(); +} + +function test_unique_generated_trace_names() +{ + let deferred = promise.defer(); + deferred.resolve([]); + + let p = deferred.promise, traces = 50; + for (let i = 0; i < traces; i++) + p = p.then(start_trace); + for (let i = 0; i < traces; i++) + p = p.then(stop_trace); + + p = p.then(function() { + finishClient(gClient); + }); +} + +function start_trace(aTraceNames) +{ + let deferred = promise.defer(); + gTraceClient.startTrace([], null, function(aResponse) { + let hasDuplicates = aTraceNames.some(name => name === aResponse.name); + do_check_true(!hasDuplicates, "Generated trace names should be unique"); + aTraceNames.push(aResponse.name); + deferred.resolve(aTraceNames); + }); + return deferred.promise; +} + +function stop_trace(aTraceNames) +{ + let deferred = promise.defer(); + gTraceClient.stopTrace(null, function(aResponse) { + do_check_eq(aTraceNames.pop(), aResponse.name, + "Stopped trace should be most recently started trace"); + let hasDuplicates = aTraceNames.some(name => name === aResponse.name); + do_check_true(!hasDuplicates, "Generated trace names should be unique"); + deferred.resolve(aTraceNames); + }); + return deferred.promise; +}