net-yail 1.4.6 → 1.5.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,173 @@
1
+ module Net
2
+ module IRCEvents
3
+
4
+ # This is the module for reporting a bunch of crap, included basically for legacy compatibility
5
+ # and bots that need to be easy to use / debug right off the bat
6
+ module Reports
7
+ # Set up reporting filters - allows users who want it to keep reporting in their app relatively
8
+ # easily while getting rid of it for everybody else
9
+ def setup_reporting(yail)
10
+ @yail = yail
11
+
12
+ incoming_reporting = [
13
+ :msg, :act, :notice, :ctcp, :ctcpreply, :mode, :join, :part, :kick,
14
+ :quit, :nick, :welcome, :bannedfromchan, :badchannelkey, :channelurl, :topic,
15
+ :topicinfo, :endofnames, :motd, :motdstart, :endofmotd, :invite
16
+ ]
17
+ for event in incoming_reporting
18
+ yail.after_filter(:"incoming_#{event}", self.method(:"r_#{event}") )
19
+ end
20
+
21
+ outgoing_reporting = [
22
+ :msg, :act, :ctcp, :ctcpreply, :notice
23
+ ]
24
+ for event in outgoing_reporting
25
+ yail.after_filter(:"outgoing_#{event}", self.method(:"r_out_#{event}") )
26
+ end
27
+
28
+ generic_out_report = [
29
+ :join, :mode, :part, :quit, :nick, :user, :pass, :oper, :topic, :names, :list, :invite, :kick
30
+ ]
31
+ for event in generic_out_report
32
+ yail.after_filter(:"outgoing_#{event}", self.method(:r_out_generic))
33
+ end
34
+ end
35
+
36
+ private
37
+ def r_msg(event)
38
+ report "{%s} <%s> %s" % [event.target || event.channel, event.nick, event.message]
39
+ end
40
+
41
+ def r_act(event)
42
+ report "{%s} * %s %s" % [event.target || event.channel, event.nick, event.message]
43
+ end
44
+
45
+ def r_notice(event)
46
+ nick = event.server? ? '' : event.nick
47
+ report "{%s} -%s- %s" % [event.target || event.channel, nick, event.message]
48
+ end
49
+
50
+ def r_ctcp(event)
51
+ report "{%s} [%s %s]" % [event.target || event.channel, event.nick, event.message]
52
+ end
53
+
54
+ def r_ctcpreply(event)
55
+ report "{%s} [Reply: %s %s]" % [event.target || event.channel, event.nick, event.message]
56
+ end
57
+
58
+ def r_mode(event)
59
+ report "{%s} %s sets mode %s %s" % [event.channel, event.from, event.message, event.targets.join(' ')]
60
+ end
61
+
62
+ def r_join(event)
63
+ report "{#{event.channel}} #{event.nick} joins"
64
+ end
65
+
66
+ def r_part(event)
67
+ report "{#{event.channel}} #{event.nick} parts (#{event.message})"
68
+ end
69
+
70
+ def r_kick(event)
71
+ report "{#{event.channel}} #{event.nick} kicked #{event.target} (#{event.message})"
72
+ end
73
+
74
+ def r_quit(event)
75
+ report "#{event.nick} quit (#{event.message})"
76
+ end
77
+
78
+ # Incoming invitation
79
+ def r_invite(event)
80
+ report "[#{event.nick}] INVITE to #{event.target}"
81
+ end
82
+
83
+ # Reports nick change unless nickname is us - we check nickname here since
84
+ # the magic method changes @yail.me to the new nickname.
85
+ def r_nick(event)
86
+ report "#{event.nick} changed nick to #{event.message}" unless event.nick == @yail.me
87
+ end
88
+
89
+ def r_bannedfromchan(event)
90
+ event.message =~ /^(\S*) :Cannot join channel/
91
+ report "Banned from channel #{$1}"
92
+ end
93
+
94
+ def r_badchannelkey(event)
95
+ event.message =~ /^(\S*) :Cannot join channel/
96
+ report "Bad channel key (password) for #{$1}"
97
+ end
98
+
99
+ def r_welcome(event)
100
+ report "*** Logged in as #{@yail.me}. ***"
101
+ end
102
+
103
+ # Channel URL
104
+ def r_channelurl(event)
105
+ event.message =~ /^(\S+) :?(.+)$/
106
+ report "{#{$1}} URL is #{$2}"
107
+ end
108
+
109
+ # Channel topic
110
+ def r_topic(event)
111
+ event.message =~ /^(\S+) :?(.+)$/
112
+ report "{#{$1}} Topic is: #{$2}"
113
+ end
114
+
115
+ # Channel topic setter
116
+ def r_topicinfo(event)
117
+ event.message =~ /^(\S+) (\S+) (\d+)$/
118
+ report "{#{$1}} Topic set by #{$2} on #{Time.at($3.to_i).asctime}"
119
+ end
120
+
121
+ # End of names
122
+ def r_endofnames(event)
123
+ event.message =~ /^(\S+)/
124
+ report "{#{$1}} Nickname list complete"
125
+ end
126
+
127
+ # MOTD line
128
+ def r_motd(event)
129
+ event.message =~ /^:?(.+)$/
130
+ report "*MOTD* #{$1}"
131
+ end
132
+
133
+ # Beginning of MOTD
134
+ def r_motdstart(event)
135
+ event.message =~ /^:?(.+)$/
136
+ report "*MOTD* #{$1}"
137
+ end
138
+
139
+ # End of MOTD
140
+ def r_endofmotd(event)
141
+ report "*MOTD* End of MOTD"
142
+ end
143
+
144
+ # Sent a privmsg (non-ctcp)
145
+ def r_out_msg(event)
146
+ report "{#{event.target}} <#{@yail.me}> #{event.message}"
147
+ end
148
+
149
+ # Sent a ctcp
150
+ def r_out_ctcp(event)
151
+ report "{#{event.target}} [#{@yail.me} #{event.message}]"
152
+ end
153
+
154
+ # Sent ctcp action
155
+ def r_out_act(event)
156
+ report "{#{event.target}} <#{@yail.me}> #{event.message}"
157
+ end
158
+
159
+ def r_out_notice(event)
160
+ report "{#{event.target}} -#{@yail.me}- #{event.message}"
161
+ end
162
+
163
+ def r_out_ctcpreply(event)
164
+ report "{#{event.target}} [Reply: #{@yail.me} #{event.message}]"
165
+ end
166
+
167
+ def r_out_generic(event)
168
+ report "bot: #{event.inspect}"
169
+ end
170
+ end
171
+
172
+ end
173
+ end
@@ -1,5 +1,5 @@
1
1
  module Net
