xmpp4r 0.3
Sign up to get free protection for your applications and to get access to all the features.
- data/COPYING +340 -0
- data/ChangeLog +28 -0
- data/LICENSE +59 -0
- data/README +20 -0
- data/Rakefile +103 -0
- data/UPDATING +40 -0
- data/data/doc/xmpp4r/examples/advanced/adventure/README +57 -0
- data/data/doc/xmpp4r/examples/advanced/adventure/adventure.rb +23 -0
- data/data/doc/xmpp4r/examples/advanced/adventure/adventuremuc.rb +136 -0
- data/data/doc/xmpp4r/examples/advanced/adventure/cube.xml +15 -0
- data/data/doc/xmpp4r/examples/advanced/adventure/tower.xml +69 -0
- data/data/doc/xmpp4r/examples/advanced/adventure/world.rb +425 -0
- data/data/doc/xmpp4r/examples/advanced/fileserve.conf +11 -0
- data/data/doc/xmpp4r/examples/advanced/fileserve.rb +344 -0
- data/data/doc/xmpp4r/examples/advanced/getonline.rb +56 -0
- data/data/doc/xmpp4r/examples/advanced/gtkmucclient.rb +315 -0
- data/data/doc/xmpp4r/examples/advanced/migrate.rb +89 -0
- data/data/doc/xmpp4r/examples/advanced/minimuc.rb +266 -0
- data/data/doc/xmpp4r/examples/advanced/recvfile.rb +83 -0
- data/data/doc/xmpp4r/examples/advanced/rosterdiscovery.rb +130 -0
- data/data/doc/xmpp4r/examples/advanced/sendfile.conf +10 -0
- data/data/doc/xmpp4r/examples/advanced/sendfile.rb +72 -0
- data/data/doc/xmpp4r/examples/advanced/shellmgr/shellmgr.rb +51 -0
- data/data/doc/xmpp4r/examples/advanced/shellmgr/shellmgr_jabber.rb +43 -0
- data/data/doc/xmpp4r/examples/advanced/shellmgr/shellmgr_test.rb +10 -0
- data/data/doc/xmpp4r/examples/advanced/versionpoll.rb +90 -0
- data/data/doc/xmpp4r/examples/advanced/xmpping.rb +134 -0
- data/data/doc/xmpp4r/examples/advanced/xmppingrc.sample +9 -0
- data/data/doc/xmpp4r/examples/basic/change_password.rb +41 -0
- data/data/doc/xmpp4r/examples/basic/client.rb +68 -0
- data/data/doc/xmpp4r/examples/basic/component.rb +11 -0
- data/data/doc/xmpp4r/examples/basic/echo_nonthreaded.rb +32 -0
- data/data/doc/xmpp4r/examples/basic/echo_threaded.rb +32 -0
- data/data/doc/xmpp4r/examples/basic/jabbersend.rb +41 -0
- data/data/doc/xmpp4r/examples/basic/mass_sender.rb +67 -0
- data/data/doc/xmpp4r/examples/basic/mucinfo.rb +39 -0
- data/data/doc/xmpp4r/examples/basic/mucsimplebot.rb +83 -0
- data/data/doc/xmpp4r/examples/basic/register.rb +25 -0
- data/data/doc/xmpp4r/examples/basic/remove_registration.rb +18 -0
- data/data/doc/xmpp4r/examples/basic/roster.rb +42 -0
- data/data/doc/xmpp4r/examples/basic/rosterprint.rb +50 -0
- data/data/doc/xmpp4r/examples/basic/rosterrename.rb +34 -0
- data/data/doc/xmpp4r/examples/basic/rosterwatch.rb +172 -0
- data/data/doc/xmpp4r/examples/basic/send_vcard.rb +68 -0
- data/data/doc/xmpp4r/examples/basic/versionbot.rb +75 -0
- data/data/doc/xmpp4r/examples/buggy/jabber2jabber/jabber2jabber.rb +18 -0
- data/data/doc/xmpp4r/examples/buggy/miniedgarr_cgi.rb +192 -0
- data/data/doc/xmpp4r/examples/buggy/miniedgarr_watch.rb +82 -0
- data/lib/callbacks.rb +122 -0
- data/lib/xmpp4r/authenticationfailure.rb +13 -0
- data/lib/xmpp4r/bytestreams/helper/filetransfer.rb +315 -0
- data/lib/xmpp4r/bytestreams/helper/ibb/base.rb +256 -0
- data/lib/xmpp4r/bytestreams/helper/ibb/initiator.rb +30 -0
- data/lib/xmpp4r/bytestreams/helper/ibb/target.rb +46 -0
- data/lib/xmpp4r/bytestreams/helper/socks5bytestreams/base.rb +151 -0
- data/lib/xmpp4r/bytestreams/helper/socks5bytestreams/initiator.rb +85 -0
- data/lib/xmpp4r/bytestreams/helper/socks5bytestreams/server.rb +178 -0
- data/lib/xmpp4r/bytestreams/helper/socks5bytestreams/socks5.rb +56 -0
- data/lib/xmpp4r/bytestreams/helper/socks5bytestreams/target.rb +61 -0
- data/lib/xmpp4r/bytestreams/iq/bytestreams.rb +177 -0
- data/lib/xmpp4r/bytestreams/iq/si.rb +221 -0
- data/lib/xmpp4r/bytestreams.rb +11 -0
- data/lib/xmpp4r/client.rb +249 -0
- data/lib/xmpp4r/component.rb +103 -0
- data/lib/xmpp4r/connection.rb +166 -0
- data/lib/xmpp4r/dataforms/x/data.rb +248 -0
- data/lib/xmpp4r/dataforms.rb +1 -0
- data/lib/xmpp4r/debuglog.rb +34 -0
- data/lib/xmpp4r/delay/x/delay.rb +100 -0
- data/lib/xmpp4r/delay.rb +1 -0
- data/lib/xmpp4r/discovery/iq/discoinfo.rb +225 -0
- data/lib/xmpp4r/discovery/iq/discoitems.rb +162 -0
- data/lib/xmpp4r/discovery.rb +2 -0
- data/lib/xmpp4r/error.rb +230 -0
- data/lib/xmpp4r/errorexception.rb +32 -0
- data/lib/xmpp4r/feature_negotiation/iq/feature.rb +42 -0
- data/lib/xmpp4r/feature_negotiation.rb +1 -0
- data/lib/xmpp4r/idgenerator.rb +37 -0
- data/lib/xmpp4r/iq.rb +229 -0
- data/lib/xmpp4r/jid.rb +167 -0
- data/lib/xmpp4r/message.rb +171 -0
- data/lib/xmpp4r/muc/helper/mucbrowser.rb +107 -0
- data/lib/xmpp4r/muc/helper/mucclient.rb +382 -0
- data/lib/xmpp4r/muc/helper/simplemucclient.rb +222 -0
- data/lib/xmpp4r/muc/x/muc.rb +98 -0
- data/lib/xmpp4r/muc/x/mucuserinvite.rb +58 -0
- data/lib/xmpp4r/muc/x/mucuseritem.rb +148 -0
- data/lib/xmpp4r/muc.rb +6 -0
- data/lib/xmpp4r/presence.rb +255 -0
- data/lib/xmpp4r/query.rb +43 -0
- data/lib/xmpp4r/rexmladdons.rb +826 -0
- data/lib/xmpp4r/roster/helper/roster.rb +514 -0
- data/lib/xmpp4r/roster/iq/roster.rb +244 -0
- data/lib/xmpp4r/roster/x/roster.rb +155 -0
- data/lib/xmpp4r/roster.rb +4 -0
- data/lib/xmpp4r/sasl.rb +167 -0
- data/lib/xmpp4r/stream.rb +543 -0
- data/lib/xmpp4r/streamparser.rb +77 -0
- data/lib/xmpp4r/vcard/helper/vcard.rb +86 -0
- data/lib/xmpp4r/vcard/iq/vcard.rb +102 -0
- data/lib/xmpp4r/vcard.rb +3 -0
- data/lib/xmpp4r/version/helper/responder.rb +71 -0
- data/lib/xmpp4r/version/helper/simpleresponder.rb +44 -0
- data/lib/xmpp4r/version/iq/version.rb +118 -0
- data/lib/xmpp4r/version.rb +3 -0
- data/lib/xmpp4r/x.rb +43 -0
- data/lib/xmpp4r/xmlstanza.rb +174 -0
- data/lib/xmpp4r/xmpp4r.rb +16 -0
- data/lib/xmpp4r.rb +122 -0
- data/setup.rb +1360 -0
- data/test/bytestreams/tc_ibb.rb +186 -0
- data/test/bytestreams/tc_socks5bytestreams.rb +57 -0
- data/test/delay/tc_xdelay.rb +51 -0
- data/test/lib/clienttester.rb +110 -0
- data/test/muc/tc_muc_mucclient.rb +569 -0
- data/test/muc/tc_muc_simplemucclient.rb +72 -0
- data/test/roster/.tc_helper.rb.swp +0 -0
- data/test/roster/tc_helper.rb +389 -0
- data/test/roster/tc_iqqueryroster.rb +140 -0
- data/test/roster/tc_xroster.rb +70 -0
- data/test/tc_callbacks.rb +128 -0
- data/test/tc_class_names.rb +129 -0
- data/test/tc_client.rb +30 -0
- data/test/tc_error.rb +103 -0
- data/test/tc_idgenerator.rb +30 -0
- data/test/tc_iq.rb +109 -0
- data/test/tc_iqquery.rb +31 -0
- data/test/tc_jid.rb +202 -0
- data/test/tc_message.rb +114 -0
- data/test/tc_presence.rb +148 -0
- data/test/tc_stream.rb +182 -0
- data/test/tc_streamError.rb +87 -0
- data/test/tc_streamSend.rb +59 -0
- data/test/tc_streamThreaded.rb +168 -0
- data/test/tc_xmlstanza.rb +76 -0
- data/test/ts_xmpp4r.rb +34 -0
- data/test/vcard/tc_iqvcard.rb +52 -0
- data/test/version/tc_helper.rb +46 -0
- data/test/version/tc_iqqueryversion.rb +96 -0
- data/tools/doctoweb.bash +30 -0
- data/tools/gen_requires.bash +10 -0
- metadata +232 -0
@@ -0,0 +1,87 @@
|
|
1
|
+
#!/usr/bin/ruby
|
2
|
+
|
3
|
+
$:.unshift '../lib'
|
4
|
+
|
5
|
+
require 'test/unit'
|
6
|
+
require 'socket'
|
7
|
+
require 'xmpp4r/client'
|
8
|
+
include Jabber
|
9
|
+
|
10
|
+
class ConnectionErrorTest < Test::Unit::TestCase
|
11
|
+
def test_connectionError_start_withexcblock
|
12
|
+
@conn, @server = IO.pipe
|
13
|
+
@stream = Stream::new(false)
|
14
|
+
error = false
|
15
|
+
@stream.on_exception do |e, o, w|
|
16
|
+
assert_equal(RuntimeError, e.class)
|
17
|
+
assert_equal(Jabber::Stream, o.class)
|
18
|
+
assert_equal(:start, w)
|
19
|
+
error = true
|
20
|
+
end
|
21
|
+
assert(!error)
|
22
|
+
@stream.start(nil)
|
23
|
+
sleep 0.2
|
24
|
+
assert(error)
|
25
|
+
@server.close
|
26
|
+
@stream.close
|
27
|
+
end
|
28
|
+
|
29
|
+
def test_connectionError_parse_withexcblock
|
30
|
+
@conn, @server = IO.pipe
|
31
|
+
@stream = Stream::new(false)
|
32
|
+
error = false
|
33
|
+
@stream.start(@conn)
|
34
|
+
@stream.on_exception do |e, o, w|
|
35
|
+
assert_equal(REXML::ParseException, e.class)
|
36
|
+
assert_equal(Jabber::Stream, o.class)
|
37
|
+
assert_equal(:parser, w)
|
38
|
+
error = true
|
39
|
+
end
|
40
|
+
@server.puts('<stream:stream>')
|
41
|
+
@server.flush
|
42
|
+
assert(!error)
|
43
|
+
assert_raise(Errno::EPIPE) {
|
44
|
+
@server.puts('</blop>')
|
45
|
+
}
|
46
|
+
@server.flush
|
47
|
+
sleep 0.2
|
48
|
+
assert(error)
|
49
|
+
@server.close
|
50
|
+
@stream.close
|
51
|
+
end
|
52
|
+
|
53
|
+
def test_connectionError_send_withexcblock
|
54
|
+
@conn, @server = IO.pipe
|
55
|
+
@stream = Stream::new(false)
|
56
|
+
error = false
|
57
|
+
@stream.start(@conn)
|
58
|
+
@stream.on_exception do |e, o, w|
|
59
|
+
assert_equal(IOError, e.class)
|
60
|
+
assert_equal(Jabber::Stream, o.class)
|
61
|
+
assert_equal(:sending, w)
|
62
|
+
error = true
|
63
|
+
end
|
64
|
+
@server.puts('<stream:stream>')
|
65
|
+
@server.flush
|
66
|
+
assert(!error)
|
67
|
+
@stream.send('</test>')
|
68
|
+
sleep 0.2
|
69
|
+
assert(error)
|
70
|
+
@server.close
|
71
|
+
@stream.close
|
72
|
+
end
|
73
|
+
|
74
|
+
def test_connectionError_send_withoutexcblock
|
75
|
+
@conn, @server = IO.pipe
|
76
|
+
@stream = Stream::new(false)
|
77
|
+
@stream.start(@conn)
|
78
|
+
@server.puts('<stream:stream>')
|
79
|
+
@server.flush
|
80
|
+
assert_raise(IOError) { @stream.send('</test>') }
|
81
|
+
@server.close
|
82
|
+
@stream.close
|
83
|
+
end
|
84
|
+
|
85
|
+
|
86
|
+
|
87
|
+
end
|
@@ -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(false)
|
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,168 @@
|
|
1
|
+
#!/usr/bin/ruby
|
2
|
+
|
3
|
+
$:.unshift '../lib'
|
4
|
+
|
5
|
+
require 'tempfile'
|
6
|
+
require 'test/unit'
|
7
|
+
require 'socket'
|
8
|
+
require 'xmpp4r/stream'
|
9
|
+
include Jabber
|
10
|
+
|
11
|
+
class StreamThreadedTest < Test::Unit::TestCase
|
12
|
+
def setup
|
13
|
+
@tmpfile = Tempfile::new("StreamSendTest")
|
14
|
+
@tmpfilepath = @tmpfile.path()
|
15
|
+
@tmpfile.unlink
|
16
|
+
@servlisten = UNIXServer::new(@tmpfilepath)
|
17
|
+
thServer = Thread.new { @server = @servlisten.accept }
|
18
|
+
@iostream = UNIXSocket::new(@tmpfilepath)
|
19
|
+
n = 0
|
20
|
+
while not defined? @server and n < 10
|
21
|
+
sleep 0.1
|
22
|
+
n += 1
|
23
|
+
end
|
24
|
+
@stream = Stream::new
|
25
|
+
@stream.start(@iostream)
|
26
|
+
end
|
27
|
+
|
28
|
+
def teardown
|
29
|
+
@stream.close
|
30
|
+
@server.close
|
31
|
+
end
|
32
|
+
|
33
|
+
##
|
34
|
+
# tests that connection really waits the call to process() to dispatch
|
35
|
+
# stanzas to filters
|
36
|
+
def test_process
|
37
|
+
called = false
|
38
|
+
@stream.add_xml_callback { called = true }
|
39
|
+
assert(!called)
|
40
|
+
@server.puts('<stream:stream>')
|
41
|
+
@server.flush
|
42
|
+
assert(called)
|
43
|
+
end
|
44
|
+
|
45
|
+
def test_process100
|
46
|
+
@server.puts('<stream:stream>')
|
47
|
+
@server.flush
|
48
|
+
|
49
|
+
n = 0
|
50
|
+
@stream.add_message_callback { n += 1 }
|
51
|
+
|
52
|
+
100.times {
|
53
|
+
@server.puts('<message/>')
|
54
|
+
@server.flush
|
55
|
+
}
|
56
|
+
|
57
|
+
assert_equal(100, n)
|
58
|
+
|
59
|
+
@server.puts('<message/>' * 100)
|
60
|
+
@server.flush
|
61
|
+
sleep 0.1
|
62
|
+
|
63
|
+
assert_equal(200, n)
|
64
|
+
end
|
65
|
+
|
66
|
+
def test_send
|
67
|
+
@server.puts('<stream:stream>')
|
68
|
+
@server.flush
|
69
|
+
|
70
|
+
Thread.new {
|
71
|
+
assert_equal(Iq.new(:get).to_s, @server.gets('>'))
|
72
|
+
@stream.receive(Iq.new(:result))
|
73
|
+
}
|
74
|
+
|
75
|
+
called = 0
|
76
|
+
@stream.send(Iq.new(:get)) { |reply|
|
77
|
+
called += 1
|
78
|
+
if reply.kind_of? Iq and reply.type == :result
|
79
|
+
true
|
80
|
+
else
|
81
|
+
false
|
82
|
+
end
|
83
|
+
}
|
84
|
+
|
85
|
+
assert_equal(1, called)
|
86
|
+
end
|
87
|
+
|
88
|
+
def test_send_nested
|
89
|
+
@server.puts('<stream:stream>')
|
90
|
+
@server.flush
|
91
|
+
finished = Mutex.new
|
92
|
+
finished.lock
|
93
|
+
|
94
|
+
Thread.new {
|
95
|
+
assert_equal(Iq.new(:get).to_s, @server.gets('>'))
|
96
|
+
@server.puts(Iq.new(:result).set_id('1').to_s)
|
97
|
+
@server.flush
|
98
|
+
assert_equal(Iq.new(:set).to_s, @server.gets('>'))
|
99
|
+
@server.puts(Iq.new(:result).set_id('2').to_s)
|
100
|
+
@server.flush
|
101
|
+
assert_equal(Iq.new(:get).to_s, @server.gets('>'))
|
102
|
+
@server.puts(Iq.new(:result).set_id('3').to_s)
|
103
|
+
@server.flush
|
104
|
+
|
105
|
+
finished.unlock
|
106
|
+
}
|
107
|
+
|
108
|
+
called_outer = 0
|
109
|
+
called_inner = 0
|
110
|
+
|
111
|
+
@stream.send(Iq.new(:get)) { |reply|
|
112
|
+
called_outer += 1
|
113
|
+
assert_kind_of(Iq, reply)
|
114
|
+
assert_equal(:result, reply.type)
|
115
|
+
|
116
|
+
if reply.id == '1'
|
117
|
+
@stream.send(Iq.new(:set)) { |reply|
|
118
|
+
called_inner += 1
|
119
|
+
assert_kind_of(Iq, reply)
|
120
|
+
assert_equal(:result, reply.type)
|
121
|
+
assert_equal('2', reply.id)
|
122
|
+
|
123
|
+
@stream.send(Iq.new(:get))
|
124
|
+
|
125
|
+
true
|
126
|
+
}
|
127
|
+
false
|
128
|
+
elsif reply.id == '3'
|
129
|
+
true
|
130
|
+
else
|
131
|
+
false
|
132
|
+
end
|
133
|
+
}
|
134
|
+
|
135
|
+
assert_equal(2, called_outer)
|
136
|
+
assert_equal(1, called_inner)
|
137
|
+
|
138
|
+
finished.lock
|
139
|
+
end
|
140
|
+
|
141
|
+
def test_bidi
|
142
|
+
@server.puts('<stream:stream>')
|
143
|
+
@server.flush
|
144
|
+
finished = Mutex.new
|
145
|
+
ok = true
|
146
|
+
|
147
|
+
Thread.new {
|
148
|
+
100.times { |i|
|
149
|
+
ok &&= (Iq.new(:get).set_id(i).to_s == @server.gets('>'))
|
150
|
+
@server.puts(Iq.new(:result).set_id(i).to_s)
|
151
|
+
@server.flush
|
152
|
+
}
|
153
|
+
finished.unlock
|
154
|
+
}
|
155
|
+
|
156
|
+
100.times { |i|
|
157
|
+
@stream.send(Iq.new(:get).set_id(i)) { |reply|
|
158
|
+
ok &&= reply.kind_of? Iq
|
159
|
+
ok &&= (:result == reply.type)
|
160
|
+
ok &&= (i.to_s == reply.id)
|
161
|
+
true
|
162
|
+
}
|
163
|
+
}
|
164
|
+
|
165
|
+
assert(ok)
|
166
|
+
2.times { finished.lock }
|
167
|
+
end
|
168
|
+
end
|
@@ -0,0 +1,76 @@
|
|
1
|
+
#!/usr/bin/ruby
|
2
|
+
|
3
|
+
$:.unshift '../lib'
|
4
|
+
|
5
|
+
require 'test/unit'
|
6
|
+
require 'socket'
|
7
|
+
require 'xmpp4r/rexmladdons'
|
8
|
+
require 'xmpp4r/xmlstanza'
|
9
|
+
require 'xmpp4r/iq'
|
10
|
+
include Jabber
|
11
|
+
|
12
|
+
class XMLStanzaTest < Test::Unit::TestCase
|
13
|
+
|
14
|
+
def test_from
|
15
|
+
x = XMLStanza::new("message")
|
16
|
+
assert_equal(nil, x.from)
|
17
|
+
assert_equal(x, x.set_from("blop"))
|
18
|
+
assert_equal("blop", x.from.to_s)
|
19
|
+
x.from = "tada"
|
20
|
+
assert_equal("tada", x.from.to_s)
|
21
|
+
end
|
22
|
+
|
23
|
+
def test_to
|
24
|
+
x = XMLStanza::new("message")
|
25
|
+
assert_equal(nil, x.to)
|
26
|
+
assert_equal(x, x.set_to("blop"))
|
27
|
+
assert_equal("blop", x.to.to_s)
|
28
|
+
x.to = "tada"
|
29
|
+
assert_equal("tada", x.to.to_s)
|
30
|
+
end
|
31
|
+
|
32
|
+
def test_id
|
33
|
+
x = XMLStanza::new("message")
|
34
|
+
assert_equal(nil, x.id)
|
35
|
+
assert_equal(x, x.set_id("blop"))
|
36
|
+
assert_equal("blop", x.id)
|
37
|
+
x.id = "tada"
|
38
|
+
assert_equal("tada", x.id)
|
39
|
+
end
|
40
|
+
|
41
|
+
def test_type
|
42
|
+
x = XMLStanza::new("message")
|
43
|
+
assert_equal(nil, x.type)
|
44
|
+
assert_equal(x, x.set_type("blop"))
|
45
|
+
assert_equal("blop", x.type)
|
46
|
+
x.type = "tada"
|
47
|
+
assert_equal("tada", x.type)
|
48
|
+
end
|
49
|
+
|
50
|
+
def test_import
|
51
|
+
x = XMLStanza::new("iq")
|
52
|
+
x.id = "heya"
|
53
|
+
q = x.add_element("query")
|
54
|
+
q.add_namespace("about:blank")
|
55
|
+
q.add_element("b").text = "I am b"
|
56
|
+
q.add_text("I am text")
|
57
|
+
q.add_element("a").add_attribute("href", "http://home.gna.org/xmpp4r/")
|
58
|
+
x.add_text("yow")
|
59
|
+
x.add_element("query")
|
60
|
+
|
61
|
+
iq = Iq.import(x)
|
62
|
+
|
63
|
+
assert_equal(x.id, iq.id)
|
64
|
+
assert_equal(q.to_s, iq.query.to_s)
|
65
|
+
assert_equal(x.to_s, iq.to_s)
|
66
|
+
assert_equal(q.namespace, iq.queryns)
|
67
|
+
end
|
68
|
+
|
69
|
+
def test_error
|
70
|
+
x = XMLStanza::new("presence")
|
71
|
+
assert_equal(nil, x.error)
|
72
|
+
x.typed_add(REXML::Element.new('error'))
|
73
|
+
assert_equal('<error/>', x.error.to_s)
|
74
|
+
assert_equal(Error, x.error.class)
|
75
|
+
end
|
76
|
+
end
|
data/test/ts_xmpp4r.rb
ADDED
@@ -0,0 +1,34 @@
|
|
1
|
+
#!/usr/bin/ruby -w
|
2
|
+
|
3
|
+
|
4
|
+
$:.unshift File.join(File.dirname(__FILE__), '..', 'lib')
|
5
|
+
$:.unshift File.join(File.dirname(__FILE__), '..', 'test')
|
6
|
+
$:.unshift File.join(File.dirname(__FILE__), 'lib')
|
7
|
+
$:.unshift File.join(File.dirname(__FILE__), 'test')
|
8
|
+
|
9
|
+
require 'tc_streamThreaded'
|
10
|
+
require 'bytestreams/tc_ibb'
|
11
|
+
require 'bytestreams/tc_socks5bytestreams'
|
12
|
+
require 'delay/tc_xdelay'
|
13
|
+
require 'muc/tc_muc_simplemucclient'
|
14
|
+
require 'muc/tc_muc_mucclient'
|
15
|
+
require 'tc_error'
|
16
|
+
require 'tc_stream'
|
17
|
+
require 'tc_idgenerator'
|
18
|
+
require 'tc_iqquery'
|
19
|
+
#require 'tc_streamError'
|
20
|
+
require 'tc_presence'
|
21
|
+
require 'vcard/tc_iqvcard'
|
22
|
+
require 'roster/tc_iqqueryroster'
|
23
|
+
require 'roster/tc_xroster'
|
24
|
+
require 'roster/tc_helper'
|
25
|
+
require 'version/tc_iqqueryversion'
|
26
|
+
require 'version/tc_helper'
|
27
|
+
require 'tc_streamSend'
|
28
|
+
require 'tc_jid'
|
29
|
+
require 'tc_iq'
|
30
|
+
require 'tc_client'
|
31
|
+
require 'tc_callbacks'
|
32
|
+
require 'tc_xmlstanza'
|
33
|
+
require 'tc_message'
|
34
|
+
require 'tc_class_names'
|
@@ -0,0 +1,52 @@
|
|
1
|
+
#!/usr/bin/ruby
|
2
|
+
|
3
|
+
$:.unshift File::dirname(__FILE__) + '/../../lib'
|
4
|
+
|
5
|
+
require 'test/unit'
|
6
|
+
require 'xmpp4r/rexmladdons'
|
7
|
+
require 'xmpp4r/vcard/iq/vcard'
|
8
|
+
include Jabber
|
9
|
+
|
10
|
+
class IqVcardTest < Test::Unit::TestCase
|
11
|
+
def test_create
|
12
|
+
v = Vcard::IqVcard.new
|
13
|
+
assert_equal([], v.fields)
|
14
|
+
end
|
15
|
+
|
16
|
+
def test_create_with_fields
|
17
|
+
v = Vcard::IqVcard.new({'FN' => 'B C', 'NICKNAME' => 'D'})
|
18
|
+
assert_equal(['FN', 'NICKNAME'], v.fields.sort)
|
19
|
+
assert_equal('B C', v['FN'])
|
20
|
+
assert_equal('D', v['NICKNAME'])
|
21
|
+
assert_equal(nil, v['x'])
|
22
|
+
end
|
23
|
+
|
24
|
+
def test_fields
|
25
|
+
v = Vcard::IqVcard.new
|
26
|
+
f = ['a', 'b', 'c', 'd', 'e']
|
27
|
+
f.each { |s|
|
28
|
+
v[s.downcase] = s.upcase
|
29
|
+
}
|
30
|
+
|
31
|
+
assert_equal(f, v.fields.sort)
|
32
|
+
|
33
|
+
f.each { |s|
|
34
|
+
assert_equal(s.upcase, v[s.downcase])
|
35
|
+
assert_equal(nil, v[s.upcase])
|
36
|
+
}
|
37
|
+
end
|
38
|
+
|
39
|
+
def test_deep
|
40
|
+
v = Vcard::IqVcard.new({
|
41
|
+
'FN' => 'John D. Random',
|
42
|
+
'PHOTO/TYPE' => 'image/png',
|
43
|
+
'PHOTO/BINVAL' => '===='})
|
44
|
+
|
45
|
+
assert_equal(['FN', 'PHOTO/BINVAL', 'PHOTO/TYPE'], v.fields.sort)
|
46
|
+
assert_equal('John D. Random', v['FN'])
|
47
|
+
assert_equal('image/png', v['PHOTO/TYPE'])
|
48
|
+
assert_equal('====', v['PHOTO/BINVAL'])
|
49
|
+
assert_equal(nil, v['PHOTO'])
|
50
|
+
assert_equal(nil, v['NICKNAME'])
|
51
|
+
end
|
52
|
+
end
|
@@ -0,0 +1,46 @@
|
|
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/version/helper/responder'
|
10
|
+
include Jabber
|
11
|
+
|
12
|
+
class Version::HelperTest < Test::Unit::TestCase
|
13
|
+
include ClientTester
|
14
|
+
|
15
|
+
def test_create
|
16
|
+
h = Version::Responder::new(@client)
|
17
|
+
assert_kind_of(Version::Responder, h)
|
18
|
+
assert_respond_to(h, :add_version_callback)
|
19
|
+
end
|
20
|
+
|
21
|
+
def test_callback
|
22
|
+
# Prepare helper
|
23
|
+
h = Version::Responder::new(@client)
|
24
|
+
|
25
|
+
calls = 0
|
26
|
+
h.add_version_callback { |iq,responder|
|
27
|
+
calls += 1
|
28
|
+
assert('jabber:iq:version', iq.queryns)
|
29
|
+
responder.call('Test program', '1.0', 'Ruby Test::Unit')
|
30
|
+
}
|
31
|
+
|
32
|
+
# Send stanzas which shouldn't match
|
33
|
+
@server.send("<iq type='set'><query xmlns='jabber:iq:version'/></iq>")
|
34
|
+
@server.send("<iq type='get'><query xmlns='jabber:iq:browse'/></iq>")
|
35
|
+
assert_equal(0, calls)
|
36
|
+
|
37
|
+
# Send a query
|
38
|
+
@server.send("<iq type='get'><query xmlns='jabber:iq:version'/></iq>") { |reply|
|
39
|
+
assert_equal('Test program', reply.query.iname)
|
40
|
+
assert_equal('1.0', reply.query.version)
|
41
|
+
assert_equal('Ruby Test::Unit', reply.query.os)
|
42
|
+
true
|
43
|
+
}
|
44
|
+
assert_equal(1, calls)
|
45
|
+
end
|
46
|
+
end
|
@@ -0,0 +1,96 @@
|
|
1
|
+
#!/usr/bin/ruby
|
2
|
+
|
3
|
+
$:.unshift File::dirname(__FILE__) + '/../../lib'
|
4
|
+
|
5
|
+
require 'test/unit'
|
6
|
+
require 'xmpp4r/rexmladdons'
|
7
|
+
require 'xmpp4r/version/iq/version'
|
8
|
+
include Jabber
|
9
|
+
|
10
|
+
class Version::IqQueryVersionTest < Test::Unit::TestCase
|
11
|
+
def test_create_empty
|
12
|
+
x = Version::IqQueryVersion::new
|
13
|
+
assert_equal('jabber:iq:version', x.namespace)
|
14
|
+
assert_equal('', x.iname)
|
15
|
+
assert_equal('', x.version)
|
16
|
+
assert_equal(nil, x.os)
|
17
|
+
end
|
18
|
+
|
19
|
+
def test_create
|
20
|
+
x = Version::IqQueryVersion::new('my test', 'XP')
|
21
|
+
assert_equal('jabber:iq:version', x.namespace)
|
22
|
+
assert_equal('my test', x.iname)
|
23
|
+
assert_equal('XP', x.version)
|
24
|
+
assert_equal(nil, x.os)
|
25
|
+
end
|
26
|
+
|
27
|
+
def test_create_with_os
|
28
|
+
x = Version::IqQueryVersion::new('superbot', '1.0-final', 'FreeBSD 5.4-RELEASE-p4')
|
29
|
+
assert_equal('jabber:iq:version', x.namespace)
|
30
|
+
assert_equal('superbot', x.iname)
|
31
|
+
assert_equal('1.0-final', x.version)
|
32
|
+
assert_equal('FreeBSD 5.4-RELEASE-p4', x.os)
|
33
|
+
end
|
34
|
+
|
35
|
+
def test_import1
|
36
|
+
iq = Iq::new
|
37
|
+
q = REXML::Element::new('query')
|
38
|
+
q.add_namespace('jabber:iq:version')
|
39
|
+
iq.add(q)
|
40
|
+
iq2 = Iq::new.import(iq)
|
41
|
+
assert_equal(Version::IqQueryVersion, iq2.query.class)
|
42
|
+
end
|
43
|
+
|
44
|
+
def test_import2
|
45
|
+
iq = Iq::new
|
46
|
+
q = REXML::Element::new('query')
|
47
|
+
q.add_namespace('jabber:iq:version')
|
48
|
+
q.add_element('name').text = 'AstroBot'
|
49
|
+
q.add_element('version').text = 'XP'
|
50
|
+
q.add_element('os').text = 'FreeDOS'
|
51
|
+
iq.add(q)
|
52
|
+
iq = Iq::new.import(iq)
|
53
|
+
assert_equal(Version::IqQueryVersion, iq.query.class)
|
54
|
+
assert_equal('AstroBot', iq.query.iname)
|
55
|
+
assert_equal('XP', iq.query.version)
|
56
|
+
assert_equal('FreeDOS', iq.query.os)
|
57
|
+
end
|
58
|
+
|
59
|
+
def test_replace
|
60
|
+
x = Version::IqQueryVersion::new('name', 'version', 'os')
|
61
|
+
|
62
|
+
num = 0
|
63
|
+
x.each_element('name') { |e| num += 1 }
|
64
|
+
assert_equal(1, num)
|
65
|
+
num = 0
|
66
|
+
x.each_element('version') { |e| num += 1 }
|
67
|
+
assert_equal(1, num)
|
68
|
+
num = 0
|
69
|
+
x.each_element('os') { |e| num += 1 }
|
70
|
+
assert_equal(1, num)
|
71
|
+
|
72
|
+
x.set_iname('N').set_version('V').set_os('O')
|
73
|
+
|
74
|
+
num = 0
|
75
|
+
x.each_element('name') { |e| num += 1 }
|
76
|
+
assert_equal(1, num)
|
77
|
+
num = 0
|
78
|
+
x.each_element('version') { |e| num += 1 }
|
79
|
+
assert_equal(1, num)
|
80
|
+
num = 0
|
81
|
+
x.each_element('os') { |e| num += 1 }
|
82
|
+
assert_equal(1, num)
|
83
|
+
|
84
|
+
x.set_iname(nil).set_version(nil).set_os(nil)
|
85
|
+
|
86
|
+
num = 0
|
87
|
+
x.each_element('name') { |e| num += 1 }
|
88
|
+
assert_equal(1, num)
|
89
|
+
num = 0
|
90
|
+
x.each_element('version') { |e| num += 1 }
|
91
|
+
assert_equal(1, num)
|
92
|
+
num = 0
|
93
|
+
x.each_element('os') { |e| num += 1 }
|
94
|
+
assert_equal(0, num)
|
95
|
+
end
|
96
|
+
end
|
data/tools/doctoweb.bash
ADDED
@@ -0,0 +1,30 @@
|
|
1
|
+
#!/bin/bash
|
2
|
+
|
3
|
+
if [ -z $CVSDIR ]; then
|
4
|
+
CVSDIR=$HOME/dev/xmpp4r-web
|
5
|
+
fi
|
6
|
+
|
7
|
+
TARGET=$CVSDIR/rdoc
|
8
|
+
|
9
|
+
echo "Copying rdoc documentation to $TARGET."
|
10
|
+
|
11
|
+
if [ ! -d $TARGET ]; then
|
12
|
+
echo "$TARGET doesn't exist, exiting."
|
13
|
+
exit 1
|
14
|
+
fi
|
15
|
+
rsync -a rdoc/ $TARGET/
|
16
|
+
|
17
|
+
echo "###########################################################"
|
18
|
+
echo "CVS status :"
|
19
|
+
cd $TARGET
|
20
|
+
cvs -q up
|
21
|
+
echo "CVS Adding files."
|
22
|
+
while [ $(cvs -q up | grep "^? " | wc -l) -gt 0 ]; do
|
23
|
+
cvs add $(cvs -q up | grep "^? " | awk '{print $2}')
|
24
|
+
done
|
25
|
+
echo "###########################################################"
|
26
|
+
echo "CVS status after adding missing files:"
|
27
|
+
cvs -q up
|
28
|
+
echo "Commit changes now with"
|
29
|
+
echo "# (cd $TARGET && cvs commit -m \"rdoc update\")"
|
30
|
+
exit 0
|
@@ -0,0 +1,10 @@
|
|
1
|
+
#!/bin/bash
|
2
|
+
|
3
|
+
cd lib
|
4
|
+
f=$(mktemp)
|
5
|
+
echo "strict digraph requirestree { " > $f
|
6
|
+
grep -r "^require " * |grep -v svn |grep -v swp | sed "s/^\(.*\).rb:require '\(.*\)'/\1 -> \2;/" | sed 's/\//_/g' >> $f
|
7
|
+
echo "}" >> $f
|
8
|
+
cd ..
|
9
|
+
dot -Tpng $f -o gen_requires.png
|
10
|
+
rm -f $f
|