1 # -*- encoding:utf-8 -*-
4 Slixmpp: The Slick XMPP Library
5 Copyright (C) 2011 Nathanael C. Fritz, Dann Martens (TOMOTON).
6 This file is part of Slixmpp.
8 See the file LICENSE for copying permission.
11 from __future__
import unicode_literals
16 from slixmpp
.plugins
.xep_0009
.stanza
.RPC
import RPCQuery
, MethodCall
, \
18 from slixmpp
.plugins
.xep_0009
.binding
import py2xml
, xml2py
, rpcbase64
, \
20 from slixmpp
.stanza
.iq
import Iq
21 from slixmpp
.test
.slixtest
import SlixTest
22 from slixmpp
.xmlstream
.stanzabase
import register_stanza_plugin
23 from slixmpp
.xmlstream
.tostring
import tostring
27 if sys
.version_info
> (3, 0):
31 class TestJabberRPC(SlixTest
):
34 register_stanza_plugin(Iq
, RPCQuery
)
35 register_stanza_plugin(RPCQuery
, MethodCall
)
36 register_stanza_plugin(RPCQuery
, MethodResponse
)
38 def testMethodCall(self
):
40 iq
['rpc_query']['method_call']['method_name'] = 'system.exit'
41 iq
['rpc_query']['method_call']['params'] = py2xml(*())
44 <query xmlns="jabber:iq:rpc">
46 <methodName>system.exit</methodName>
51 """, use_values
=False)
53 def testMethodResponse(self
):
55 iq
['rpc_query']['method_response']['params'] = py2xml(*())
58 <query xmlns="jabber:iq:rpc">
64 """, use_values
=False)
66 def testConvertNil(self
):
68 params_xml
= py2xml(*params
)
69 expected_xml
= self
.parse_xml("""
70 <params xmlns="jabber:iq:rpc">
78 self
.assertTrue(self
.compare(expected_xml
, params_xml
),
79 "Nil to XML conversion\nExpected: %s\nGot: %s" % (
80 tostring(expected_xml
), tostring(params_xml
)))
81 self
.assertEqual(params
, xml2py(expected_xml
),
82 "XML to nil conversion")
84 def testConvertBoolean(self
):
85 params
= [True, False]
86 params_xml
= py2xml(*params
)
87 expected_xml
= self
.parse_xml("""
88 <params xmlns="jabber:iq:rpc">
101 self
.assertTrue(self
.compare(expected_xml
, params_xml
),
102 "Boolean to XML conversion\nExpected: %s\nGot: %s" % (
103 tostring(expected_xml
), tostring(params_xml
)))
104 self
.assertEqual(params
, xml2py(expected_xml
),
105 "XML to boolean conversion")
107 def testConvertString(self
):
108 params
= ["'This' & \"That\""]
109 params_xml
= py2xml(*params
)
110 expected_xml
= self
.parse_xml("""
111 <params xmlns="jabber:iq:rpc">
114 <string>'This' & "That"</string>
119 self
.assertTrue(self
.compare(expected_xml
, params_xml
),
120 "String to XML conversion\nExpected: %s\nGot: %s" % (
121 tostring(expected_xml
), tostring(params_xml
)))
122 self
.assertEqual(params
, xml2py(expected_xml
),
123 "XML to string conversion")
125 def testConvertUnicodeString(self
):
127 params_xml
= py2xml(*params
)
128 expected_xml
= self
.parse_xml("""
129 <params xmlns="jabber:iq:rpc">
132 <string>おはよう</string>
137 self
.assertTrue(self
.compare(expected_xml
, params_xml
),
138 "String to XML conversion\nExpected: %s\nGot: %s" % (
139 tostring(expected_xml
), tostring(params_xml
)))
140 self
.assertEqual(params
, xml2py(expected_xml
),
141 "XML to string conversion")
143 def testConvertInteger(self
):
144 params
= [32767, -32768]
145 params_xml
= py2xml(*params
)
146 expected_xml
= self
.parse_xml("""
147 <params xmlns="jabber:iq:rpc">
160 alternate_xml
= self
.parse_xml("""
161 <params xmlns="jabber:iq:rpc">
174 self
.assertTrue(self
.compare(expected_xml
, params_xml
),
175 "Integer to XML conversion\nExpected: %s\nGot: %s" % (
176 tostring(expected_xml
), tostring(params_xml
)))
177 self
.assertEqual(params
, xml2py(expected_xml
),
178 "XML to boolean conversion")
179 self
.assertEqual(params
, xml2py(alternate_xml
),
180 "Alternate XML to boolean conversion")
183 def testConvertDouble(self
):
184 params
= [3.14159265]
185 params_xml
= py2xml(*params
)
186 expected_xml
= self
.parse_xml("""
187 <params xmlns="jabber:iq:rpc">
190 <double>3.14159265</double>
195 self
.assertTrue(self
.compare(expected_xml
, params_xml
),
196 "Double to XML conversion\nExpected: %s\nGot: %s" % (
197 tostring(expected_xml
), tostring(params_xml
)))
198 self
.assertEqual(params
, xml2py(expected_xml
),
199 "XML to double conversion")
201 def testConvertBase64(self
):
202 params
= [rpcbase64(base64
.b64encode(b
"Hello, world!"))]
203 params_xml
= py2xml(*params
)
204 expected_xml
= self
.parse_xml("""
205 <params xmlns="jabber:iq:rpc">
208 <base64>SGVsbG8sIHdvcmxkIQ==</base64>
213 alternate_xml
= self
.parse_xml("""
214 <params xmlns="jabber:iq:rpc">
217 <Base64>SGVsbG8sIHdvcmxkIQ==</Base64>
222 self
.assertTrue(self
.compare(expected_xml
, params_xml
),
223 "Base64 to XML conversion\nExpected: %s\nGot: %s" % (
224 tostring(expected_xml
), tostring(params_xml
)))
225 self
.assertEqual(list(map(lambda x
: x
.decode(), params
)),
226 list(map(lambda x
: x
.decode(), xml2py(expected_xml
))),
227 "XML to base64 conversion")
228 self
.assertEqual(list(map(lambda x
: x
.decode(), params
)),
229 list(map(lambda x
: x
.decode(), xml2py(alternate_xml
))),
230 "Alternate XML to base64 conversion")
232 def testConvertDateTime(self
):
233 params
= [rpctime("20111220T01:50:00")]
234 params_xml
= py2xml(*params
)
235 expected_xml
= self
.parse_xml("""
236 <params xmlns="jabber:iq:rpc">
239 <dateTime.iso8601>20111220T01:50:00</dateTime.iso8601>
244 self
.assertTrue(self
.compare(expected_xml
, params_xml
),
245 "DateTime to XML conversion\nExpected: %s\nGot: %s" % (
246 tostring(expected_xml
), tostring(params_xml
)))
247 self
.assertEqual(list(map(lambda x
: x
.iso8601(), params
)),
248 list(map(lambda x
: x
.iso8601(), xml2py(expected_xml
))),
251 def testConvertArray(self
):
252 params
= [[1,2,3], ('a', 'b', 'c')]
253 params_xml
= py2xml(*params
)
254 expected_xml
= self
.parse_xml("""
255 <params xmlns="jabber:iq:rpc">
260 <value><i4>1</i4></value>
261 <value><i4>2</i4></value>
262 <value><i4>3</i4></value>
271 <value><string>a</string></value>
272 <value><string>b</string></value>
273 <value><string>c</string></value>
280 self
.assertTrue(self
.compare(expected_xml
, params_xml
),
281 "Array to XML conversion\nExpected: %s\nGot: %s" % (
282 tostring(expected_xml
), tostring(params_xml
)))
283 self
.assertEqual(list(map(list, params
)), xml2py(expected_xml
),
284 "XML to array conversion")
286 def testConvertStruct(self
):
287 params
= [{"foo": "bar", "baz": False}]
288 params_xml
= py2xml(*params
)
289 expected_xml
= self
.parse_xml("""
290 <params xmlns="jabber:iq:rpc">
296 <value><string>bar</string></value>
300 <value><boolean>0</boolean></value>
307 self
.assertTrue(self
.compare(expected_xml
, params_xml
),
308 "Struct to XML conversion\nExpected: %s\nGot: %s" % (
309 tostring(expected_xml
), tostring(params_xml
)))
310 self
.assertEqual(params
, xml2py(expected_xml
),
311 "XML to struct conversion")
313 suite
= unittest
.TestLoader().loadTestsFromTestCase(TestJabberRPC
)