2
2
  class YAIL
3
- VERSION = '1.4.6'
3
+ VERSION = '1.5.1'
4
4
  end
5
5
  end
@@ -71,13 +71,14 @@ class MockIRC
71
71
 
72
72
  when /^NICK/ then handle_nick(cmd)
73
73
  when /^JOIN/ then handle_join(cmd)
74
+ when /^MODE/ then handle_mode(cmd)
74
75
  end
75
76
  end
76
77
 
77
78
  # Handles a connection command (USER) or errors
78
79
  def handle_connected(cmd)
79
80
  if cmd =~ /^USER (\S+) (\S+) (\S+) :(.*)$/
80
- add_output "NOTICE AUTH :*** Looking up your hostname..."
81
+ add_output ":#{SERVER} NOTICE AUTH :*** Looking up your hostname..."
81
82
  @connected = true
82
83
  return
83
84
  end
@@ -85,6 +86,14 @@ class MockIRC
85
86
  add_output ":#{SERVER} ERROR :You need to authenticate or something"
86
87
  end
87
88
 
89
+ # Dumb handling of a MODE command
90
+ def handle_mode(cmd)
91
+ # Eventually this could be used to make really interesting mode messages
92
+ cmd =~ /^MODE(\s+\S+)?(\s+\S+)?(\s+\S+)?$/
93
+
94
+ add_output ":#{@nick}!#{USERHOST} MODE#{$2}#{$3}"
95
+ end
96
+
88
97
  # Handles a NICK request, but no error if no nick set - not sure what a real server does here
89
98
  def handle_nick(cmd)
90
99
  unless cmd =~ /^NICK :(.*)$/
@@ -102,7 +111,8 @@ class MockIRC
102
111
  @nick = nick
103
112
 
104
113
  unless @logged_in
105
- add_output ":#{SERVER} NOTICE #{@nick} :*** You are exempt from user limits. congrats.",
114
+ add_output "NOTICE AUTH :*** Looking up your hostname",
115
+ ":#{SERVER} NOTICE #{@nick} :*** You are exempt from user limits. congrats.",
106
116
  ":#{SERVER} 001 #{@nick} :Welcome to the Fakey-fake Internet Relay Chat Network #{@nick}",
107
117
  ":#{SERVER} 002 #{@nick} :Your host is #{SERVER}[0.0.0.0/6667], running version mock-irc-1.7.7",
108
118
  ":#{SERVER} 003 #{@nick} :This server was created Nov 21 2009 at 21:20:48",
