diff --git a/.gitignore b/.gitignore index 4efc4ef1c..911e85044 100644 --- a/.gitignore +++ b/.gitignore @@ -11,6 +11,8 @@ analytics.js .idea +converse-logs/*.html + # Ruby/Sass/Bundler .bundle .sass-cache diff --git a/converse-logs/converse-logs.js b/converse-logs/converse-logs.js new file mode 100644 index 000000000..587597f95 --- /dev/null +++ b/converse-logs/converse-logs.js @@ -0,0 +1,5 @@ +define("transcripts", [ + "tpl!converse-logs/conversejs.containers-1460718487729", +], function () { + return arguments; +}); diff --git a/spec/transcripts.js b/spec/transcripts.js new file mode 100644 index 000000000..a5a2ed614 --- /dev/null +++ b/spec/transcripts.js @@ -0,0 +1,76 @@ +/*global converse */ +(function (root, factory) { + define([ + "jquery", + "underscore", + "mock", + "test_utils", + "utils", + "transcripts" + ], factory + ); +} (this, function ($, _, mock, test_utils, utils, transcripts) { + var Strophe = converse_api.env.Strophe; + var IGNORED_TAGS = [ + 'stream:features', + 'auth', + 'challenge', + 'success', + 'stream:features', + 'response' + ]; + + function traverseElement (el, _stanza) { + if (typeof _stanza !== 'undefined') { + if (el.nodeType === 3) { + _stanza.t(el.nodeValue); + return _stanza; + } else { + _stanza = _stanza.c(el.nodeName.toLowerCase(), getAttributes(el)); + } + } else { + _stanza = new Strophe.Builder( + el.nodeName.toLowerCase(), + getAttributes(el) + ); + } + _.each(el.childNodes, _.partial(traverseElement, _, _stanza)); + return _stanza.up(); + } + + function getAttributes (el) { + var attributes = {}; + _.each(el.attributes, function (att) { + attributes[att.nodeName] = att.nodeValue; + }); + return attributes; + } + + return describe("Transcripts of chat logs", function () { + beforeEach(function () { + test_utils.openChatRoom("discuss", 'conference.conversejs.org', 'jc'); + test_utils.openChatRoom("dummy", 'rooms.localhost', 'jc'); + test_utils.openChatRoom("prosody", 'conference.prosody.im', 'jc'); + }); + + it("can be used to replay conversations", function () { + spyOn(converse, 'areDesktopNotificationsEnabled').andReturn(true); + _.each(transcripts, function (transcript) { + var text = transcript(); + var xml = Strophe.xmlHtmlNode(text); + $(xml).children('log').children('body').each(function (i, el) { + $(el).children().each(function (i, el) { + if (el.nodeType === 3) { + return; // Ignore text + } + if (_.contains(IGNORED_TAGS, el.nodeName.toLowerCase())) { + return; + } + var _stanza = traverseElement(el); + converse.connection._dataRecv(test_utils.createRequest(_stanza)); + }); + }); + }); + }); + }); +})); diff --git a/src/converse-core.js b/src/converse-core.js index caa536496..f59b2ab3c 100755 --- a/src/converse-core.js +++ b/src/converse-core.js @@ -1567,8 +1567,8 @@ this.setUpXMLLogging = function () { if (this.debug) { - this.connection.xmlInput = function (body) { converse.log(body); }; - this.connection.xmlOutput = function (body) { converse.log(body); }; + this.connection.xmlInput = function (body) { converse.log(body.outerHTML); }; + this.connection.xmlOutput = function (body) { converse.log(body.outerHTML); }; } }; diff --git a/tests/utils.js b/tests/utils.js index 60c1a5446..90b0cd863 100644 --- a/tests/utils.js +++ b/tests/utils.js @@ -13,7 +13,7 @@ utils.createRequest = function (iq) { iq = typeof iq.tree == "function" ? iq.tree() : iq; var req = new Strophe.Request(iq, function() {}); - req.getResponse = function() { + req.getResponse = function () { var env = new Strophe.Builder('env', {type: 'mock'}).tree(); env.appendChild(iq); return env;