summaryrefslogtreecommitdiffstats
path: root/comm/mail/components/im/test/browser/browser_tooltips.js
diff options
context:
space:
mode:
Diffstat (limited to 'comm/mail/components/im/test/browser/browser_tooltips.js')
-rw-r--r--comm/mail/components/im/test/browser/browser_tooltips.js194
1 files changed, 194 insertions, 0 deletions
diff --git a/comm/mail/components/im/test/browser/browser_tooltips.js b/comm/mail/components/im/test/browser/browser_tooltips.js
new file mode 100644
index 0000000000..db8a7fd86b
--- /dev/null
+++ b/comm/mail/components/im/test/browser/browser_tooltips.js
@@ -0,0 +1,194 @@
+/* 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/. */
+
+add_task(async function testMUCMessageSenderTooltip() {
+ const account = IMServices.accounts.createAccount(
+ "testuser",
+ "prpl-mochitest"
+ );
+ account.password = "this is a test";
+ account.connect();
+
+ await openChatTab();
+ const conversation = account.prplAccount.wrappedJSObject.makeMUC("tooltips");
+ const convNode = getConversationItem(conversation);
+ ok(convNode);
+
+ await EventUtils.synthesizeMouseAtCenter(convNode, {});
+
+ const chatConv = getChatConversationElement(conversation);
+ ok(chatConv);
+ ok(BrowserTestUtils.is_visible(chatConv));
+ const messageParent = await getChatMessageParent(chatConv);
+
+ conversation.addParticipant("foo", "1");
+ conversation.addParticipant("bar", "2");
+ conversation.addParticipant("loremipsum", "3");
+ conversation.addMessages([
+ // Message without alias
+ {
+ who: "foo",
+ content: "hi",
+ options: {
+ incoming: true,
+ },
+ },
+ // Message with alias
+ {
+ who: "bar",
+ content: "o/",
+ options: {
+ incoming: true,
+ _alias: "Bar",
+ },
+ },
+ // Alias is not directly related to nick
+ {
+ who: "loremipsum",
+ content: "what's up?",
+ options: {
+ incoming: true,
+ _alias: "Dolor sit amet",
+ },
+ },
+ ]);
+ // Wait for at least one event.
+ do {
+ await BrowserTestUtils.waitForEvent(
+ chatConv.convBrowser,
+ "MessagesDisplayed"
+ );
+ } while (chatConv.convBrowser.getPendingMessagesCount() > 0);
+
+ const tooltip = document.getElementById("imTooltip");
+ const tooltipTests = [
+ {
+ messageIndex: 1,
+ who: "foo",
+ alias: "1",
+ displayed: "foo",
+ },
+ {
+ messageIndex: 2,
+ who: "bar",
+ alias: "2",
+ displayed: "Bar",
+ },
+ {
+ messageIndex: 3,
+ who: "loremipsum",
+ alias: "3",
+ displayed: "Dolor sit amet",
+ },
+ ];
+ window.windowUtils.disableNonTestMouseEvents(true);
+ try {
+ for (const testInfo of tooltipTests) {
+ const usernameSelector = `.message:nth-child(${testInfo.messageIndex}) .ib-sender`;
+ const username = messageParent.querySelector(usernameSelector);
+ is(username.textContent, testInfo.displayed);
+
+ let buddyInfo = TestUtils.topicObserved(
+ "user-info-received",
+ (subject, data) => data === testInfo.who
+ );
+ await showTooltip(usernameSelector, tooltip, chatConv.convBrowser);
+
+ is(tooltip.getAttribute("displayname"), testInfo.who);
+ await buddyInfo;
+ is(tooltip.table.querySelector("td").textContent, testInfo.alias);
+ await hideTooltip(tooltip, chatConv.convBrowser);
+ }
+ } finally {
+ window.windowUtils.disableNonTestMouseEvents(false);
+ }
+
+ conversation.close();
+ account.disconnect();
+ IMServices.accounts.deleteAccount(account.id);
+});
+
+add_task(async function testTimestampTooltip() {
+ const account = IMServices.accounts.createAccount(
+ "testuser",
+ "prpl-mochitest"
+ );
+ account.password = "this is a test";
+ account.connect();
+
+ await openChatTab();
+ const conversation = account.prplAccount.wrappedJSObject.makeMUC("tooltips");
+ const convNode = getConversationItem(conversation);
+ ok(convNode);
+
+ await EventUtils.synthesizeMouseAtCenter(convNode, {});
+
+ const chatConv = getChatConversationElement(conversation);
+ ok(chatConv);
+ ok(BrowserTestUtils.is_visible(chatConv));
+
+ const messageTime = Math.floor(Date.now() / 1000);
+
+ conversation.addParticipant("foo", "1");
+ conversation.addMessages([
+ {
+ who: "foo",
+ content: "hi",
+ options: {
+ incoming: true,
+ },
+ time: messageTime,
+ },
+ ]);
+ // Wait for at least one event.
+ do {
+ await BrowserTestUtils.waitForEvent(
+ chatConv.convBrowser,
+ "MessagesDisplayed"
+ );
+ } while (chatConv.convBrowser.getPendingMessagesCount() > 0);
+
+ const tooltip = document.getElementById("imTooltip");
+ window.windowUtils.disableNonTestMouseEvents(true);
+ try {
+ const messageSelector = ".message:nth-child(1)";
+ const dateTimeFormatter = new Services.intl.DateTimeFormat(undefined, {
+ timeStyle: "medium",
+ });
+ const expectedText = dateTimeFormatter.format(new Date(messageTime * 1000));
+
+ await showTooltip(messageSelector, tooltip, chatConv.convBrowser);
+
+ const htmlTooltip = tooltip.querySelector(".htmlTooltip");
+ ok(BrowserTestUtils.is_visible(htmlTooltip));
+ is(htmlTooltip.textContent, expectedText);
+ await hideTooltip(tooltip, chatConv.convBrowser);
+ } finally {
+ window.windowUtils.disableNonTestMouseEvents(false);
+ }
+
+ conversation.close();
+ account.disconnect();
+ IMServices.accounts.deleteAccount(account.id);
+});
+
+async function showTooltip(elementSelector, tooltip, browser) {
+ const popupShown = BrowserTestUtils.waitForEvent(tooltip, "popupshown");
+ await BrowserTestUtils.synthesizeMouseAtCenter(
+ elementSelector,
+ { type: "mousemove" },
+ browser
+ );
+ return popupShown;
+}
+
+async function hideTooltip(tooltip, browser) {
+ const popupHidden = BrowserTestUtils.waitForEvent(tooltip, "popuphidden");
+ await BrowserTestUtils.synthesizeMouseAtCenter(
+ ".message .body",
+ { type: "mousemove" },
+ browser
+ );
+ return popupHidden;
+}