Ignore:
Timestamp:
May 9, 2012, 2:24:28 PM (10 years ago)
Author:
Ralph Meijer <ralphm@…>
Branch:
default
Message:

Add convenience method Request.parseRequest.

The new method Request.parseRequest is called from Request.fromElement
with the child element of the iq that is passed to fromElement, providing
a convenient hook for parsing the payload of incoming requests.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • wokkel/test/test_generic.py

    r165 r171  
    9191
    9292
     93class StanzaTest(unittest.TestCase):
     94    """
     95    Tests for L{generic.Stanza}.
     96    """
     97
     98    def test_fromElement(self):
     99        xml = """
     100        <message type='chat' from='other@example.org' to='user@example.org'/>
     101        """
     102
     103        stanza = generic.Stanza.fromElement(generic.parseXml(xml))
     104        self.assertEqual('chat', stanza.stanzaType)
     105        self.assertEqual(JID('other@example.org'), stanza.sender)
     106        self.assertEqual(JID('user@example.org'), stanza.recipient)
     107
     108
     109    def test_fromElementChildParser(self):
     110        """
     111        Child elements for which no parser is defined are ignored.
     112        """
     113        xml = """
     114        <message from='other@example.org' to='user@example.org'>
     115          <x xmlns='http://example.org/'/>
     116        </message>
     117        """
     118
     119        class Message(generic.Stanza):
     120            childParsers = {('http://example.org/', 'x'): '_childParser_x'}
     121            elements = []
     122
     123            def _childParser_x(self, element):
     124                self.elements.append(element)
     125
     126        message = Message.fromElement(generic.parseXml(xml))
     127        self.assertEqual(1, len(message.elements))
     128
     129
     130    def test_fromElementChildParserAll(self):
     131        """
     132        Child elements for which no parser is defined are ignored.
     133        """
     134        xml = """
     135        <message from='other@example.org' to='user@example.org'>
     136          <x xmlns='http://example.org/'/>
     137        </message>
     138        """
     139
     140        class Message(generic.Stanza):
     141            childParsers = {None: '_childParser'}
     142            elements = []
     143
     144            def _childParser(self, element):
     145                self.elements.append(element)
     146
     147        message = Message.fromElement(generic.parseXml(xml))
     148        self.assertEqual(1, len(message.elements))
     149
     150
     151    def test_fromElementChildParserUnknown(self):
     152        """
     153        Child elements for which no parser is defined are ignored.
     154        """
     155        xml = """
     156        <message from='other@example.org' to='user@example.org'>
     157          <x xmlns='http://example.org/'/>
     158        </message>
     159        """
     160        generic.Stanza.fromElement(generic.parseXml(xml))
     161
     162
     163
     164
    93165class RequestTest(unittest.TestCase):
    94166    """
     
    100172
    101173
     174    def test_requestParser(self):
     175        """
     176        The request's child element is passed to requestParser.
     177        """
     178        xml = """
     179        <iq type='get'>
     180          <query xmlns='jabber:iq:version'/>
     181        </iq>
     182        """
     183
     184        class VersionRequest(generic.Request):
     185            elements = []
     186
     187            def parseRequest(self, element):
     188                self.elements.append((element.uri, element.name))
     189
     190        request = VersionRequest.fromElement(generic.parseXml(xml))
     191        self.assertEqual([(NS_VERSION, 'query')], request.elements)
     192
     193
    102194    def test_toElementStanzaKind(self):
    103195        """
Note: See TracChangeset for help on using the changeset viewer.