From 2384858f5e6dd7d027b45246bed6085207fca61e Mon Sep 17 00:00:00 2001 From: Nathan Fritz Date: Wed, 7 Apr 2010 23:56:44 -0700 Subject: [PATCH] fixed html-im stanza plugin --- sleekxmpp/basexmpp.py | 2 +- sleekxmpp/stanza/htmlim.py | 12 ++++++------ tests/test_messagestanzas.py | 19 +++++++++++++++++++ 3 files changed, 26 insertions(+), 7 deletions(-) diff --git a/sleekxmpp/basexmpp.py b/sleekxmpp/basexmpp.py index 764f8c5..1ed9b3c 100644 --- a/sleekxmpp/basexmpp.py +++ b/sleekxmpp/basexmpp.py @@ -202,7 +202,7 @@ class basexmpp(object): message['body'] = mbody message['subject'] = msubject if mnick is not None: message['nick'] = mnick - if mhtml is not None: message['html'] = mhtml + if mhtml is not None: message['html']['html'] = mhtml return message def makePresence(self, pshow=None, pstatus=None, ppriority=None, pto=None, ptype=None, pfrom=None): diff --git a/sleekxmpp/stanza/htmlim.py b/sleekxmpp/stanza/htmlim.py index d2ccfd6..f9ee985 100644 --- a/sleekxmpp/stanza/htmlim.py +++ b/sleekxmpp/stanza/htmlim.py @@ -11,24 +11,24 @@ class HTMLIM(ElementBase): namespace = 'http://jabber.org/protocol/xhtml-im' name = 'html' plugin_attrib = 'html' - interfaces = set(('html')) + interfaces = set(('html',)) plugin_attrib_map = set() plugin_xml_map = set() def setHtml(self, html): - if issinstance(html, str): + if isinstance(html, str): html = ET.XML(html) - if html.find('{http://www.w3.org/1999/xhtml}body') is None: + if html.tag != '{http://www.w3.org/1999/xhtml}body': body = ET.Element('{http://www.w3.org/1999/xhtml}body') body.append(html) + self.xml.append(body) else: - body = html - self.xml.append(html) + self.xml.append(html) def getHtml(self): html = self.xml.find('{http://www.w3.org/1999/xhtml}body') if html is None: return '' - return __str__(html) + return html def delHtml(self): return self.__del__() diff --git a/tests/test_messagestanzas.py b/tests/test_messagestanzas.py index 4de482f..08488ce 100644 --- a/tests/test_messagestanzas.py +++ b/tests/test_messagestanzas.py @@ -1,9 +1,13 @@ import unittest +from xml.etree import cElementTree as ET class testmessagestanzas(unittest.TestCase): def setUp(self): import sleekxmpp.stanza.message as m + from sleekxmpp.basexmpp import stanzaPlugin + from sleekxmpp.stanza.htmlim import HTMLIM + stanzaPlugin(m.Message, HTMLIM) self.m = m def testGroupchatReplyRegression(self): @@ -21,5 +25,20 @@ class testmessagestanzas(unittest.TestCase): msg = self.m.Message() msg.attrib.attrib.attrib['to'] = 'usr@server.tld' self.failUnless(str(msg['to']) == 'usr@server.tld') + + def testHTMLPlugin(self): + "Test message/html/html stanza" + msgtxt = """this is the plaintext message

This is the htmlim message

""" + msg = self.m.Message() + msg['to'] = "fritzy@netflint.net/sleekxmpp" + msg['body'] = "this is the plaintext message" + msg['type'] = 'chat' + p = ET.Element('{http://www.w3.org/1999/xhtml}p') + p.text = "This is the htmlim message" + msg['html']['html'] = p + msg2 = self.m.Message() + values = msg.getValues() + msg2.setValues(values) + self.failUnless(msgtxt == str(msg) == str(msg2)) suite = unittest.TestLoader().loadTestsFromTestCase(testmessagestanzas)