events 0.9.6 → 0.9.7

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.
@@ -1,5 +1,5 @@
1
1
  module Events # :nodoc:
2
- UncaughtError = Class.new(StandardError)
2
+ UncaughtError = Class.new(RuntimeError)
3
3
 
4
4
  # The Events::Emitter mixin provides a clone of the Node.js EventEmitter API
5
5
  # for Ruby.
@@ -73,7 +73,8 @@ module Events # :nodoc:
73
73
  listeners = @listeners && @listeners.key?(event) && @listeners[event]
74
74
 
75
75
  if event == :error && (!listeners || listeners.empty?)
76
- raise args.first if args.first.kind_of?(Exception)
76
+ raise *args if args.first.respond_to?(:exception)
77
+ raise Events::UncaughtError, args.first if args.first.is_a?(String)
77
78
  raise Events::UncaughtError.new("Uncaught, unspecified 'error' event.")
78
79
  elsif listeners
79
80
  listeners.dup.each do |listener|
@@ -134,7 +135,7 @@ module Events # :nodoc:
134
135
  end
135
136
  once = OnceWrapper.new do |*args|
136
137
  remove_listener(event, once)
137
- listener.call(args)
138
+ listener.call(*args)
138
139
  end
139
140
  once.original = listener
140
141
 
@@ -0,0 +1,156 @@
1
+ require "test/unit"
2
+ require "../lib/events"
3
+ require "stringio"
4
+
5
+ class TestEvents < Test::Unit::TestCase
6
+
7
+ def test_emit_error_raises_without_handler
8
+ emitter = Events::EventEmitter.new
9
+
10
+ assert_raise(Events::UncaughtError) {emitter.emit(:error)}
11
+ assert_raise(Events::UncaughtError) {emitter.emit(:error, "error")}
12
+ assert(Events::UncaughtError < RuntimeError, "should be a subclass")
13
+ assert_raise(StandardError) {emitter.emit(:error, StandardError.new("error"))}
14
+ assert_raise(StandardError) {emitter.emit(:error, StandardError, "error")}
15
+ end
16
+
17
+ def test_emit_error_raises_without_handler_with_correct_message
18
+ emitter = Events::EventEmitter.new
19
+
20
+ begin
21
+ emitter.emit(:error)
22
+ rescue => e
23
+ assert_equal("Uncaught, unspecified 'error' event.", e.message)
24
+ end
25
+
26
+ begin
27
+ emitter.emit(:error, "test error message")
28
+ rescue => e
29
+ assert_equal("test error message", e.message)
30
+ end
31
+
32
+ begin
33
+ emitter.emit(:error, StandardError.new("error test message"))
34
+ rescue => e
35
+ assert_equal("error test message", e.message)
36
+ end
37
+
38
+ begin
39
+ emitter.emit(:error, StandardError, "message test error")
40
+ rescue => e
41
+ assert_equal("message test error", e.message)
42
+ end
43
+ end
44
+
45
+ def test_any_listener_that_responds_to_call_is_accepted
46
+ emitter = Events::EventEmitter.new
47
+ block_result, proc_result, lambda_result = nil
48
+ stringio = StringIO.new
49
+ object = Object.new
50
+ class << object
51
+ attr_reader :result
52
+ def call
53
+ @result = true
54
+ end
55
+ end
56
+
57
+ emitter.add_listener(:block) {block_result = true}
58
+ emitter.emit(:block)
59
+ assert(block_result, "block not called")
60
+
61
+ emitter.add_listener(:proc, Proc.new {proc_result = true})
62
+ emitter.emit(:proc)
63
+ assert(proc_result, "proc not called")
64
+
65
+ emitter.add_listener(:lambda, lambda {lambda_result = true})
66
+ emitter.emit(:lambda)
67
+ assert(lambda_result, "lambda not called")
68
+
69
+ emitter.add_listener(:method, stringio.method(:puts))
70
+ emitter.emit(:method)
71
+ assert_equal("\n", stringio.string)
72
+
73
+ emitter.add_listener(:object, object)
74
+ emitter.emit(:object)
75
+ assert(object.result, "object not called")
76
+ end
77
+
78
+ def test_any_once_listener_that_responds_to_call_is_accepted
79
+ emitter = Events::EventEmitter.new
80
+ block_result, proc_result, lambda_result = nil
81
+ stringio = StringIO.new
82
+ object = Object.new
83
+ class << object
84
+ attr_reader :result
85
+ def call
86
+ @result = true
87
+ end
88
+ end
89
+
90
+ emitter.once(:block) {block_result = true}
91
+ emitter.emit(:block)
92
+ assert(block_result, "block not called")
93
+
94
+ emitter.once(:proc, Proc.new {proc_result = true})
95
+ emitter.emit(:proc)
96
+ assert(proc_result, "proc not called")
97
+
98
+ emitter.once(:lambda, lambda {lambda_result = true})
99
+ emitter.emit(:lambda)
100
+ assert(lambda_result, "lambda not called")
101
+
102
+ emitter.once(:method, stringio.method(:puts))
103
+ emitter.emit(:method)
104
+ assert_equal("\n", stringio.string)
105
+
106
+ emitter.once(:object, object)
107
+ emitter.emit(:object)
108
+ assert(object.result, "object not called")
109
+ end
110
+
111
+ def test_listener_is_required_to_respond_to_call
112
+ emitter = Events::EventEmitter.new
113
+
114
+ assert_raise(ArgumentError) {emitter.on(:test)}
115
+ assert_raise(ArgumentError) {emitter.on(:test, "foo")}
116
+ assert_raise(ArgumentError) {emitter.once(:test)}
117
+ assert_raise(ArgumentError) {emitter.once(:test, "foo")}
118
+ end
119
+
120
+ def test_multi_arguments
121
+ emitter = Events::EventEmitter.new
122
+
123
+ emitter.on(:block) do |a, b|
124
+ assert_equal("a", a)
125
+ assert_equal("b", b)
126
+ end
127
+
128
+ emitter.emit(:block, "a", "b")
129
+
130
+ emitter.on(:lambda, lambda do |a, b|
131
+ assert_equal("a", a)
132
+ assert_equal("b", b)
133
+ end)
134
+
135
+ emitter.emit(:lambda, "a", "b")
136
+ end
137
+
138
+ def test_multi_arguments_once
139
+ emitter = Events::EventEmitter.new
140
+
141
+ emitter.once(:block) do |a, b|
142
+ assert_equal("a", a)
143
+ assert_equal("b", b)
144
+ end
145
+
146
+ emitter.emit(:block, "a", "b")
147
+
148
+ emitter.once(:lambda, lambda do |a, b|
149
+ assert_equal("a", a)
150
+ assert_equal("b", b)
151
+ end)
152
+
153
+ emitter.emit(:lambda, "a", "b")
154
+ end
155
+
156
+ end
@@ -122,6 +122,54 @@ class TestEventEmitter < Test::Unit::TestCase
122
122
  assert_equal(0, e.listeners(:foo).length)
123
123
  end
124
124
 
125
+ # /test/simple/test-event-emitter-num-args.js
126
+ def test_event_emitter_num_args
127
+ e = Events::EventEmitter.new
128
+ num_args_emited = []
129
+
130
+ e.on(:num_args) do |*args|
131
+ num_args = args.length
132
+ puts "num_args: #{num_args}"
133
+ num_args_emited.push(num_args)
134
+ end
135
+
136
+ puts "start"
137
+
138
+ e.emit(:num_args)
139
+ e.emit(:num_args, nil)
140
+ e.emit(:num_args, nil, nil)
141
+ e.emit(:num_args, nil, nil, nil)
142
+ e.emit(:num_args, nil, nil, nil, nil)
143
+ e.emit(:num_args, nil, nil, nil, nil, nil)
144
+
145
+ assert_equal([0, 1, 2, 3, 4, 5], num_args_emited)
146
+ end
147
+
148
+ # /test/simple/test-event-emitter-once.js
149
+ def test_event_emitter_once
150
+ e = Events::EventEmitter.new
151
+ times_hello_emited = 0
152
+
153
+ e.once(:hello) do |a, b|
154
+ times_hello_emited += 1
155
+ end
156
+
157
+ e.emit(:hello, "a", "b")
158
+ e.emit(:hello, "a", "b")
159
+ e.emit(:hello, "a", "b")
160
+ e.emit(:hello, "a", "b")
161
+
162
+ remove = Proc.new do
163
+ flunk("once->foo should not be emitted")
164
+ end
165
+
166
+ e.once(:foo, remove)
167
+ e.remove_listener(:foo, remove)
168
+ e.emit(:foo)
169
+
170
+ assert_equal(1, times_hello_emited)
171
+ end
172
+
125
173
  # /test/simple/test-event-emitter-remove-all-listeners.js
126
174
  def test_event_emitter_remove_all_listeners
127
175
  listener = Proc.new {}
@@ -177,52 +225,4 @@ class TestEventEmitter < Test::Unit::TestCase
177
225
  assert_equal([listener2], e3.listeners(:hello))
178
226
  end
179
227
 
180
- # /test/simple/test-event-emitter-once.js
181
- def test_event_emitter_once
182
- e = Events::EventEmitter.new
183
- times_hello_emited = 0
184
-
185
- e.once(:hello) do |a, b|
186
- times_hello_emited += 1
187
- end
188
-
189
- e.emit(:hello, "a", "b")
190
- e.emit(:hello, "a", "b")
191
- e.emit(:hello, "a", "b")
192
- e.emit(:hello, "a", "b")
193
-
194
- remove = Proc.new do
195
- flunk("once->foo should not be emitted")
196
- end
197
-
198
- e.once(:foo, remove)
199
- e.remove_listener(:foo, remove)
200
- e.emit(:foo)
201
-
202
- assert_equal(1, times_hello_emited)
203
- end
204
-
205
- # /test/simple/test-event-emitter-num-args.js
206
- def test_event_emitter_num_args
207
- e = Events::EventEmitter.new
208
- num_args_emited = []
209
-
210
- e.on(:num_args) do |*args|
211
- num_args = args.length
212
- puts "num_args: #{num_args}"
213
- num_args_emited.push(num_args)
214
- end
215
-
216
- puts "start"
217
-
218
- e.emit(:num_args)
219
- e.emit(:num_args, nil)
220
- e.emit(:num_args, nil, nil)
221
- e.emit(:num_args, nil, nil, nil)
222
- e.emit(:num_args, nil, nil, nil, nil)
223
- e.emit(:num_args, nil, nil, nil, nil, nil)
224
-
225
- assert_equal([0, 1, 2, 3, 4, 5], num_args_emited)
226
- end
227
-
228
228
  end
metadata CHANGED
@@ -1,13 +1,12 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: events
3
3
  version: !ruby/object:Gem::Version
4
- hash: 55
5
4
  prerelease: false
6
5
  segments:
7
6
  - 0
8
7
  - 9
9
- - 6
10
- version: 0.9.6
8
+ - 7
9
+ version: 0.9.7
11
10
  platform: ruby
12
11
  authors:
13
12
  - Matthew Sadler
@@ -15,7 +14,7 @@ autorequire:
15
14
  bindir: bin
16
15
  cert_chain: []
17
16
 
18
- date: 2011-05-25 00:00:00 +01:00
17
+ date: 2011-08-06 00:00:00 +01:00
19
18
  default_executable:
20
19
  dependencies: []
21
20
 
@@ -29,7 +28,8 @@ extra_rdoc_files:
29
28
  - readme.rdoc
30
29
  files:
31
30
  - lib/events.rb
32
- - test/event_emitter_test.rb
31
+ - test/events_test.rb
32
+ - test/node_transliterated_test.rb
33
33
  - readme.rdoc
34
34
  has_rdoc: true
35
35
  homepage: http://github.com/matsadler/rb-event-emitter
@@ -42,29 +42,26 @@ rdoc_options:
42
42
  require_paths:
43
43
  - lib
44
44
  required_ruby_version: !ruby/object:Gem::Requirement
45
- none: false
46
45
  requirements:
47
46
  - - ">="
48
47
  - !ruby/object:Gem::Version
49
- hash: 3
50
48
  segments:
51
49
  - 0
52
50
  version: "0"
53
51
  required_rubygems_version: !ruby/object:Gem::Requirement
54
- none: false
55
52
  requirements:
56
53
  - - ">="
57
54
  - !ruby/object:Gem::Version
58
- hash: 3
59
55
  segments:
60
56
  - 0
61
57
  version: "0"
62
58
  requirements: []
63
59
 
64
60
  rubyforge_project:
65
- rubygems_version: 1.3.7
61
+ rubygems_version: 1.3.6
66
62
  signing_key:
67
63
  specification_version: 3
68
64
  summary: Clone of the node.js EventEmitter api for Ruby
69
65
  test_files:
70
- - test/event_emitter_test.rb
66
+ - test/events_test.rb
67
+ - test/node_transliterated_test.rb