xmpp4r 0.3.2 → 0.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (185) hide show
  1. data/{ChangeLog → CHANGELOG} +33 -0
  2. data/LICENSE +9 -9
  3. data/README.rdoc +110 -0
  4. data/README_ruby19.txt +43 -0
  5. data/Rakefile +235 -74
  6. data/data/doc/xmpp4r/examples/advanced/adventure/README +0 -1
  7. data/data/doc/xmpp4r/examples/advanced/adventure/adventure.rb +1 -1
  8. data/data/doc/xmpp4r/examples/advanced/adventure/adventuremuc.rb +12 -12
  9. data/data/doc/xmpp4r/examples/advanced/adventure/world.rb +10 -11
  10. data/data/doc/xmpp4r/examples/advanced/fileserve.rb +11 -11
  11. data/data/doc/xmpp4r/examples/advanced/getonline.rb +7 -7
  12. data/data/doc/xmpp4r/examples/advanced/gtkmucclient.rb +3 -3
  13. data/data/doc/xmpp4r/examples/advanced/migrate.rb +21 -22
  14. data/data/doc/xmpp4r/examples/advanced/minimuc.rb +22 -22
  15. data/data/doc/xmpp4r/examples/advanced/pep-aggregator/index.xsl +235 -0
  16. data/data/doc/xmpp4r/examples/advanced/pep-aggregator/pep-aggregator.rb +147 -0
  17. data/data/doc/xmpp4r/examples/advanced/recvfile.rb +0 -1
  18. data/data/doc/xmpp4r/examples/advanced/rosterdiscovery.rb +2 -3
  19. data/data/doc/xmpp4r/examples/advanced/shellmgr/shellmgr.rb +3 -3
  20. data/data/doc/xmpp4r/examples/advanced/shellmgr/shellmgr_jabber.rb +10 -10
  21. data/data/doc/xmpp4r/examples/advanced/shellmgr/shellmgr_test.rb +2 -2
  22. data/data/doc/xmpp4r/examples/advanced/versionpoll.rb +12 -12
  23. data/data/doc/xmpp4r/examples/advanced/xmpping.rb +2 -3
  24. data/data/doc/xmpp4r/examples/basic/change_password.rb +3 -3
  25. data/data/doc/xmpp4r/examples/basic/client.rb +5 -3
  26. data/data/doc/xmpp4r/examples/basic/component.rb +1 -1
  27. data/data/doc/xmpp4r/examples/basic/{echo_threaded.rb → echo.rb} +8 -7
  28. data/data/doc/xmpp4r/examples/basic/jabbersend.rb +5 -5
  29. data/data/doc/xmpp4r/examples/basic/mass_sender.rb +11 -11
  30. data/data/doc/xmpp4r/examples/basic/muc_owner_config.rb +0 -1
  31. data/data/doc/xmpp4r/examples/basic/mucinfo.rb +3 -1
  32. data/data/doc/xmpp4r/examples/basic/mucsimplebot.rb +0 -1
  33. data/data/doc/xmpp4r/examples/basic/register.rb +21 -4
  34. data/data/doc/xmpp4r/examples/basic/roster.rb +7 -5
  35. data/data/doc/xmpp4r/examples/basic/rosterprint.rb +0 -0
  36. data/data/doc/xmpp4r/examples/basic/rosterrename.rb +2 -2
  37. data/data/doc/xmpp4r/examples/basic/rosterwatch.rb +6 -7
  38. data/data/doc/xmpp4r/examples/basic/send_vcard.rb +3 -4
  39. data/data/doc/xmpp4r/examples/basic/tune_client.rb +56 -0
  40. data/data/doc/xmpp4r/examples/basic/tune_server.rb +58 -0
  41. data/data/doc/xmpp4r/examples/basic/versionbot.rb +1 -1
  42. data/lib/xmpp4r.rb +4 -4
  43. data/lib/xmpp4r/base64.rb +32 -0
  44. data/lib/xmpp4r/bytestreams/helper/filetransfer.rb +10 -11
  45. data/lib/xmpp4r/bytestreams/helper/ibb/base.rb +6 -8
  46. data/lib/xmpp4r/bytestreams/helper/ibb/initiator.rb +3 -6
  47. data/lib/xmpp4r/bytestreams/helper/ibb/target.rb +0 -1
  48. data/lib/xmpp4r/bytestreams/helper/socks5bytestreams/base.rb +8 -11
  49. data/lib/xmpp4r/bytestreams/helper/socks5bytestreams/initiator.rb +4 -7
  50. data/lib/xmpp4r/bytestreams/helper/socks5bytestreams/server.rb +7 -3
  51. data/lib/xmpp4r/bytestreams/helper/socks5bytestreams/socks5.rb +10 -5
  52. data/lib/xmpp4r/bytestreams/helper/socks5bytestreams/target.rb +14 -4
  53. data/lib/xmpp4r/bytestreams/helper/socks5bytestreams/target.rb.orig +62 -0
  54. data/lib/xmpp4r/bytestreams/iq/bytestreams.rb +0 -1
  55. data/lib/xmpp4r/callbacks.rb +5 -5
  56. data/lib/xmpp4r/caps.rb +1 -0
  57. data/lib/xmpp4r/caps/c.rb +53 -0
  58. data/lib/xmpp4r/caps/helper/generator.rb +160 -0
  59. data/lib/xmpp4r/caps/helper/helper.rb +87 -0
  60. data/lib/xmpp4r/client.rb +111 -40
  61. data/lib/xmpp4r/command/iq/command.rb +1 -1
  62. data/lib/xmpp4r/component.rb +8 -8
  63. data/lib/xmpp4r/connection.rb +25 -9
  64. data/lib/xmpp4r/dataforms/x/data.rb +17 -5
  65. data/lib/xmpp4r/debuglog.rb +13 -5
  66. data/lib/xmpp4r/delay/x/delay.rb +1 -1
  67. data/lib/xmpp4r/discovery.rb +3 -2
  68. data/lib/xmpp4r/discovery/helper/responder.rb +165 -0
  69. data/lib/xmpp4r/discovery/iq/discoinfo.rb +11 -12
  70. data/lib/xmpp4r/discovery/iq/discoitems.rb +12 -4
  71. data/lib/xmpp4r/{error.rb → errors.rb} +66 -10
  72. data/lib/xmpp4r/framework/base.rb +55 -0
  73. data/lib/xmpp4r/framework/bot.rb +148 -0
  74. data/lib/xmpp4r/httpbinding/client.rb +1 -1
  75. data/lib/xmpp4r/idgenerator.rb +1 -1
  76. data/lib/xmpp4r/iq.rb +34 -23
  77. data/lib/xmpp4r/jid.rb +2 -2
  78. data/lib/xmpp4r/message.rb +1 -1
  79. data/lib/xmpp4r/muc.rb +2 -0
  80. data/lib/xmpp4r/muc/helper/mucbrowser.rb +4 -19
  81. data/lib/xmpp4r/muc/helper/mucclient.rb +54 -23
  82. data/lib/xmpp4r/muc/helper/simplemucclient.rb +107 -1
  83. data/lib/xmpp4r/muc/iq/mucadmin.rb +23 -0
  84. data/lib/xmpp4r/muc/iq/mucadminitem.rb +20 -0
  85. data/lib/xmpp4r/muc/iq/mucowner.rb +5 -1
  86. data/lib/xmpp4r/muc/item.rb +143 -0
  87. data/lib/xmpp4r/muc/x/mucuserinvite.rb +2 -2
  88. data/lib/xmpp4r/muc/x/mucuseritem.rb +3 -117
  89. data/lib/xmpp4r/presence.rb +2 -1
  90. data/lib/xmpp4r/pubsub.rb +7 -0
  91. data/lib/xmpp4r/pubsub/children/configuration.rb +86 -0
  92. data/lib/xmpp4r/pubsub/{stanzas → children}/event.rb +13 -13
  93. data/lib/xmpp4r/pubsub/{stanzas → children}/item.rb +9 -1
  94. data/lib/xmpp4r/pubsub/{stanzas → children}/items.rb +10 -1
  95. data/lib/xmpp4r/pubsub/children/node_config.rb +48 -0
  96. data/lib/xmpp4r/pubsub/children/publish.rb +24 -0
  97. data/lib/xmpp4r/pubsub/{stanzas → children}/subscription.rb +16 -12
  98. data/lib/xmpp4r/pubsub/children/subscription_config.rb +67 -0
  99. data/lib/xmpp4r/pubsub/children/unsubscribe.rb +48 -0
  100. data/lib/xmpp4r/pubsub/helper/nodebrowser.rb +49 -93
  101. data/lib/xmpp4r/pubsub/helper/nodehelper.rb +39 -36
  102. data/lib/xmpp4r/pubsub/helper/servicehelper.rb +253 -162
  103. data/lib/xmpp4r/pubsub/iq/pubsub.rb +1 -1
  104. data/lib/xmpp4r/rexmladdons.rb +56 -28
  105. data/lib/xmpp4r/roster.rb +0 -1
  106. data/lib/xmpp4r/roster/helper/roster.rb +26 -15
  107. data/lib/xmpp4r/roster/iq/roster.rb +19 -19
  108. data/lib/xmpp4r/roster/x/roster.rb +10 -10
  109. data/lib/xmpp4r/rpc/helper/client.rb +17 -8
  110. data/lib/xmpp4r/rpc/helper/server.rb +1 -2
  111. data/lib/xmpp4r/rpc/helper/xmlrpcaddons.rb +14 -4
  112. data/lib/xmpp4r/rpc/iq/rpc.rb +0 -1
  113. data/lib/xmpp4r/sasl.rb +27 -6
  114. data/lib/xmpp4r/stream.rb +39 -44
  115. data/lib/xmpp4r/streamparser.rb +4 -4
  116. data/lib/xmpp4r/tune.rb +2 -0
  117. data/lib/xmpp4r/tune/helper/helper.rb +58 -0
  118. data/lib/xmpp4r/tune/tune.rb +113 -0
  119. data/lib/xmpp4r/vcard.rb +0 -1
  120. data/lib/xmpp4r/vcard/helper/vcard.rb +1 -3
  121. data/lib/xmpp4r/vcard/iq/vcard.rb +14 -0
  122. data/lib/xmpp4r/version/iq/version.rb +0 -1
  123. data/lib/xmpp4r/x.rb +1 -1
  124. data/lib/xmpp4r/xhtml.rb +1 -0
  125. data/lib/xmpp4r/xhtml/html.rb +115 -0
  126. data/lib/xmpp4r/xmpp4r.rb +7 -5
  127. data/lib/xmpp4r/xmppelement.rb +21 -5
  128. data/lib/xmpp4r/xmppstanza.rb +6 -6
  129. data/setup.rb +4 -4
  130. data/test/bytestreams/tc_ibb.rb +2 -2
  131. data/test/bytestreams/tc_socks5bytestreams.rb +12 -2
  132. data/test/caps/tc_helper.rb +156 -0
  133. data/test/dataforms/tc_data.rb +0 -0
  134. data/test/delay/tc_xdelay.rb +2 -2
  135. data/test/discovery/tc_responder.rb +91 -0
  136. data/test/lib/assert_equal_xml.rb +14 -0
  137. data/test/lib/clienttester.rb +31 -24
  138. data/test/muc/tc_muc_mucclient.rb +249 -13
  139. data/test/muc/tc_muc_simplemucclient.rb +41 -2
  140. data/test/muc/tc_mucowner.rb +0 -0
  141. data/test/pubsub/tc_helper.rb +486 -51
  142. data/test/pubsub/tc_nodeconfig.rb +54 -0
  143. data/test/pubsub/tc_subscriptionconfig.rb +41 -0
  144. data/test/roster/tc_helper.rb +6 -7
  145. data/test/roster/tc_iqqueryroster.rb +16 -16
  146. data/test/roster/tc_xroster.rb +1 -1
  147. data/test/rpc/tc_helper.rb +15 -3
  148. data/test/tc_callbacks.rb +7 -7
  149. data/test/tc_class_names.rb +15 -6
  150. data/test/tc_client.rb +3 -3
  151. data/test/{tc_error.rb → tc_errors.rb} +54 -12
  152. data/test/tc_idgenerator.rb +0 -0
  153. data/test/tc_iq.rb +32 -29
  154. data/test/tc_iqquery.rb +2 -2
  155. data/test/tc_jid.rb +44 -42
  156. data/test/tc_message.rb +13 -12
  157. data/test/tc_presence.rb +25 -24
  158. data/test/tc_rexml.rb +81 -2
  159. data/test/tc_stream.rb +15 -13
  160. data/test/tc_streamComponent.rb +6 -5
  161. data/test/tc_streamError.rb +21 -15
  162. data/test/tc_streamSend.rb +9 -9
  163. data/test/tc_streamparser.rb +112 -0
  164. data/test/tc_xmppstanza.rb +19 -9
  165. data/test/ts_xmpp4r.rb +10 -1
  166. data/test/tune/tc_helper_recv.rb +84 -0
  167. data/test/tune/tc_helper_send.rb +74 -0
  168. data/test/tune/tc_tune.rb +79 -0
  169. data/test/vcard/tc_helper.rb +2 -2
  170. data/test/vcard/tc_iqvcard.rb +13 -3
  171. data/test/version/tc_helper.rb +2 -2
  172. data/test/version/tc_iqqueryversion.rb +10 -10
  173. data/test/xhtml/tc_html.rb +41 -0
  174. data/tools/gen_requires.bash +29 -8
  175. data/tools/xmpp4r-gemspec-test.rb +11 -0
  176. data/xmpp4r.gemspec +291 -0
  177. metadata +277 -218
  178. data/README +0 -28
  179. data/UPDATING +0 -40
  180. data/data/doc/xmpp4r/examples/buggy/jabber2jabber/jabber2jabber.rb +0 -18
  181. data/data/doc/xmpp4r/examples/buggy/miniedgarr_cgi.rb +0 -192
  182. data/data/doc/xmpp4r/examples/buggy/miniedgarr_watch.rb +0 -82
  183. data/lib/xmpp4r/authenticationfailure.rb +0 -13
  184. data/lib/xmpp4r/errorexception.rb +0 -32
  185. data/tools/doctoweb.bash +0 -30
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/ruby
2
2
 
