Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/Jajcus/pyxmpp.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorJacek Konieczny <jajcus@jajcus.net>2005-06-26 20:57:17 +0400
committerJacek Konieczny <jajcus@jajcus.net>2005-06-26 20:57:17 +0400
commit08d159c2a387ab03fff4b64b0994f38a3b6ca84c (patch)
tree3d0b7f6cbf2a5ba11e92bd236f00fe49c25aebde /tests
parente2e0417cfd4f16f1fa8b7fcd41bd25da19f17886 (diff)
- jabber:iq:register basics. NFY
Diffstat (limited to 'tests')
-rwxr-xr-xtests/ns_operations.py43
-rwxr-xr-xtests/register.py256
2 files changed, 298 insertions, 1 deletions
diff --git a/tests/ns_operations.py b/tests/ns_operations.py
index c29df50..8718f47 100755
--- a/tests/ns_operations.py
+++ b/tests/ns_operations.py
@@ -12,6 +12,7 @@ input_xml = """<?xml version="1.0" ?>
<b xmlns="http://pyxmpp.jabberstudio.org/xmlns/test2">
<c/>
<prefix:d/>
+ <g xmlns="http://pyxmpp.jabberstudio.org/xmlns/test3" type="ble"/>
</b>
<prefix:e/>
<f/>
@@ -20,12 +21,29 @@ input_xml = """<?xml version="1.0" ?>
input_doc = libxml2.parseDoc(input_xml)
input_root = input_doc.getRootElement()
+input_xml2 = """<?xml version="1.0" ?>
+<root xmlns:prefix="http://pyxmpp.jabberstudio.org/xmlns/test1">
+ <a> <a1/> <a2/> </a>
+ <b xmlns="http://pyxmpp.jabberstudio.org/xmlns/test2">
+ <c/>
+ <prefix:d/>
+ <g xmlns="http://pyxmpp.jabberstudio.org/xmlns/test3" type="ble"/>
+ </b>
+ <prefix:e/>
+ <f/>
+</root>
+"""
+input_doc2 = libxml2.parseDoc(input_xml2)
+input_root2 = input_doc2.getRootElement()
+
+
output_xml = """<?xml version="1.0" ?>
<root xmlns="http://pyxmpp.jabberstudio.org/xmlns/common" xmlns:prefix="http://pyxmpp.jabberstudio.org/xmlns/test1">
<a> <a1/> <a2/> </a>
<b xmlns="http://pyxmpp.jabberstudio.org/xmlns/test2">
<c/>
<prefix:d/>
+ <g xmlns="http://pyxmpp.jabberstudio.org/xmlns/test3" type="ble"/>
</b>
<prefix:e/>
<f/>
@@ -55,7 +73,30 @@ class TestReplaceNs(unittest.TestCase):
if n1_ns.content == input_ns.content:
xmlextra.replace_ns(n1, n1_ns, common_ns)
n = n.next
- #print doc.serialize()
+ self.failUnless(xml_elements_equal(root, output_root))
+
+ def test_replace_null_ns(self):
+ doc = libxml2.newDoc("1.0")
+
+ root = doc.newChild(None, "root", None)
+ common_ns = root.newNs(xmlextra.COMMON_NS, None)
+ root.setNs(common_ns)
+ doc.setRootElement(root)
+
+ n = input_doc2.getRootElement()
+ input_ns = n.ns()
+ n = n.children
+ while n:
+ n1 = n.docCopyNode(doc, 1)
+ root.addChild(n1)
+ if n1.type == 'element':
+ try:
+ n1_ns = n1.ns()
+ except libxml2.treeError:
+ n1_ns = None
+ if n1_ns is None:
+ xmlextra.replace_ns(n1, n1_ns, common_ns)
+ n = n.next
self.failUnless(xml_elements_equal(root, output_root))
def test_safe_serialize(self):
diff --git a/tests/register.py b/tests/register.py
new file mode 100755
index 0000000..890cd77
--- /dev/null
+++ b/tests/register.py
@@ -0,0 +1,256 @@
+#!/usr/bin/python
+# -*- coding: UTF-8 -*-
+
+import unittest
+import libxml2
+from pyxmpp.jabber.dataforms import Form, Field, Option
+from pyxmpp.jabber.register import Register, REGISTER_NS
+from pyxmpp.iq import Iq
+
+legacy_fields = ( "username", "nick", "password", "name", "first", "last", "email", "address",
+ "city", "state", "zip", "phone", "url", "date", "misc", "text", "key" )
+
+class TestRegister(unittest.TestCase):
+ def test_jep77_example1(self):
+ register = self.parse_stanza(jep77_example1)
+ self.failUnless(register.form is None)
+ self.failIf(register.registered)
+ self.failUnless(register.instructions is None)
+ self.failIf(register.remove)
+ for field in legacy_fields:
+ self.failUnless(getattr(register, field) is None)
+ def test_jep77_example2(self):
+ register = self.parse_stanza(jep77_example2)
+ self.failUnlessEqual(register.instructions.strip(), u"Choose a username and password for use with this service.\n Please also provide your email address.")
+ self.failUnlessEqual(register.username, u"")
+ self.failUnlessEqual(register.password, u"")
+ self.failUnlessEqual(register.email, u"")
+ def test_jep77_example3(self):
+ register = self.parse_stanza(jep77_example3)
+ self.failUnless(register.registered)
+ self.failUnlessEqual(register.username, u"juliet")
+ self.failUnlessEqual(register.password, u"R0m30")
+ self.failUnlessEqual(register.email, u"juliet@capulet.com")
+ def test_jep77_example4(self):
+ register = self.parse_stanza(jep77_example4)
+ self.failIf(register.registered)
+ self.failUnlessEqual(register.username, u"bill")
+ self.failUnlessEqual(register.password, u"Calliope")
+ self.failUnlessEqual(register.email, u"bill@shakespeare.lit")
+ def test_jep77_example8(self):
+ register = self.parse_stanza(jep77_example8)
+ self.failUnless(register.remove)
+ def test_jep77_example10(self):
+ register = self.parse_stanza(jep77_example10)
+ self.failUnlessEqual(register.username, u"bill")
+ self.failUnlessEqual(register.password, u"newpass")
+ def test_jep77_example16(self):
+ register = self.parse_stanza(jep77_example16)
+ form = self.parse_form(jep77_example16_form)
+ self.failIf(register.form is None)
+ self.failUnlessEqual(register.form.type, form.type)
+ self.failUnlessEqual(register.form.instructions, form.instructions)
+ self.failUnlessEqual(len(register.form.fields), len(form.fields))
+ for i in range(0, len(form.fields)):
+ f1 = register.form[i]
+ f2 = form[i]
+ self.failUnlessEqual(f1.name, f2.name)
+ self.failUnlessEqual(f1.type, f2.type)
+ self.failUnlessEqual(f1.value, f2.value)
+
+ def test_jep77_example17(self):
+ register = self.parse_stanza(jep77_example17)
+ self.failUnlessEqual(register.instructions.strip(), u"To register, visit http://www.shakespeare.lit/contests.php")
+
+ def parse_stanza(self, xml):
+ doc = libxml2.parseDoc(xml)
+ root = doc.getRootElement()
+ iq = Iq(root)
+ register = iq.get_query()
+ return Register(register)
+
+ def parse_form(self, xml):
+ doc = libxml2.parseDoc(xml)
+ root = doc.getRootElement()
+ return Form(root)
+
+def suite():
+ suite = unittest.TestSuite()
+ suite.addTest(unittest.makeSuite(TestRegister))
+ return suite
+
+###################
+# Test data follows
+
+jep77_example1 = """
+ <iq type='get' id='reg1'>
+ <query xmlns='jabber:iq:register'/>
+ </iq>
+"""
+
+jep77_example2 = """
+ <iq type='result' id='reg1'>
+ <query xmlns='jabber:iq:register'>
+ <instructions>
+ Choose a username and password for use with this service.
+ Please also provide your email address.
+ </instructions>
+ <username/>
+ <password/>
+ <email/>
+ </query>
+ </iq>
+"""
+
+jep77_example3 = """
+ <iq type='result' id='reg1'>
+ <query xmlns='jabber:iq:register'>
+ <registered/>
+ <username>juliet</username>
+ <password>R0m30</password>
+ <email>juliet@capulet.com</email>
+ </query>
+ </iq>
+"""
+
+jep77_example4 = """
+ <iq type='set' id='reg2'>
+ <query xmlns='jabber:iq:register'>
+ <username>bill</username>
+ <password>Calliope</password>
+ <email>bill@shakespeare.lit</email>
+ </query>
+ </iq>
+"""
+
+jep77_example8 = """
+ <iq type='set' from='bill@shakespeare.lit/globe' id='unreg1'>
+ <query xmlns='jabber:iq:register'>
+ <remove/>
+ </query>
+ </iq>
+"""
+
+jep77_example10 = """
+ <iq type='set' to='somehost' id='change1'>
+ <query xmlns='jabber:iq:register'>
+ <username>bill</username>
+ <password>newpass</password>
+ </query>
+ </iq>
+"""
+
+jep77_example16 = """
+ <iq type='result'
+ from='contests.shakespeare.lit'
+ to='juliet@capulet.com/balcony'
+ id='reg3'>
+ <query xmlns='jabber:iq:register'>
+ <instructions>
+ Use the enclosed form to register. If your Jabber client does not
+ support Data Forms, visit http://www.shakespeare.lit/contests.php
+ </instructions>
+ <x xmlns='jabber:x:data' type='form'>
+ <title>Contest Registration</title>
+ <instructions>
+ Please provide the following information
+ to sign up for our special contests!
+ </instructions>
+ <field
+ type='hidden'
+ var='FORM_TYPE'>
+ <value>jabber:iq:register</value>
+ </field>
+ <field
+ type='text-single'
+ label='Given Name'
+ var='first'>
+ <required/>
+ </field>
+ <field
+ type='text-single'
+ label='Family Name'
+ var='last'>
+ <required/>
+ </field>
+ <field
+ type='text-single'
+ label='Email Address'
+ var='email'>
+ <required/>
+ </field>
+ <field
+ type='list-single'
+ label='Gender'
+ var='x-gender'>
+ <option label='Male'><value>M</value></option>
+ <option label='Female'><value>F</value></option>
+ </field>
+ </x>
+ </query>
+ </iq>
+"""
+
+jep77_example16_form = """
+ <x xmlns='jabber:x:data' type='form'>
+ <title>Contest Registration</title>
+ <instructions>
+ Please provide the following information
+ to sign up for our special contests!
+ </instructions>
+ <field
+ type='hidden'
+ var='FORM_TYPE'>
+ <value>jabber:iq:register</value>
+ </field>
+ <field
+ type='text-single'
+ label='Given Name'
+ var='first'>
+ <required/>
+ </field>
+ <field
+ type='text-single'
+ label='Family Name'
+ var='last'>
+ <required/>
+ </field>
+ <field
+ type='text-single'
+ label='Email Address'
+ var='email'>
+ <required/>
+ </field>
+ <field
+ type='list-single'
+ label='Gender'
+ var='x-gender'>
+ <option label='Male'><value>M</value></option>
+ <option label='Female'><value>F</value></option>
+ </field>
+ </x>
+"""
+
+jep77_example17 = """
+ <iq type='result'
+ from='contests.shakespeare.lit'
+ to='juliet@capulet.com/balcony'
+ id='reg3'>
+ <query xmlns='jabber:iq:register'>
+ <instructions>
+ To register, visit http://www.shakespeare.lit/contests.php
+ </instructions>
+ </query>
+ <x xmlns='jabber:x:oob'>
+ <url>http://www.shakespeare.lit/contests.php</url>
+ </x>
+ </iq>
+"""
+
+# end of test data
+###################
+
+if __name__ == '__main__':
+ unittest.TextTestRunner(verbosity=2).run(suite())
+
+# vi: sts=4 et sw=4 encoding=utf-8