cfx test -v
New style done()
in jetpack test library testing assumes that the ui is 'clean', which means:
- at most one tab
- at most one window
cfx test -v
New style done()
in jetpack test library testing assumes that the ui is 'clean', which means:
{ | |
"id": "1tab1window@jetpack", | |
"author": "Gregg Lind <glind@mozilla.com>", | |
"homepage": "https://gist.github.com/62d8ee2bd517a408c77d", | |
"description": "re: https://bugzilla.mozilla.org/show_bug.cgi?id=1048427", | |
"tests": "." | |
} |
/* This Source Code Form is subject to the terms of the Mozilla Public | |
* License, v. 2.0. If a copy of the MPL was not distributed with this file, | |
* You can obtain one at http://mozilla.org/MPL/2.0/. */ | |
/*jshint forin:true, noarg:false, noempty:true, eqeqeq:true, bitwise:true, | |
strict:true, undef:true, curly:false, browser:true, | |
unused:true, | |
indent:2, maxerr:50, devel:true, node:true, boss:true, white:true, | |
globalstrict:true, nomen:false, newcap:true, esnext: true, moz: true */ | |
/*global */ | |
"use strict"; | |
const utils = require("./utils-for-testing"); | |
const tabs = require("sdk/tabs"); | |
const promises = require("sdk/core/promise"); | |
const { defer, resolve } = promises; | |
const { extend } = require("sdk/util/object"); | |
// https://developer.mozilla.org/en-US/Add-ons/SDK/High-Level_APIs/tabs#open%28options%29 | |
let opentab = function (options) { | |
let { promise, resolve } = defer(); | |
options = options || {}; | |
if (options.onOpen) { | |
throw Error("opentab options can't have onOpen, or promise won't resolve."); | |
} | |
let newopts = extend({ | |
url: "about:blank", | |
onOpen: function onOpen(tab) { | |
resolve(true); | |
} | |
}, options); | |
tabs.open(newopts); | |
return promise; | |
}; | |
exports["test tabs1_windows1"] = function (assert, done) { | |
resolve(true).then( | |
() => opentab()).then( | |
() => opentab({inNewWindow: true})).then( | |
() => opentab({inNewWindow: true})).then( | |
() => opentab()).then( | |
() => assert.equal(tabs.length, 5, "5 tabs as expected")).then( | |
utils.tabs1_windows1).then( | |
() => { | |
assert.pass("tabs1_windows1 works"); | |
assert.ok(tabs.length <= 1, "at most 1 tab"); | |
done(); | |
} | |
); | |
}; | |
const TEST_OSX= false; | |
if (TEST_OSX) { | |
// OSX Firefox can got to 0 tabs. This test doesn't work right though. | |
exports["test zero tabs will done"] = function (assert, done) { | |
assert.pass(""); | |
utils.tabs1_windows1().then( | |
() => { | |
console.log("tabs", tabs.length); | |
if (tabs.length) { | |
// | |
tabs[0].close( | |
() => { | |
assert.ok(tabs.length === 0, "no tabs open"); | |
done(); | |
} | |
); | |
} | |
}); | |
}; | |
} | |
require("sdk/test").run(exports); | |
/* This Source Code Form is subject to the terms of the Mozilla Public | |
* License, v. 2.0. If a copy of the MPL was not distributed with this file, | |
* You can obtain one at http://mozilla.org/MPL/2.0/. */ | |
/*jshint forin:true, noarg:false, noempty:true, eqeqeq:true, bitwise:true, | |
strict:true, undef:true, curly:false, browser:true, | |
unused:true, | |
indent:2, maxerr:50, devel:true, node:true, boss:true, white:true, | |
globalstrict:true, nomen:false, newcap:true, esnext: true, moz: true */ | |
/*global */ | |
"use strict"; | |
const promises = require("sdk/core/promise"); | |
const { defer, resolve } = promises; | |
const tabs = require("sdk/tabs"); | |
const browserWindows = require("sdk/windows").browserWindows; | |
const timers = require("sdk/timers"); | |
/** Get down to at most 1 window with at most 1 tab | |
* | |
* resolves: true when condition is first reached | |
*/ | |
let tabs1_windows1 = exports.tabs1_windows1 = function () { | |
let { promise, resolve } = defer(); | |
let closeOrResolve = function () { | |
if (browserWindows.length > 1) { | |
//console.log("closing a window"); | |
browserWindows[1].close(closeOrResolve); | |
} else { | |
if (tabs.length > 1) { | |
//console.log("closing a tab"); | |
tabs[1].close(closeOrResolve); | |
} else { | |
console.log("number of tabs = ", tabs.length); | |
resolve(true); | |
} | |
} | |
}; | |
closeOrResolve(); | |
return promise; | |
}; | |
/** wraps test 'done' functions, to ensure clean. | |
* usage: | |
* exports['test something'] = function (assert, done) { | |
* done = doneclean(done); | |
* // test some things. | |
* assert.ok(''); | |
* done(); | |
* }; | |
*/ | |
exports.doneclean = function doneclean (done_fn) { | |
return function () {tabs1_windows1().then(done_fn)}; | |
}; | |