@@ -135,7 +145,7 @@ class MockIRC
135
145
  channel = $1
136
146
  pass = $2
137
147
  if "#banned" == channel
138
- add_output ":#{SERVER} 474 T-meister #{channel}:Cannot join channel (+b)"
148
+ add_output ":#{SERVER} 474 #{@nick} #{channel}:Cannot join channel (+b)"
139
149
  return
140
150
  end
141
151
 
@@ -7,7 +7,7 @@ class MessageParserEventTest < Test::Unit::TestCase
7
7
  # Simplest test case, I think
8
8
  def test_ping
9
9
  event = Net::YAIL::IncomingEvent.parse("PING :nerdbucket.com")
10
- assert_equal 'nerdbucket.com', event.text
10
+ assert_equal 'nerdbucket.com', event.message
11
11
  assert_equal :incoming_ping, event.type
12
12
  assert !event.respond_to?(:servername)
13
13
  assert !event.respond_to?(:nick)
@@ -20,7 +20,7 @@ class MessageParserEventTest < Test::Unit::TestCase
20
20
  event = Net::YAIL::IncomingEvent.parse(":Dude!dude@nerdbucket.com TOPIC #nerdtalk :31 August 2010 \357\277\275 Foo.")
21
21
  assert_equal :incoming_topic_change, event.type
22
22
  assert_equal 'Dude', event.nick
23
- assert_equal "31 August 2010 \357\277\275 Foo.", event.text
23
+ assert_equal "31 August 2010 \357\277\275 Foo.", event.message
24
24
  assert_equal '#nerdtalk', event.channel
25
25
  assert_equal 'Dude!dude@nerdbucket.com', event.fullname
26
26
  end
@@ -34,13 +34,13 @@ class MessageParserEventTest < Test::Unit::TestCase
34
34
  assert_equal 'jeremy', event.msg.user
35
35
  assert_equal 'nerdbucket.com', event.msg.host
36
36
  assert_equal 'Nerdmaster!jeremy@nerdbucket.com', event.fullname
37
- assert_equal 'Nerdmaster!jeremy@nerdbucket.com', event.from
37
+ assert_equal 'Nerdmaster', event.from
38
38
  assert !event.server?
39
39
  assert_equal 'PRIVMSG', event.msg.command
40
40
  assert_equal :incoming_msg, event.type
41
41
  assert_equal 'Nerdminion', event.target
42
42
  assert_equal true, event.pm?
43
- assert_equal 'Do my bidding!!', event.text
43
+ assert_equal 'Do my bidding!!', event.message
44
44
 
45
45
  # CTCP to user
46
46
  event = Net::YAIL::IncomingEvent.parse(":Nerdmaster!jeremy@nerdbucket.com PRIVMSG Nerdminion :\001FOO is to bar as BAZ is to...?\001")
@@ -49,9 +49,9 @@ class MessageParserEventTest < Test::Unit::TestCase
49
49
  assert_nil event.channel
50
50
  assert_equal 'Nerdminion', event.target
51
51
  assert_equal true, event.pm?
52
- assert_equal 'FOO is to bar as BAZ is to...?', event.text
52
+ assert_equal 'FOO is to bar as BAZ is to...?', event.message
53
53
  assert_equal :incoming_msg, event.parent.type
54
- assert_equal "\001FOO is to bar as BAZ is to...?\001", event.parent.text
54
+ assert_equal "\001FOO is to bar as BAZ is to...?\001", event.parent.message
55
55
  assert_nil event.parent.parent
56
56
 
57
57
  # Action to channel
@@ -60,11 +60,11 @@ class MessageParserEventTest < Test::Unit::TestCase
60
60
  assert_equal :incoming_act, event.type
61
61
  assert_equal '#bottest', event.channel
62
62
  assert_equal false, event.pm?
63
- assert_equal 'gives Towelie a joint', event.text
63
+ assert_equal 'gives Towelie a joint', event.message
64
64
  assert_equal :incoming_ctcp, event.parent.type
65
- assert_equal "ACTION gives Towelie a joint", event.parent.text
65
+ assert_equal "ACTION gives Towelie a joint", event.parent.message
66
66
  assert_equal :incoming_msg, event.parent.parent.type
67
- assert_equal "\001ACTION gives Towelie a joint\001", event.parent.parent.text
67
+ assert_equal "\001ACTION gives Towelie a joint\001", event.parent.parent.message
68
68
  assert_nil event.parent.parent.parent
69
69
 
70
70
  # PM to channel with less common prefix
