diff options
Diffstat (limited to 'comm/mail/test/browser/folder-display/browser_rightClickMiddleClickFolders.js')
-rw-r--r-- | comm/mail/test/browser/folder-display/browser_rightClickMiddleClickFolders.js | 276 |
1 files changed, 276 insertions, 0 deletions
diff --git a/comm/mail/test/browser/folder-display/browser_rightClickMiddleClickFolders.js b/comm/mail/test/browser/folder-display/browser_rightClickMiddleClickFolders.js new file mode 100644 index 0000000000..5c69265127 --- /dev/null +++ b/comm/mail/test/browser/folder-display/browser_rightClickMiddleClickFolders.js @@ -0,0 +1,276 @@ +/* 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/. */ + +/* + * Test the many horrors involving right-clicks, middle clicks, and + * selections... on folders! + */ + +"use strict"; + +var { + assert_folder_displayed, + assert_folder_selected, + assert_folder_selected_and_displayed, + assert_folders_selected_and_displayed, + assert_selected_tab, + be_in_folder, + close_popup, + close_tab, + create_folder, + make_message_sets_in_folders, + mc, + middle_click_on_folder, + reset_context_menu_background_tabs, + right_click_on_folder, + select_click_folder, + select_shift_click_folder, + set_context_menu_background_tabs, + switch_tab, +} = ChromeUtils.import( + "resource://testing-common/mozmill/FolderDisplayHelpers.jsm" +); + +var folderA, folderB, folderC; + +add_setup(async function () { + folderA = await create_folder("RightClickMiddleClickFoldersA"); + folderB = await create_folder("RightClickMiddleClickFoldersB"); + folderC = await create_folder("RightClickMiddleClickFoldersC"); + + // We aren't really interested in the messages the folders contain, but just + // for appearance's sake, add a message to each folder + + await make_message_sets_in_folders([folderA], [{ count: 1 }]); + await make_message_sets_in_folders([folderB], [{ count: 1 }]); + await make_message_sets_in_folders([folderC], [{ count: 1 }]); +}); + +/** + * One-thing selected, right-click on something else. + */ +add_task(async function test_right_click_folder_with_one_thing_selected() { + select_click_folder(folderB); + assert_folder_selected_and_displayed(folderB); + + await right_click_on_folder(folderA); + assert_folder_selected(folderA); + assert_folder_displayed(folderB); + + await close_popup(mc, getFoldersContext()); + assert_folder_selected_and_displayed(folderB); +}).skip(); + +/** + * Many things selected, right-click on something that is not in that selection. + */ +add_task(async function test_right_click_folder_with_many_things_selected() { + select_click_folder(folderA); + select_shift_click_folder(folderB); + assert_folders_selected_and_displayed(folderA, folderB); + + await right_click_on_folder(folderC); + assert_folder_selected(folderC); + assert_folder_displayed(folderA); + + await close_popup(mc, getFoldersContext()); + assert_folders_selected_and_displayed(folderA, folderB); +}).skip(); + +/** + * One thing selected, right-click on that. + */ +add_task(async function test_right_click_folder_on_existing_single_selection() { + select_click_folder(folderA); + assert_folders_selected_and_displayed(folderA); + + await right_click_on_folder(folderA); + assert_folders_selected_and_displayed(folderA); + + await close_popup(mc, getFoldersContext()); + assert_folders_selected_and_displayed(folderA); +}); + +/** + * Many things selected, right-click somewhere in the selection. + */ +add_task(async function test_right_click_folder_on_existing_multi_selection() { + select_click_folder(folderB); + select_shift_click_folder(folderC); + assert_folders_selected_and_displayed(folderB, folderC); + + await right_click_on_folder(folderC); + assert_folders_selected_and_displayed(folderB, folderC); + + await close_popup(mc, getFoldersContext()); + assert_folders_selected_and_displayed(folderB, folderC); +}).skip(); + +/** + * One-thing selected, middle-click on something else. + */ +async function _middle_click_folder_with_one_thing_selected_helper( + aBackground +) { + select_click_folder(folderB); + assert_folder_selected_and_displayed(folderB); + + let originalTab = mc.window.document.getElementById("tabmail").currentTabInfo; + let [newTab] = middle_click_on_folder(folderA); + if (aBackground) { + // Make sure we haven't switched to the new tab. + assert_selected_tab(originalTab); + // Now switch to the new tab and check + await switch_tab(newTab); + } + assert_folder_selected_and_displayed(folderA); + close_tab(newTab); + + assert_folder_selected_and_displayed(folderB); +} + +async function _middle_click_folder_with_many_things_selected_helper( + aBackground +) { + select_click_folder(folderB); + select_shift_click_folder(folderC); + assert_folders_selected_and_displayed(folderB, folderC); + + let originalTab = mc.window.document.getElementById("tabmail").currentTabInfo; + let [newTab] = middle_click_on_folder(folderA); + if (aBackground) { + // Make sure we haven't switched to the new tab. + assert_selected_tab(originalTab); + // Now switch to the new tab and check + await switch_tab(newTab); + } + assert_folder_selected_and_displayed(folderA); + close_tab(newTab); + + // XXX Again, this is wrong. We're still giving it a pass because selecting + // both folderB and folderC is currently the same as selecting folderB. + assert_folder_selected_and_displayed(folderB); +} + +/** + * One thing selected, middle-click on that. + */ +async function _middle_click_folder_on_existing_single_selection_helper( + aBackground +) { + select_click_folder(folderC); + assert_folder_selected_and_displayed(folderC); + + let originalTab = mc.window.document.getElementById("tabmail").currentTabInfo; + let [newTab] = middle_click_on_folder(folderC); + if (aBackground) { + // Make sure we haven't switched to the new tab. + assert_selected_tab(originalTab); + // Now switch to the new tab and check + await switch_tab(newTab); + } + assert_folder_selected_and_displayed(folderC); + close_tab(newTab); + + assert_folder_selected_and_displayed(folderC); +} + +/** + * Many things selected, middle-click somewhere in the selection. + */ +async function _middle_click_on_existing_multi_selection_helper(aBackground) { + select_click_folder(folderA); + select_shift_click_folder(folderC); + assert_folders_selected_and_displayed(folderA, folderB, folderC); + + let originalTab = mc.window.document.getElementById("tabmail").currentTabInfo; + let [newTab] = middle_click_on_folder(folderB); + if (aBackground) { + // Make sure we haven't switched to the new tab. + assert_selected_tab(originalTab); + // Now switch to the new tab and check + await switch_tab(newTab); + } + assert_folder_selected_and_displayed(folderB); + close_tab(newTab); + + // XXX Again, this is wrong. We're still giving it a pass because selecting + // folderA through folderC is currently the same as selecting folderA. + assert_folder_selected_and_displayed(folderA); +} + +/** + * Middle click on target folder when a folder is selected and displayed. + */ +async function middle_click_helper(selectedFolder, targetFolder, shiftPressed) { + select_click_folder(selectedFolder); + assert_folders_selected_and_displayed(selectedFolder); + let originalTab = mc.window.document.getElementById("tabmail").currentTabInfo; + + let [newTab] = middle_click_on_folder(targetFolder, shiftPressed); + + if (shiftPressed) { + assert_selected_tab(newTab); + } else { + // Make sure we haven't switched to the new tab. + assert_selected_tab(originalTab); + // Now switch to the new tab and check the tab was switched. + await switch_tab(newTab); + } + close_tab(newTab); + assert_folders_selected_and_displayed(selectedFolder); +} + +add_task(async function middle_click_tests() { + select_click_folder(folderA); + assert_folders_selected_and_displayed(folderA); + + // middle clicks while pressing shift + await middle_click_helper(folderA, folderA, true); + await middle_click_helper(folderA, folderB, true); + + // middle clicks without pressing shift + await middle_click_helper(folderA, folderA, false); + await middle_click_helper(folderA, folderB, false); +}); + +/** + * Generate background and foreground tests for each middle click test. + * + * @param aTests an array of test names + */ +var global = this; +function _generate_background_foreground_tests(aTests) { + for (let test of aTests) { + let helperFunc = global["_" + test + "_helper"]; + global["test_" + test + "_background"] = async function () { + set_context_menu_background_tabs(true); + await helperFunc(true); + reset_context_menu_background_tabs(); + }; + global["test_" + test + "_foreground"] = async function () { + set_context_menu_background_tabs(false); + await helperFunc(false); + reset_context_menu_background_tabs(); + }; + add_task(global[`test_${test}_background`]).skip(); + add_task(global[`test_${test}_foreground`]).skip(); + } +} + +_generate_background_foreground_tests([ + "middle_click_folder_with_nothing_selected", + "middle_click_folder_with_one_thing_selected", + "middle_click_folder_with_many_things_selected", + "middle_click_folder_on_existing_single_selection", +]); + +add_task(() => { + Assert.report( + false, + undefined, + undefined, + "Test ran to completion successfully" + ); +}); |