diff options
Diffstat (limited to 'comm/mail/components/im/test/browser/browser_tooltips.js')
-rw-r--r-- | comm/mail/components/im/test/browser/browser_tooltips.js | 194 |
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; +} |