@@ -77,8 +77,8 @@ class MessageParserEventTest < Test::Unit::TestCase
77
77
  # Quick test of a numeric message I've ACTUALLY SEEN!!
78
78
  def test_numeric
79
79
  event = Net::YAIL::IncomingEvent.parse(':nerdbucket.com 266 Nerdmaster :Current global users: 22 Max: 33')
80
- assert_equal 'Current global users: 22 Max: 33', event.text
81
- assert_equal :incoming_266, event.type
80
+ assert_equal 'Current global users: 22 Max: 33', event.message
81
+ assert_equal :incoming_numeric_266, event.type
82
82
  assert_equal 'nerdbucket.com', event.servername
83
83
  assert_equal 'nerdbucket.com', event.from
84
84
  assert_equal 'Nerdmaster', event.target
@@ -93,8 +93,8 @@ class MessageParserEventTest < Test::Unit::TestCase
93
93
 
94
94
  # Numeric with multiple args
95
95
  event = Net::YAIL::IncomingEvent.parse(':someserver.co.uk.fn.bb 366 Towelie #bottest :End of /NAMES list.')
96
- assert_equal :incoming_366, event.type
97
- assert_equal '#bottest End of /NAMES list.', event.text
96
+ assert_equal :incoming_numeric_366, event.type
97
+ assert_equal '#bottest End of /NAMES list.', event.message
98
98
  assert_equal ['#bottest', 'End of /NAMES list.'], event.parameters
99
99
 
100
100
  # First param in the message params list should still be nick
@@ -106,7 +106,7 @@ class MessageParserEventTest < Test::Unit::TestCase
106
106
  "\0031,8TuTTi AnCoRa In PRoVa..\0034M\00307w\00308a\00303H\00311u\0031 \0031,9PrEpArAtE Le RiChIeStE PeR Il RiCoVeRo a ViTa\0030,13PoStI " +
107
107
  "LiBeRi!!\0031,4!PaZZi Da STaRe InSiEmE. :\336")
108
108
  assert_equal 'irc.somehost.xx', event.from
109
- assert_equal :incoming_322, event.type
109
+ assert_equal :incoming_numeric_322, event.type
110
110
  assert_equal :incoming_numeric, event.parent.type
111
111
  assert_equal 'user', event.target
112
112
  assert_equal ['#CrAzY_MaNiCoMiCuM', '12'], event.parameters[0..1]
@@ -114,7 +114,7 @@ class MessageParserEventTest < Test::Unit::TestCase
114
114
  assert_equal "#CrAzY_MaNiCoMiCuM 12 [+ntr] \253'\002\0033,3 \0030 I \0030,0 \0034T \0034,4 \0031A \0031,1\0038\273\0031,9 OrA NuOvO " +
115
115
  "ErOtIcI Su FFTXL\0030,13 #CrAzY_MaNiCoMiCuM:\0032,4 QuI ReGnAnO PeR OrA I + PaZZi DeL WeB, \0031,8TuTTi AnCoRa In PRoVa..\0034M" +
116
116
  "\00307w\00308a\00303H\00311u\0031 \0031,9PrEpArAtE Le RiChIeStE PeR Il RiCoVeRo a ViTa\0030,13PoStI LiBeRi!!\0031,4!PaZZi Da " +
117
- "STaRe InSiEmE. :\336", event.text
117
+ "STaRe InSiEmE. :\336", event.message
118
118
  end
119
119
 
120
120
  # Test an invite
@@ -137,7 +137,7 @@ class MessageParserEventTest < Test::Unit::TestCase
137
137
  event = Net::YAIL::IncomingEvent.parse(':Nerdminion!minion@nerdbucket.com PART #nerd-talk :No, YOU GO TO HELL')
138
138
  assert_equal '#nerd-talk', event.channel
139
139
  assert_equal 'Nerdminion', event.nick
140
- assert_equal 'No, YOU GO TO HELL', event.text
140
+ assert_equal 'No, YOU GO TO HELL', event.message
141
141
  assert_equal :incoming_part, event.type
142
142
  end
143
143
 
@@ -147,14 +147,14 @@ class MessageParserEventTest < Test::Unit::TestCase
147
147
  assert_equal 'Nerdminion', event.target
148
148
  assert_equal 'Nerdmaster', event.nick
149
149
  assert_equal :incoming_kick, event.type
150
- assert_equal %q|You can't quit! You're FIRED!|, event.text
150
+ assert_equal %q|You can't quit! You're FIRED!|, event.message
151
151
  end
152
152
 
153
153
  def test_quit
154
154
  event = Net::YAIL::IncomingEvent.parse(':TheTowel!ce611d7b0@nerdbucket.com QUIT :Bye bye')
155
155
  assert_equal 'TheTowel', event.nick
156
156
  assert_equal :incoming_quit, event.type
157
- assert_equal 'Bye bye', event.text
157
+ assert_equal 'Bye bye', event.message
158
158
  end
159
159
 
160
160
  def test_nick
@@ -163,7 +163,7 @@ class MessageParserEventTest < Test::Unit::TestCase
163
163
  event = Net::YAIL::IncomingEvent.parse(':[|\|1]!~nerdmaste@nerd.nerdbucket.com NICK :Deadnerd')
164
164
  assert_equal '[|\|1]', event.nick
165
165
  assert_equal :incoming_nick, event.type
166
- assert_equal 'Deadnerd', event.text
166
+ assert_equal 'Deadnerd', event.message
167
167
  end
168
168
 
169
169
  # Test some notice stuff
@@ -176,7 +176,7 @@ class MessageParserEventTest < Test::Unit::TestCase
176
176
  assert_equal 'Nerdminion', event.target
177
177
  assert !event.respond_to?(:nick)
178
178
  assert !event.respond_to?(:fullname)
179
- assert_equal 'You suck. A lot.', event.text
179
+ assert_equal 'You suck. A lot.', event.message
180
180
 
181
181
  # This CTCP message...
182
182
  # ":Nerdmaster!jeremy@nerdbucket.com PRIVMSG Nerdminion \001USERINFO\001"
@@ -187,8 +187,8 @@ class MessageParserEventTest < Test::Unit::TestCase
187
187
  assert_equal 'Nerdmaster', event.target
188
188
  assert_equal 'Nerdminion', event.nick
189
189
  assert_equal 'Nerdminion!minion@nerdbucket.com', event.fullname
190
- assert_equal 'Nerdminion!minion@nerdbucket.com', event.from
191
- assert_equal 'USERINFO :Minion of the nerd', event.text
190
+ assert_equal 'Nerdminion', event.from
191
+ assert_equal 'USERINFO :Minion of the nerd', event.message
192
192
 
193
193
  # Channel-wide notice
194
194
  event = Net::YAIL::IncomingEvent.parse(":Nerdmaster!jeremy@nerdbucket.com NOTICE #channel-ten-news :Tonight's late-breaking story...")
@@ -198,7 +198,7 @@ class MessageParserEventTest < Test::Unit::TestCase
198
198
  assert_equal '#channel-ten-news', event.channel
199
199
  assert_nil event.target
200
200
  assert_equal 'Nerdmaster!jeremy@nerdbucket.com', event.fullname
201
- assert_equal %q|Tonight's late-breaking story...|, event.text
201
+ assert_equal %q|Tonight's late-breaking story...|, event.message
202
202
  end
203
203
 
204
204
  def test_modes
@@ -208,7 +208,7 @@ class MessageParserEventTest < Test::Unit::TestCase
208
208
  assert_equal :incoming_mode, event.type
209
209
  assert_equal '#bots', event.channel
210
210
  assert_equal ['Towelie', 'Doogles!*@*'], event.targets
211
- assert_equal '+ob', event.text
211
+ assert_equal '+ob', event.message
212
212
 
213
213
  # Newly-created channels do this
214
214
  event = Net::YAIL::IncomingEvent.parse(':nerdbucket.com MODE #bots +nt')
@@ -222,14 +222,14 @@ class MessageParserEventTest < Test::Unit::TestCase
222
222
  assert_equal :incoming_mode, event.type
223
223
  assert_equal '#bots', event.channel
224
224
  assert_equal ['Doogles!*@*', 'Towelie', 'Nerdmaster'], event.targets
225
- assert_equal '-bivv', event.text
225
+ assert_equal '-bivv', event.message
226
226
 
227
227
  event = Net::YAIL::IncomingEvent.parse(":Nerdmaster!jeremy@nerdbucket.com MODE #bots +m")
228
228
  assert_equal 'Nerdmaster', event.nick
229
229
  assert_equal :incoming_mode, event.type
230
230
  assert_equal '#bots', event.channel
231
231
  assert_equal [], event.targets
232
- assert_equal '+m', event.text
232
+ assert_equal '+m', event.message
233
233
 
234
234
  # TODO: This is even worse than above - this is a pretty specific message (setting channel key
235
235
  # to 'foo'), but has to be parsed in a pretty absurd way to get that info.
@@ -238,13 +238,13 @@ class MessageParserEventTest < Test::Unit::TestCase
238
238
  assert_equal :incoming_mode, event.type
239
239
  assert_equal '#bots', event.channel
240
240
  assert_equal ['foo'], event.targets
241
- assert_equal '+k', event.text
241
+ assert_equal '+k', event.message
242
242
  end
243
243
 
244
244
  # Simple test of error event
245
245
  def test_error
246
246
  event = Net::YAIL::IncomingEvent.parse 'ERROR :Closing Link: nerdbucket.com (Quit: Terminated by user)'
247
247
  assert_equal :incoming_error, event.type
248
- assert_equal 'Closing Link: nerdbucket.com (Quit: Terminated by user)', event.text
248
+ assert_equal 'Closing Link: nerdbucket.com (Quit: Terminated by user)', event.message
249
249
  end
250
250
  end
@@ -19,24 +19,25 @@ class YailSessionTest < Test::Unit::TestCase
19
19
  # Sets up all our handlers the legacy way - allows testing that things work as they used to
20
20
  def setup_legacy_handling
21
21
  ###
22
- # Simple counters for basic testing of successful handler registration
22
+ # Simple counters for basic testing of successful handler registration - note that all handlers
23
+ # must add "; false" to the end to avoid stopping the built-in handlers
23
24
  ###
24
25
 
25
26
  @msg = Hash.new(0)
26
- @yail.prepend_handler(:incoming_welcome) { |text, args| @msg[:welcome] += 1 }
27
- @yail.prepend_handler(:incoming_endofmotd) { |text, args| @msg[:endofmotd] += 1 }
28
- @yail.prepend_handler(:incoming_notice) { |f, actor, target, text| @msg[:notice] += 1 }
29
- @yail.prepend_handler(:incoming_nick) { |f, actor, nick| @msg[:nick] += 1 }
30
- @yail.prepend_handler(:incoming_bannedfromchan) { |text, args| @msg[:bannedfromchan] += 1 }
31
- @yail.prepend_handler(:incoming_join) { |f, actor, target| @msg[:join] += 1 }
32
- @yail.prepend_handler(:incoming_mode) { |f, actor, target, modes, objects| @msg[:mode] += 1 }
33
- @yail.prepend_handler(:incoming_msg) { |f, actor, target, text| @msg[:msg] += 1 }
34
- @yail.prepend_handler(:incoming_act) { |f, actor, target, text| @msg[:act] += 1 }
35
- @yail.prepend_handler(:incoming_ctcp) { |f, actor, target, text| @msg[:ctcp] += 1 }
36
- @yail.prepend_handler(:incoming_ping) { |text| @msg[:ping] += 1 }
37
- @yail.prepend_handler(:incoming_quit) { |f, actor, text| @msg[:quit] += 1 }
38
- @yail.prepend_handler(:outgoing_mode) { |target, modes, objects| @msg[:o_mode] += 1 }
39
- @yail.prepend_handler(:outgoing_join) { |channel, pass| @msg[:o_join] += 1 }
27
+ @yail.prepend_handler(:incoming_welcome) { |message, args| @msg[:welcome] += 1; false }
28
+ @yail.prepend_handler(:incoming_endofmotd) { |message, args| @msg[:endofmotd] += 1; false }
29
+ @yail.prepend_handler(:incoming_notice) { |f, actor, target, message| @msg[:notice] += 1; false }
30
+ @yail.prepend_handler(:incoming_nick) { |f, actor, nick| @msg[:nick] += 1; false }
31
+ @yail.prepend_handler(:incoming_bannedfromchan) { |message, args| @msg[:bannedfromchan] += 1; false }
32
+ @yail.prepend_handler(:incoming_join) { |f, actor, target| @msg[:join] += 1; false }
33
+ @yail.prepend_handler(:incoming_mode) { |f, actor, target, modes, objects| @msg[:mode] += 1; false }
34
+ @yail.prepend_handler(:incoming_msg) { |f, actor, target, message| @msg[:msg] += 1; false }
35
+ @yail.prepend_handler(:incoming_act) { |f, actor, target, message| @msg[:act] += 1; false }
36
+ @yail.prepend_handler(:incoming_ctcp) { |f, actor, target, message| @msg[:ctcp] += 1; false }
37
+ @yail.prepend_handler(:incoming_ping) { |message| @msg[:ping] += 1; false }
38
+ @yail.prepend_handler(:incoming_quit) { |f, actor, message| @msg[:quit] += 1; false }
39
+ @yail.prepend_handler(:outgoing_mode) { |target, modes, objects| @msg[:o_mode] += 1; false }
40
+ @yail.prepend_handler(:outgoing_join) { |channel, pass| @msg[:o_join] += 1; false }
40
41
 
41
42
  ###
42
43
  # More complex handlers to test parsing of messages
@@ -50,16 +51,68 @@ class YailSessionTest < Test::Unit::TestCase
50
51
 
51
52
  # Gotta store extra info on notices to test event parsing
52
53
  @notices = []
53
- @yail.prepend_handler(:incoming_notice) do |f, actor, target, text|
54
- @notices.push({:server => f, :nick => actor, :target => target, :text => text})
54
+ @yail.prepend_handler(:incoming_notice) do |f, actor, target, message|
55
+ @notices.push({:from => f, :nick => actor, :target => target, :message => message})
56
+ end
57
+
58
+ @yail.prepend_handler(:incoming_ping) { |message| @ping_message = message; false }
59
+ @yail.prepend_handler(:incoming_quit) { |f, actor, message| @quit = {:full => f, :nick => actor, :message => message}; false }
60
+ @yail.prepend_handler(:outgoing_join) { |channel, pass| @out_join = {:channel => channel, :password => pass}; false }
61
+ @yail.prepend_handler(:incoming_msg) { |f, actor, channel, message| @privmsg = {:channel => channel, :nick => actor, :message => message}; false }
62
+ @yail.prepend_handler(:incoming_ctcp) { |f, actor, channel, message| @ctcp = {:channel => channel, :nick => actor, :message => message}; false }
63
+ @yail.prepend_handler(:incoming_act) { |f, actor, channel, message| @act = {:channel => channel, :nick => actor, :message => message}; false }
64
+ end
65
+
66
+ # "New" handlers are set up (the 1.5+ way of doing things) here to perform tests in common with
67
+ # legacy. Note that because handlers are different, we have to use filtering for things like the
68
+ # welcome message, otherwise we don't let YAIL do its default stuff.
69
+ def setup_new_handlers
70
+ ###
71
+ # Simple counters for basic testing of successful handler registration
72
+ ###
73
+
74
+ @msg = Hash.new(0)
75
+ @yail.heard_welcome { @msg[:welcome] += 1 }
76
+ @yail.heard_endofmotd { @msg[:endofmotd] += 1 }
77
+ @yail.heard_notice { @msg[:notice] += 1 }
78
+ @yail.heard_nick { @msg[:nick] += 1 }
79
+ @yail.heard_bannedfromchan { @msg[:bannedfromchan] += 1 }
80
+ @yail.heard_join { @msg[:join] += 1 }
81
+ @yail.heard_mode { @msg[:mode] += 1 }
82
+ @yail.heard_msg { @msg[:msg] += 1 }
83
+ @yail.heard_act { @msg[:act] += 1 }
84
+ @yail.heard_ctcp { @msg[:ctcp] += 1 }
85
+ @yail.heard_ping { @msg[:ping] += 1 }
86
+ @yail.heard_quit { @msg[:quit] += 1 }
87
+ @yail.said_mode { @msg[:o_mode] += 1 }
88
+ @yail.said_join { @msg[:o_join] += 1 }
89
+
90
+ ###
91
+ # More complex handlers to test parsing of messages
92
+ ###
93
+
94
+ # Channels list helps us test joins
95
+ @channels = []
96
+ @yail.on_join do |event|
97
+ @channels.push(event.channel) if @yail.me == event.nick
98
+ end
99
+
100
+ # Gotta store extra info on notices to test event parsing
101
+ @notices = []
102
+ @yail.on_notice do |event|
103
+ # Notices are tricky - we have to check server? and pm? to mimic legacy handler info
104
+ notice = {:from => event.from, :message => event.message}
105
+ notice[:nick] = event.server? ? "" : event.nick
106
+ notice[:target] = event.pm? ? event.target : event.channel
107
+ @notices.push notice
55
108
  end
56
109
 
57
- @yail.prepend_handler(:incoming_ping) { |text| @ping_message = text }
58
- @yail.prepend_handler(:incoming_quit) { |f, actor, text| @quit = {:full => f, :nick => actor, :text => text} }
59
- @yail.prepend_handler(:outgoing_join) {|channel, pass| @out_join = {:channel => channel, :password => pass} }
60
- @yail.prepend_handler(:incoming_msg) {|f, actor, channel, text| @privmsg = {:channel => channel, :nick => actor, :text => text} }
61
- @yail.prepend_handler(:incoming_ctcp) {|f, actor, channel, text| @ctcp = {:channel => channel, :nick => actor, :text => text} }
62
- @yail.prepend_handler(:incoming_act) {|f, actor, channel, text| @act = {:channel => channel, :nick => actor, :text => text} }
110
+ @yail.heard_ping { |event| @ping_message = event.message }
111
+ @yail.on_quit { |event| @quit = {:full => event.fullname, :nick => event.nick, :message => event.message} }
112
+ @yail.saying_join { |event| @out_join = {:channel => event.channel, :password => event.password} }
113
+ @yail.on_msg { |event| @privmsg = {:channel => event.channel, :nick => event.nick, :message => event.message} }
114
+ @yail.on_ctcp { |event| @ctcp = {:channel => event.channel, :nick => event.nick, :message => event.message} }
115
+ @yail.on_act { |event| @act = {:channel => event.channel, :nick => event.nick, :message => event.message} }
63
116
  end