3
- $:.unshift '../lib'
3
+ $:.unshift File::dirname(__FILE__) + '/../lib'
4
4
 
5
5
  require 'test/unit'
6
6
  require 'xmpp4r/rexmladdons'
@@ -51,10 +51,89 @@ class REXMLTest < Test::Unit::TestCase
51
51
  e.attributes['x'] = '&'
52
52
  assert_equal('&', e.attributes['x'])
53
53
  e.attributes['x'] = '&amp;'
54
- assert_equal('&', e.attributes['x']) # this one should not be escaped
54
+ # bug in REXML 3.1.6 unescaped the ampersand
55
+ # assert_equal('&', e.attributes['x'])
56
+ # substituting a test that works with 3.1.5, 3.1.6, and 3.1.7
57
+ assert_equal('&amp;amp;', e.attribute('x').to_s)
55
58
  e.attributes['x'] = '&nbsp'
56
59
  assert_equal('&nbsp', e.attributes['x'])
57
60
  e.attributes['x'] = '&nbsp;'
58
61
  assert_equal('&nbsp;', e.attributes['x'])
59
62
  end
63
+
64
+ # test '==(o)'
65
+
66
+ def test_passing_in_non_rexml_element_as_self
67
+ o = Object.new
68
+ assert_not_equal(o, REXML::Element.new('foo'))
69
+ end
70
+
71
+ def test_passing_in_non_rexml_element_as_comparison_object
72
+ o = Object.new
73
+ assert_not_equal(REXML::Element.new('foo'), o)
74
+ end
75
+
76
+ def test_element_equal_simple
77
+ assert_equal(REXML::Element.new('foo'), REXML::Element.new('foo'))
78
+ end
79
+
80
+ def test_element_not_equal_simple
81
+ assert_not_equal(REXML::Element.new('foo'), REXML::Element.new('bar'))
82
+ end
83
+
84
+ def test_element_equal_when_all_are_same
85
+ e1 = REXML::Element.new('foo')
86
+ e1.add_namespace('a', 'urn:test:foo')
87
+ e1.attributes['a:bar'] = 'baz'
88
+ e2 = REXML::Element.new('foo')
89
+ e2.add_namespace('a', 'urn:test:foo')
90
+ e2.attributes['a:bar'] = 'baz'
91
+
92
+ assert_equal(e1, e2)
93
+ end
94
+
95
+ def test_element_not_equal_when_namespace_name_differs
96
+ e1 = REXML::Element.new('foo')
97
+ e1.add_namespace('a', 'urn:test:foo')
98
+ e1.attributes['a:bar'] = 'baz'
99
+ e2 = REXML::Element.new('foo')
100
+ e2.add_namespace('b', 'urn:test:foo')
101
+ e2.attributes['a:bar'] = 'baz'
102
+
103
+ assert_not_equal(e1, e2)
104
+ end
105
+
106
+ def test_element_not_equal_when_namespace_value_differs
107
+ e1 = REXML::Element.new('foo')
108
+ e1.add_namespace('a', 'urn:test:foo')
109
+ e1.attributes['a:bar'] = 'baz'
110
+ e2 = REXML::Element.new('foo')
111
+ e2.add_namespace('a', 'urn:test:bar')
112
+ e2.attributes['a:bar'] = 'baz'
113
+
114
+ assert_not_equal(e1, e2)
115
+ end
116
+
117
+ def test_element_not_equal_when_attribute_name_differs
118
+ e1 = REXML::Element.new('foo')
119
+ e1.add_namespace('a', 'urn:test:foo')
120
+ e1.attributes['a:bar'] = 'baz'
121
+ e2 = REXML::Element.new('foo')
122
+ e1.add_namespace('a', 'urn:test:foo')
123
+ e2.attributes['b:bar'] = 'baz'
124
+
125
+ assert_not_equal(e1, e2)
126
+ end
127
+
128
+ def test_element_not_equal_when_attribute_value_differs
129
+ e1 = REXML::Element.new('foo')
130
+ e1.add_namespace('a', 'urn:test:foo')
131
+ e1.attributes['a:bar'] = 'baz'
132
+ e2 = REXML::Element.new('foo')
133
+ e1.add_namespace('a', 'urn:test:foo')
134
+ e2.attributes['a:bar'] = 'bar'
135
+
136
+ assert_not_equal(e1, e2)
137
+ end
138
+
60
139
  end
