ln-xmpp4r 0.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (215) hide show
  1. data/CHANGELOG +91 -0
  2. data/COPYING +340 -0
  3. data/LICENSE +59 -0
  4. data/README.rdoc +113 -0
  5. data/README_ruby19.txt +43 -0
  6. data/Rakefile +252 -0
  7. data/data/doc/xmpp4r/examples/advanced/adventure/README +56 -0
  8. data/data/doc/xmpp4r/examples/advanced/adventure/adventure.rb +23 -0
  9. data/data/doc/xmpp4r/examples/advanced/adventure/adventuremuc.rb +136 -0
  10. data/data/doc/xmpp4r/examples/advanced/adventure/cube.xml +15 -0
  11. data/data/doc/xmpp4r/examples/advanced/adventure/tower.xml +69 -0
  12. data/data/doc/xmpp4r/examples/advanced/adventure/world.rb +424 -0
  13. data/data/doc/xmpp4r/examples/advanced/fileserve.conf +11 -0
  14. data/data/doc/xmpp4r/examples/advanced/fileserve.rb +346 -0
  15. data/data/doc/xmpp4r/examples/advanced/getonline.rb +56 -0
  16. data/data/doc/xmpp4r/examples/advanced/gtkmucclient.rb +315 -0
  17. data/data/doc/xmpp4r/examples/advanced/migrate.rb +88 -0
  18. data/data/doc/xmpp4r/examples/advanced/minimuc.rb +266 -0
  19. data/data/doc/xmpp4r/examples/advanced/pep-aggregator/index.xsl +235 -0
  20. data/data/doc/xmpp4r/examples/advanced/pep-aggregator/pep-aggregator.rb +147 -0
  21. data/data/doc/xmpp4r/examples/advanced/recvfile.rb +84 -0
  22. data/data/doc/xmpp4r/examples/advanced/rosterdiscovery.rb +129 -0
  23. data/data/doc/xmpp4r/examples/advanced/sendfile.conf +10 -0
  24. data/data/doc/xmpp4r/examples/advanced/sendfile.rb +72 -0
  25. data/data/doc/xmpp4r/examples/advanced/shellmgr/shellmgr.rb +51 -0
  26. data/data/doc/xmpp4r/examples/advanced/shellmgr/shellmgr_jabber.rb +43 -0
  27. data/data/doc/xmpp4r/examples/advanced/shellmgr/shellmgr_test.rb +10 -0
  28. data/data/doc/xmpp4r/examples/advanced/versionpoll.rb +109 -0
  29. data/data/doc/xmpp4r/examples/advanced/xmpping.rb +146 -0
  30. data/data/doc/xmpp4r/examples/advanced/xmppingrc.sample +14 -0
  31. data/data/doc/xmpp4r/examples/basic/change_password.rb +41 -0
  32. data/data/doc/xmpp4r/examples/basic/client.rb +70 -0
  33. data/data/doc/xmpp4r/examples/basic/component.rb +11 -0
  34. data/data/doc/xmpp4r/examples/basic/echo.rb +37 -0
  35. data/data/doc/xmpp4r/examples/basic/jabbersend.rb +41 -0
  36. data/data/doc/xmpp4r/examples/basic/mass_sender.rb +68 -0
  37. data/data/doc/xmpp4r/examples/basic/muc_owner_config.rb +12 -0
  38. data/data/doc/xmpp4r/examples/basic/mucinfo.rb +41 -0
  39. data/data/doc/xmpp4r/examples/basic/mucsimplebot.rb +82 -0
  40. data/data/doc/xmpp4r/examples/basic/register.rb +42 -0
  41. data/data/doc/xmpp4r/examples/basic/remove_registration.rb +18 -0
  42. data/data/doc/xmpp4r/examples/basic/roster.rb +44 -0
  43. data/data/doc/xmpp4r/examples/basic/rosterprint.rb +50 -0
  44. data/data/doc/xmpp4r/examples/basic/rosterrename.rb +34 -0
  45. data/data/doc/xmpp4r/examples/basic/rosterwatch.rb +171 -0
  46. data/data/doc/xmpp4r/examples/basic/send_vcard.rb +67 -0
  47. data/data/doc/xmpp4r/examples/basic/tune_client.rb +56 -0
  48. data/data/doc/xmpp4r/examples/basic/tune_server.rb +58 -0
  49. data/data/doc/xmpp4r/examples/basic/versionbot.rb +75 -0
  50. data/lib/xmpp4r.rb +116 -0
  51. data/lib/xmpp4r/base64.rb +32 -0
  52. data/lib/xmpp4r/bytestreams.rb +15 -0
  53. data/lib/xmpp4r/bytestreams/helper/filetransfer.rb +319 -0
  54. data/lib/xmpp4r/bytestreams/helper/ibb/base.rb +257 -0
  55. data/lib/xmpp4r/bytestreams/helper/ibb/initiator.rb +31 -0
  56. data/lib/xmpp4r/bytestreams/helper/ibb/target.rb +54 -0
  57. data/lib/xmpp4r/bytestreams/helper/socks5bytestreams/base.rb +152 -0
  58. data/lib/xmpp4r/bytestreams/helper/socks5bytestreams/initiator.rb +86 -0
  59. data/lib/xmpp4r/bytestreams/helper/socks5bytestreams/server.rb +198 -0
  60. data/lib/xmpp4r/bytestreams/helper/socks5bytestreams/socks5.rb +65 -0
  61. data/lib/xmpp4r/bytestreams/helper/socks5bytestreams/target.rb +79 -0
  62. data/lib/xmpp4r/bytestreams/iq/bytestreams.rb +170 -0
  63. data/lib/xmpp4r/bytestreams/iq/si.rb +206 -0
  64. data/lib/xmpp4r/callbacks.rb +133 -0
  65. data/lib/xmpp4r/caps.rb +1 -0
  66. data/lib/xmpp4r/caps/c.rb +67 -0
  67. data/lib/xmpp4r/caps/helper/generator.rb +160 -0
  68. data/lib/xmpp4r/caps/helper/helper.rb +84 -0
  69. data/lib/xmpp4r/client.rb +344 -0
  70. data/lib/xmpp4r/command/helper/responder.rb +53 -0
  71. data/lib/xmpp4r/command/iq/command.rb +154 -0
  72. data/lib/xmpp4r/component.rb +103 -0
  73. data/lib/xmpp4r/connection.rb +223 -0
  74. data/lib/xmpp4r/dataforms.rb +5 -0
  75. data/lib/xmpp4r/dataforms/x/data.rb +297 -0
  76. data/lib/xmpp4r/debuglog.rb +63 -0
  77. data/lib/xmpp4r/delay.rb +5 -0
  78. data/lib/xmpp4r/delay/x/delay.rb +99 -0
  79. data/lib/xmpp4r/discovery.rb +8 -0
  80. data/lib/xmpp4r/discovery/helper/helper.rb +58 -0
  81. data/lib/xmpp4r/discovery/helper/responder.rb +165 -0
  82. data/lib/xmpp4r/discovery/iq/discoinfo.rb +211 -0
  83. data/lib/xmpp4r/discovery/iq/discoitems.rb +147 -0
  84. data/lib/xmpp4r/errors.rb +284 -0
  85. data/lib/xmpp4r/feature_negotiation.rb +5 -0
  86. data/lib/xmpp4r/feature_negotiation/iq/feature.rb +28 -0
  87. data/lib/xmpp4r/framework/base.rb +55 -0
  88. data/lib/xmpp4r/framework/bot.rb +148 -0
  89. data/lib/xmpp4r/httpbinding.rb +5 -0
  90. data/lib/xmpp4r/httpbinding/client.rb +275 -0
  91. data/lib/xmpp4r/idgenerator.rb +37 -0
  92. data/lib/xmpp4r/iq.rb +221 -0
  93. data/lib/xmpp4r/jid.rb +167 -0
  94. data/lib/xmpp4r/last.rb +2 -0
  95. data/lib/xmpp4r/last/helper/helper.rb +37 -0
  96. data/lib/xmpp4r/last/iq/last.rb +67 -0
  97. data/lib/xmpp4r/location.rb +2 -0
  98. data/lib/xmpp4r/location/helper/helper.rb +56 -0
  99. data/lib/xmpp4r/location/location.rb +179 -0
  100. data/lib/xmpp4r/message.rb +180 -0
  101. data/lib/xmpp4r/muc.rb +14 -0
  102. data/lib/xmpp4r/muc/helper/mucbrowser.rb +92 -0
  103. data/lib/xmpp4r/muc/helper/mucclient.rb +462 -0
  104. data/lib/xmpp4r/muc/helper/simplemucclient.rb +332 -0
  105. data/lib/xmpp4r/muc/iq/mucadmin.rb +23 -0
  106. data/lib/xmpp4r/muc/iq/mucadminitem.rb +20 -0
  107. data/lib/xmpp4r/muc/iq/mucowner.rb +15 -0
  108. data/lib/xmpp4r/muc/item.rb +143 -0
  109. data/lib/xmpp4r/muc/x/muc.rb +70 -0
  110. data/lib/xmpp4r/muc/x/mucuserinvite.rb +60 -0
  111. data/lib/xmpp4r/muc/x/mucuseritem.rb +36 -0
  112. data/lib/xmpp4r/presence.rb +232 -0
  113. data/lib/xmpp4r/pubsub.rb +8 -0
  114. data/lib/xmpp4r/pubsub/children/configuration.rb +86 -0
  115. data/lib/xmpp4r/pubsub/children/event.rb +49 -0
  116. data/lib/xmpp4r/pubsub/children/item.rb +35 -0
  117. data/lib/xmpp4r/pubsub/children/items.rb +53 -0
  118. data/lib/xmpp4r/pubsub/children/node_config.rb +48 -0
  119. data/lib/xmpp4r/pubsub/children/publish.rb +38 -0
  120. data/lib/xmpp4r/pubsub/children/retract.rb +41 -0
  121. data/lib/xmpp4r/pubsub/children/subscription.rb +62 -0
  122. data/lib/xmpp4r/pubsub/children/subscription_config.rb +67 -0
  123. data/lib/xmpp4r/pubsub/children/unsubscribe.rb +48 -0
  124. data/lib/xmpp4r/pubsub/helper/nodebrowser.rb +129 -0
  125. data/lib/xmpp4r/pubsub/helper/nodehelper.rb +156 -0
  126. data/lib/xmpp4r/pubsub/helper/oauth_service_helper.rb +90 -0
  127. data/lib/xmpp4r/pubsub/helper/servicehelper.rb +456 -0
  128. data/lib/xmpp4r/pubsub/iq/pubsub.rb +19 -0
  129. data/lib/xmpp4r/query.rb +15 -0
  130. data/lib/xmpp4r/reliable.rb +168 -0
  131. data/lib/xmpp4r/rexmladdons.rb +157 -0
  132. data/lib/xmpp4r/roster.rb +7 -0
  133. data/lib/xmpp4r/roster/helper/roster.rb +522 -0
  134. data/lib/xmpp4r/roster/iq/roster.rb +215 -0
  135. data/lib/xmpp4r/roster/x/roster.rb +138 -0
  136. data/lib/xmpp4r/rpc.rb +2 -0
  137. data/lib/xmpp4r/rpc/helper/client.rb +123 -0
  138. data/lib/xmpp4r/rpc/helper/server.rb +74 -0
  139. data/lib/xmpp4r/rpc/helper/xmlrpcaddons.rb +67 -0
  140. data/lib/xmpp4r/rpc/iq/rpc.rb +23 -0
  141. data/lib/xmpp4r/sasl.rb +248 -0
  142. data/lib/xmpp4r/semaphore.rb +38 -0
  143. data/lib/xmpp4r/stream.rb +599 -0
  144. data/lib/xmpp4r/streamparser.rb +85 -0
  145. data/lib/xmpp4r/test/listener_mocker.rb +118 -0
  146. data/lib/xmpp4r/tune.rb +2 -0
  147. data/lib/xmpp4r/tune/helper/helper.rb +58 -0
  148. data/lib/xmpp4r/tune/tune.rb +113 -0
  149. data/lib/xmpp4r/vcard.rb +6 -0
  150. data/lib/xmpp4r/vcard/helper/vcard.rb +84 -0
  151. data/lib/xmpp4r/vcard/iq/vcard.rb +109 -0
  152. data/lib/xmpp4r/version.rb +7 -0
  153. data/lib/xmpp4r/version/helper/responder.rb +72 -0
  154. data/lib/xmpp4r/version/helper/simpleresponder.rb +44 -0
  155. data/lib/xmpp4r/version/iq/version.rb +105 -0
  156. data/lib/xmpp4r/x.rb +37 -0
  157. data/lib/xmpp4r/xhtml.rb +1 -0
  158. data/lib/xmpp4r/xhtml/html.rb +115 -0
  159. data/lib/xmpp4r/xmpp4r.rb +20 -0
  160. data/lib/xmpp4r/xmppelement.rb +168 -0
  161. data/lib/xmpp4r/xmppstanza.rb +162 -0
  162. data/setup.rb +1586 -0
  163. data/test/bytestreams/tc_ibb.rb +188 -0
  164. data/test/bytestreams/tc_socks5bytestreams.rb +114 -0
  165. data/test/caps/tc_helper.rb +158 -0
  166. data/test/dataforms/tc_data.rb +81 -0
  167. data/test/delay/tc_xdelay.rb +51 -0
  168. data/test/discovery/tc_responder.rb +91 -0
  169. data/test/last/tc_helper.rb +75 -0
  170. data/test/lib/assert_equal_xml.rb +14 -0
  171. data/test/lib/clienttester.rb +149 -0
  172. data/test/muc/tc_muc_mucclient.rb +834 -0
  173. data/test/muc/tc_muc_simplemucclient.rb +114 -0
  174. data/test/muc/tc_mucowner.rb +50 -0
  175. data/test/pubsub/tc_helper.rb +785 -0
  176. data/test/pubsub/tc_nodeconfig.rb +61 -0
  177. data/test/pubsub/tc_subscriptionconfig.rb +41 -0
  178. data/test/reliable/tc_disconnect_cleanup.rb +334 -0
  179. data/test/reliable/tc_disconnect_exception.rb +37 -0
  180. data/test/reliable/tc_listener_mocked_test.rb +68 -0
  181. data/test/reliable/tc_reliable_connection.rb +31 -0
  182. data/test/roster/tc_helper.rb +524 -0
  183. data/test/roster/tc_iqqueryroster.rb +173 -0
  184. data/test/roster/tc_xroster.rb +73 -0
  185. data/test/rpc/tc_helper.rb +96 -0
  186. data/test/tc_callbacks.rb +129 -0
  187. data/test/tc_class_names.rb +146 -0
  188. data/test/tc_client.rb +30 -0
  189. data/test/tc_errors.rb +146 -0
  190. data/test/tc_idgenerator.rb +30 -0
  191. data/test/tc_iq.rb +113 -0
  192. data/test/tc_iqquery.rb +31 -0
  193. data/test/tc_jid.rb +204 -0
  194. data/test/tc_message.rb +131 -0
  195. data/test/tc_presence.rb +150 -0
  196. data/test/tc_rexml.rb +139 -0
  197. data/test/tc_stream.rb +167 -0
  198. data/test/tc_streamComponent.rb +95 -0
  199. data/test/tc_streamError.rb +129 -0
  200. data/test/tc_streamSend.rb +59 -0
  201. data/test/tc_streamparser.rb +125 -0
  202. data/test/tc_xmppstanza.rb +135 -0
  203. data/test/ts_xmpp4r.rb +44 -0
  204. data/test/tune/tc_helper_recv.rb +82 -0
  205. data/test/tune/tc_helper_send.rb +74 -0
  206. data/test/tune/tc_tune.rb +79 -0
  207. data/test/vcard/tc_helper.rb +49 -0
  208. data/test/vcard/tc_iqvcard.rb +62 -0
  209. data/test/version/tc_helper.rb +60 -0
  210. data/test/version/tc_iqqueryversion.rb +97 -0
  211. data/test/xhtml/tc_html.rb +41 -0
  212. data/tools/gen_requires.bash +31 -0
  213. data/tools/xmpp4r-gemspec-test.rb +11 -0
  214. data/xmpp4r.gemspec +238 -0
  215. metadata +280 -0