64
117
 
65
118
  # Waits until the mock IRC reports it has no more output - i.e., we've read everything available
@@ -82,6 +135,14 @@ class YailSessionTest < Test::Unit::TestCase
82
135
  common_tests
83
136
  end
84
137
 
138
+ # Exact same tests as above - just verifying functionality is the same as it was in legacy
139
+ def test_new
140
+ setup_new_handlers
141
+ wait_for_irc
142
+
143
+ common_tests
144
+ end
145
+
85
146
  # Resets the messages hash, mocks the IRC server to send string to us, waits for the response, yields to the block
86
147
  def mock_message(string)
87
148
  @msg = Hash.new(0)
@@ -102,12 +163,12 @@ class YailSessionTest < Test::Unit::TestCase
102
163
  assert_equal 3, @msg[:notice]
103
164
 
104
165
  # Intense notice test - make sure all events were properly translated
105
- assert_equal ['fakeirc.org', 'fakeirc.org', ''], @notices.collect {|n| n[:server]}
166
+ assert_equal ['fakeirc.org', nil, 'fakeirc.org'], @notices.collect {|n| n[:from]}
106
167
  assert_equal ['', '', ''], @notices.collect {|n| n[:nick]}
107
- assert_equal ['AUTH', 'Bot', 'Bot'], @notices.collect {|n| n[:target]}
108
- assert_match %r|looking up your host|i, @notices[0][:text]
109
- assert_match %r|you are exempt|i, @notices[1][:text]
110
- assert_match %r|ERROR|i, @notices[2][:text]
168
+ assert_equal ['AUTH', 'AUTH', 'Bot'], @notices.collect {|n| n[:target]}
169
+ assert_match %r|looking up your host|i, @notices.first[:message]
170
+ assert_match %r|looking up your host|i, @notices[1][:message]
171
+ assert_match %r|you are exempt|i, @notices.last[:message]
111
172
 
112
173
  # Test magic methods that set up the bot
113
174
  assert_equal "Bot", @yail.me, "Should have set @yail.me automatically on welcome handler"
@@ -141,7 +202,7 @@ class YailSessionTest < Test::Unit::TestCase
141
202
 
142
203
  assert_equal "Nerdmaster", @privmsg[:nick]
143
204
  assert_equal "#foosball", @privmsg[:channel]
144
- assert_equal "#{@yail.me}: Welcome!", @privmsg[:text]
205
+ assert_equal "#{@yail.me}: Welcome!", @privmsg[:message]
145
206
  end
146
207
 
147
208
  # CTCP
@@ -152,7 +213,7 @@ class YailSessionTest < Test::Unit::TestCase
152
213
 
153
214
  assert_equal "Nerdmaster", @ctcp[:nick]
154
215
  assert_equal "#foosball", @ctcp[:channel]
155
- assert_equal "CTCP THING", @ctcp[:text]
216
+ assert_equal "CTCP THING", @ctcp[:message]
156
217
  end
157
218
 
158
219
  # ACT
@@ -163,7 +224,7 @@ class YailSessionTest < Test::Unit::TestCase
163
224
 
164
225
  assert_equal "Nerdmaster", @act[:nick]
165
226
  assert_equal "#foosball", @act[:channel]
166
- assert_equal "vomits on you", @act[:text]
227
+ assert_equal "vomits on you", @act[:message]
167
228
  end
168
229
 
169
230
  # PING
@@ -177,7 +238,7 @@ class YailSessionTest < Test::Unit::TestCase
177
238
  assert_equal 1, @msg[:quit]
178
239
  assert_equal 'Nerdmaster!nerd@nerdbucket.com', @quit[:full]
179
240
  assert_equal 'Nerdmaster', @quit[:nick]
180
- assert_equal 'Quit: Bye byes', @quit[:text]
241
+ assert_equal 'Quit: Bye byes', @quit[:message]
181
242
  end
182
243
  end
183
244
  end