diff --git a/addon-sdk/source/lib/sdk/deprecated/unit-test-finder.js b/addon-sdk/source/lib/sdk/deprecated/unit-test-finder.js index 368efdcc6d3f8..750292c011158 100644 --- a/addon-sdk/source/lib/sdk/deprecated/unit-test-finder.js +++ b/addon-sdk/source/lib/sdk/deprecated/unit-test-finder.js @@ -10,7 +10,11 @@ module.metadata = { const file = require("../io/file"); const memory = require('./memory'); const { Loader } = require("../test/loader"); -const cuddlefish = require("../loader/cuddlefish"); + +const { isNative } = require('@loader/options'); + +const cuddlefish = isNative ? require("toolkit/loader") : require("../loader/cuddlefish"); + const { defer, resolve } = require("../core/promise"); const { getAddon } = require("../addon/installer"); const { id } = require("sdk/self"); @@ -22,7 +26,7 @@ const { AddonManager } = Cu.import("resource://gre/modules/AddonManager.jsm", {} var ios = Cc['@mozilla.org/network/io-service;1'] .getService(Ci.nsIIOService); -const TEST_REGEX = /(([^\/]+\/)(?:lib\/)?)(tests?\/test-[^\.\/]+)\.js$/; +const TEST_REGEX = /(([^\/]+\/)(?:lib\/)?)?(tests?\/test-[^\.\/]+)\.js$/; const { mapcat, map, filter, fromEnumerator } = require("sdk/util/sequence"); @@ -54,8 +58,9 @@ const getSuites = function getSuites({ id }) { let file = xpiURI.QueryInterface(Ci.nsIFileURL).file; let suites = []; let addEntry = (entry) => { - if (TEST_REGEX.test(entry)) { - let suite = RegExp.$2 + RegExp.$3; + let pass = TEST_REGEX.test(entry); + if (pass) { + let suite = (isNative ? "./" : "") + RegExp.$2 + RegExp.$3; suites.push(suite); } } diff --git a/addon-sdk/source/lib/sdk/deprecated/unit-test.js b/addon-sdk/source/lib/sdk/deprecated/unit-test.js index fb615653e7df3..7fef7ca82592d 100644 --- a/addon-sdk/source/lib/sdk/deprecated/unit-test.js +++ b/addon-sdk/source/lib/sdk/deprecated/unit-test.js @@ -12,7 +12,7 @@ const timer = require("../timers"); var cfxArgs = require("@test/options"); const { getTabs, getURI } = require("../tabs/utils"); const { windows, isBrowser } = require("../window/utils"); -const { defer } = require("../core/promise"); +const { defer, all } = require("../core/promise"); const findAndRunTests = function findAndRunTests(options) { var TestFinder = require("./unit-test-finder").TestFinder; @@ -285,43 +285,58 @@ TestRunner.prototype = { } let wins = windows(null, { includePrivate: true }); - let tabs = []; - for (let win of wins.filter(isBrowser)) { - for (let tab of getTabs(win)) { - tabs.push(tab); + let winPromises = wins.map(win => { + let { promise, resolve } = defer(); + if (["interactive", "complete"].indexOf(win.document.readyState) >= 0) { + resolve() } - } + else { + win.addEventListener("DOMContentLoaded", function onLoad() { + win.removeEventListener("DOMContentLoaded", onLoad, false); + resolve(); + }, false); + } + return promise; + }); - if (wins.length != 1) - this.fail("Should not be any unexpected windows open"); - if (tabs.length != 1) - this.fail("Should not be any unexpected tabs open"); - if (tabs.length != 1 || wins.length != 1) { - console.log("Windows open:"); - for (let win of wins) { - if (isBrowser(win)) { - tabs = getTabs(win); - console.log(win.location + " - " + tabs.map(getURI).join(", ")); + all(winPromises).then(_ => { + let tabs = []; + for (let win of wins.filter(isBrowser)) { + for (let tab of getTabs(win)) { + tabs.push(tab); } - else { - console.log(win.location); + } + + if (wins.length != 1) + this.fail("Should not be any unexpected windows open"); + if (tabs.length != 1) + this.fail("Should not be any unexpected tabs open"); + if (tabs.length != 1 || wins.length != 1) { + console.log("Windows open:"); + for (let win of wins) { + if (isBrowser(win)) { + tabs = getTabs(win); + console.log(win.location + " - " + tabs.map(getURI).join(", ")); + } + else { + console.log(win.location); + } } } - } - this.testRunSummary.push({ - name: this.test.name, - passed: this.test.passed, - failed: this.test.failed, - errors: [error for (error in this.test.errors)].join(", ") + this.testRunSummary.push({ + name: this.test.name, + passed: this.test.passed, + failed: this.test.failed, + errors: [error for (error in this.test.errors)].join(", ") + }); + + if (this.onDone !== null) { + let onDone = this.onDone; + this.onDone = null; + timer.setTimeout(_ => onDone(this), 0); + } }); - - if (this.onDone !== null) { - var onDone = this.onDone; - var self = this; - this.onDone = null; - timer.setTimeout(function() { onDone(self); }, 0); - } } },