summaryrefslogtreecommitdiffstats
path: root/browser/components/extensions/test/browser/browser_ext_tabs_move_array_multiple_windows.js
diff options
context:
space:
mode:
Diffstat (limited to 'browser/components/extensions/test/browser/browser_ext_tabs_move_array_multiple_windows.js')
-rw-r--r--browser/components/extensions/test/browser/browser_ext_tabs_move_array_multiple_windows.js160
1 files changed, 160 insertions, 0 deletions
diff --git a/browser/components/extensions/test/browser/browser_ext_tabs_move_array_multiple_windows.js b/browser/components/extensions/test/browser/browser_ext_tabs_move_array_multiple_windows.js
new file mode 100644
index 0000000000..484197cbc5
--- /dev/null
+++ b/browser/components/extensions/test/browser/browser_ext_tabs_move_array_multiple_windows.js
@@ -0,0 +1,160 @@
+/* Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/ */
+
+"use strict";
+
+add_task(async function moveMultipleWindows() {
+ let extension = ExtensionTestUtils.loadExtension({
+ manifest: { permissions: ["tabs"] },
+ background: async function () {
+ let numToId = new Map();
+ let idToNum = new Map();
+ let windowToInitialTabs = new Map();
+
+ async function createWindow(nums) {
+ let window = await browser.windows.create({
+ url: nums.map(k => `https://example.com/?${k}`),
+ });
+ let tabIds = window.tabs.map(tab => tab.id);
+ windowToInitialTabs.set(window.id, tabIds);
+ for (let i = 0; i < nums.length; ++i) {
+ numToId.set(nums[i], tabIds[i]);
+ idToNum.set(tabIds[i], nums[i]);
+ }
+ return window.id;
+ }
+
+ let win1 = await createWindow([0, 1, 2, 3, 4]);
+ let win2 = await createWindow([5, 6, 7, 8, 9]);
+
+ async function getNums(windowId) {
+ let tabs = await browser.tabs.query({ windowId });
+ return tabs.map(tab => idToNum.get(tab.id));
+ }
+
+ async function check(msg, expected) {
+ let nums1 = getNums(win1);
+ let nums2 = getNums(win2);
+ browser.test.assertEq(
+ JSON.stringify(expected),
+ JSON.stringify({ win1: await nums1, win2: await nums2 }),
+ `Check ${msg}`
+ );
+ }
+
+ async function reset() {
+ for (let [windowId, tabIds] of windowToInitialTabs) {
+ await browser.tabs.move(tabIds, { index: 0, windowId });
+ }
+ }
+
+ async function move(nums, params) {
+ await browser.tabs.move(
+ nums.map(k => numToId.get(k)),
+ params
+ );
+ }
+
+ let tests = [
+ {
+ move: [1, 6],
+ params: { index: 0 },
+ result: { win1: [1, 0, 2, 3, 4], win2: [6, 5, 7, 8, 9] },
+ },
+ {
+ move: [6, 1],
+ params: { index: 0 },
+ result: { win1: [1, 0, 2, 3, 4], win2: [6, 5, 7, 8, 9] },
+ },
+ {
+ move: [1, 6],
+ params: { index: 0, windowId: win2 },
+ result: { win1: [0, 2, 3, 4], win2: [1, 6, 5, 7, 8, 9] },
+ },
+ {
+ move: [6, 1],
+ params: { index: 0, windowId: win2 },
+ result: { win1: [0, 2, 3, 4], win2: [6, 1, 5, 7, 8, 9] },
+ },
+ {
+ move: [1, 6],
+ params: { index: -1 },
+ result: { win1: [0, 2, 3, 4, 1], win2: [5, 7, 8, 9, 6] },
+ },
+ {
+ move: [6, 1],
+ params: { index: -1 },
+ result: { win1: [0, 2, 3, 4, 1], win2: [5, 7, 8, 9, 6] },
+ },
+ {
+ move: [1, 6],
+ params: { index: -1, windowId: win2 },
+ result: { win1: [0, 2, 3, 4], win2: [5, 7, 8, 9, 1, 6] },
+ },
+ {
+ move: [6, 1],
+ params: { index: -1, windowId: win2 },
+ result: { win1: [0, 2, 3, 4], win2: [5, 7, 8, 9, 6, 1] },
+ },
+ {
+ move: [2, 1, 7, 6],
+ params: { index: 3 },
+ result: { win1: [0, 3, 2, 1, 4], win2: [5, 8, 7, 6, 9] },
+ },
+ {
+ move: [1, 2, 3, 4],
+ params: { index: 0, windowId: win2 },
+ result: { win1: [0], win2: [1, 2, 3, 4, 5, 6, 7, 8, 9] },
+ },
+ {
+ move: [0, 1, 2, 3],
+ params: { index: 5, windowId: win2 },
+ result: { win1: [4], win2: [5, 6, 7, 8, 9, 0, 1, 2, 3] },
+ },
+ {
+ move: [1, 2, 3, 4, 5, 6, 7, 8, 9],
+ params: { index: 0, windowId: win2 },
+ result: { win1: [0], win2: [1, 2, 3, 4, 5, 6, 7, 8, 9] },
+ },
+ {
+ move: [5, 6, 7, 8, 9, 0, 1, 2, 3],
+ params: { index: 0, windowId: win2 },
+ result: { win1: [4], win2: [5, 6, 7, 8, 9, 0, 1, 2, 3] },
+ },
+ {
+ move: [5, 1, 6, 2, 7, 3, 8, 4, 9],
+ params: { index: 0, windowId: win2 },
+ result: { win1: [0], win2: [5, 1, 6, 2, 7, 3, 8, 4, 9] },
+ },
+ {
+ move: [5, 1, 6, 2, 7, 3, 8, 4, 9],
+ params: { index: 1, windowId: win2 },
+ result: { win1: [0], win2: [5, 1, 6, 2, 7, 3, 8, 4, 9] },
+ },
+ {
+ move: [5, 1, 6, 2, 7, 3, 8, 4, 9],
+ params: { index: 999, windowId: win2 },
+ result: { win1: [0], win2: [5, 1, 6, 2, 7, 3, 8, 4, 9] },
+ },
+ ];
+
+ const initial = { win1: [0, 1, 2, 3, 4], win2: [5, 6, 7, 8, 9] };
+ await check("initial", initial);
+ for (let test of tests) {
+ browser.test.log(JSON.stringify(test));
+ await move(test.move, test.params);
+ await check("move", test.result);
+ await reset();
+ await check("reset", initial);
+ }
+
+ await browser.windows.remove(win1);
+ await browser.windows.remove(win2);
+ browser.test.notifyPass("tabs.move");
+ },
+ });
+
+ await extension.startup();
+ await extension.awaitFinish("tabs.move");
+ await extension.unload();
+});