From d843fa0143bd27ba47d79b4f358ba47f1f1ed22c Mon Sep 17 00:00:00 2001 From: David Walsh Date: Tue, 23 Oct 2018 20:39:19 -0500 Subject: [PATCH] Bug 1500986 - Migrate old event-listener and worker debugger tests r=jdescottes --HG-- rename : devtools/client/debugger/test/mochitest/browser_dbg_debugger-statement.js => devtools/client/shared/test/browser_dbg_debugger-statement.js rename : devtools/client/debugger/test/mochitest/browser_dbg_event-listeners-01.js => devtools/client/shared/test/browser_dbg_event-listeners-01.js rename : devtools/client/debugger/test/mochitest/browser_dbg_event-listeners-02.js => devtools/client/shared/test/browser_dbg_event-listeners-02.js rename : devtools/client/debugger/test/mochitest/browser_dbg_event-listeners-03.js => devtools/client/shared/test/browser_dbg_event-listeners-03.js rename : devtools/client/debugger/test/mochitest/browser_dbg_listworkers.js => devtools/client/shared/test/browser_dbg_listworkers.js rename : devtools/client/debugger/test/mochitest/browser_dbg_worker-window.js => devtools/client/shared/test/browser_dbg_worker-window.js rename : devtools/client/debugger/test/mochitest/code_listworkers-worker1.js => devtools/client/shared/test/code_listworkers-worker1.js rename : devtools/client/debugger/test/mochitest/code_listworkers-worker2.js => devtools/client/shared/test/code_listworkers-worker2.js rename : devtools/client/debugger/test/mochitest/doc_event-listeners-01.html => devtools/client/shared/test/doc_event-listeners-01.html rename : devtools/client/debugger/test/mochitest/doc_event-listeners-03.html => devtools/client/shared/test/doc_event-listeners-03.html rename : devtools/client/debugger/test/mochitest/doc_inline-debugger-statement.html => devtools/client/shared/test/doc_inline-debugger-statement.html rename : devtools/client/debugger/test/mochitest/doc_listworkers-tab.html => devtools/client/shared/test/doc_listworkers-tab.html rename : devtools/client/debugger/test/mochitest/doc_native-event-handler.html => devtools/client/shared/test/doc_native-event-handler.html --- .eslintignore | 2 + .../debugger/test/mochitest/browser.ini | 22 +----- .../test/mochitest/browser_dbg_listworkers.js | 59 --------------- ...e_WorkerTargetActor.attachThread-worker.js | 16 ---- .../mochitest/code_listworkers-worker1.js | 3 - .../mochitest/code_listworkers-worker2.js | 3 - ...oc_WorkerTargetActor.attachThread-tab.html | 8 -- devtools/client/shared/test/browser.ini | 18 +++++ .../test}/browser_dbg_debugger-statement.js | 33 ++++++--- .../test}/browser_dbg_event-listeners-01.js | 74 +++++++++++-------- .../test}/browser_dbg_event-listeners-02.js | 71 ++++++++++-------- .../test}/browser_dbg_event-listeners-03.js | 51 ++++++++----- .../shared/test/browser_dbg_listworkers.js | 73 ++++++++++++++++++ .../test}/browser_dbg_worker-window.js | 28 ++++--- .../shared/test/code_listworkers-worker1.js | 3 + .../shared/test/code_listworkers-worker2.js | 3 + .../test}/doc_event-listeners-01.html | 10 ++- .../test}/doc_event-listeners-03.html | 16 ++-- .../test}/doc_inline-debugger-statement.html | 1 + .../test}/doc_listworkers-tab.html | 0 .../test}/doc_native-event-handler.html | 2 + devtools/client/shared/test/helper_workers.js | 59 +++++++++++++++ 22 files changed, 331 insertions(+), 224 deletions(-) delete mode 100644 devtools/client/debugger/test/mochitest/browser_dbg_listworkers.js delete mode 100644 devtools/client/debugger/test/mochitest/code_WorkerTargetActor.attachThread-worker.js delete mode 100644 devtools/client/debugger/test/mochitest/code_listworkers-worker1.js delete mode 100644 devtools/client/debugger/test/mochitest/code_listworkers-worker2.js delete mode 100644 devtools/client/debugger/test/mochitest/doc_WorkerTargetActor.attachThread-tab.html rename devtools/client/{debugger/test/mochitest => shared/test}/browser_dbg_debugger-statement.js (69%) rename devtools/client/{debugger/test/mochitest => shared/test}/browser_dbg_event-listeners-01.js (61%) rename devtools/client/{debugger/test/mochitest => shared/test}/browser_dbg_event-listeners-02.js (55%) rename devtools/client/{debugger/test/mochitest => shared/test}/browser_dbg_event-listeners-03.js (52%) create mode 100644 devtools/client/shared/test/browser_dbg_listworkers.js rename devtools/client/{debugger/test/mochitest => shared/test}/browser_dbg_worker-window.js (62%) create mode 100644 devtools/client/shared/test/code_listworkers-worker1.js create mode 100644 devtools/client/shared/test/code_listworkers-worker2.js rename devtools/client/{debugger/test/mochitest => shared/test}/doc_event-listeners-01.html (79%) rename devtools/client/{debugger/test/mochitest => shared/test}/doc_event-listeners-03.html (77%) rename devtools/client/{debugger/test/mochitest => shared/test}/doc_inline-debugger-statement.html (95%) rename devtools/client/{debugger/test/mochitest => shared/test}/doc_listworkers-tab.html (100%) rename devtools/client/{debugger/test/mochitest => shared/test}/doc_native-event-handler.html (96%) diff --git a/.eslintignore b/.eslintignore index f4555ff2380f..93fc044eb902 100644 --- a/.eslintignore +++ b/.eslintignore @@ -98,6 +98,8 @@ devtools/client/inspector/markup/test/doc_markup_events_*.html devtools/client/inspector/rules/test/doc_media_queries.html devtools/client/performance/components/test/test_jit_optimizations_01.html devtools/client/responsive.html/test/browser/touch.html +devtools/client/shared/test/*.html +devtools/client/shared/test/code_*.js devtools/client/shared/components/test/mochitest/*.html !devtools/client/shared/components/test/mochitest/test_stack-trace.html devtools/client/storage/test/*.html diff --git a/devtools/client/debugger/test/mochitest/browser.ini b/devtools/client/debugger/test/mochitest/browser.ini index 23d4f5fedf35..832b6434e444 100644 --- a/devtools/client/debugger/test/mochitest/browser.ini +++ b/devtools/client/debugger/test/mochitest/browser.ini @@ -7,34 +7,16 @@ subsuite = devtools skip-if = (os == 'linux' && debug && bits == 32) support-files = addon4.xpi - code_listworkers-worker1.js - code_listworkers-worker2.js - code_WorkerTargetActor.attachThread-worker.js - doc_event-listeners-01.html - doc_event-listeners-03.html - doc_inline-debugger-statement.html - doc_listworkers-tab.html - doc_native-event-handler.html doc_promise-get-allocation-stack.html doc_promise-get-fulfillment-stack.html doc_promise-get-rejection-stack.html doc_terminate-on-tab-close.html - doc_WorkerTargetActor.attachThread-tab.html head.js !/devtools/client/shared/test/shared-head.js !/devtools/client/shared/test/telemetry-test-helpers.js [browser_dbg_addon-console.js] skip-if = (e10s && debug || os == 'win' || verify) || true # bug 1005274 tags = addons -[browser_dbg_debugger-statement.js] -skip-if = e10s && debug -[browser_dbg_event-listeners-01.js] -skip-if = e10s && debug -[browser_dbg_event-listeners-02.js] -skip-if = e10s && debug -[browser_dbg_event-listeners-03.js] -skip-if = e10s && debug -[browser_dbg_listworkers.js] [browser_dbg_promises-allocation-stack.js] uses-unsafe-cpows = true skip-if = true @@ -49,6 +31,4 @@ uses-unsafe-cpows = true skip-if = true [browser_dbg_terminate-on-tab-close.js] uses-unsafe-cpows = true -skip-if = true -[browser_dbg_worker-window.js] -skip-if = (e10s && debug) || true # Bug 1486974 \ No newline at end of file +skip-if = true \ No newline at end of file diff --git a/devtools/client/debugger/test/mochitest/browser_dbg_listworkers.js b/devtools/client/debugger/test/mochitest/browser_dbg_listworkers.js deleted file mode 100644 index 3febad912672..000000000000 --- a/devtools/client/debugger/test/mochitest/browser_dbg_listworkers.js +++ /dev/null @@ -1,59 +0,0 @@ -var TAB_URL = EXAMPLE_URL + "doc_listworkers-tab.html"; -var WORKER1_URL = "code_listworkers-worker1.js"; -var WORKER2_URL = "code_listworkers-worker2.js"; - -function test() { - Task.spawn(function* () { - DebuggerServer.init(); - DebuggerServer.registerAllActors(); - - let client = new DebuggerClient(DebuggerServer.connectPipe()); - yield connect(client); - - let tab = yield addTab(TAB_URL); - let { tabs } = yield listTabs(client); - let [, targetFront] = yield attachTarget(client, findTab(tabs, TAB_URL)); - - let { workers } = yield listWorkers(targetFront); - is(workers.length, 0); - - executeSoon(() => { - evalInTab(tab, "var worker1 = new Worker('" + WORKER1_URL + "');"); - }); - yield waitForWorkerListChanged(targetFront); - - ({ workers } = yield listWorkers(targetFront)); - is(workers.length, 1); - is(workers[0].url, WORKER1_URL); - - executeSoon(() => { - evalInTab(tab, "var worker2 = new Worker('" + WORKER2_URL + "');"); - }); - yield waitForWorkerListChanged(targetFront); - - ({ workers } = yield listWorkers(targetFront)); - is(workers.length, 2); - is(workers[0].url, WORKER1_URL); - is(workers[1].url, WORKER2_URL); - - executeSoon(() => { - evalInTab(tab, "worker1.terminate()"); - }); - yield waitForWorkerListChanged(targetFront); - - ({ workers } = yield listWorkers(targetFront)); - is(workers.length, 1); - is(workers[0].url, WORKER2_URL); - - executeSoon(() => { - evalInTab(tab, "worker2.terminate()"); - }); - yield waitForWorkerListChanged(targetFront); - - ({ workers } = yield listWorkers(targetFront)); - is(workers.length, 0); - - yield close(client); - finish(); - }); -} diff --git a/devtools/client/debugger/test/mochitest/code_WorkerTargetActor.attachThread-worker.js b/devtools/client/debugger/test/mochitest/code_WorkerTargetActor.attachThread-worker.js deleted file mode 100644 index 881eab0b8ef1..000000000000 --- a/devtools/client/debugger/test/mochitest/code_WorkerTargetActor.attachThread-worker.js +++ /dev/null @@ -1,16 +0,0 @@ -"use strict"; - -function f() { - var a = 1; - var b = 2; - var c = 3; -} - -self.onmessage = function (event) { - if (event.data == "ping") { - f(); - postMessage("pong"); - } -}; - -postMessage("load"); diff --git a/devtools/client/debugger/test/mochitest/code_listworkers-worker1.js b/devtools/client/debugger/test/mochitest/code_listworkers-worker1.js deleted file mode 100644 index 8cee6809e5f6..000000000000 --- a/devtools/client/debugger/test/mochitest/code_listworkers-worker1.js +++ /dev/null @@ -1,3 +0,0 @@ -"use strict"; - -self.onmessage = function () {}; diff --git a/devtools/client/debugger/test/mochitest/code_listworkers-worker2.js b/devtools/client/debugger/test/mochitest/code_listworkers-worker2.js deleted file mode 100644 index 8cee6809e5f6..000000000000 --- a/devtools/client/debugger/test/mochitest/code_listworkers-worker2.js +++ /dev/null @@ -1,3 +0,0 @@ -"use strict"; - -self.onmessage = function () {}; diff --git a/devtools/client/debugger/test/mochitest/doc_WorkerTargetActor.attachThread-tab.html b/devtools/client/debugger/test/mochitest/doc_WorkerTargetActor.attachThread-tab.html deleted file mode 100644 index 62ab9be7d2e8..000000000000 --- a/devtools/client/debugger/test/mochitest/doc_WorkerTargetActor.attachThread-tab.html +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/devtools/client/shared/test/browser.ini b/devtools/client/shared/test/browser.ini index b1279a995a84..4e2b0e9d472e 100644 --- a/devtools/client/shared/test/browser.ini +++ b/devtools/client/shared/test/browser.ini @@ -5,6 +5,8 @@ support-files = addon1.xpi addon2.xpi browser_devices.json + code_listworkers-worker1.js + code_listworkers-worker2.js code_WorkerTargetActor.attach-worker1.js code_WorkerTargetActor.attach-worker2.js code_WorkerTargetActor.attachThread-worker.js @@ -13,6 +15,8 @@ support-files = doc_cubic-bezier-02.html doc_empty-tab-01.html doc_empty-tab-02.html + doc_event-listeners-01.html + doc_event-listeners-03.html doc_filter-editor-01.html doc_html_tooltip-02.xul doc_html_tooltip-03.xul @@ -25,9 +29,12 @@ support-files = doc_html_tooltip_doorhanger-02.xul doc_html_tooltip_hover.xul doc_html_tooltip_rtl.xul + doc_inline-debugger-statement.html doc_inplace-editor_autocomplete_offset.xul doc_layoutHelpers-getBoxQuads.html doc_layoutHelpers.html + doc_listworkers-tab.html + doc_native-event-handler.html doc_options-view.xul doc_script-switching-01.html doc_script-switching-02.html @@ -67,8 +74,17 @@ support-files = [browser_cubic-bezier-05.js] [browser_cubic-bezier-06.js] [browser_cubic-bezier-07.js] +[browser_dbg_debugger-statement.js] +skip-if = e10s && debug +[browser_dbg_event-listeners-01.js] +skip-if = e10s && debug +[browser_dbg_event-listeners-02.js] +skip-if = e10s && debug +[browser_dbg_event-listeners-03.js] +skip-if = e10s && debug [browser_dbg_globalactor.js] skip-if = e10s +[browser_dbg_listworkers.js] [browser_filter-editor-01.js] [browser_filter-editor-02.js] [browser_filter-editor-03.js] @@ -246,3 +262,5 @@ skip-if = debug # bug 1334683 skip-if = e10s && debug [browser_dbg_WorkerTargetActor.attach.js] skip-if = e10s && debug +[browser_dbg_worker-window.js] +skip-if = (e10s && debug) || true # Bug 1486974 \ No newline at end of file diff --git a/devtools/client/debugger/test/mochitest/browser_dbg_debugger-statement.js b/devtools/client/shared/test/browser_dbg_debugger-statement.js similarity index 69% rename from devtools/client/debugger/test/mochitest/browser_dbg_debugger-statement.js rename to devtools/client/shared/test/browser_dbg_debugger-statement.js index 3d9752f29425..ad83ef980aea 100644 --- a/devtools/client/debugger/test/mochitest/browser_dbg_debugger-statement.js +++ b/devtools/client/shared/test/browser_dbg_debugger-statement.js @@ -3,11 +3,22 @@ /* Any copyright is dedicated to the Public Domain. * http://creativecommons.org/publicdomain/zero/1.0/ */ +"use strict"; + /** * Tests the behavior of the debugger statement. */ -const TAB_URL = EXAMPLE_URL + "doc_inline-debugger-statement.html"; +// Import helpers for the workers +/* import-globals-from helper_workers.js */ +Services.scriptloader.loadSubScript( + "chrome://mochitests/content/browser/devtools/client/shared/test/helper_workers.js", + this); + +var { DebuggerServer } = require("devtools/server/main"); +var { DebuggerClient } = require("devtools/shared/client/debugger-client"); + +const TAB_URL = TEST_URI_ROOT + "doc_inline-debugger-statement.html"; var gClient; var gTab; @@ -16,31 +27,31 @@ function test() { DebuggerServer.init(); DebuggerServer.registerAllActors(); - let transport = DebuggerServer.connectPipe(); + const transport = DebuggerServer.connectPipe(); gClient = new DebuggerClient(transport); gClient.connect().then(([aType, aTraits]) => { is(aType, "browser", "Root actor should identify itself as a browser."); addTab(TAB_URL) - .then((aTab) => { - gTab = aTab; + .then(tab => { + gTab = tab; return attachTargetActorForUrl(gClient, TAB_URL); }) .then(testEarlyDebuggerStatement) .then(testDebuggerStatement) .then(() => gClient.close()) .then(finish) - .catch(aError => { - ok(false, "Got an error: " + aError.message + "\n" + aError.stack); + .catch(error => { + ok(false, "Got an error: " + error.message + "\n" + error.stack); }); }); } function testEarlyDebuggerStatement([aGrip, aResponse]) { - let deferred = promise.defer(); + const deferred = getDeferredPromise().defer(); - let onPaused = function (aEvent, aPacket) { + const onPaused = function(event, packet) { ok(false, "Pause shouldn't be called before we've attached!"); deferred.reject(); }; @@ -65,9 +76,9 @@ function testEarlyDebuggerStatement([aGrip, aResponse]) { } function testDebuggerStatement([aGrip, aResponse]) { - let deferred = promise.defer(); + const deferred = getDeferredPromise().defer(); - gClient.addListener("paused", (aEvent, aPacket) => { + gClient.addListener("paused", (event, packet) => { gClient.request({ to: aResponse.threadActor, type: "resume" }, () => { ok(true, "The pause handler was triggered on a debugger statement."); deferred.resolve(); @@ -80,6 +91,6 @@ function testDebuggerStatement([aGrip, aResponse]) { return deferred.promise; } -registerCleanupFunction(function () { +registerCleanupFunction(function() { gClient = null; }); diff --git a/devtools/client/debugger/test/mochitest/browser_dbg_event-listeners-01.js b/devtools/client/shared/test/browser_dbg_event-listeners-01.js similarity index 61% rename from devtools/client/debugger/test/mochitest/browser_dbg_event-listeners-01.js rename to devtools/client/shared/test/browser_dbg_event-listeners-01.js index 1c66eb25f0a8..761b0bb0a63d 100644 --- a/devtools/client/debugger/test/mochitest/browser_dbg_event-listeners-01.js +++ b/devtools/client/shared/test/browser_dbg_event-listeners-01.js @@ -3,92 +3,104 @@ /* Any copyright is dedicated to the Public Domain. * http://creativecommons.org/publicdomain/zero/1.0/ */ +"use strict"; + /** * Tests that the eventListeners request works. */ -const TAB_URL = EXAMPLE_URL + "doc_event-listeners-01.html"; +// Import helpers for the workers +/* import-globals-from helper_workers.js */ +Services.scriptloader.loadSubScript( + "chrome://mochitests/content/browser/devtools/client/shared/test/helper_workers.js", + this); + +var { DebuggerServer } = require("devtools/server/main"); +var { DebuggerClient } = require("devtools/shared/client/debugger-client"); + +const TAB_URL = TEST_URI_ROOT + "doc_event-listeners-01.html"; add_task(async function() { DebuggerServer.init(); DebuggerServer.registerAllActors(); - let transport = DebuggerServer.connectPipe(); - let client = new DebuggerClient(transport); - let [type, traits] = await client.connect(); + const transport = DebuggerServer.connectPipe(); + const client = new DebuggerClient(transport); + const [type] = await client.connect(); Assert.equal(type, "browser", "Root actor should identify itself as a browser."); - let tab = await addTab(TAB_URL); - let threadClient = await attachThreadActorForUrl(client, TAB_URL); + const tab = await addTab(TAB_URL); + const threadClient = await attachThreadActorForUrl(client, TAB_URL); await pauseDebuggee(tab, client, threadClient); await testEventListeners(client, threadClient); await client.close(); }); -function pauseDebuggee(aTab, aClient, aThreadClient) { - let deferred = promise.defer(); +function pauseDebuggee(tab, client, threadClient) { + const deferred = getDeferredPromise().defer(); - aClient.addOneTimeListener("paused", (aEvent, aPacket) => { - is(aPacket.type, "paused", + client.addOneTimeListener("paused", (event, packet) => { + is(packet.type, "paused", "We should now be paused."); - is(aPacket.why.type, "debuggerStatement", + is(packet.why.type, "debuggerStatement", "The debugger statement was hit."); - deferred.resolve(aThreadClient); + deferred.resolve(threadClient); }); - generateMouseClickInTab(aTab, "content.document.querySelector('button')"); + generateMouseClickInTab(tab, "content.document.querySelector('button')"); return deferred.promise; } -async function testEventListeners(aClient, aThreadClient) { - let packet = await aThreadClient.eventListeners(); +async function testEventListeners(client, threadClient) { + const packet = await threadClient.eventListeners(); if (packet.error) { - let msg = "Error getting event listeners: " + packet.message; + const msg = "Error getting event listeners: " + packet.message; Assert.ok(false, msg); return; } is(packet.listeners.length, 3, "Found all event listeners."); - let listeners = await promise.all(packet.listeners.map(listener => { - const lDeferred = promise.defer(); - aThreadClient.pauseGrip(listener.function).getDefinitionSite(aResponse => { - if (aResponse.error) { - const msg = "Error getting function definition site: " + aResponse.message; + const listeners = await getDeferredPromise().all(packet.listeners.map(listener => { + const lDeferred = getDeferredPromise().defer(); + threadClient.pauseGrip(listener.function).getDefinitionSite(response => { + if (response.error) { + const msg = "Error getting function definition site: " + response.message; ok(false, msg); lDeferred.reject(msg); return; } - listener.function.url = aResponse.source.url; + listener.function.url = response.source.url; lDeferred.resolve(listener); }); return lDeferred.promise; })); - let types = []; + const types = []; - for (let l of listeners) { + for (const l of listeners) { info("Listener for the " + l.type + " event."); - let node = l.node; + const node = l.node; ok(node, "There is a node property."); ok(node.object, "There is a node object property."); if (node.selector != "window") { - let nodeCount = - await ContentTask.spawn(gBrowser.selectedBrowser, node.selector, async (selector) => { - return content.document.querySelectorAll(selector).length; - }); + const nodeCount = + await ContentTask.spawn(gBrowser.selectedBrowser, node.selector, + async (selector) => { + return content.document.querySelectorAll(selector).length; + }); Assert.equal(nodeCount, 1, "The node property is a unique CSS selector."); } else { Assert.ok(true, "The node property is a unique CSS selector."); } - let func = l.function; + const func = l.function; ok(func, "There is a function property."); is(func.type, "object", "The function form is of type 'object'."); is(func.class, "Function", "The function form is of class 'Function'."); @@ -128,5 +140,5 @@ async function testEventListeners(aClient, aThreadClient) { Assert.ok(types.includes("change"), "Found the change handler."); Assert.ok(types.includes("keyup"), "Found the keyup handler."); - await aThreadClient.resume(); + await threadClient.resume(); } diff --git a/devtools/client/debugger/test/mochitest/browser_dbg_event-listeners-02.js b/devtools/client/shared/test/browser_dbg_event-listeners-02.js similarity index 55% rename from devtools/client/debugger/test/mochitest/browser_dbg_event-listeners-02.js rename to devtools/client/shared/test/browser_dbg_event-listeners-02.js index 65fb0d403cde..0edaf7cdd061 100644 --- a/devtools/client/debugger/test/mochitest/browser_dbg_event-listeners-02.js +++ b/devtools/client/shared/test/browser_dbg_event-listeners-02.js @@ -3,54 +3,64 @@ /* Any copyright is dedicated to the Public Domain. * http://creativecommons.org/publicdomain/zero/1.0/ */ +"use strict"; + /** * Tests that the eventListeners request works when bound functions are used as * event listeners. */ -const TAB_URL = EXAMPLE_URL + "doc_event-listeners-03.html"; +// Import helpers for the workers +/* import-globals-from helper_workers.js */ +Services.scriptloader.loadSubScript( + "chrome://mochitests/content/browser/devtools/client/shared/test/helper_workers.js", + this); +var { DebuggerServer } = require("devtools/server/main"); +var { DebuggerClient } = require("devtools/shared/client/debugger-client"); + +const TAB_URL = TEST_URI_ROOT + "doc_event-listeners-03.html"; add_task(async function() { DebuggerServer.init(); DebuggerServer.registerAllActors(); - let transport = DebuggerServer.connectPipe(); - let client = new DebuggerClient(transport); - let [type, traits] = await client.connect(); + const transport = DebuggerServer.connectPipe(); + const client = new DebuggerClient(transport); + const [type] = await client.connect(); Assert.equal(type, "browser", "Root actor should identify itself as a browser."); - let tab = await addTab(TAB_URL); - let threadClient = await attachThreadActorForUrl(client, TAB_URL); + const tab = await addTab(TAB_URL); + const threadClient = await attachThreadActorForUrl(client, TAB_URL); await pauseDebuggee(tab, client, threadClient); await testEventListeners(client, threadClient); await client.close(); }); -function pauseDebuggee(aTab, aClient, aThreadClient) { - let deferred = promise.defer(); +function pauseDebuggee(tab, client, threadClient) { + const deferred = getDeferredPromise().defer(); - aClient.addOneTimeListener("paused", (aEvent, aPacket) => { - is(aPacket.type, "paused", + client.addOneTimeListener("paused", (event, packet) => { + is(packet.type, "paused", "We should now be paused."); - is(aPacket.why.type, "debuggerStatement", + is(packet.why.type, "debuggerStatement", "The debugger statement was hit."); - deferred.resolve(aThreadClient); + deferred.resolve(threadClient); }); - generateMouseClickInTab(aTab, "content.document.querySelector('button')"); + generateMouseClickInTab(tab, "content.document.querySelector('button')"); return deferred.promise; } -async function testEventListeners(aClient, aThreadClient) { - let packet = await aThreadClient.eventListeners(); +async function testEventListeners(client, threadClient) { + const packet = await threadClient.eventListeners(); if (packet.error) { - let msg = "Error getting event listeners: " + aPacket.message; + const msg = "Error getting event listeners: " + packet.message; ok(false, msg); return; } @@ -58,16 +68,16 @@ async function testEventListeners(aClient, aThreadClient) { is(packet.listeners.length, 3, "Found all event listeners."); - let listeners = await promise.all(packet.listeners.map(listener => { - const lDeferred = promise.defer(); - aThreadClient.pauseGrip(listener.function).getDefinitionSite(aResponse => { - if (aResponse.error) { - const msg = "Error getting function definition site: " + aResponse.message; + const listeners = await getDeferredPromise().all(packet.listeners.map(listener => { + const lDeferred = getDeferredPromise().defer(); + threadClient.pauseGrip(listener.function).getDefinitionSite(response => { + if (response.error) { + const msg = "Error getting function definition site: " + response.message; ok(false, msg); lDeferred.reject(msg); return; } - listener.function.url = aResponse.source.url; + listener.function.url = response.source.url; lDeferred.resolve(listener); }); return lDeferred.promise; @@ -75,22 +85,23 @@ async function testEventListeners(aClient, aThreadClient) { Assert.equal(listeners.length, 3, "Found three event listeners."); - for (let l of listeners) { - let node = l.node; + for (const l of listeners) { + const node = l.node; ok(node, "There is a node property."); ok(node.object, "There is a node object property."); if (node.selector != "window") { - let nodeCount = - await ContentTask.spawn(gBrowser.selectedBrowser, node.selector, async (selector) => { - return content.document.querySelectorAll(selector).length; - }); + const nodeCount = + await ContentTask.spawn(gBrowser.selectedBrowser, node.selector, + async (selector) => { + return content.document.querySelectorAll(selector).length; + }); Assert.equal(nodeCount, 1, "The node property is a unique CSS selector."); } else { Assert.ok(true, "The node property is a unique CSS selector."); } - let func = l.function; + const func = l.function; ok(func, "There is a function property."); is(func.type, "object", "The function form is of type 'object'."); is(func.class, "Function", "The function form is of class 'Function'."); @@ -107,5 +118,5 @@ async function testEventListeners(aClient, aThreadClient) { "Capturing property has the right value."); } - await aThreadClient.resume(); + await threadClient.resume(); } diff --git a/devtools/client/debugger/test/mochitest/browser_dbg_event-listeners-03.js b/devtools/client/shared/test/browser_dbg_event-listeners-03.js similarity index 52% rename from devtools/client/debugger/test/mochitest/browser_dbg_event-listeners-03.js rename to devtools/client/shared/test/browser_dbg_event-listeners-03.js index 2ed612a3371f..fad9958a03f0 100644 --- a/devtools/client/debugger/test/mochitest/browser_dbg_event-listeners-03.js +++ b/devtools/client/shared/test/browser_dbg_event-listeners-03.js @@ -3,12 +3,23 @@ /* Any copyright is dedicated to the Public Domain. * http://creativecommons.org/publicdomain/zero/1.0/ */ +"use strict"; + /** * Tests that the eventListeners request works when there are event handlers * that the debugger cannot unwrap. */ -const TAB_URL = EXAMPLE_URL + "doc_native-event-handler.html"; +// Import helpers for the workers +/* import-globals-from helper_workers.js */ +Services.scriptloader.loadSubScript( + "chrome://mochitests/content/browser/devtools/client/shared/test/helper_workers.js", + this); + +var { DebuggerServer } = require("devtools/server/main"); +var { DebuggerClient } = require("devtools/shared/client/debugger-client"); + +const TAB_URL = TEST_URI_ROOT + "doc_native-event-handler.html"; var gClient; var gTab; @@ -17,37 +28,37 @@ function test() { DebuggerServer.init(); DebuggerServer.registerAllActors(); - let transport = DebuggerServer.connectPipe(); + const transport = DebuggerServer.connectPipe(); gClient = new DebuggerClient(transport); gClient.connect().then(([aType, aTraits]) => { is(aType, "browser", "Root actor should identify itself as a browser."); addTab(TAB_URL) - .then((aTab) => { - gTab = aTab; + .then((tab) => { + gTab = tab; return attachThreadActorForUrl(gClient, TAB_URL); }) .then(pauseDebuggee) .then(testEventListeners) .then(() => gClient.close()) .then(finish) - .catch(aError => { - ok(false, "Got an error: " + aError.message + "\n" + aError.stack); + .catch(error => { + ok(false, "Got an error: " + error.message + "\n" + error.stack); }); }); } -function pauseDebuggee(aThreadClient) { - let deferred = promise.defer(); +function pauseDebuggee(threadClient) { + const deferred = getDeferredPromise().defer(); - gClient.addOneTimeListener("paused", (aEvent, aPacket) => { - is(aPacket.type, "paused", + gClient.addOneTimeListener("paused", (event, packet) => { + is(packet.type, "paused", "We should now be paused."); - is(aPacket.why.type, "debuggerStatement", + is(packet.why.type, "debuggerStatement", "The debugger statement was hit."); - deferred.resolve(aThreadClient); + deferred.resolve(threadClient); }); generateMouseClickInTab(gTab, "content.document.querySelector('button')"); @@ -55,12 +66,12 @@ function pauseDebuggee(aThreadClient) { return deferred.promise; } -function testEventListeners(aThreadClient) { - let deferred = promise.defer(); +function testEventListeners(threadClient) { + const deferred = getDeferredPromise().defer(); - aThreadClient.eventListeners(aPacket => { - if (aPacket.error) { - let msg = "Error getting event listeners: " + aPacket.message; + threadClient.eventListeners(packet => { + if (packet.error) { + const msg = "Error getting event listeners: " + packet.message; ok(false, msg); deferred.reject(msg); return; @@ -69,13 +80,13 @@ function testEventListeners(aThreadClient) { // There are 2 event listeners in the page: button.onclick, window.onload. // The video element controls listeners are skipped — they cannot be // unwrapped but they shouldn't cause us to throw either. - is(aPacket.listeners.length, 2, "Found all event listeners."); - aThreadClient.resume(deferred.resolve); + is(packet.listeners.length, 2, "Found all event listeners."); + threadClient.resume(deferred.resolve); }); return deferred.promise; } -registerCleanupFunction(function () { +registerCleanupFunction(function() { gClient = null; }); diff --git a/devtools/client/shared/test/browser_dbg_listworkers.js b/devtools/client/shared/test/browser_dbg_listworkers.js new file mode 100644 index 000000000000..7150acc952f8 --- /dev/null +++ b/devtools/client/shared/test/browser_dbg_listworkers.js @@ -0,0 +1,73 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* vim: set ft=javascript ts=2 et sw=2 tw=80: */ +/* Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/publicdomain/zero/1.0/ */ + +"use strict"; + +// Import helpers for the workers +/* import-globals-from helper_workers.js */ +Services.scriptloader.loadSubScript( + "chrome://mochitests/content/browser/devtools/client/shared/test/helper_workers.js", + this); + +var { DebuggerServer } = require("devtools/server/main"); +var { DebuggerClient } = require("devtools/shared/client/debugger-client"); + +var TAB_URL = EXAMPLE_URL + "doc_listworkers-tab.html"; +var WORKER1_URL = "code_listworkers-worker1.js"; +var WORKER2_URL = "code_listworkers-worker2.js"; + +add_task(async function test() { + DebuggerServer.init(); + DebuggerServer.registerAllActors(); + + const client = new DebuggerClient(DebuggerServer.connectPipe()); + await connect(client); + + const tab = await addTab(TAB_URL); + const { tabs } = await listTabs(client); + const [, targetFront] = await attachTarget(client, findTab(tabs, TAB_URL)); + + let { workers } = await listWorkers(targetFront); + is(workers.length, 0); + + executeSoon(() => { + evalInTab(tab, "var worker1 = new Worker('" + WORKER1_URL + "');"); + }); + await waitForWorkerListChanged(targetFront); + + ({ workers } = await listWorkers(targetFront)); + is(workers.length, 1); + is(workers[0].url, WORKER1_URL); + + executeSoon(() => { + evalInTab(tab, "var worker2 = new Worker('" + WORKER2_URL + "');"); + }); + await waitForWorkerListChanged(targetFront); + + ({ workers } = await listWorkers(targetFront)); + is(workers.length, 2); + is(workers[0].url, WORKER1_URL); + is(workers[1].url, WORKER2_URL); + + executeSoon(() => { + evalInTab(tab, "worker1.terminate()"); + }); + await waitForWorkerListChanged(targetFront); + + ({ workers } = await listWorkers(targetFront)); + is(workers.length, 1); + is(workers[0].url, WORKER2_URL); + + executeSoon(() => { + evalInTab(tab, "worker2.terminate()"); + }); + await waitForWorkerListChanged(targetFront); + + ({ workers } = await listWorkers(targetFront)); + is(workers.length, 0); + + await close(client); + finish(); +}); diff --git a/devtools/client/debugger/test/mochitest/browser_dbg_worker-window.js b/devtools/client/shared/test/browser_dbg_worker-window.js similarity index 62% rename from devtools/client/debugger/test/mochitest/browser_dbg_worker-window.js rename to devtools/client/shared/test/browser_dbg_worker-window.js index 4a708d6b0c8a..ac0cdee2fb77 100644 --- a/devtools/client/debugger/test/mochitest/browser_dbg_worker-window.js +++ b/devtools/client/shared/test/browser_dbg_worker-window.js @@ -3,13 +3,19 @@ "use strict"; +// Import helpers for the workers +/* import-globals-from helper_workers.js */ +Services.scriptloader.loadSubScript( + "chrome://mochitests/content/browser/devtools/client/shared/test/helper_workers.js", + this); + // The following "connectionClosed" rejection should not be left uncaught. This // test has been whitelisted until the issue is fixed. ChromeUtils.import("resource://testing-common/PromiseTestUtils.jsm", this); PromiseTestUtils.expectUncaughtRejection(/[object Object]/); -var TAB_URL = EXAMPLE_URL + "doc_WorkerTargetActor.attachThread-tab.html"; -var WORKER_URL = "code_WorkerTargetActor.attachThread-worker.js"; +const TAB_URL = EXAMPLE_URL + "doc_WorkerTargetActor.attachThread-tab.html"; +const WORKER_URL = "code_WorkerTargetActor.attachThread-worker.js"; add_task(async function() { await pushPrefs(["devtools.scratchpad.enabled", true]); @@ -17,21 +23,21 @@ add_task(async function() { DebuggerServer.init(); DebuggerServer.registerAllActors(); - let client = new DebuggerClient(DebuggerServer.connectPipe()); + const client = new DebuggerClient(DebuggerServer.connectPipe()); await connect(client); - let tab = await addTab(TAB_URL); - let { tabs } = await listTabs(client); - let [, targetFront] = await attachTarget(client, findTab(tabs, TAB_URL)); + const tab = await addTab(TAB_URL); + const { tabs } = await listTabs(client); + const [, targetFront] = await attachTarget(client, findTab(tabs, TAB_URL)); await listWorkers(targetFront); await createWorkerInTab(tab, WORKER_URL); - let { workers } = await listWorkers(targetFront); - let [, workerTargetFront] = await attachWorker(targetFront, + const { workers } = await listWorkers(targetFront); + const [, workerTargetFront] = await attachWorker(targetFront, findWorker(workers, WORKER_URL)); - let toolbox = await gDevTools.showToolbox(TargetFactory.forWorker(workerTargetFront), + const toolbox = await gDevTools.showToolbox(TargetFactory.forWorker(workerTargetFront), "jsdebugger", Toolbox.HostType.WINDOW); @@ -48,8 +54,8 @@ add_task(async function() { ok(toolbox.win.parent.document.title.includes(WORKER_URL), "worker URL in host title"); - let toolTabs = toolbox.doc.querySelectorAll(".devtools-tab"); - let activeTools = [...toolTabs].map(tab=>tab.getAttribute("data-id")); + const toolTabs = toolbox.doc.querySelectorAll(".devtools-tab"); + const activeTools = [...toolTabs].map(toolTab => toolTab.getAttribute("data-id")); is(activeTools.join(","), "webconsole,jsdebugger,scratchpad", "Correct set of tools supported by worker"); diff --git a/devtools/client/shared/test/code_listworkers-worker1.js b/devtools/client/shared/test/code_listworkers-worker1.js new file mode 100644 index 000000000000..87c800f3c7f6 --- /dev/null +++ b/devtools/client/shared/test/code_listworkers-worker1.js @@ -0,0 +1,3 @@ +"use strict"; + +self.onmessage = function() {}; diff --git a/devtools/client/shared/test/code_listworkers-worker2.js b/devtools/client/shared/test/code_listworkers-worker2.js new file mode 100644 index 000000000000..87c800f3c7f6 --- /dev/null +++ b/devtools/client/shared/test/code_listworkers-worker2.js @@ -0,0 +1,3 @@ +"use strict"; + +self.onmessage = function() {}; diff --git a/devtools/client/debugger/test/mochitest/doc_event-listeners-01.html b/devtools/client/shared/test/doc_event-listeners-01.html similarity index 79% rename from devtools/client/debugger/test/mochitest/doc_event-listeners-01.html rename to devtools/client/shared/test/doc_event-listeners-01.html index 5d518ba86b6b..85857702addf 100644 --- a/devtools/client/debugger/test/mochitest/doc_event-listeners-01.html +++ b/devtools/client/shared/test/doc_event-listeners-01.html @@ -12,10 +12,12 @@ diff --git a/devtools/client/debugger/test/mochitest/doc_inline-debugger-statement.html b/devtools/client/shared/test/doc_inline-debugger-statement.html similarity index 95% rename from devtools/client/debugger/test/mochitest/doc_inline-debugger-statement.html rename to devtools/client/shared/test/doc_inline-debugger-statement.html index 406e9d9da5ed..f448a939cbd2 100644 --- a/devtools/client/debugger/test/mochitest/doc_inline-debugger-statement.html +++ b/devtools/client/shared/test/doc_inline-debugger-statement.html @@ -12,6 +12,7 @@