Source code

Revision control

Copy as Markdown

Other Tools

Test Info: Warnings

/* -*- Mode: indent-tabs-mode: nil; js-indent-level: 2 -*- */
/* vim: set sts=2 sw=2 et tw=80: */
/* eslint-disable mozilla/no-arbitrary-setTimeout */
"use strict";
add_task(async function test_onHighlighted() {
let extension = ExtensionTestUtils.loadExtension({
manifest: {
permissions: ["tabs"],
},
background: async function () {
async function expectHighlighted(fn, action) {
let resolve;
let promise = new Promise(r => {
resolve = r;
});
let expected;
let events = [];
let listener = highlightInfo => {
events.push(highlightInfo);
if (expected && expected.length >= events.length) {
resolve();
}
};
browser.tabs.onHighlighted.addListener(listener);
expected = (await fn()) || [];
if (events.length < expected.length) {
await promise;
}
let unexpected = events.splice(expected.length);
browser.test.assertEq(
JSON.stringify(expected),
JSON.stringify(events),
`Should get ${expected.length} expected onHighlighted events when ${action}`
);
if (unexpected.length) {
browser.test.fail(
`${unexpected.length} unexpected onHighlighted events when ${action}: ` +
JSON.stringify(unexpected)
);
}
browser.tabs.onHighlighted.removeListener(listener);
}
let [{ id, windowId }] = await browser.tabs.query({
active: true,
currentWindow: true,
});
let windows = [windowId];
let tabs = [id];
await expectHighlighted(async () => {
let tab = await browser.tabs.create({
active: true,
url: "about:blank?1",
});
tabs.push(tab.id);
return [{ tabIds: [tabs[1]], windowId: windows[0] }];
}, "creating a new active tab");
await expectHighlighted(async () => {
await browser.tabs.update(tabs[0], { active: true });
return [{ tabIds: [tabs[0]], windowId: windows[0] }];
}, "selecting former tab");
await expectHighlighted(async () => {
await browser.tabs.highlight({ tabs: [0, 1] });
return [{ tabIds: [tabs[0], tabs[1]], windowId: windows[0] }];
}, "highlighting both tabs");
await expectHighlighted(async () => {
await browser.tabs.highlight({ tabs: [1, 0] });
return [{ tabIds: [tabs[0], tabs[1]], windowId: windows[0] }];
}, "highlighting same tabs but changing selected one");
await expectHighlighted(async () => {
let tab = await browser.tabs.create({
active: false,
url: "about:blank?2",
});
tabs.push(tab.id);
}, "create a new inactive tab");
await expectHighlighted(async () => {
await browser.tabs.highlight({ tabs: [2, 0, 1] });
return [{ tabIds: [tabs[0], tabs[1], tabs[2]], windowId: windows[0] }];
}, "highlighting all tabs");
await expectHighlighted(async () => {
await browser.tabs.move(tabs[1], { index: 0 });
}, "reordering tabs");
await expectHighlighted(async () => {
await browser.tabs.highlight({ tabs: [0] });
return [{ tabIds: [tabs[1]], windowId: windows[0] }];
}, "highlighting moved tab");
await expectHighlighted(async () => {
await browser.tabs.highlight({ tabs: [0] });
}, "highlighting again");
await expectHighlighted(async () => {
await browser.tabs.highlight({ tabs: [2, 1, 0] });
return [{ tabIds: [tabs[1], tabs[0], tabs[2]], windowId: windows[0] }];
}, "highlighting all tabs");
await expectHighlighted(async () => {
await browser.tabs.highlight({ tabs: [2, 0, 1] });
}, "highlighting same tabs with different order");
await expectHighlighted(async () => {
let window = await browser.windows.create({ tabId: tabs[2] });
windows.push(window.id);
// Bug 1481185: on Chrome it's [tabs[1], tabs[0]] instead of [tabs[0]]
return [
{ tabIds: [tabs[0]], windowId: windows[0] },
{ tabIds: [tabs[2]], windowId: windows[1] },
];
}, "moving selected tab into a new window");
await browser.tabs.remove(tabs.slice(1));
browser.test.notifyPass("test-finished");
},
});
await extension.startup();
await extension.awaitFinish("test-finished");
await extension.unload();
});