diff -r 000000000000 -r 6474c204b198 browser/devtools/profiler/test/browser_profiler_run.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/browser/devtools/profiler/test/browser_profiler_run.js Wed Dec 31 06:09:35 2014 +0100 @@ -0,0 +1,119 @@ +/* Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ */ + +const URL = "data:text/html;charset=utf8,

JavaScript Profiler test

"; + +let gTab, gPanel; + +function test() { + waitForExplicitFinish(); + + setUp(URL, function onSetUp(tab, browser, panel) { + gTab = tab; + gPanel = panel; + + function done() { + tearDown(gTab, () => { gPanel = null; gTab = null; }); + } + + startRecording() + .then(stopRecording) + .then(startRecordingAgain) + .then(stopRecording) + .then(switchBackToTheFirstOne) + .then(done); + }); +} + +function startRecording() { + let deferred = promise.defer(); + + ok(gPanel, "Profiler panel exists"); + ok(!gPanel.activeProfile, "Active profile doesn't exist"); + ok(!gPanel.recordingProfile, "Recording profile doesn't exist"); + + let record = gPanel.controls.record; + ok(record, "Record button exists."); + ok(!record.getAttribute("checked"), "Record button is unchecked"); + + gPanel.once("started", () => { + let item = gPanel.sidebar.getItemByProfile(gPanel.recordingProfile); + is(item.attachment.name, "Profile 1"); + is(item.attachment.state, PROFILE_RUNNING); + is(record.getAttribute("tooltiptext"), "Stop profiling"); + + gPanel.controller.isActive(function (err, isActive) { + ok(isActive, "Profiler is running"); + deferred.resolve(); + }); + }); + + record.click(); + return deferred.promise; +} + +function stopRecording() { + let deferred = promise.defer(); + let record = gPanel.controls.record; + + gPanel.once("parsed", () => { + let item = gPanel.sidebar.getItemByProfile(gPanel.activeProfile); + is(item.attachment.state, PROFILE_COMPLETED); + is(record.getAttribute("tooltiptext"), "Start profiling"); + + function assertSample() { + let [ win, doc ] = getProfileInternals(); + let sample = doc.getElementsByClassName("samplePercentage"); + + if (sample.length <= 0) { + return void setTimeout(assertSample, 100); + } + + ok(sample.length > 0, "We have some items displayed"); + is(sample[0].innerHTML, "100.0%", "First percentage is 100%"); + + deferred.resolve(); + } + + assertSample(); + }); + + setTimeout(function () gPanel.controls.record.click(), 100); + return deferred.promise; +} + +function startRecordingAgain() { + let deferred = promise.defer(); + + let record = gPanel.controls.record; + ok(!record.getAttribute("checked"), "Record button is unchecked"); + + gPanel.once("started", () => { + ok(gPanel.activeProfile !== gPanel.recordingProfile); + + let item = gPanel.sidebar.getItemByProfile(gPanel.recordingProfile); + is(item.attachment.name, "Profile 2"); + is(item.attachment.state, PROFILE_RUNNING); + is(record.getAttribute("tooltiptext"), "Stop profiling"); + + deferred.resolve(); + }); + + record.click(); + return deferred.promise; +} + +function switchBackToTheFirstOne() { + let deferred = promise.defer(); + let button = gPanel.sidebar.getElementByProfile({ uid: 1 }); + let item = gPanel.sidebar.getItemByProfile({ uid: 1 }); + + gPanel.once("profileSwitched", () => { + is(gPanel.activeProfile.uid, 1, "activeProfile is correct"); + is(gPanel.sidebar.selectedItem, item, "selectedItem is correct"); + deferred.resolve(); + }); + + button.click(); + return deferred.promise; +}