summaryrefslogtreecommitdiffstats
path: root/comm/mail/test/browser/search-window/browser_searchFromSyntheticView.js
diff options
context:
space:
mode:
Diffstat (limited to 'comm/mail/test/browser/search-window/browser_searchFromSyntheticView.js')
-rw-r--r--comm/mail/test/browser/search-window/browser_searchFromSyntheticView.js110
1 files changed, 110 insertions, 0 deletions
diff --git a/comm/mail/test/browser/search-window/browser_searchFromSyntheticView.js b/comm/mail/test/browser/search-window/browser_searchFromSyntheticView.js
new file mode 100644
index 0000000000..254ede5c17
--- /dev/null
+++ b/comm/mail/test/browser/search-window/browser_searchFromSyntheticView.js
@@ -0,0 +1,110 @@
+/* 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 {
+ add_message_sets_to_folders,
+ be_in_folder,
+ create_folder,
+ create_thread,
+ delete_messages,
+ get_about_3pane,
+ inboxFolder,
+} = ChromeUtils.import(
+ "resource://testing-common/mozmill/FolderDisplayHelpers.jsm"
+);
+const { SyntheticPartLeaf } = ChromeUtils.import(
+ "resource://testing-common/mailnews/MessageGenerator.jsm"
+);
+const { GlodaMsgIndexer } = ChromeUtils.import(
+ "resource:///modules/gloda/IndexMsg.jsm"
+);
+
+/**
+ * Tests the SearchDialog displays a folder when opened from a synthetic view.
+ * See bug 1664761 and bug 1248522.
+ */
+add_task(async function testSearchDialogFolderSelectedFromSyntheticView() {
+ // Make sure the whole test runs with an unthreaded view in all folders.
+ Services.prefs.setIntPref("mailnews.default_view_flags", 0);
+
+ let folderName = "Test Folder Name";
+ let folder = await create_folder(folderName);
+ let thread = create_thread(3);
+ let term = "atermtosearchfor";
+
+ registerCleanupFunction(async () => {
+ await be_in_folder(inboxFolder);
+ await delete_messages(thread);
+
+ let trash = folder.rootFolder.getFolderWithFlags(Ci.nsMsgFolderFlags.Trash);
+ folder.deleteSelf(null);
+ trash.emptyTrash(null);
+
+ let tabmail = document.querySelector("tabmail");
+ while (tabmail.tabInfo.length > 1) {
+ tabmail.closeTab(1);
+ }
+ Services.prefs.clearUserPref("mailnews.default_view_flags");
+ });
+
+ for (let msg of thread.synMessages) {
+ msg.bodyPart = new SyntheticPartLeaf(term);
+ }
+
+ await be_in_folder(folder);
+ await add_message_sets_to_folders([folder], [thread]);
+
+ await new Promise(callback => {
+ GlodaMsgIndexer.indexFolder(folder, { callback, force: true });
+ });
+
+ let dbView = get_about_3pane().gDBView;
+ await TestUtils.waitForCondition(
+ () =>
+ thread.synMessages.every((_, i) =>
+ window.Gloda.isMessageIndexed(dbView.getMsgHdrAt(i))
+ ),
+ "messages were not indexed in time"
+ );
+
+ let searchInput = window.document.querySelector("#searchInput");
+ searchInput.value = term;
+ EventUtils.synthesizeMouseAtCenter(searchInput, {}, window);
+ EventUtils.synthesizeKey("VK_RETURN", {}, window);
+
+ let tab = document.querySelector(
+ "tabmail>tabbox>tabpanels>vbox[selected=true]"
+ );
+
+ let iframe = tab.querySelector("iframe");
+ await BrowserTestUtils.waitForEvent(iframe.contentWindow, "load");
+
+ let browser = iframe.contentDocument.querySelector("browser");
+ await TestUtils.waitForCondition(
+ () =>
+ browser.contentWindow.FacetContext &&
+ browser.contentWindow.FacetContext.rootWin != null,
+ "reachOutAndTouchFrame() did not run in time"
+ );
+
+ browser.contentDocument.querySelector(".message-subject").click();
+
+ let dialogPromise = BrowserTestUtils.domWindowOpened(null, async win => {
+ await BrowserTestUtils.waitForEvent(win, "load");
+ return (
+ win.document.documentURI ===
+ "chrome://messenger/content/SearchDialog.xhtml"
+ );
+ });
+ document.querySelector("#searchMailCmd").click();
+
+ let dialogWindow = await dialogPromise;
+ let selectedFolder =
+ dialogWindow.document.querySelector("#searchableFolders").label;
+
+ Assert.ok(selectedFolder.includes(folderName), "a folder is selected");
+ dialogWindow.close();
+});