Skip to content

Instantly share code, notes, and snippets.

@gregglind
Last active August 29, 2015 14:06
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save gregglind/62d8ee2bd517a408c77d to your computer and use it in GitHub Desktop.
Save gregglind/62d8ee2bd517a408c77d to your computer and use it in GitHub Desktop.
{
"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)};
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment