net-yail 1.4.6 → 1.5.1

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.
@@ -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