gecko-dev/addon-sdk/source/test/test-tab-events.js

176 lines
5.5 KiB
JavaScript

/* 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/. */
"use strict";
const { Loader } = require("sdk/test/loader");
const utils = require("sdk/tabs/utils");
const { open, close } = require("sdk/window/helpers");
const { getMostRecentBrowserWindow } = require("sdk/window/utils");
const { events } = require("sdk/tab/events");
const { on, off } = require("sdk/event/core");
const { resolve } = require("sdk/core/promise");
let isFennec = require("sdk/system/xul-app").is("Fennec");
function test(scenario, currentWindow) {
let useActiveWindow = isFennec || currentWindow;
return function(assert, done) {
let actual = [];
function handler(event) actual.push(event)
let win = useActiveWindow ? resolve(getMostRecentBrowserWindow()) :
open(null, {
features: { private: true, toolbar:true, chrome: true }
});
let window = null;
win.then(function(w) {
window = w;
on(events, "data", handler);
return scenario(assert, window, actual);
}).then(function() {
off(events, "data", handler);
return useActiveWindow ? null : close(window);
}).then(done, assert.fail);
}
}
exports["test current window"] = test(function(assert, window, events) {
// Just making sure that tab events work for already opened tabs not only
// for new windows.
let tab = utils.openTab(window, 'data:text/plain,open');
utils.closeTab(tab);
let [open, select, close] = events;
assert.equal(open.type, "TabOpen");
assert.equal(open.target, tab);
assert.equal(select.type, "TabSelect");
assert.equal(select.target, tab);
assert.equal(close.type, "TabClose");
assert.equal(close.target, tab);
});
exports["test open"] = test(function(assert, window, events) {
let tab = utils.openTab(window, 'data:text/plain,open');
let [open, select] = events;
assert.equal(open.type, "TabOpen");
assert.equal(open.target, tab);
assert.equal(select.type, "TabSelect");
assert.equal(select.target, tab);
});
exports["test open -> close"] = test(function(assert, window, events) {
// First tab is useless we just open it so that closing second tab won't
// close window on some platforms.
let _ = utils.openTab(window, 'daat:text/plain,ignore');
let tab = utils.openTab(window, 'data:text/plain,open-close');
utils.closeTab(tab);
let [_open, _select, open, select, close] = events;
assert.equal(open.type, "TabOpen");
assert.equal(open.target, tab);
assert.equal(select.type, "TabSelect");
assert.equal(select.target, tab);
assert.equal(close.type, "TabClose");
assert.equal(close.target, tab);
});
exports["test open -> open -> select"] = test(function(assert, window, events) {
let tab1 = utils.openTab(window, 'data:text/plain,Tab-1');
let tab2 = utils.openTab(window, 'data:text/plain,Tab-2');
utils.activateTab(tab1, window);
let [open1, select1, open2, select2, select3] = events;
// Open first tab
assert.equal(open1.type, "TabOpen", "first tab opened")
assert.equal(open1.target, tab1, "event.target is first tab")
assert.equal(select1.type, "TabSelect", "first tab seleceted")
assert.equal(select1.target, tab1, "event.target is first tab")
// Open second tab
assert.equal(open2.type, "TabOpen", "second tab opened");
assert.equal(open2.target, tab2, "event.target is second tab");
assert.equal(select2.type, "TabSelect", "second tab seleceted");
assert.equal(select2.target, tab2, "event.target is second tab");
// Select first tab
assert.equal(select3.type, "TabSelect", "tab seleceted");
assert.equal(select3.target, tab1, "event.target is first tab");
});
exports["test open -> pin -> unpin"] = test(function(assert, window, events) {
let tab = utils.openTab(window, 'data:text/plain,pin-unpin');
utils.pin(tab);
utils.unpin(tab);
let [open, select, move, pin, unpin] = events;
assert.equal(open.type, "TabOpen");
assert.equal(open.target, tab);
assert.equal(select.type, "TabSelect");
assert.equal(select.target, tab);
if (isFennec) {
assert.pass("Tab pin / unpin is not supported by Fennec");
}
else {
assert.equal(move.type, "TabMove");
assert.equal(move.target, tab);
assert.equal(pin.type, "TabPinned");
assert.equal(pin.target, tab);
assert.equal(unpin.type, "TabUnpinned");
assert.equal(unpin.target, tab);
}
});
exports["test open -> open -> move "] = test(function(assert, window, events) {
let tab1 = utils.openTab(window, 'data:text/plain,Tab-1');
let tab2 = utils.openTab(window, 'data:text/plain,Tab-2');
utils.move(tab1, 2);
let [open1, select1, open2, select2, move] = events;
// Open first tab
assert.equal(open1.type, "TabOpen", "first tab opened");
assert.equal(open1.target, tab1, "event.target is first tab");
assert.equal(select1.type, "TabSelect", "first tab seleceted")
assert.equal(select1.target, tab1, "event.target is first tab");
// Open second tab
assert.equal(open2.type, "TabOpen", "second tab opened");
assert.equal(open2.target, tab2, "event.target is second tab");
assert.equal(select2.type, "TabSelect", "second tab seleceted");
assert.equal(select2.target, tab2, "event.target is second tab");
if (isFennec) {
assert.pass("Tab index changes not supported on Fennec yet")
}
else {
// Move first tab
assert.equal(move.type, "TabMove", "tab moved");
assert.equal(move.target, tab1, "event.target is first tab");
}
});
require("test").run(exports);