fixed html-im stanza plugin

This commit is contained in:
Nathan Fritz 2010-04-07 23:56:44 -07:00
parent dd77d2165d
commit 2384858f5e
3 changed files with 26 additions and 7 deletions

View file

@ -202,7 +202,7 @@ class basexmpp(object):
message['body'] = mbody message['body'] = mbody
message['subject'] = msubject message['subject'] = msubject
if mnick is not None: message['nick'] = mnick 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 return message
def makePresence(self, pshow=None, pstatus=None, ppriority=None, pto=None, ptype=None, pfrom=None): def makePresence(self, pshow=None, pstatus=None, ppriority=None, pto=None, ptype=None, pfrom=None):

View file

@ -11,24 +11,24 @@ class HTMLIM(ElementBase):
namespace = 'http://jabber.org/protocol/xhtml-im' namespace = 'http://jabber.org/protocol/xhtml-im'
name = 'html' name = 'html'
plugin_attrib = 'html' plugin_attrib = 'html'
interfaces = set(('html')) interfaces = set(('html',))
plugin_attrib_map = set() plugin_attrib_map = set()
plugin_xml_map = set() plugin_xml_map = set()
def setHtml(self, html): def setHtml(self, html):
if issinstance(html, str): if isinstance(html, str):
html = ET.XML(html) 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 = ET.Element('{http://www.w3.org/1999/xhtml}body')
body.append(html) body.append(html)
self.xml.append(body)
else: else:
body = html self.xml.append(html)
self.xml.append(html)
def getHtml(self): def getHtml(self):
html = self.xml.find('{http://www.w3.org/1999/xhtml}body') html = self.xml.find('{http://www.w3.org/1999/xhtml}body')
if html is None: return '' if html is None: return ''
return __str__(html) return html
def delHtml(self): def delHtml(self):
return self.__del__() return self.__del__()

View file

@ -1,9 +1,13 @@
import unittest import unittest
from xml.etree import cElementTree as ET
class testmessagestanzas(unittest.TestCase): class testmessagestanzas(unittest.TestCase):
def setUp(self): def setUp(self):
import sleekxmpp.stanza.message as m import sleekxmpp.stanza.message as m
from sleekxmpp.basexmpp import stanzaPlugin
from sleekxmpp.stanza.htmlim import HTMLIM
stanzaPlugin(m.Message, HTMLIM)
self.m = m self.m = m
def testGroupchatReplyRegression(self): def testGroupchatReplyRegression(self):
@ -22,4 +26,19 @@ class testmessagestanzas(unittest.TestCase):
msg.attrib.attrib.attrib['to'] = 'usr@server.tld' msg.attrib.attrib.attrib['to'] = 'usr@server.tld'
self.failUnless(str(msg['to']) == 'usr@server.tld') self.failUnless(str(msg['to']) == 'usr@server.tld')
def testHTMLPlugin(self):
"Test message/html/html stanza"
msgtxt = """<message to="fritzy@netflint.net/sleekxmpp" type="chat"><body>this is the plaintext message</body><html xmlns="http://jabber.org/protocol/xhtml-im"><body xmlns="http://www.w3.org/1999/xhtml"><p>This is the htmlim message</p></body></html></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) suite = unittest.TestLoader().loadTestsFromTestCase(testmessagestanzas)