From 6bf0a5cb5034a7e684dcc3500e841785237ce2dd Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sun, 7 Apr 2024 19:32:43 +0200 Subject: Adding upstream version 1:115.7.0. Signed-off-by: Daniel Baumann --- .../test/browser/browser_ext_tabs_move_array.js | 95 ++++++++++++++++++++++ 1 file changed, 95 insertions(+) create mode 100644 browser/components/extensions/test/browser/browser_ext_tabs_move_array.js (limited to 'browser/components/extensions/test/browser/browser_ext_tabs_move_array.js') diff --git a/browser/components/extensions/test/browser/browser_ext_tabs_move_array.js b/browser/components/extensions/test/browser/browser_ext_tabs_move_array.js new file mode 100644 index 0000000000..539c60c232 --- /dev/null +++ b/browser/components/extensions/test/browser/browser_ext_tabs_move_array.js @@ -0,0 +1,95 @@ +/* -*- Mode: indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* vim: set sts=2 sw=2 et tw=80: */ +"use strict"; + +add_task(async function moveMultiple() { + let tabs = []; + for (let k of [1, 2, 3, 4]) { + let tab = await BrowserTestUtils.openNewForegroundTab( + window.gBrowser, + `http://example.com/?${k}` + ); + tabs.push(tab); + } + + let extension = ExtensionTestUtils.loadExtension({ + manifest: { permissions: ["tabs"] }, + background: async function () { + function num(url) { + return parseInt(url.slice(-1), 10); + } + + async function check(expected) { + let tabs = await browser.tabs.query({ url: "http://example.com/*" }); + let endings = tabs.map(tab => num(tab.url)); + browser.test.assertTrue( + expected.every((v, i) => v === endings[i]), + `Tab order should be ${expected}, got ${endings}.` + ); + } + + async function reset() { + let tabs = await browser.tabs.query({ url: "http://example.com/*" }); + await browser.tabs.move( + tabs.sort((a, b) => num(a.url) - num(b.url)).map(tab => tab.id), + { index: 0 } + ); + } + + async function move(moveIndexes, moveTo) { + let tabs = await browser.tabs.query({ url: "http://example.com/*" }); + await browser.tabs.move( + moveIndexes.map(e => tabs[e - 1].id), + { + index: moveTo, + } + ); + } + + let tests = [ + { move: [2], index: 0, result: [2, 1, 3, 4] }, + { move: [2], index: -1, result: [1, 3, 4, 2] }, + // Start -> After first tab -> After second tab + { move: [4, 3], index: 0, result: [4, 3, 1, 2] }, + // [1, 2, 3, 4] -> [1, 4, 2, 3] -> [1, 4, 3, 2] + { move: [4, 3], index: 1, result: [1, 4, 3, 2] }, + // [1, 2, 3, 4] -> [2, 3, 1, 4] -> [3, 1, 2, 4] + { move: [1, 2], index: 2, result: [3, 1, 2, 4] }, + // [1, 2, 3, 4] -> [1, 2, 4, 3] -> [2, 4, 1, 3] + { move: [4, 1], index: 2, result: [2, 4, 1, 3] }, + // [1, 2, 3, 4] -> [2, 3, 1, 4] -> [2, 3, 1, 4] + { move: [1, 4], index: 2, result: [2, 3, 1, 4] }, + ]; + + for (let test of tests) { + await reset(); + await move(test.move, test.index); + await check(test.result); + } + + let firstId = ( + await browser.tabs.query({ + url: "http://example.com/*", + }) + )[0].id; + // Assuming that tab.id of 12345 does not exist. + await browser.test.assertRejects( + browser.tabs.move([firstId, 12345], { index: -1 }), + /Invalid tab/, + "Should receive invalid tab error" + ); + // The first argument got moved, the second on failed. + await check([2, 3, 1, 4]); + + browser.test.notifyPass("tabs.move"); + }, + }); + + await extension.startup(); + await extension.awaitFinish("tabs.move"); + await extension.unload(); + + for (let tab of tabs) { + BrowserTestUtils.removeTab(tab); + } +}); -- cgit v1.2.3