[tor-messenger-build/master] Remove upstreamed patches

commit 3b5da55f65f6ac0dc4bc348240e4b3897860e4f9 Author: Arlo Breault <arlolra@gmail.com> Date: Mon Jan 5 11:50:34 2015 -0800 Remove upstreamed patches * These were merged in, https://hg.mozilla.org/comm-central/rev/90bc651566be https://hg.mozilla.org/comm-central/rev/d6f2f1a42c74 https://hg.mozilla.org/users/florian_queze.net/purple/rev/d44192a91176 --- projects/instantbird/config | 2 - .../prepare-messages-for-displaying.patch | 288 --------------- projects/instantbird/test-transformation-api.patch | 367 -------------------- 3 files changed, 657 deletions(-) diff --git a/projects/instantbird/config b/projects/instantbird/config index 66a2a99..cbae1a1 100644 --- a/projects/instantbird/config +++ b/projects/instantbird/config @@ -58,8 +58,6 @@ input_files: pkg_type: src - filename: spi-cacert.der - filename: preferences.patch - - filename: prepare-messages-for-displaying.patch - - filename: test-transformation-api.patch - filename: slashme.patch - filename: irc.patch - filename: xmpp.patch diff --git a/projects/instantbird/prepare-messages-for-displaying.patch b/projects/instantbird/prepare-messages-for-displaying.patch deleted file mode 100644 index c9dc42b..0000000 --- a/projects/instantbird/prepare-messages-for-displaying.patch +++ /dev/null @@ -1,288 +0,0 @@ -# HG changeset patch -# User Arlo Breault <arlolra@gmail.com> -# Date 1417196598 28800 -# Fri Nov 28 09:43:18 2014 -0800 -# Node ID ddcfdad3c07c6304ce3de53f38ba0adec98ea53a -# Parent 523fa3fa1fd619423f7267fdd2b3b215bcb93d1b -Prepare messages for displaying - - * Adds a converse method to prepareForSending. - -Bug: 1071166 - -diff --git a/chat/components/public/imIConversationsService.idl b/chat/components/public/imIConversationsService.idl ---- a/chat/components/public/imIConversationsService.idl -+++ b/chat/components/public/imIConversationsService.idl -@@ -64,16 +64,21 @@ interface imIConversationsService: nsISu - - nsISimpleEnumerator getConversations(); - prplIConversation getConversationById(in unsigned long aId); - prplIConversation getConversationByNameAndAccount(in AUTF8String aName, - in imIAccount aAccount, - in boolean aIsChat); - }; - -+// Because of limitations in libpurple (write_conv is called without context), -+// there's an implicit contract that whatever message string the conversation -+// service passes to a protocol, it'll get back as the originalMessage when -+// "new-text" is notified. This is required for the OTR extensions to work. -+ - // A cancellable outgoing message. Before handing a message off to a protocol, - // the conversation service notifies observers (typically add-ons) of an - // outgoing message, which can be transformed or cancelled. - [scriptable, uuid(4391ba5c-9566-41a9-bb9b-fd0a0a490c2c)] - interface imIOutgoingMessage: nsISupports { - attribute AUTF8String message; - attribute boolean cancelled; - readonly attribute prplIConversation conversation; -diff --git a/chat/components/public/prplIConversation.idl b/chat/components/public/prplIConversation.idl ---- a/chat/components/public/prplIConversation.idl -+++ b/chat/components/public/prplIConversation.idl -@@ -5,16 +5,17 @@ - - #include "nsISupports.idl" - #include "nsISimpleEnumerator.idl" - #include "nsIObserver.idl" - - interface prplIAccountBuddy; - interface imIAccount; - interface imIOutgoingMessage; -+interface imIMessage; - interface nsIURI; - interface nsIDOMDocument; - interface prplIChatRoomFieldValues; - - /* - * This is the XPCOM purple conversation component, a proxy for PurpleConversation. - */ - -@@ -47,16 +48,21 @@ interface prplIConversation: nsISupports - void sendMsg(in AUTF8String aMsg); - - /* Preprocess messages before they are sent (eg. split long messages). - Can return null if no changes are to be made. */ - void prepareForSending(in imIOutgoingMessage aMsg, - [optional] out unsigned long aMsgCount, - [retval, array, size_is(aMsgCount)] out wstring aMsgs); - -+ /* Postprocess messages before they are displayed (eg. escaping). The -+ implementation can set aMsg.displayMessage, otherwise the originalMessage -+ is used. */ -+ void prepareForDisplaying(in imIMessage aMsg); -+ - /* Send information about the current typing state to the server. - aString should contain the content currently in the text field. The - protocol should return the number of characters that can still be typed. */ - long sendTyping(in AUTF8String aString); - const long NO_TYPING_LIMIT = 2147483647; // max int = 2 ^ 31 - 1 - - /* Un-initialize the conversation. Will be called by - purpleCoreService::RemoveConversation when the conversation is -diff --git a/chat/components/src/imConversations.js b/chat/components/src/imConversations.js ---- a/chat/components/src/imConversations.js -+++ b/chat/components/src/imConversations.js -@@ -403,16 +403,17 @@ UIConversation.prototype = { - this._observers = this._observers.filter(function(o) o !== aObserver); - }, - notifyObservers: function(aSubject, aTopic, aData) { - if (aTopic == "new-text") { - aSubject = new imMessage(aSubject); - this.notifyObservers(aSubject, "received-message"); - if (aSubject.cancelled) - return; -+ aSubject.conversation.prepareForDisplaying(aSubject); - - this._messages.push(aSubject); - ++this._unreadMessageCount; - if (aSubject.incoming && !aSubject.system) { - ++this._unreadIncomingMessageCount; - if (!this.isChat || aSubject.containsNick) - ++this._unreadTargetedMessageCount; - } -@@ -430,16 +431,21 @@ UIConversation.prototype = { - if (aSubject.incoming && !aSubject.system && - (!this.isChat || aSubject.containsNick)) { - this.notifyObservers(aSubject, "new-directed-incoming-message", aData); - Services.obs.notifyObservers(aSubject, "new-directed-incoming-message", aData); - } - } - }, - -+ // Used above when notifying of new-texts originating in the -+ // UIConversation. The happens when this.systemMessage() is called. The -+ // conversation for the message is set as the UIConversation. -+ prepareForDisplaying: function(aMsg) {}, -+ - // prplIConvIM - get buddy() this.target.buddy, - get typingState() this.target.typingState, - sendTyping: function(aString) this.target.sendTyping(aString), - - // Chat only - getParticipants: function() this.target.getParticipants(), - get topic() this.target.topic, -diff --git a/chat/modules/jsProtoHelper.jsm b/chat/modules/jsProtoHelper.jsm ---- a/chat/modules/jsProtoHelper.jsm -+++ b/chat/modules/jsProtoHelper.jsm -@@ -477,16 +477,17 @@ const GenericConversationPrototype = { - observer.observe(aSubject, aTopic, aData); - } catch(e) { - this.ERROR(e); - } - } - }, - - prepareForSending: function(aOutgoingMessage, aCount) null, -+ prepareForDisplaying: function(aImMessage) {}, - sendMsg: function(aMsg) { - throw Cr.NS_ERROR_NOT_IMPLEMENTED; - }, - sendTyping: function(aString) Ci.prplIConversation.NO_TYPING_LIMIT, - - close: function() { - Services.obs.notifyObservers(this, "closing-conversation", null); - Services.conversations.removeConversation(this); -diff --git a/chat/protocols/irc/irc.js b/chat/protocols/irc/irc.js ---- a/chat/protocols/irc/irc.js -+++ b/chat/protocols/irc/irc.js -@@ -126,16 +126,20 @@ const GenericIRCConversation = { - getMaxMessageLength: function() { - // Build the shortest possible message that could be sent to other users. - let baseMessage = ":" + this._account._nickname + this._account.prefix + - " " + this._account.buildMessage("PRIVMSG", this.name) + - " :\r\n"; - return this._account.maxMessageLength - - this._account.countBytes(baseMessage); - }, -+ // Apply CTCP formatting before displaying. -+ prepareForDisplaying: function(aMsg) { -+ aMsg.displayMessage = ctcpFormatToHTML(aMsg.displayMessage); -+ }, - prepareForSending: function(aOutgoingMessage, aCount) { - // Split the message by line breaks and send each one individually. - let messages = aOutgoingMessage.message.split(/[\r\n]+/); - - let maxLength = this.getMaxMessageLength(); - - // Attempt to smartly split a string into multiple lines (based on the - // maximum number of characters the message can contain). -@@ -274,24 +278,16 @@ ircChannel.prototype = { - _receivedInitialMode: false, - // For IRC you're not in a channel until the JOIN command is received, open - // all channels (initially) as left. - _left: true, - // True while we are rejoining a channel previously parted by the user. - _rejoined: false, - banMasks: [], - -- // Overwrite the writeMessage function to apply CTCP formatting before -- // display. -- writeMessage: function(aWho, aText, aProperties) { -- GenericConvChatPrototype.writeMessage.call(this, aWho, -- ctcpFormatToHTML(aText), -- aProperties); -- }, -- - // Section 3.2.2 of RFC 2812. - part: function(aMessage) { - let params = [this.name]; - - // If a valid message was given, use it as the part message. - // Otherwise, fall back to the default part message, if it exists. - let msg = aMessage || this._account.getString("partmsg"); - if (msg) -@@ -595,24 +591,16 @@ function ircConversation(aAccount, aName - // Always request the info as it may be out of date. - this._waitingForNick = true; - this.requestBuddyInfo(aName); - } - ircConversation.prototype = { - __proto__: GenericConvIMPrototype, - get buddy() this._account.buddies.get(this.name), - -- // Overwrite the writeMessage function to apply CTCP formatting before -- // display. -- writeMessage: function(aWho, aText, aProperties) { -- GenericConvIMPrototype.writeMessage.call(this, aWho, -- ctcpFormatToHTML(aText), -- aProperties); -- }, -- - unInit: function() { - this.unInitIRCConversation(); - GenericConvIMPrototype.unInit.call(this); - }, - - updateNick: function(aNewNick) { - this._name = aNewNick; - this.notifyObservers(null, "update-conv-title"); -diff --git a/chat/protocols/xmpp/xmpp.jsm b/chat/protocols/xmpp/xmpp.jsm ---- a/chat/protocols/xmpp/xmpp.jsm -+++ b/chat/protocols/xmpp/xmpp.jsm -@@ -32,16 +32,21 @@ XPCOMUtils.defineLazyServiceGetter(this, - XPCOMUtils.defineLazyServiceGetter(this, "UuidGenerator", - "@mozilla.org/uuid-generator;1", - "nsIUUIDGenerator"); - - XPCOMUtils.defineLazyGetter(this, "_", function() - l10nHelper("chrome://chat/locale/xmpp.properties") - ); - -+XPCOMUtils.defineLazyGetter(this, "TXTToHTML", function() { -+ let cs = Cc["@mozilla.org/txttohtmlconv;1"].getService(Ci.mozITXTToHTMLConv); -+ return function(aTxt) cs.scanTXT(aTxt, cs.kEntities); -+}); -+ - /* This is an ordered list, used to determine chat buddy flags: - * index < member -> noFlags - * index = member -> voiced - * moderator -> halfOp - * admin -> op - * owner -> founder - */ - const kRoles = ["outcast", "visitor", "participant", "member", "moderator", -@@ -255,16 +260,23 @@ const XMPPConversationPrototype = { - who = this._account._connection._jid.jid; - if (!who) - who = this._account.name; - let alias = this.account.alias || this.account.statusInfo.displayName; - this.writeMessage(who, aMsg, {outgoing: true, _alias: alias}); - delete this._typingState; - }, - -+ /* Perform entity escaping before displaying the message. We assume incoming -+ messages have already been escaped, and will otherwise be filtered. */ -+ prepareForDisplaying: function(aMsg) { -+ if (aMsg.outgoing && !aMsg.system) -+ aMsg.displayMessage = TXTToHTML(aMsg.displayMessage); -+ }, -+ - /* Called by the account when a messsage is received from the buddy */ - incomingMessage: function(aMsg, aStanza, aDate) { - let from = aStanza.attributes["from"]; - this._targetResource = this._account._parseJID(from).resource; - let flags = {}; - if (aStanza.attributes["type"] == "error") { - aMsg = _("conversation.error.notDelivered", aMsg); - flags.system = true; -@@ -889,19 +901,17 @@ const XMPPAccountPrototype = { - // Prefer HTML (in <html><body>) and use plain text (<body>) as fallback. - let htmlBody = aStanza.getElement(["html", "body"]); - if (htmlBody) - body = htmlBody.innerXML; - else { - // Even if the message is in plain text, the prplIMessage - // should contain a string that's correctly escaped for - // insertion in an HTML document. -- body = Cc["@mozilla.org/txttohtmlconv;1"] -- .getService(Ci.mozITXTToHTMLConv) -- .scanTXT(b.innerText, Ci.mozITXTToHTMLConv.kEntities); -+ body = TXTToHTML(b.innerText); - } - } - if (body) { - let date; - let delay = aStanza.getElement(["delay"]); - if (delay && delay.uri == Stanza.NS.delay) { - if (delay.attributes["stamp"]) - date = new Date(delay.attributes["stamp"]); diff --git a/projects/instantbird/test-transformation-api.patch b/projects/instantbird/test-transformation-api.patch deleted file mode 100644 index f43fcbc..0000000 --- a/projects/instantbird/test-transformation-api.patch +++ /dev/null @@ -1,367 +0,0 @@ -# HG changeset patch -# User Arlo Breault <arlolra@gmail.com> -# Date 1414370632 25200 -# Sun Oct 26 17:43:52 2014 -0700 -# Node ID 49fc79e39b9c292d182a46aa800135bd65b6c38f -# Parent 030063bcb41284997f862b9b2d12e93bfc0b121a -Add tests for new messaging pipeline - - * Tests for bugs 1071166, 1088772, and 983347. - -diff --git a/chat/components/public/imIConversationsService.idl b/chat/components/public/imIConversationsService.idl ---- a/chat/components/public/imIConversationsService.idl -+++ b/chat/components/public/imIConversationsService.idl -@@ -70,29 +70,31 @@ interface imIConversationsService: nsISu - }; - - // Because of limitations in libpurple (write_conv is called without context), - // there's an implicit contract that whatever message string the conversation - // service passes to a protocol, it'll get back as the originalMessage when - // "new-text" is notified. This is required for the OTR extensions to work. - - // A cancellable outgoing message. Before handing a message off to a protocol, --// the conversation service notifies observers (typically add-ons) of an --// outgoing message, which can be transformed or cancelled. -+// the conversation service notifies observers of `preparing-message` and -+// `sending-message` (typically add-ons) of an outgoing message, which can be -+// transformed or cancelled. - [scriptable, uuid(4391ba5c-9566-41a9-bb9b-fd0a0a490c2c)] - interface imIOutgoingMessage: nsISupports { - attribute AUTF8String message; - attribute boolean cancelled; - readonly attribute prplIConversation conversation; - }; - - // A cancellable message to be displayed. When the conversation service is --// notified of a new-text (ie. an incoming or outgoing message to be displayed), --// it in turn notifies observers (again, typically add-ons), which have the --// opportunity to swap or cancel the message. -+// notified of a `new-text` (ie. an incoming or outgoing message to be -+// displayed), it in turn notifies observers of `received-message` -+// (again, typically add-ons), which have the opportunity to swap or cancel -+// the message. - [scriptable, uuid(3f88cc5c-6940-4eb5-a576-c65770f49ce9)] - interface imIMessage: prplIMessage { - attribute boolean cancelled; - // Holds the sender color for Chats. - // Empty string by default, it is set by the conversation binding. - attribute AUTF8String color; - - // What eventually gets shown to the user. -diff --git a/chat/components/src/imConversations.js b/chat/components/src/imConversations.js ---- a/chat/components/src/imConversations.js -+++ b/chat/components/src/imConversations.js -@@ -59,16 +59,17 @@ imMessage.prototype = { - get containsNick() this.prplMessage.containsNick, - get noLog() this.prplMessage.noLog, - get error() this.prplMessage.error, - get delayed() this.prplMessage.delayed, - get noFormat() this.prplMessage.noFormat, - get containsImages() this.prplMessage.containsImages, - get notification() this.prplMessage.notification, - get noLinkification() this.prplMessage.noLinkification, -+ get originalMessage() this.prplMessage.originalMessage, - getActions: function(aCount) this.prplMessage.getActions(aCount || {}) - }; - - function UIConversation(aPrplConversation) - { - this._prplConv = {}; - this.id = ++gLastUIConvId; - this._observers = []; -@@ -120,17 +121,21 @@ UIConversation.prototype = { - _currentTargetId: 0, - changeTargetTo: function(aPrplConversation) { - let id = aPrplConversation.id; - if (this._currentTargetId == id) - return; - - if (!(id in this._prplConv)) { - this._prplConv[id] = aPrplConversation; -- aPrplConversation.addObserver(this.observeConv.bind(this, id)); -+ // Pass an object here, instead of just a function, because coercion -+ // to an nsIObserver won't happen in the JS tests. -+ aPrplConversation.addObserver({ -+ observe: this.observeConv.bind(this, id) -+ }); - } - - let shouldNotify = this._currentTargetId; - this._currentTargetId = id; - if (!this.isChat) { - let buddy = this.buddy; - if (buddy) - ({statusType: this.statusType, statusText: this.statusText}) = buddy; -@@ -356,17 +361,17 @@ UIConversation.prototype = { - - // Protocols have an opportunity here to preprocess messages before they are - // sent (eg. split long messages). If a message is split here, the split - // will be visible in the UI. - let messages = this.target.prepareForSending(om); - - // Protocols can return null if they don't need to make any changes. - // (nb. passing null with retval array results in an empty array) -- if (!messages.length) -+ if (!messages || !messages.length) - messages = [om.message]; - - for (let msg of messages) { - // Add-ons (eg. OTR) have an opportunity to tweak or cancel the message - // at this point. - om = new OutgoingMessage(msg, this.target); - this.notifyObservers(om, "sending-message"); - if (om.cancelled) -diff --git a/chat/components/src/test/test_conversations.js b/chat/components/src/test/test_conversations.js -new file mode 100644 ---- /dev/null -+++ b/chat/components/src/test/test_conversations.js -@@ -0,0 +1,235 @@ -+/* Any copyright is dedicated to the Public Domain. -+ * http://creativecommons.org/publicdomain/zero/1.0/ */ -+ -+const Cu = Components.utils; -+Cu.import("resource:///modules/imServices.jsm"); -+Cu.import("resource:///modules/jsProtoHelper.jsm"); -+ -+let imConversations = {}; -+Services.scriptloader.loadSubScript( -+ "resource:///components/imConversations.js", imConversations -+); -+ -+// Fake prplConversation -+let _id = 0; -+function Conversation(aName) { -+ this._name = aName; -+ this._observers = []; -+ this._date = Date.now() * 1000; -+ this.id = ++_id; -+} -+Conversation.prototype = { -+ __proto__: GenericConvIMPrototype, -+ _account: { -+ imAccount: { -+ protocol: {name: "Fake Protocol"}, -+ alias: "", -+ name: "Fake Account" -+ }, -+ ERROR: function(e) {throw e;} -+ } -+}; -+ -+// Ensure that when iMsg.message is set to a message (including the empty -+// string), it returns that message. If not, it should return the original -+// message. This prevents regressions due to JS coercions. -+let test_null_message = function() { -+ let originalMessage = "Hi!"; -+ let pMsg = new Message("buddy", originalMessage, { -+ outgoing: true, _alias: "buddy", time: Date.now() -+ }); -+ let iMsg = new imConversations.imMessage(pMsg); -+ equal(iMsg.message, originalMessage); -+ // Setting the message should prevent a fallback to the original. -+ iMsg.message = ""; -+ equal(iMsg.message, ""); -+ equal(iMsg.originalMessage, originalMessage); -+}; -+ -+// ROT13, used as an example transformation. -+function rot13(aString) { -+ return aString.replace(/[a-zA-Z]/g, function(c) { -+ return String.fromCharCode(c.charCodeAt(0) + (c.toLowerCase() < "n" ? 1 : -1) * 13); -+ }); -+} -+ -+// A test that exercises the message transformation pipeline. -+// -+// From the sending users perspective, this looks like: -+// -> UIConv sendMsg -+// -> UIConv notifyObservers `preparing-message` -+// -> protocol prepareForSending -+// -> UIConv notifyObservers `sending-message` -+// -> protocol sendMsg -+// -> protocol writeMessage -+// -> protocol notifyObservers `new-text` -+// -> UIConv notifyObservers `received-message` -+// -> protocol prepareForDisplaying -+// -> UIConv notifyObservers `new-text` -+// -+// From the receiving users perspective, they get: -+// -> protocol writeMessage -+// -> protocol notifyObservers `new-text` -+// -> UIConv notifyObservers `received-message` -+// -> protocol prepareForDisplaying -+// -> UIConv notifyObservers `new-text` -+// -+// The test walks the sending path, which covers both. -+let test_message_transformation = function() { -+ let conv = new Conversation(); -+ conv.sendMsg = function(aMsg) { -+ this.writeMessage("user", aMsg, {outgoing: true}); -+ }; -+ -+ let uiConv = new imConversations.UIConversation(conv); -+ let message = "Hello!"; -+ let receivedMsg = false, newTxt = false; -+ -+ uiConv.addObserver({ -+ observe: function(aObject, aTopic, aMsg) { -+ switch(aTopic) { -+ case "sending-message": -+ ok(!newTxt); -+ ok(!receivedMsg); -+ ok(aObject instanceof imConversations.OutgoingMessage); -+ aObject.message = rot13(aObject.message); -+ break; -+ case "received-message": -+ ok(!newTxt); -+ ok(!receivedMsg); -+ ok(aObject.outgoing); -+ ok(aObject instanceof imConversations.imMessage); -+ equal(aObject.displayMessage, rot13(message)); -+ aObject.displayMessage = rot13(aObject.displayMessage); -+ receivedMsg = true; -+ break; -+ case "new-text": -+ ok(!newTxt); -+ ok(receivedMsg); -+ ok(aObject.outgoing); -+ ok(aObject instanceof imConversations.imMessage); -+ equal(aObject.displayMessage, message); -+ newTxt = true; -+ break; -+ } -+ } -+ }); -+ uiConv.sendMsg(message); -+ -+ ok(newTxt); -+}; -+ -+// A test that cancels a message before it can be sent. -+let test_cancel_send_message = function() { -+ let conv = new Conversation(); -+ conv.sendMsg = function(aMsg) { -+ ok(false); -+ }; -+ -+ let uiConv = new imConversations.UIConversation(conv); -+ uiConv.addObserver({ -+ observe: function(aObject, aTopic, aMsg) { -+ if (aTopic === "sending-message") { -+ ok(aObject instanceof imConversations.OutgoingMessage); -+ aObject.cancelled = true; -+ } -+ } -+ }); -+ uiConv.sendMsg("Hi!"); -+}; -+ -+// A test that cancels a message before it gets displayed. -+let test_cancel_display_message = function() { -+ let conv = new Conversation(); -+ conv.sendMsg = function(aMsg) { -+ this.writeMessage("user", aMsg, {outgoing: true}); -+ }; -+ -+ let uiConv = new imConversations.UIConversation(conv); -+ uiConv.addObserver({ -+ observe: function(aObject, aTopic, aMsg) { -+ switch(aTopic) { -+ case "received-message": -+ ok(aObject instanceof imConversations.imMessage); -+ aObject.cancelled = true; -+ break; -+ case "new-text": -+ ok(false); -+ break; -+ } -+ } -+ }); -+ uiConv.sendMsg("Hi!"); -+}; -+ -+// A test that ensures protocols get a chance to prepare a message before -+// sending and displaying. -+let test_prpl_message_prep = function() { -+ let conv = new Conversation(); -+ conv.sendMsg = function(aMsg) { -+ this.writeMessage("user", aMsg, {outgoing: true}); -+ }; -+ -+ let msg = "Hi!"; -+ let prefix = "test> "; -+ -+ let prepared = false; -+ conv.prepareForSending = function(aMsg) { -+ ok(aMsg instanceof imConversations.OutgoingMessage); -+ equal(aMsg.message, msg); -+ aMsg.message = prefix + aMsg.message; -+ prepared = true; -+ }; -+ -+ conv.prepareForDisplaying = function(aMsg) { -+ ok(aMsg instanceof imConversations.imMessage); -+ equal(aMsg.displayMessage, prefix + msg); -+ aMsg.displayMessage = aMsg.displayMessage.slice(prefix.length); -+ }; -+ -+ let receivedMsg = false; -+ let uiConv = new imConversations.UIConversation(conv); -+ uiConv.addObserver({ -+ observe: function(aObject, aTopic, aMsg) { -+ if (aTopic === "new-text") { -+ equal(aObject.displayMessage, msg); -+ receivedMsg = true; -+ } -+ } -+ }); -+ uiConv.sendMsg(msg); -+ ok(prepared); -+ ok(receivedMsg); -+}; -+ -+// A test that ensures protocols can split messages before they are sent. -+let test_split_message_before_sending = function() { -+ let msgCount = 0; -+ let prepared = false; -+ -+ let conv = new Conversation(); -+ conv.sendMsg = function(aMsg) { -+ ++msgCount; -+ }; -+ conv.prepareForSending = function(aMsg) { -+ ok(aMsg instanceof imConversations.OutgoingMessage); -+ prepared = true; -+ return aMsg.message.split("\n"); -+ }; -+ -+ let uiConv = new imConversations.UIConversation(conv); -+ uiConv.sendMsg("This is a looo\nooong message."); -+ -+ ok(prepared); -+ equal(msgCount, 2); -+}; -+ -+function run_test() { -+ test_null_message(); -+ test_message_transformation(); -+ test_cancel_send_message(); -+ test_cancel_display_message(); -+ test_prpl_message_prep(); -+ test_split_message_before_sending(); -+ run_next_test(); -+} -diff --git a/chat/components/src/test/xpcshell.ini b/chat/components/src/test/xpcshell.ini ---- a/chat/components/src/test/xpcshell.ini -+++ b/chat/components/src/test/xpcshell.ini -@@ -3,9 +3,10 @@ - ; file, You can obtain one at http://mozilla.org/MPL/2.0/. - - [DEFAULT] - head = - tail = - - [test_accounts.js] - [test_commands.js] -+[test_conversations.js] - [test_logger.js]
participants (1)
-
arlo@torproject.org