Added implementation and tests for XEP-0085 - Chat State Notifications.

Chat states may be set using:

msg['chat_state'].active()
msg['chat_state'].composing()
msg['chat_state'].gone()
msg['chat_state'].inactive()
msg['chat_state'].paused()

Checking a chat state can be done with either:

msg['chat_state'].getState()
msg['chat_state'].name

When a message with a chat state is receieved, the following events
may occur:

chatstate_active
chatstate_composing
chatstate_gone
chatstate_inactive
chatstate_paused

where the event data is the message stanza. Note that currently these
events are also triggered for messages sent by SleekXMPP, not just those
received.
This commit is contained in:
Lance stout
2010-05-31 13:24:14 -04:00
parent 1e3a6e1b5f
commit 629f6e76a9
3 changed files with 148 additions and 1 deletions

47
tests/test_chatstates.py Normal file
View File

@@ -0,0 +1,47 @@
import unittest
from xml.etree import cElementTree as ET
from sleekxmpp.xmlstream.matcher.stanzapath import StanzaPath
from . import xmlcompare
import sleekxmpp.plugins.xep_0085 as cs
def stanzaPlugin(stanza, plugin):
stanza.plugin_attrib_map[plugin.plugin_attrib] = plugin
stanza.plugin_tag_map["{%s}%s" % (plugin.namespace, plugin.name)] = plugin
class testchatstates(unittest.TestCase):
def setUp(self):
self.cs = cs
stanzaPlugin(self.cs.Message, self.cs.Active)
stanzaPlugin(self.cs.Message, self.cs.Composing)
stanzaPlugin(self.cs.Message, self.cs.Gone)
stanzaPlugin(self.cs.Message, self.cs.Inactive)
stanzaPlugin(self.cs.Message, self.cs.Paused)
def try2Methods(self, xmlstring, msg):
msg2 = self.cs.Message(None, self.cs.ET.fromstring(xmlstring))
self.failUnless(xmlstring == str(msg) == str(msg2),
"Two methods for creating stanza don't match")
def testCreateChatState(self):
"""Testing creating chat states."""
xmlstring = """<message><%s xmlns="http://jabber.org/protocol/chatstates" /></message>"""
msg = self.cs.Message()
msg['chat_state'].active()
self.try2Methods(xmlstring % 'active', msg)
msg['chat_state'].composing()
self.try2Methods(xmlstring % 'composing', msg)
msg['chat_state'].gone()
self.try2Methods(xmlstring % 'gone', msg)
msg['chat_state'].inactive()
self.try2Methods(xmlstring % 'inactive', msg)
msg['chat_state'].paused()
self.try2Methods(xmlstring % 'paused', msg)
suite = unittest.TestLoader().loadTestsFromTestCase(testchatstates)