4375ac7d8b
Stanza objects now accept the use of underscored names. The CamelCase versions are still available for backwards compatibility, but are discouraged. The property stanza.values now maps to the old getStanzaValues and setStanzaValues, in addition to _set_stanza_values and _get_stanza_values.
115 lines
4 KiB
Python
115 lines
4 KiB
Python
from sleekxmpp.test import *
|
|
import sleekxmpp.plugins.xep_0004 as xep_0004
|
|
|
|
|
|
class TestDataForms(SleekTest):
|
|
|
|
def setUp(self):
|
|
register_stanza_plugin(Message, xep_0004.Form)
|
|
register_stanza_plugin(xep_0004.Form, xep_0004.FormField)
|
|
register_stanza_plugin(xep_0004.FormField, xep_0004.FieldOption)
|
|
|
|
def testMultipleInstructions(self):
|
|
"""Testing using multiple instructions elements in a data form."""
|
|
msg = self.Message()
|
|
msg['form']['instructions'] = "Instructions\nSecond batch"
|
|
|
|
self.check_message(msg, """
|
|
<message>
|
|
<x xmlns="jabber:x:data" type="form">
|
|
<instructions>Instructions</instructions>
|
|
<instructions>Second batch</instructions>
|
|
</x>
|
|
</message>
|
|
""")
|
|
|
|
def testAddField(self):
|
|
"""Testing adding fields to a data form."""
|
|
|
|
msg = self.Message()
|
|
form = msg['form']
|
|
form.addField(var='f1',
|
|
ftype='text-single',
|
|
label='Text',
|
|
desc='A text field',
|
|
required=True,
|
|
value='Some text!')
|
|
|
|
self.check_message(msg, """
|
|
<message>
|
|
<x xmlns="jabber:x:data" type="form">
|
|
<field var="f1" type="text-single" label="Text">
|
|
<desc>A text field</desc>
|
|
<required />
|
|
<value>Some text!</value>
|
|
</field>
|
|
</x>
|
|
</message>
|
|
""")
|
|
|
|
form['fields'] = [('f1', {'type': 'text-single',
|
|
'label': 'Username',
|
|
'required': True}),
|
|
('f2', {'type': 'text-private',
|
|
'label': 'Password',
|
|
'required': True}),
|
|
('f3', {'type': 'text-multi',
|
|
'label': 'Message',
|
|
'value': 'Enter message.\nA long one even.'}),
|
|
('f4', {'type': 'list-single',
|
|
'label': 'Message Type',
|
|
'options': [{'label': 'Cool!',
|
|
'value': 'cool'},
|
|
{'label': 'Urgh!',
|
|
'value': 'urgh'}]})]
|
|
self.check_message(msg, """
|
|
<message>
|
|
<x xmlns="jabber:x:data" type="form">
|
|
<field var="f1" type="text-single" label="Username">
|
|
<required />
|
|
</field>
|
|
<field var="f2" type="text-private" label="Password">
|
|
<required />
|
|
</field>
|
|
<field var="f3" type="text-multi" label="Message">
|
|
<value>Enter message.</value>
|
|
<value>A long one even.</value>
|
|
</field>
|
|
<field var="f4" type="list-single" label="Message Type">
|
|
<option label="Cool!">
|
|
<value>cool</value>
|
|
</option>
|
|
<option label="Urgh!">
|
|
<value>urgh</value>
|
|
</option>
|
|
</field>
|
|
</x>
|
|
</message>
|
|
""")
|
|
|
|
def testSetValues(self):
|
|
"""Testing setting form values"""
|
|
|
|
msg = self.Message()
|
|
form = msg['form']
|
|
form.setFields([
|
|
('foo', {'type': 'text-single'}),
|
|
('bar', {'type': 'list-multi'})])
|
|
|
|
form.setValues({'foo': 'Foo!',
|
|
'bar': ['a', 'b']})
|
|
|
|
self.check_message(msg, """
|
|
<message>
|
|
<x xmlns="jabber:x:data" type="form">
|
|
<field var="foo" type="text-single">
|
|
<value>Foo!</value>
|
|
</field>
|
|
<field var="bar" type="list-multi">
|
|
<value>a</value>
|
|
<value>b</value>
|
|
</field>
|
|
</x>
|
|
</message>""")
|
|
|
|
suite = unittest.TestLoader().loadTestsFromTestCase(TestDataForms)
|