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,59 @@
1
+ #!/usr/bin/ruby
2
+
3
+ $:.unshift '../lib'
4
+
5
+ require 'test/unit'
6
+ require 'socket'
7
+ require 'tempfile'
8
+ require 'io/wait'
9
+ require 'xmpp4r'
10
+ include Jabber
11
+
12
+ class StreamSendTest < Test::Unit::TestCase
13
+ def setup
14
+ @tmpfile = Tempfile.new("StreamSendTest")
15
+ @tmpfilepath = @tmpfile.path()
16
+ @tmpfile.unlink
17
+ @servlisten = UNIXServer.new(@tmpfilepath)
18
+ thServer = Thread.new { @server = @servlisten.accept }
19
+ @iostream = UNIXSocket.new(@tmpfilepath)
20
+ @stream = Stream.new
21
+ @stream.start(@iostream)
22
+
23
+ thServer.join
24
+ end
25
+
26
+ def teardown
27
+ @stream.close
28
+ @server.close
29
+ @servlisten.close
30
+ end
31
+
32
+ def mysend(s)
33
+ @stream.send(s)
34
+ @stream.send("\n") #needed for easy test writing
35
+ end
36
+
37
+ ##
38
+ # Tries to send a basic message
39
+ def test_sendbasic
40
+ mysend(Message.new)
41
+ assert_equal("<message/>\n", @server.gets)
42
+ end
43
+
44
+ def test_sendmessage
45
+ mysend(Message.new('lucas@linux.ensimag.fr', 'coucou'))
46
+ assert_equal("<message to='lucas@linux.ensimag.fr'><body>coucou</body></message>\n", @server.gets)
47
+ end
48
+
49
+ def test_sendpresence
50
+ mysend(Presence.new)
51
+ assert_equal("<presence/>\n", @server.gets)
52
+ end
53
+
54
+ def test_sendiq
55
+ mysend(Iq.new)
56
+ assert_equal("<iq/>\n", @server.gets)
57
+ end
58
+
59
+ end
@@ -0,0 +1,125 @@
1
+ #!/usr/bin/ruby
2
+
3
+ $:.unshift File.join(File.dirname(__FILE__), '..', 'lib')
4
+
5
+ require 'tempfile'
6
+ require 'test/unit'
7
+ require 'socket'
8
+ require 'xmpp4r'
9
+ include Jabber
10
+
11
+ class MockListener
12
+ attr_reader :received
13
+
14
+ def receive(element)
15
+ @received = element
16
+ end
17
+
18
+ def parse_failure(exception)
19
+ raise exception
20
+ end
21
+ end
22
+
23
+ class StreamParserTest < Test::Unit::TestCase
24
+ STREAM = '<stream:stream xmlns:stream="http://etherx.jabber.org/streams">'
25
+
26
+ def setup
27
+ @listener = MockListener.new
28
+ end
29
+
30
+ def teardown
31
+ @listener = nil
32
+ end
33
+
34
+ def parse_simple_helper(fixture)
35
+ parser = StreamParser.new(STREAM + fixture, @listener)
36
+
37
+ begin
38
+ parser.parse
39
+ rescue Jabber::ServerDisconnected => e
40
+ end
41
+
42
+ yield parse_with_rexml(fixture)
43
+ end
44
+
45
+ def parse_with_rexml(fixture)
46
+ REXML::Document.new(fixture).root
47
+ end
48
+
49
+ def test_simple_text
50
+ parse_simple_helper( "<a>text</a>" ) do |desired|
51
+ assert_equal desired.name, @listener.received.name
52
+ assert_equal desired.text, @listener.received.text
53
+ assert_equal desired.cdatas, @listener.received.cdatas
54
+ end
55
+ end
56
+
57
+ def test_simple_cdata
58
+ parse_simple_helper( "<a><![CDATA[<cdata>]]></a>" ) do |desired|
59
+ assert_equal desired.name, @listener.received.name
60
+ assert_equal desired.text, @listener.received.text
61
+ assert_equal desired.cdatas, @listener.received.cdatas
62
+ end
63
+ end
64
+
65
+ def test_composite_text_cdata
66
+ parse_simple_helper( "<a>text<![CDATA[<cdata>]]></a>" ) do |desired|
67
+ assert_equal desired.name, @listener.received.name
68
+ assert_equal desired.text, @listener.received.text
69
+ assert_equal desired.cdatas, @listener.received.cdatas
70
+ end
71
+ end
72
+
73
+ def test_composite_cdata_text
74
+ parse_simple_helper( "<a><![CDATA[<cdata>]]>text</a>" ) do |desired|
75
+ assert_equal desired.name, @listener.received.name
76
+ assert_equal desired.text, @listener.received.text
77
+ assert_equal desired.cdatas, @listener.received.cdatas
78
+ end
79
+ end
80
+
81
+ def test_complex_composite_cdata_text
82
+ parse_simple_helper( "<a><![CDATA[<cdata>]]>text<![CDATA[<cdata>]]>text</a>" ) do |desired|
83
+ assert_equal desired.name, @listener.received.name
84
+ assert_equal desired.text, @listener.received.text
85
+ assert_equal desired.cdatas, @listener.received.cdatas
86
+ end
87
+ end
88
+
89
+ def test_entity_escaping1
90
+ parse_simple_helper( "<a>&apos;&amp;&quot;</a>" ) do |desired|
91
+ assert_equal "'&\"", @listener.received.text
92
+ assert_equal "<a>&apos;&amp;&quot;</a>", @listener.received.to_s
93
+ end
94
+ end
95
+
96
+ def test_entity_escaping2
97
+ parse_simple_helper( "<a>&amp;amp;amp;</a>" ) do |desired|
98
+ assert_equal "&amp;amp;", @listener.received.text
99
+ assert_equal "<a>&amp;amp;amp;</a>", @listener.received.to_s
100
+ end
101
+ end
102
+
103
+ =begin
104
+ ##
105
+ # FIXME:
106
+ # http://www.germane-software.com/projects/rexml/ticket/165
107
+ def test_unbound_prefix
108
+ fixture = "<message><soe:instantMessage/></message>"
109
+ parser = StreamParser.new(STREAM + fixture, @listener)
110
+
111
+ assert_nothing_raised { parser.parse }
112
+ end
113
+ =end
114
+
115
+ def test_stream_restart
116
+ parser = StreamParser.new(STREAM + "<stream:stream xmlns:stream='http://etherx.jabber.org/streams' to='foobar'>", @listener)
117
+
118
+ begin
119
+ parser.parse
120
+ rescue Jabber::ServerDisconnected => e
121
+ end
122
+
123
+ assert_equal 'foobar', @listener.received.attributes['to']
124
+ end
125
+ end
@@ -0,0 +1,135 @@
1
+ #!/usr/bin/ruby
2
+
3
+ $:.unshift '../lib'
4
+
5
+ require 'test/unit'
6
+ require 'socket'
7
+ require 'xmpp4r/rexmladdons'
8
+ require 'xmpp4r/xmppstanza'
9
+ require 'xmpp4r/iq'
10
+ require 'xmpp4r/feature_negotiation'
11
+ require 'xmpp4r/dataforms'
12
+ require 'xmpp4r/errors'
13
+ include Jabber
14
+
15
+ class XMPPStanzaTest < Test::Unit::TestCase
16
+
17
+ ##
18
+ # Hack: XMPPStanza derives from XMPPElement
19
+ # which enforces element classes to be named at declaration time
20
+ class MyXMPPStanza < XMPPStanza
21
+ name_xmlns 'stanza', 'http://home.gna.org/xmpp4r'
22
+ end
23
+
24
+ class MyStanza < XMPPStanza
25
+ end
26
+
27
+ def test_from
28
+ x = MyXMPPStanza.new
29
+ assert_equal(nil, x.from)
30
+ assert_equal(x, x.set_from("blop"))
31
+ assert_equal("blop", x.from.to_s)
32
+ x.from = "tada"
33
+ assert_equal("tada", x.from.to_s)
34
+ end
35
+
36
+ def test_to
37
+ x = MyXMPPStanza.new
38
+ assert_equal(nil, x.to)
39
+ assert_equal(x, x.set_to("blop"))
40
+ assert_equal("blop", x.to.to_s)
41
+ x.to = "tada"
42
+ assert_equal("tada", x.to.to_s)
43
+ end
44
+
45
+ def test_id
46
+ x = MyXMPPStanza.new
47
+ assert_equal(nil, x.id)
48
+ assert_equal(x, x.set_id("blop"))
49
+ assert_equal("blop", x.id)
50
+ x.id = "tada"
51
+ assert_equal("tada", x.id)
52
+ end
53
+
54
+ def test_type
55
+ x = MyXMPPStanza.new
56
+ assert_equal(nil, x.type)
57
+ assert_equal(x, x.set_type("blop"))
58
+ assert_equal("blop", x.type)
59
+ x.type = "tada"
60
+ assert_equal("tada", x.type)
61
+ end
62
+
63
+ def test_import
64
+ x = MyXMPPStanza.new
65
+ x.id = "heya"
66
+ q = x.add_element("query")
67
+ q.add_namespace("about:blank")
68
+ q.add_element("b").text = "I am b"
69
+ q.add_text("I am text")
70
+ q.add_element("a").add_attribute("href", "http://home.gna.org/xmpp4r/")
71
+ x.add_text("yow")
72
+ x.add_element("query")
73
+
74
+ assert_raise(RuntimeError) { iq = Iq.import(x) }
75
+ x.name = 'iq'
76
+ iq = Iq.import(x)
77
+
78
+ assert_equal(x.id, iq.id)
79
+ assert_equal(q.to_s, iq.query.to_s)
80
+ assert_equal(x.to_s, iq.to_s)
81
+ assert_equal(q.namespace, iq.queryns)
82
+ end
83
+
84
+ def test_import2
85
+ feature = FeatureNegotiation::IqFeature.new
86
+ xdata = feature.add(Dataforms::XData.new(:form))
87
+ field = xdata.add(Dataforms::XDataField.new('stream-method', :list_single))
88
+
89
+ feature2 = FeatureNegotiation::IqFeature.new.import(feature)
90
+ assert_equal(field.var, feature2.x.fields.first.var)
91
+ assert_equal(field.type, feature2.x.fields.first.type)
92
+ end
93
+
94
+ def test_import_xml_entities
95
+ e = REXML::Element.new('e')
96
+ e.text = '&'
97
+ assert_equal('<e>&amp;</e>', e.to_s)
98
+
99
+ e2 = REXML::Element.new('e').import(e)
100
+ assert_equal('<e>&amp;</e>', e2.to_s)
101
+ end
102
+
103
+ def test_error
104
+ x = MyXMPPStanza.new
105
+ assert_equal(nil, x.error)
106
+ x.typed_add(REXML::Element.new('error'))
107
+ assert_equal('<error/>', x.error.to_s)
108
+ assert_equal(ErrorResponse, x.error.class)
109
+ end
110
+
111
+ def test_clone_and_dup
112
+ x = MyXMPPStanza.new
113
+ x.attributes['xyz'] = '123'
114
+ x.text = 'abc'
115
+
116
+ assert_equal(x.attributes['xyz'], '123')
117
+ assert_equal(x.text, 'abc')
118
+
119
+ x2 = x.clone
120
+ assert_kind_of(MyXMPPStanza, x2)
121
+ assert_equal('123', x2.attributes['xyz'])
122
+ assert_nil(x2.text)
123
+
124
+ x3 = x.dup
125
+ assert_kind_of(MyXMPPStanza, x3)
126
+ assert_equal('123', x3.attributes['xyz'])
127
+ assert_equal('abc', x3.text)
128
+ end
129
+
130
+ def test_raise
131
+ assert_raises(NoNameXmlnsRegistered) {
132
+ XMPPStanza.name_xmlns_for_class(MyStanza)
133
+ }
134
+ end
135
+ end
@@ -0,0 +1,44 @@
1
+ #!/usr/bin/ruby -w
2
+
3
+ $:.unshift File.join(File.dirname(__FILE__), '..', 'lib')
4
+ $:.unshift File.join(File.dirname(__FILE__), '..', 'test')
5
+ $:.unshift File.join(File.dirname(__FILE__), 'lib')
6
+ $:.unshift File.join(File.dirname(__FILE__), 'test')
7
+
8
+ # This is allowed here, to make sure it's enabled in all test.
9
+ Thread::abort_on_exception = true
10
+
11
+ require 'xmpp4r'
12
+ require 'find'
13
+
14
+ # List files' basenames, not full path!
15
+ # EXCLUDED_FILES = [ 'tc_muc_simplemucclient.rb' ]
16
+ EXCLUDED_FILES = []
17
+
18
+ tc_files = []
19
+ tc_subdirs = []
20
+ Find.find(File.dirname(__FILE__)) do |f|
21
+ if File::directory?(f)
22
+ if f == '.'
23
+ # do nothing
24
+ elsif File::basename(f) != '.svn'
25
+ tc_subdirs << f
26
+ Find.prune
27
+ end
28
+ elsif File::basename(f) =~ /^tc.*\.rb$/
29
+ tc_files << f
30
+ end
31
+ end
32
+
33
+ tc_subdirs.each do |dir|
34
+ Find.find(dir) do |f|
35
+ if File::file?(f) and File::basename(f) =~ /^tc.*\.rb$/
36
+ tc_files << f
37
+ end
38
+ end
39
+ end
40
+
41
+ tc_files.each do |f|
42
+ next if EXCLUDED_FILES.include?(File::basename(f))
43
+ require f
44
+ end
@@ -0,0 +1,82 @@
1
+ #!/usr/bin/ruby
2
+
3
+ $:.unshift File::dirname(__FILE__) + '/../../lib'
4
+
5
+ require 'test/unit'
6
+ require File::dirname(__FILE__) + '/../lib/clienttester'
7
+
8
+ require 'xmpp4r'
9
+ require 'xmpp4r/tune/helper/helper'
10
+ require 'xmpp4r/tune/tune'
11
+ include Jabber
12
+
13
+ #Jabber::debug=true
14
+
15
+ class UserTune::HelperTest < Test::Unit::TestCase
16
+ include ClientTester
17
+
18
+ ##
19
+ # Test receiving 'now playing' notifications
20
+ #
21
+ # See http://www.xmpp.org/extensions/xep-0118.html#protocol-transport,
22
+ # example 1
23
+ def test_recv_now_playing
24
+ state { |presence|
25
+ send(deliver_usertune)
26
+ }
27
+
28
+ query_waiter = Semaphore.new
29
+
30
+ h = UserTune::Helper.new(@client, 'stpeter@jabber.org')
31
+ h.add_usertune_callback do |tune|
32
+ assert_kind_of Jabber::UserTune::Tune, tune
33
+ assert_equal true, tune.playing?
34
+ assert_equal 'Yes', tune.artist
35
+ assert_equal 686, tune.length
36
+ assert_equal 'Yessongs', tune.source
37
+ assert_equal 'Heart of the Sunrise', tune.title
38
+ assert_equal '3', tune.track
39
+ assert_equal 'http://www.yesworld.com/lyrics/Fragile.html#9',tune.uri
40
+ query_waiter.run
41
+ end
42
+ @client.send Jabber::Presence.new
43
+ wait_state
44
+
45
+ query_waiter.wait
46
+ end
47
+
48
+ # see example 2 from http://www.xmpp.org/extensions/xep-0118.html#protocol-transport
49
+ def deliver_usertune
50
+ "<message
51
+ from='stpeter@jabber.org'
52
+ to='maineboy@jabber.org'>
53
+ <event xmlns='http://jabber.org/protocol/pubsub#event'>
54
+ <items node='http://jabber.org/protocol/tune'>
55
+ <item id='bffe6584-0f9c-11dc-84ba-001143d5d5db'>
56
+ <tune xmlns='http://jabber.org/protocol/tune'>
57
+ <artist>Yes</artist>
58
+ <length>686</length>
59
+ <source>Yessongs</source>
60
+ <title>Heart of the Sunrise</title>
61
+ <track>3</track>
62
+ <uri>http://www.yesworld.com/lyrics/Fragile.html#9</uri>
63
+ </tune>
64
+ </item>
65
+ </items>
66
+ </event>
67
+ </message>"
68
+ end
69
+
70
+ # an example from the Wild
71
+ def psi_usertune
72
+ "<message from='admin@new-big-computer.local' to='matt@new-big-computer.local/trackbot' xmlns='jabber:client'><event xmlns='http://jabber.org/protocol/pubsub#event'><items node='http://jabber.org/protocol/tune'><item id='current'>
73
+
74
+ <tune xmlns='http://jabber.org/protocol/tune'>
75
+
76
+
77
+
78
+
79
+
80
+ <artist>Wes Montgomery</artist><title>Jingles</title><source>Bags Meets Wes</source><track>8</track><length>410</length></tune></item></items></event></message>"
81
+ end
82
+ end