@@ -0,0 +1,31 @@
1
+ #!/usr/bin/ruby
2
+
3
+ $:.unshift '../lib'
4
+
5
+ require 'test/unit'
6
+ require 'xmpp4r/rexmladdons'
7
+ require 'xmpp4r/query'
8
+ include Jabber
9
+
10
+ class IqQueryTest < Test::Unit::TestCase
11
+ def test_create
12
+ x = IqQuery.new()
13
+ assert_equal("query", x.name)
14
+ assert_equal("<query/>", x.to_s)
15
+ end
16
+
17
+ def test_import
18
+ q = IqQuery.new
19
+ assert_equal(IqQuery, q.class)
20
+
21
+ e = REXML::Element.new('query')
22
+ e.add_namespace('jabber:iq:roster')
23
+ # kind_of? only checks that the class belongs to the IqQuery class
24
+ # hierarchy. See IqQueryRosterTest#test_import for a more strict
25
+ # check.
26
+ assert_kind_of(IqQuery, IqQuery.import(e))
27
+
28
+ # Importing specific derivates is to be tested in the test case of the derivate
29
+ # (e.g. tc_iqqueryroster.rb)
30
+ end
31
+ end
@@ -0,0 +1,204 @@
1
+ #!/usr/bin/ruby
2
+
3
+ $:.unshift '../lib'
4
+
5
+ require 'test/unit'
6
+ require 'xmpp4r/jid'
7
+ require 'xmpp4r/xmppelement'
8
+ require 'xmpp4r/errors'
9
+ include Jabber
10
+
11
+ class JIDTest < Test::Unit::TestCase
12
+ def test_create1
13
+ j = JID.new('a', 'b', 'c')
14
+ assert_equal('a', j.node)
15
+ assert_equal('b', j.domain)
16
+ assert_equal('c', j.resource)
17
+ end
18
+
19
+ def test_create2
20
+ j = JID.new('a', 'b', 'c')
21
+ j2 = JID.new(j)
22
+ assert_equal('a', j2.node)
23
+ assert_equal('b', j2.domain)
24
+ assert_equal('c', j2.resource)
25
+ assert_equal('a@b/c', j.to_s)
26
+ end
27
+
28
+ def test_create3
29
+ j = JID.new('a@b/c')
30
+ assert_equal('a', j.node)
31
+ assert_equal('b', j.domain)
32
+ assert_equal('c', j.resource)
33
+ assert_equal('a@b/c', j.to_s)
34
+ end
35
+
36
+ def test_create4
37
+ j = JID.new('a@b')
38
+ assert_equal('a', j.node)
39
+ assert_equal('b', j.domain)
40
+ assert_equal(nil, j.resource)
41
+ assert_equal('a@b', j.to_s)
42
+ end
43
+
44
+ def test_create5
45
+ j = JID.new
46
+ assert_equal(nil, j.node)
47
+ assert_equal(nil, j.domain)
48
+ assert_equal(nil, j.resource)
49
+ assert_equal('', j.to_s)
50
+ end
51
+
52
+ def test_create6
53
+ j = JID.new('dom')
54
+ assert_equal(nil, j.node)
55
+ assert_equal('dom', j.domain)
56
+ assert_equal(nil, j.resource)
57
+ assert_equal('dom', j.to_s)
58
+ end
59
+
60
+ def test_create7
61
+ j = JID.new('dom/res')
62
+ assert_equal(nil, j.node)
63
+ assert_equal('dom', j.domain)
64
+ assert_equal('res', j.resource)
65
+ assert_equal('dom/res', j.to_s)
66
+ end
67
+
68
+ def test_create8
69
+ j = JID.new('dom/a@b')
70
+ assert_equal(nil, j.node)
71
+ assert_equal('dom', j.domain)
72
+ assert_equal('a@b', j.resource)
73
+ assert_equal('dom/a@b', j.to_s)
74
+ end
75
+
76
+ def test_create9
77
+ assert_nothing_raised { JID.new("#{'n'*1023}@#{'d'*1023}/#{'r'*1023}") }
78
+ assert_raises(Jabber::ArgumentError) { JID.new("#{'n'*1024}@#{'d'*1023}/#{'r'*1023}") }
79
+ assert_raises(Jabber::ArgumentError) { JID.new("#{'n'*1023}@#{'d'*1024}/#{'r'*1023}") }
80
+ assert_raises(Jabber::ArgumentError) { JID.new("#{'n'*1023}@#{'d'*1023}/#{'r'*1024}") }
81
+ end
82
+
83
+ def test_create10
84
+ j = JID.new('@b/c')
85
+ assert_equal('', j.node)
86
+ assert_equal('b', j.domain)
87
+ assert_equal('c', j.resource)
88
+ assert_equal('@b/c', j.to_s)
89
+ end
90
+
91
+ def test_create11
92
+ j = JID.new('@b')
93
+ assert_equal('', j.node)
94
+ assert_equal('b', j.domain)
95
+ assert_equal(nil, j.resource)
96
+ assert_equal('@b', j.to_s)
97
+ end
98
+
99
+ def test_create12
100
+ j = JID.new('@b/')
101
+ assert_equal('', j.node)
102
+ assert_equal('b', j.domain)
103
+ assert_equal('', j.resource)
104
+ assert_equal('@b/', j.to_s)
105
+ end
106
+
107
+ def test_create13
108
+ j = JID.new('a@b/')
109
+ assert_equal('a', j.node)
110
+ assert_equal('b', j.domain)
111
+ assert_equal('', j.resource)
112
+ assert_equal('a@b/', j.to_s)
113
+ end
114
+
115
+ def test_create14
116
+ j = JID.new('nOdE@dOmAiN/rEsOuRcE')
117
+ assert_equal('node', j.node)
118
+ assert_equal('domain', j.domain)
119
+ assert_equal('rEsOuRcE', j.resource)
120
+ assert_equal('node@domain/rEsOuRcE', j.to_s)
121
+ end
122
+
123
+ def test_tos
124
+ assert_equal('', JID.new.to_s)
125
+ assert_equal('domain.fr', JID.new('domain.fr').to_s)
126
+ assert_equal('l@domain.fr', JID.new('l','domain.fr').to_s)
127
+ assert_equal('l@domain.fr/res', JID.new('l','domain.fr','res').to_s)
128
+ assert_equal('domain.fr/res', JID.new(nil,'domain.fr','res').to_s)
129
+ end
130
+
131
+ def test_equal
132
+ assert_equal(JID.new('domain.fr'), JID.new('domain.fr'))
133
+ assert_equal(JID.new('domain.fr'), JID.new(nil, 'domain.fr'))
134
+ assert_equal(JID.new('l@domain.fr'), JID.new('l@domain.fr'))
135
+ assert_equal(JID.new('l@domain.fr'), JID.new('l', 'domain.fr'))
136
+ assert_equal(JID.new('l@domain.fr/res'), JID.new('l@domain.fr/res'))
137
+ assert_equal(JID.new('l@domain.fr/res'), JID.new('l', 'domain.fr', 'res'))
138
+ end
139
+
140
+ def test_hash
141
+ h = {}
142
+ j = JID.new('l@domain.fr/res')
143
+ h[j] = 'a'
144
+ assert_equal(h[j], h[JID.new('l@domain.fr/res')])
145
+ end
146
+
147
+ def test_strip
148
+ assert_equal(JID.new('l@domain.fr'), JID.new('l@domain.fr/res').strip)
149
+ assert_equal(JID.new('l@domain.fr'), JID.new('l@domain.fr').strip)
150
+ assert_equal(JID.new('l@domain.fr'), JID.new('l@domain.fr/res').bare)
151
+ jid = JID.new('l@domain.fr/res')
152
+ jid.strip!
153
+ assert_equal(JID.new('l@domain.fr'), jid)
154
+
155
+ jid = JID.new('l@domain.fr/res')
156
+ jid.bare!
157
+ assert_equal(JID.new('l@domain.fr'), jid)
158
+ end
159
+
160
+ def test_change1
161
+ j = JID.new('a@b/c')
162
+ j.node = 'd'
163
+ assert_equal('d@b/c', j.to_s)
164
+ j.domain = 'e'
165
+ assert_equal('d@e/c', j.to_s)
166
+ j.resource = 'f'
167
+ assert_equal('d@e/f', j.to_s)
168
+ end
169
+
170
+ def test_escaping
171
+ j = JID.new('user1@server1')
172
+ j2 = JID.new(JID::escape(j), 'server2', 'res2')
173
+ assert_equal('user1%server1@server2/res2', j2.to_s)
174
+ end
175
+
176
+ if defined?(libidnbug) # this crashes the interpreter
177
+ def test_invalidnode
178
+ # assert_raises(IDN::Stringprep::StringprepError) { JID.new('toto@a/a', 'server', 'res') }
179
+ assert_raises(IDN::Stringprep::StringprepError) { IDN::Stringprep.nodeprep('toto@a/a') }
180
+ end
181
+ end
182
+
183
+ def test_empty
184
+ assert(JID.new.empty?)
185
+ assert(!JID.new("test").empty?)
186
+ end
187
+
188
+ def test_stripped
189
+ assert(JID.new("node@domain").stripped?)
190
+ assert(!JID.new("node@domain/res").stripped?)
191
+ assert(JID.new("node@domain").bared?)
192
+ assert(!JID.new("node@domain/res").bared?)
193
+ end
194
+
195
+ def test_sort
196
+ assert_equal(-1, JID.new('a@b') <=> JID.new('b@b'))
197
+ assert_equal(0, JID.new('a@b') <=> JID.new('a@b'))
198
+ assert_equal(1, JID.new('a@b/r') <=> JID.new('a@b'))
199
+
200
+ jids = [JID.new('b@b'), JID.new('a@b/r'), JID.new('a@b')]
201
+ jids.sort!
202
+ assert_equal([JID.new('a@b'), JID.new('a@b/r'), JID.new('b@b')], jids)
203
+ end
204
+ end
@@ -0,0 +1,131 @@
1
+ #!/usr/bin/ruby
2
+
3
+ $:.unshift '../lib'
4
+
5
+ require 'test/unit'
6
+ require 'socket'
7
+ require 'xmpp4r/rexmladdons'
8
+ require 'xmpp4r/message'
9
+ require 'xmpp4r/errors'
10
+ include Jabber
11
+
12
+ class MessageTest < Test::Unit::TestCase
13
+ def test_create
14
+ x = Message.new()
15
+ assert_equal("message", x.name)
16
+ assert_equal("jabber:client", x.namespace)
17
+ assert_equal(nil, x.to)
18
+ assert_equal(nil, x.body)
19
+
20
+ x = Message.new("lucas@linux.ensimag.fr", "coucou")
21
+ assert_equal("message", x.name)
22
+ assert_equal("lucas@linux.ensimag.fr", x.to.to_s)
23
+ assert_equal("coucou", x.body)
24
+ end
25
+
26
+ def test_import
27
+ x = Message.new
28
+ assert_kind_of(REXML::Element, x.typed_add(REXML::Element.new('thread')))
29
+ assert_kind_of(X, x.typed_add(REXML::Element.new('x')))
30
+ assert_kind_of(X, x.x)
31
+ end
32
+
33
+ def test_type
34
+ x = Message.new
35
+ assert_equal(nil, x.type)
36
+ x.type = :chat
37
+ assert_equal(:chat, x.type)
38
+ assert_equal(x, x.set_type(:error))
39
+ assert_equal(:error, x.type)
40
+ x.type = :groupchat
41
+ assert_equal(:groupchat, x.type)
42
+ x.type = :headline
43
+ assert_equal(:headline, x.type)
44
+ x.type = :normal
45
+ assert_equal(:normal, x.type)
46
+ x.type = :invalid
47
+ assert_equal(nil, x.type)
48
+ end
49
+
50
+ def test_body
51
+ x = Message.new()
52
+ assert_equal(nil, x.body)
53
+ assert_equal(x, x.set_body("trezrze ezfrezr ezr zer ezr ezrezrez ezr z"))
54
+ assert_equal("trezrze ezfrezr ezr zer ezr ezrezrez ezr z", x.body)
55
+ x.body = "2"
56
+ assert_equal("2", x.body)
57
+ end
58
+
59
+ def test_subject
60
+ x = Message.new
61
+ assert_equal(nil, x.subject)
62
+ subject = REXML::Element.new('subject')
63
+ subject.text = 'A'
64
+ x.add(subject)
65
+ assert_equal('A', x.subject)
66
+ x.subject = 'Test message'
67
+ assert_equal('Test message', x.subject)
68
+ x.each_element('subject') { |s| assert_equal('Test message', s.text) }
69
+ assert_equal(x, x.set_subject('Breaking news'))
70
+ assert_equal('Breaking news', x.subject)
71
+ end
72
+
73
+ def test_thread
74
+ x = Message.new
75
+ assert_equal(nil, x.thread)
76
+ thread = REXML::Element.new('thread')
77
+ thread.text = '123'
78
+ x.add(thread)
79
+ assert_equal('123', x.thread)
80
+ x.thread = '321'
81
+ assert_equal('321', x.thread)
82
+ x.each_element('thread') { |s| assert_equal('321', s.text) }
83
+ assert_equal(x, x.set_thread('abc'))
84
+ assert_equal('abc', x.thread)
85
+ end
86
+
87
+ def test_chat_state
88
+ x = Message.new
89
+ assert_equal(nil, x.chat_state)
90
+ chat_state = REXML::Element.new('active')
91
+ chat_state.add_namespace('http://jabber.org/protocol/chatstates')
92
+ x.add(chat_state)
93
+ assert_equal(:active, x.chat_state)
94
+ x.chat_state = :gone
95
+ assert_equal(:gone, x.chat_state)
96
+ assert_raise(InvalidChatState) do
97
+ x.chat_state = :some_invalid_state
98
+ end
99
+ assert_equal true, x.gone?
100
+ end
101
+
102
+ def test_error
103
+ x = Message.new()
104
+ assert_equal(nil, x.error)
105
+ e = REXML::Element.new('error')
106
+ x.add(e)
107
+ # test if, after an import, the error element is successfully changed
108
+ # into an ErrorResponse object.
109
+ x2 = Message.new.import(x)
110
+ assert_equal(ErrorResponse, x2.first_element('error').class)
111
+ end
112
+
113
+ def test_answer
114
+ orig = Message.new
115
+ orig.from = 'a@b'
116
+ orig.to = 'b@a'
117
+ orig.id = '123'
118
+ orig.type = :chat
119
+ orig.add(REXML::Element.new('x'))
120
+
121
+ answer = orig.answer
122
+ assert_equal(JID.new('b@a'), answer.from)
123
+ assert_equal(JID.new('a@b'), answer.to)
124
+ assert_equal('123', answer.id)
125
+ assert_equal(:chat, answer.type)
126
+ answer.each_element { |e|
127
+ assert_equal('x', e.name)
128
+ assert_kind_of(X, e)
129
+ }
130
+ end
131
+ end
@@ -0,0 +1,150 @@
1
+ #!/usr/bin/ruby
2
+
3
+ $:.unshift '../lib'
4
+
5
+ require 'test/unit'
6
+ require 'socket'
7
+ require 'xmpp4r/rexmladdons'
8
+ require 'xmpp4r/presence'
9
+ require 'xmpp4r/errors'
10
+ include Jabber
11
+
12
+ class PresenceTest < Test::Unit::TestCase
13
+ def test_create
14
+ x = Presence.new()
15
+ assert_equal("presence", x.name)
16
+ assert_equal("jabber:client", x.namespace)
17
+ assert_equal(nil, x.to)
18
+ assert_equal(nil, x.show)
19
+ assert_equal(nil, x.status)
20
+ assert_equal(nil, x.priority)
21
+
22
+ x = Presence.new(:away, "I am away", 23)
23
+ assert_equal("presence", x.name)
24
+ assert_equal(:away, x.show)
25
+ assert_equal("away", x.show.to_s)
26
+ assert_equal("I am away", x.status)
27
+ assert_equal(23, x.priority)
28
+ end
29
+
30
+ def test_show
31
+ x = Presence.new()
32
+ assert_equal(nil, x.show)
33
+ assert_raise(RuntimeError) { x.show = "a" }
34
+ assert_equal(nil, x.show)
35
+ assert_raise(RuntimeError) { x.show = 'away' }
36
+ assert_equal(nil, x.show)
37
+ x.show = :away
38
+ assert_equal(:away, x.show)
39
+ x.each_element('show') { |e| assert(e.class == REXML::Element, "<show/> is not REXML::Element") }
40
+ x.show = nil
41
+ assert_equal(nil, x.show)
42
+ x.each_element('show') { |e| assert(true, "<show/> exists after 'show=nil'") }
43
+ x.show = nil
44
+ assert_equal(nil, x.show)
45
+
46
+ showelement = REXML::Element.new('show')
47
+ showelement.text = 'chat'
48
+ x.add(showelement)
49
+ assert_equal(:chat, x.show)
50
+ end
51
+
52
+ def test_status
53
+ x = Presence.new()
54
+ assert_equal(nil, x.status)
55
+ x.status = "b"
56
+ assert_equal("b", x.status)
57
+ x.each_element('status') { |e| assert(e.class == REXML::Element, "<status/> is not REXML::Element") }
58
+ x.status = nil
59
+ assert_equal(nil, x.status)
60
+ x.each_element('status') { |e| assert(true, "<status/> exists after 'status=nil'") }
61
+ x.status = nil
62
+ assert_equal(nil, x.status)
63
+ end
64
+
65
+ def test_priority
66
+ x = Presence.new()
67
+ assert_equal(nil, x.priority)
68
+ x.priority = 5
69
+ assert_equal(5, x.priority)
70
+ x.each_element('priority') { |e| assert(e.class == REXML::Element, "<priority/> is not REXML::Element") }
71
+ x.priority = "5"
72
+ assert_equal(5, x.priority)
73
+ x.priority = nil
74
+ assert_equal(nil, x.priority)
75
+ x.each_element('priority') { |e| assert(true, "<priority/> exists after 'priority=nil'") }
76
+ end
77
+
78
+ def test_type
79
+ x = Presence.new()
80
+ assert_equal(nil, x.type)
81
+ x.type = :delete
82
+ assert_equal(nil, x.type)
83
+ x.type = nil
84
+ assert_equal(nil, x.type)
85
+ x.type = nil
86
+ assert_equal(nil, x.type)
87
+ [:error, :probe, :subscribe, :subscribed, :unavailable, :unsubscribe, :unsubscribed, nil].each { |type|
88
+ x.type = type
89
+ assert_equal(type, x.type)
90
+ }
91
+ end
92
+
93
+ def test_chaining
94
+ x = Presence.new()
95
+ x.set_show(:xa).set_status("Plundering the fridge.").set_priority(0)
96
+ assert_equal(:xa, x.show)
97
+ assert_equal("Plundering the fridge.", x.status)
98
+ assert_equal(0, x.priority)
99
+ end
100
+
101
+ def test_error
102
+ x = Presence.new()
103
+ e = REXML::Element.new('error')
104
+ x.add(e)
105
+ x2 = Presence.new.import(x)
106
+ # test if, after an import, the error element is successfully changed
107
+ # into an ErrorResponse object.
108
+ assert_equal(ErrorResponse, x2.first_element('error').class)
109
+ end
110
+
111
+ def test_sample
112
+ x = Presence.new
113
+ require 'rexml/document'
114
+ d = REXML::Document.new("<presence from='astro@spaceboyz.net/versionbot' to='astro@spaceboyz.net/edgarr' xmlns='jabber:client'>\n <x from='astro@spaceboyz.net/versionbot' stamp='20050823T02:18:42' xmlns='jabber:x:delay'/><show>xa</show>\n <status>I am the evil fingerprinting robot</status>\n </presence>")
115
+ x.import(d.root)
116
+ num = 0
117
+ x.each_element('show') { num += 1 }
118
+ assert_equal(1, num)
119
+ assert_equal(:xa, x.show)
120
+ assert_equal('I am the evil fingerprinting robot', x.status)
121
+ end
122
+
123
+ def test_xpathbug
124
+ require 'rexml/document'
125
+ d = REXML::Document.new("<tag1 xmlns='ns1'><tag2 xmlns='ns2'/><tada>xa</tada></tag1>")
126
+ x = d.root
127
+ num = 0
128
+ x.each_element('tada') { num += 1 }
129
+ assert_equal(1, num)
130
+ end
131
+
132
+ def test_compare_prio
133
+ assert_equal(0, Presence.new(:chat, '', 5) <=> Presence.new(:chat, '', 5))
134
+ assert_equal(-1, Presence.new(:chat, '', 4) <=> Presence.new(:chat, '', 5))
135
+ assert_equal(1, Presence.new(:chat, '', 4) <=> Presence.new(:chat, '', 3))
136
+ assert_equal(-1, Presence.new(:chat, '', nil) <=> Presence.new(:chat, '', 3))
137
+ assert_equal(1, Presence.new(:chat, '', 10) <=> Presence.new(:chat, '', nil))
138
+ assert_equal(0, Presence.new(:chat, '', nil) <=> Presence.new(:chat, '', nil))
139
+ end
140
+
141
+ def test_compare_interest
142
+ unav = Presence.new.set_type(:unavailable)
143
+ assert_equal(0, unav.cmp_interest(unav))
144
+ assert_equal(1, unav.cmp_interest(Presence.new))
145
+ assert_equal(-1, Presence.new.cmp_interest(unav))
146
+ assert_equal(1, Presence.new(:chat).cmp_interest(Presence.new))
147
+ assert_equal(-1, Presence.new(:away).cmp_interest(Presence.new(:dnd)))
148
+ end
149
+
150
+ end