@@ -10,19 +10,21 @@ require 'xmpp4r/semaphore'
10
10
  include Jabber
11
11
 
12
12
  class StreamTest < Test::Unit::TestCase
13
+ STREAM = '<stream:stream xmlns:stream="http://etherx.jabber.org/streams">'
14
+
13
15
  def setup
14
- @tmpfile = Tempfile::new("StreamSendTest")
16
+ @tmpfile = Tempfile.new("StreamSendTest")
15
17
  @tmpfilepath = @tmpfile.path()
16
18
  @tmpfile.unlink
17
- @servlisten = UNIXServer::new(@tmpfilepath)
19
+ @servlisten = UNIXServer.new(@tmpfilepath)
18
20
  thServer = Thread.new { @server = @servlisten.accept }
19
- @iostream = UNIXSocket::new(@tmpfilepath)
21
+ @iostream = UNIXSocket.new(@tmpfilepath)
20
22
  n = 0
21
23
  while not defined? @server and n < 10
22
24
  sleep 0.1
23
25
  n += 1
24
26
  end
25
- @stream = Stream::new
27
+ @stream = Stream.new
26
28
  @stream.start(@iostream)
27
29
  end
28
30
 
@@ -38,13 +40,13 @@ class StreamTest < Test::Unit::TestCase
38
40
  called = false
39
41
  @stream.add_xml_callback { called = true }
40
42
  assert(!called)
41
- @server.puts('<stream:stream>')
43
+ @server.puts(STREAM)
42
44
  @server.flush
43
45
  assert(called)
44
46
  end
45
47
 
46
48
  def test_process100
47
- @server.puts('<stream:stream>')
49
+ @server.puts(STREAM)
48
50
  @server.flush
49
51
 
50
52
  done = Semaphore.new
@@ -70,7 +72,7 @@ class StreamTest < Test::Unit::TestCase
70
72
  end
71
73
 
72
74
  def test_send
73
- @server.puts('<stream:stream>')
75
+ @server.puts(STREAM)
74
76
  @server.flush
75
77
 
76
78
  Thread.new {
@@ -92,7 +94,7 @@ class StreamTest < Test::Unit::TestCase
92
94
  end
93
95
 
94
96
  def test_send_nested
95
- @server.puts('<stream:stream>')
97
+ @server.puts(STREAM)
96
98
  @server.flush
97
99
  finished = Semaphore.new
98
100
 
@@ -117,7 +119,7 @@ class StreamTest < Test::Unit::TestCase
117
119
  called_outer += 1
118
120
  assert_kind_of(Iq, reply)
119
121
  assert_equal(:result, reply.type)
120
-
122
+
121
123
  if reply.id == '1'
122
124
  @stream.send(Iq.new(:set)) do |reply2|
123
125
  called_inner += 1
@@ -144,7 +146,7 @@ class StreamTest < Test::Unit::TestCase
144
146
  end
145
147
 
146
148
  def test_send_in_callback
147
- @server.puts('<stream:stream>')
149
+ @server.puts(STREAM)
148
150
  @server.flush
149
151
  finished = Semaphore.new
150
152
 
@@ -165,7 +167,7 @@ class StreamTest < Test::Unit::TestCase
165
167
  end
166
168
 
167
169
  def test_bidi
168
- @server.puts('<stream:stream>')
170
+ @server.puts(STREAM)
169
171
  @server.flush
170
172
  finished = Semaphore.new
171
173
  ok = true
@@ -199,7 +201,7 @@ class StreamTest < Test::Unit::TestCase
199
201
  n = 0
200
202
  @stream.add_message_callback { n += 1 }
201
203
  assert_equal(0, n)
202
- @server.puts('<stream:stream><message/>')
204
+ @server.puts("#{STREAM}<message/>")
203
205
  @server.flush
204
206
  sleep delay
205
207
  assert_equal(1, n)
@@ -215,7 +217,7 @@ class StreamTest < Test::Unit::TestCase
215
217
  @server.flush
216
218
  sleep delay
217
219
  assert_equal(2, n)
218
- @server.puts('<message><stream:stream><message/></stream:stream>')
220
+ @server.puts("<message>#{STREAM}<message/></stream:stream>")
219
221
  @server.flush
220
222
  sleep delay
221
223
  assert_equal(2, n)
@@ -13,6 +13,7 @@ include Jabber
13
13
 
14
14
  class StreamComponentTest < Test::Unit::TestCase
15
15
  @@SOCKET_PORT = 65224
16
+ STREAM = 'stream:stream xmlns:stream="http://etherx.jabber.org/streams"'
16
17
 
17
18
  def setup
18
19
  servlisten = TCPServer.new(@@SOCKET_PORT)
@@ -22,21 +23,21 @@ class StreamComponentTest < Test::Unit::TestCase
22
23
  serversock = servlisten.accept
23
24
  servlisten.close
24
25
  serversock.sync = true
25
- @server = Stream.new(true)
26
+ @server = Stream.new
26
27
  @server.add_xml_callback do |xml|
27
28
  if xml.prefix == 'stream' and xml.name == 'stream'
28
- @server.send('<stream:stream xmlns="jabber:component:accept">')
29
+ @server.send("<#{STREAM} xmlns='jabber:component:accept'>")
29
30
  true
30
31
  else
31
32
  false
32
33
  end
33
34
  end
34
35
  @server.start(serversock)
35
-
36
+
36
37
  serverwait.run
37
38
  end
38
39
 
39
- @stream = Component::new('test')
40
+ @stream = Component.new('test')
40
41
  @stream.connect('localhost', @@SOCKET_PORT)
41
42
 
42
43
  serverwait.wait
@@ -62,7 +63,7 @@ class StreamComponentTest < Test::Unit::TestCase
62
63
  assert_kind_of(Iq, iq)
63
64
  stanzas += 1
64
65
  iq_lock.run
65
- }
66
+ }
66
67
  @stream.add_presence_callback { |pres|
67
68
  assert_kind_of(Presence, pres)
68
69
  stanzas += 1
@@ -9,6 +9,7 @@ include Jabber
9
9
 
10
10
  class ConnectionErrorTest < Test::Unit::TestCase
11
11
  @@SOCKET_PORT = 65225
12
+ STREAM = '<stream:stream xmlns:stream="http://etherx.jabber.org/streams">'
12
13
 
13
14
  def setup
14
15
  servlisten = TCPServer.new(@@SOCKET_PORT)
@@ -19,11 +20,11 @@ class ConnectionErrorTest < Test::Unit::TestCase
19
20
  @server = servlisten.accept
20
21
  servlisten.close
21
22
  @server.sync = true
22
-
23
+
23
24
  serverwait.run
24
25
  end
25
26
 
26
- @conn = TCPSocket::new('localhost', @@SOCKET_PORT)
27
+ @conn = TCPSocket.new('localhost', @@SOCKET_PORT)
27
28
 
28
29
  serverwait.wait
29
30
  end
@@ -34,11 +35,11 @@ class ConnectionErrorTest < Test::Unit::TestCase
34
35
  end
35
36
 
36
37
  def test_connectionError_start_withexcblock
37
- @stream = Stream::new
38
+ @stream = Stream.new
38
39
  error = false
39
40
  @stream.on_exception do |e, o, w|
40
41
  # strange exception, it's caused by REXML, actually
41
- assert_equal(NameError, e.class)
42
+ assert_kind_of(StandardError, e)
42
43
  assert_equal(Jabber::Stream, o.class)
43
44
  assert_equal(:start, w)
44
45
  error = true
@@ -46,7 +47,7 @@ class ConnectionErrorTest < Test::Unit::TestCase
46
47
  assert(!error)
47
48
  begin
48
49
  # wrong port on purpose
49
- conn = TCPSocket::new('localhost', 1)
50
+ conn = TCPSocket.new('localhost', 1)
50
51
  rescue
51
52
  end
52
53
  @stream.start(conn)
@@ -57,16 +58,21 @@ class ConnectionErrorTest < Test::Unit::TestCase
57
58
  end
58
59
 
59
60
  def test_connectionError_parse_withexcblock
60
- @stream = Stream::new
61
+ @stream = Stream.new
61
62
  error = false
62
63
  @stream.start(@conn)
63
64
  @stream.on_exception do |e, o, w|
64
- assert_equal(REXML::ParseException, e.class)
65
- assert_equal(Jabber::Stream, o.class)
66
- assert_equal(:parser, w)
67
- error = true
65
+ if w == :disconnected
66
+ assert_equal(nil, e)
67
+ assert_equal(Jabber::Stream, o.class)
68
+ else
69
+ assert_equal(REXML::ParseException, e.class)
70
+ assert_equal(Jabber::Stream, o.class)
71
+ assert_equal(:parser, w)
72
+ error = true
73
+ end
68
74
  end
69
- @server.puts('<stream:stream>')
75
+ @server.puts(STREAM)
70
76
  @server.flush
71
77
  assert(!error)
72
78
  @server.puts('</blop>')
@@ -78,7 +84,7 @@ class ConnectionErrorTest < Test::Unit::TestCase
78
84
  end
79
85
 
80
86
  def test_connectionError_send_withexcblock
81
- @stream = Stream::new
87
+ @stream = Stream.new
82
88
  error = 0
83
89
  @stream.start(@conn)
84
90
  @stream.on_exception do |exc, o, w|
@@ -94,7 +100,7 @@ class ConnectionErrorTest < Test::Unit::TestCase
94
100
  end
95
101
  error += 1
96
102
  end
97
- @server.puts('<stream:stream>')
103
+ @server.puts(STREAM)
98
104
  @server.flush
99
105
  assert_equal(0, error)
100
106
  @server.close
@@ -109,9 +115,9 @@ class ConnectionErrorTest < Test::Unit::TestCase
109
115
  end
110
116
 
111
117
  def test_connectionError_send_withoutexcblock
112
- @stream = Stream::new
118
+ @stream = Stream.new
113
119
  @stream.start(@conn)
114
- @server.puts('<stream:stream>')
120
+ @server.puts(STREAM)
115
121
  @server.flush
116
122
  assert_raise(Errno::EPIPE) do
117
123
  @server.close
@@ -11,13 +11,13 @@ include Jabber
11
11
 
12
12
  class StreamSendTest < Test::Unit::TestCase
13
13
  def setup
14
- @tmpfile = Tempfile::new("StreamSendTest")
14
+ @tmpfile = Tempfile.new("StreamSendTest")
15
15
  @tmpfilepath = @tmpfile.path()
16
16
  @tmpfile.unlink
17
- @servlisten = UNIXServer::new(@tmpfilepath)
17
+ @servlisten = UNIXServer.new(@tmpfilepath)
18
18
  thServer = Thread.new { @server = @servlisten.accept }
19
- @iostream = UNIXSocket::new(@tmpfilepath)
20
- @stream = Stream::new
19
+ @iostream = UNIXSocket.new(@tmpfilepath)
20
+ @stream = Stream.new
21
21
  @stream.start(@iostream)
22
22
 
23
23
  thServer.join
@@ -33,26 +33,26 @@ class StreamSendTest < Test::Unit::TestCase
33
33
  @stream.send(s)
34
34
  @stream.send("\n") #needed for easy test writing
35
35
  end
36
-
36
+
37
37
  ##
38
38
  # Tries to send a basic message
39
39
  def test_sendbasic
40
- mysend(Message::new)
40
+ mysend(Message.new)
41
41
  assert_equal("<message/>\n", @server.gets)
42
42
  end
43
43
 
44
44
  def test_sendmessage
45
- mysend(Message::new('lucas@linux.ensimag.fr', 'coucou'))
45
+ mysend(Message.new('lucas@linux.ensimag.fr', 'coucou'))
46
46
  assert_equal("<message to='lucas@linux.ensimag.fr'><body>coucou</body></message>\n", @server.gets)
47
47
  end
48
48
 
49
49
  def test_sendpresence
50
- mysend(Presence::new)
50
+ mysend(Presence.new)
51
51
  assert_equal("<presence/>\n", @server.gets)
52
52
  end
53
53
 
54
54
  def test_sendiq
55
- mysend(Iq::new)
55
+ mysend(Iq.new)
56
56
  assert_equal("<iq/>\n", @server.gets)
57
57
  end
58
58
 
@@ -0,0 +1,112 @@
1
+ #!/usr/bin/ruby
2
+
3
+ $:.unshift '../lib'
4
+
5
+ require 'tempfile'
6
+ require 'test/unit'
7
+ require 'socket'
8
+ require 'xmpp4r/streamparser'
9
+ require 'xmpp4r/semaphore'
10
+ include Jabber
11
+
12
+ class MockListener
13
+ attr_reader :received
14
+
15
+ def receive(element)
16
+ @received = element
17
+ end
18
+
19
+ def parse_failure(exception)
20
+ raise exception
21
+ end
22
+ end
23
+
24
+ class StreamParserTest < Test::Unit::TestCase
25
+ STREAM = '<stream:stream xmlns:stream="http://etherx.jabber.org/streams">'
26
+
27
+ def setup
28
+ @listener = MockListener.new
29
+ end
30
+
31
+ def teardown
32
+ @listener = nil
33
+ end
34
+
35
+ def parse_simple_helper(fixture)
36
+ parser = StreamParser.new(STREAM + fixture, @listener)
37
+
38
+ parser.parse
39
+
40
+ yield parse_with_rexml(fixture)
41
+ end
42
+
43
+ def parse_with_rexml(fixture)
44
+ REXML::Document.new(fixture).root
45
+ end
46
+
47
+ def test_simple_text
48
+ parse_simple_helper( "<a>text</a>" ) do |desired|
49
+ assert_equal desired.name, @listener.received.name
50
+ assert_equal desired.text, @listener.received.text
51
+ assert_equal desired.cdatas, @listener.received.cdatas
52
+ end
53
+ end
54
+
55
+ def test_simple_cdata
56
+ parse_simple_helper( "<a><![CDATA[<cdata>]]></a>" ) do |desired|
57
+ assert_equal desired.name, @listener.received.name
58
+ assert_equal desired.text, @listener.received.text
59
+ assert_equal desired.cdatas, @listener.received.cdatas
60
+ end
61
+ end
62
+
63
+ def test_composite_text_cdata
64
+ parse_simple_helper( "<a>text<![CDATA[<cdata>]]></a>" ) do |desired|
65
+ assert_equal desired.name, @listener.received.name
66
+ assert_equal desired.text, @listener.received.text
67
+ assert_equal desired.cdatas, @listener.received.cdatas
68
+ end
69
+ end
70
+
71
+ def test_composite_cdata_text
72
+ parse_simple_helper( "<a><![CDATA[<cdata>]]>text</a>" ) do |desired|
73
+ assert_equal desired.name, @listener.received.name
74
+ assert_equal desired.text, @listener.received.text
75
+ assert_equal desired.cdatas, @listener.received.cdatas
76
+ end
77
+ end
78
+
79
+ def test_complex_composite_cdata_text
80
+ parse_simple_helper( "<a><![CDATA[<cdata>]]>text<![CDATA[<cdata>]]>text</a>" ) do |desired|
81
+ assert_equal desired.name, @listener.received.name
82
+ assert_equal desired.text, @listener.received.text
83
+ assert_equal desired.cdatas, @listener.received.cdatas
84
+ end
85
+ end
86
+
87
+ def test_entity_escaping1
88
+ parse_simple_helper( "<a>&apos;&amp;&quot;</a>" ) do |desired|
89
+ assert_equal "'&\"", @listener.received.text
90
+ assert_equal "<a>&apos;&amp;&quot;</a>", @listener.received.to_s
91
+ end
92
+ end
93
+
94
+ def test_entity_escaping2
95
+ parse_simple_helper( "<a>&amp;amp;amp;</a>" ) do |desired|
96
+ assert_equal "&amp;amp;", @listener.received.text
97
+ assert_equal "<a>&amp;amp;amp;</a>", @listener.received.to_s
98
+ end
99
+ end
100
+
101
+ =begin
102
+ **********
103
+ * FIXME! *
104
+ **********
105
+
106
+ def test_unbound_prefix
107
+ parse_simple_helper("<message><soe:instantMessage/></message>") do |desired|
108
+ assert_equal desired.first_element('*').name, 'instantMessage'
109
+ end
110
+ end
111
+ =end
112
+ end