amqp-spec 0.3.7 → 0.3.8

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore CHANGED
@@ -14,6 +14,8 @@ tmtags
14
14
  *.swp
15
15
 
16
16
  ## PROJECT::GENERAL
17
+ *.rbc
18
+ *.class
17
19
  coverage
18
20
  config
19
21
  rdoc
data/HISTORY CHANGED
@@ -85,3 +85,7 @@
85
85
  == 0.3.7 / 2011-01-07
86
86
 
87
87
  * Changed Gemspec to avoid circular dependency on AMQP
88
+
89
+ == 0.3.8 / 2011-01-25
90
+
91
+ * MRI 1.8.7 support added
@@ -1,10 +1,11 @@
1
1
  = amqp-spec
2
2
  by: Arvicco
3
- url: http://github.com/arvicco/amqp-spec
3
+ url: http://github.com/ruby-amqp/amqp-spec
4
4
 
5
5
  == Summary
6
6
 
7
7
  Simple API for writing asynchronous EventMachine/AMQP specs. Supports RSpec and RSpec2.
8
+ Should work under MRI 1.8.7, 1.9.2 (and JRuby 1.6.0 - work in progress!)
8
9
 
9
10
  == Description
10
11
 
@@ -21,17 +22,17 @@ has several drawbacks. First, it is not easy to manage both EM.run and AMQP.star
21
22
  at the same time. Second, AMQP is not properly stopped and deactivated upon exceptions and
22
23
  timeouts, resulting in state leak between examples and multiple mystereous failures.
23
24
 
24
- AMQP-Spec is based on EM-Spec code but makes it easier to test AMQP event loops
25
- specifically. API is very similar to EM-Spec's, only a bit extended. The final goal is to
25
+ AMQP-Spec is based on EM-Spec code but extends it to support AMQP event loops (as well as
26
+ RSpec2). API is very similar to EM-Spec's, only a bit extended. The final goal is to
26
27
  make writing AMQP specs reasonably pleasant experience and dispel the notion that evented
27
- AMQP-based libs are impossible to unit-test.
28
+ libs are impossible to unit-test.
28
29
 
29
30
  Mind you, you still have to properly manage your AMQP broker in order to prevent broker
30
31
  state from leaking between examples. You can try to combine AMQP-Spec and
31
32
  Moqueue[http://github.com/danielsdeleo/moqueue] if you want to abstract away actual broker
32
33
  interactions, but still specify some event-based expectations.
33
34
 
34
- ==Rspec
35
+ == Rspec
35
36
 
36
37
  There are several ways to use amqp-spec. To use it as a helper, include AMQP::SpecHelper
37
38
  in your describe block. You then use either #amqp or #em methods to wrap your evented
@@ -50,9 +51,9 @@ In order to setup/teardown EM state before/after your examples, you'll need to u
50
51
  If you are using #amqp method, *em_before* hook will run just BEFORE AMQP connection is
51
52
  attempted, and *em_after* is run after AMQP is stopped.
52
53
 
53
- Sometimes, may want to setup/teardown state inside AMQP connection (inside block given to
54
- AMQP.start): for example, to make sure that the connection is established before your
55
- example runs, or pre-declare some queues and exchanges common for all examples.
54
+ Sometimes, you may want to setup/teardown state inside AMQP connection (inside block given
55
+ to AMQP.start): for example, to make sure that the connection is established before your
56
+ examples run, or to pre-declare some queues and exchanges common for all examples.
56
57
  In this case, please use *amqp_before* and *amqp_after* hooks. These hooks run inside
57
58
  the AMQP.start block just before/after your example block.
58
59
 
@@ -61,11 +62,20 @@ the AMQP.start block just before/after your example block.
61
62
  describe AMQP do
62
63
  include AMQP::SpecHelper
63
64
 
64
- default_options = {:host => 'my.amqp.broker.org', :port => '21118'}
65
65
  # Can be used to set default options for your amqp{} event loops
66
+ default_options {:host => 'my.amqp.broker.org', :port => '21118'}
66
67
 
67
- default_timeout = 1
68
68
  # Can be used to set default :spec_timeout for your evented specs
69
+ default_timeout 1
70
+
71
+ # Runs inside the EM event loop before each block given to #amqp or #em
72
+ em_before { @start = Time.now }
73
+
74
+ # Runs inside the AMQP.start before each block given to #amqp
75
+ amqp_before do
76
+ @channel = AMQP::Channel.new
77
+ @queue = @channel.queue('my_queue')
78
+ end
69
79
 
70
80
  it "works normally when not using #amqp or #em" do
71
81
  1.should == 1
@@ -73,10 +83,8 @@ the AMQP.start block just before/after your example block.
73
83
 
74
84
  it "makes testing evented code easy with #em" do
75
85
  em do
76
- start = Time.now
77
-
78
86
  EM.add_timer(0.5){
79
- (Time.now-start).should be_close( 0.5, 0.1 )
87
+ (Time.now - @start).should be_close( 0.5, 0.1 )
80
88
  done
81
89
  }
82
90
  end
@@ -85,13 +93,16 @@ the AMQP.start block just before/after your example block.
85
93
  it "runs AMQP.start loop with options given to #amqp" do
86
94
  amqp(:host => 'my.amqp.broker.org', :port => '21118')do
87
95
  AMQP.conn.should be_connected
96
+ @queue.name.should == 'my_queue'
88
97
  done
89
98
  end
90
99
  end
91
100
 
92
101
  it "optionally raises timeout exception if your loop hangs for some reason" do
93
102
  proc {
94
- amqp(:spec_timeout => 0.5){}
103
+ amqp(:spec_timeout => 0.5) do
104
+ # no done!
105
+ end
95
106
  }.should raise_error SpecTimeoutExceededError
96
107
  end
97
108
 
@@ -106,17 +117,16 @@ tear down using these hooks will be lost as example itself will run in a differe
106
117
 
107
118
  In short, you should avoid using *before*/*after* if you include AMQP::Spec - instead, use
108
119
  *em_before*/*em_after* or *amqp_before*/*amqp_after* hooks that run inside the EM event
109
- loop.
110
-
111
- One more note: you don't need to call #done inside evented hooks, otherwise it'll shut down
112
- the EM reactor.
120
+ loop. You don't need to call #done inside these evented hooks, otherwise you'll shut down
121
+ the EM reactor before your example runs.
113
122
 
123
+ require 'amqp-spec'
114
124
 
115
125
  describe AMQP do
116
126
  include AMQP::Spec
117
127
 
118
- default_options = {:host => 'my.amqp.broker.org', :port => '21118'}
119
- default_timeout = 1
128
+ default_options {:host => 'my.amqp.broker.org', :port => '21118'}
129
+ default_timeout 1
120
130
 
121
131
  em_before { @start = Time.now }
122
132
 
@@ -128,7 +138,7 @@ the EM reactor.
128
138
  it "runs test code in an amqp block automatically" do
129
139
 
130
140
  EM.add_timer(0.5){
131
- (Time.now-@start).should be_close( 0.5, 0.1 )
141
+ (Time.now - @start).should be_close( 0.5, 0.1 )
132
142
  done
133
143
  }
134
144
  end
@@ -139,14 +149,16 @@ the EM reactor.
139
149
  end
140
150
 
141
151
  it "raises timeout exception ONLY if default_timeout was set" do
142
- proc{}.should raise_error SpecTimeoutExceededError
152
+ proc do
153
+ # no done!
154
+ end.should raise_error SpecTimeoutExceededError
143
155
  end
144
156
  end
145
157
 
146
158
  Finally, you can include AMQP::EMSpec in your describe block. This will run all the group
147
159
  examples inside em block instead of amqp. Non-evented *before*/*after* hooks should be
148
160
  finished with #done, same as when including AMQP::Spec, and same caution about using them
149
- applies.
161
+ applies - use *em_before*/*em_after* instead.
150
162
 
151
163
  describe AMQP do
152
164
  include AMQP::EMSpec
@@ -168,16 +180,7 @@ applies.
168
180
  end
169
181
  end
170
182
 
171
-
172
- ==Bacon
173
-
174
- ...
175
-
176
- ==Test::Unit
177
-
178
- ...
179
-
180
- ==General notes
183
+ == General notes
181
184
 
182
185
  For a developer new to evented specs, it is not easy to internalize that the blocks given
183
186
  to asynchronous methods are turned into real callbacks, intended to fire some time later.
@@ -193,7 +196,8 @@ Take the following spec as an example:
193
196
  msg.should_not == 'data'
194
197
  end
195
198
  MQ.queue('queue_name').publish 'data'
196
- q.unsubscribe; q.delete
199
+ q.unsubscribe
200
+ q.delete
197
201
  done
198
202
  end
199
203
  end
@@ -232,19 +236,38 @@ Something like this will do the trick:
232
236
  @subscribe_fired.should be_true
233
237
  end
234
238
 
235
- ==Limitations
239
+ == Legacy EM-Spec based specs support
240
+
241
+ In order to run your existing EM-Spec based specs unmodified, instead of require 'em-spec':
242
+
243
+ require 'amqp-spec'
244
+ require 'amqp-spec/em_spec_shim'
245
+
246
+ Please note that in amqp-spec default options and default timeout are local for each
247
+ example group and inherited by its nested groups, unconnected example groups DO NOT
248
+ share defaults. This is different from EM-Spec where default_timeout is effectively
249
+ a global setting. So please make sure you're setting default_timeout early on,
250
+ in your outermost example group in order to get same behavior as in EM-Spec.
251
+
252
+ == Extending library to spec other types of event loops
253
+
254
+ AMQP-Spec extends EM-Spec code to cover different types of event loops.
255
+ Initially, vanilla EM and AMQP event loops are supported, but the lib can be extended
256
+ quite easily to spec any other type of event loop, not necesarily EM-based (such as
257
+ Cool.io, ZMQMachine and whatnot). All you need to do is just write appropriate
258
+ EventedExample subclass (with minimal interface of just #run and #done to start and
259
+ stop your loop) and RSpec wrapper for it similar to SpecHelper#em or SpecHelper#amqp.
260
+ You can then call your wrapper in RSpec examples in a way similar to #em or #amqp.
261
+
262
+ == Limitations
236
263
 
237
264
  AMQP-Spec can be currently used with Rspec only. I suppose, it is not that difficult to
238
265
  extend EM-Spec's Test::Unit and Bacon support, I just do not have experience doing it.
239
266
 
240
- Another limitation, library uses 1.9 syntax and therefore not compatible with Ruby 1.8.
241
- Again, it seems possible to rewrite it in 1.8-compatible style, with string evals and
242
- all such, but I'd rather leave this work to someone else.
243
-
244
267
  Any help improving this library is greatly appreciated...
245
268
 
246
269
  == LICENSE:
247
- Copyright (c) 2010 Arvicco.
270
+ Copyright (c) 2010-2011 Arvicco.
248
271
  Original EM-Spec code copyright (c) 2008 Aman Gupta (tmm1)
249
272
 
250
273
  See LICENSE for details.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.3.7
1
+ 0.3.8
@@ -1,24 +1,6 @@
1
1
  require 'version'
2
2
 
3
- module AMQP
4
- module Spec
5
-
6
- # Requires ruby source file(s). Accepts either single filename/glob or Array of filenames/globs.
7
- # Accepts following options:
8
- # :*file*:: Lib(s) required relative to this file - defaults to __FILE__
9
- # :*dir*:: Required lib(s) located under this dir name - defaults to gem name
10
- #
11
- def self.require_libs(libs, opts={})
12
- file = Pathname.new(opts[:file] || __FILE__)
13
- [libs].flatten.each do |lib|
14
- name = file.dirname + (opts[:dir] || file.basename('.*')) + lib.gsub(/(?<!.rb)$/, '.rb')
15
- Pathname.glob(name.to_s).sort.each { |rb| require rb }
16
- end
17
- end
18
- end
19
- end
20
-
21
- # Require all ruby source files located under directory lib/amqp-spec
22
- # If you need files in specific order, you should specify it here before the glob
23
- AMQP::Spec.require_libs %W[rspec]
3
+ __dir = File.expand_path(File.dirname(__FILE__))
4
+ $:.unshift(__dir) unless $:.include?(__dir)
24
5
 
6
+ require "amqp-spec/rspec"
@@ -0,0 +1,6 @@
1
+ # Monkey patching EM to provide drop-in experience for legacy EM-Spec based examples.
2
+ # Remember: monkey patching is dangerous, confusing and will come to haunt you.
3
+ module EventMachine
4
+ Spec = AMQP::EMSpec
5
+ SpecHelper = AMQP::SpecHelper
6
+ end
@@ -8,7 +8,7 @@ module AMQP
8
8
  class EventedExample
9
9
 
10
10
  # Create new evented example
11
- def initialize opts = {}, example_group_instance, &block
11
+ def initialize(opts, example_group_instance, &block)
12
12
  @opts, @example_group_instance, @block = opts, example_group_instance, block
13
13
  end
14
14
 
@@ -30,7 +30,7 @@ module AMQP
30
30
  #
31
31
  # Please redefine it inside descendant class and call super.
32
32
  #
33
- def done delay=nil, &block
33
+ def done(delay=nil, &block)
34
34
  if delay
35
35
  EM.add_timer delay, &block
36
36
  else
@@ -40,7 +40,7 @@ module AMQP
40
40
 
41
41
  # Runs hooks of specified type (hopefully, inside the event loop)
42
42
  #
43
- def run_em_hooks type
43
+ def run_em_hooks(type)
44
44
  @example_group_instance.class.em_hooks[type].each do |hook|
45
45
  if @example_group_instance.respond_to? :instance_eval_without_event_loop
46
46
  @example_group_instance.instance_eval_without_event_loop(&hook)
@@ -105,7 +105,7 @@ module AMQP
105
105
  # Breaks the EM event loop and finishes the spec.
106
106
  # Done yields to any given block first, then stops EM event loop.
107
107
  #
108
- def done(delay=nil)
108
+ def done(delay = nil)
109
109
  super(delay) do
110
110
  yield if block_given?
111
111
  EM.next_tick do
@@ -122,7 +122,7 @@ module AMQP
122
122
  # Run @block inside the AMQP.start loop
123
123
  def run
124
124
  run_em_loop do
125
- AMQP.start_connection @opts, do
125
+ AMQP.start_connection(@opts) do
126
126
  run_em_hooks :amqp_before
127
127
  @block.call
128
128
  end
@@ -132,7 +132,7 @@ module AMQP
132
132
  # Breaks the event loop and finishes the spec. It yields to any given block first,
133
133
  # then stops AMQP, EM event loop and cleans up AMQP state.
134
134
  #
135
- def done(delay=nil)
135
+ def done(delay = nil)
136
136
  super(delay) do
137
137
  yield if block_given?
138
138
  EM.next_tick do
@@ -53,39 +53,39 @@ module AMQP
53
53
  # Sets/retrieves default timeout for running evented specs for this
54
54
  # example group and its nested groups.
55
55
  #
56
- def default_timeout spec_timeout=nil
56
+ def default_timeout(spec_timeout = nil)
57
57
  default_options[:spec_timeout] = spec_timeout || default_options[:spec_timeout]
58
58
  end
59
59
 
60
60
  # Sets/retrieves default AMQP.start options for this example group
61
61
  # and its nested groups.
62
62
  #
63
- def default_options opts=nil
63
+ def default_options(opts = nil)
64
64
  metadata[:em_defaults] ||= {}
65
65
  metadata[:em_defaults][self] ||= (superclass.default_options.dup rescue {})
66
66
  metadata[:em_defaults][self] = opts || metadata[:em_defaults][self]
67
67
  end
68
68
 
69
69
  # Add before hook that will run inside EM event loop
70
- def em_before scope = :each, &block
70
+ def em_before(scope = :each, &block)
71
71
  raise ArgumentError, "em_before only supports :each scope" unless :each == scope
72
72
  em_hooks[:em_before] << block
73
73
  end
74
74
 
75
75
  # Add after hook that will run inside EM event loop
76
- def em_after scope = :each, &block
76
+ def em_after(scope = :each, &block)
77
77
  raise ArgumentError, "em_after only supports :each scope" unless :each == scope
78
78
  em_hooks[:em_after].unshift block
79
79
  end
80
80
 
81
81
  # Add before hook that will run inside AMQP connection (AMQP.start loop)
82
- def amqp_before scope = :each, &block
82
+ def amqp_before(scope = :each, &block)
83
83
  raise ArgumentError, "amqp_before only supports :each scope" unless :each == scope
84
84
  em_hooks[:amqp_before] << block
85
85
  end
86
86
 
87
87
  # Add after hook that will run inside AMQP connection (AMQP.start loop)
88
- def amqp_after scope = :each, &block
88
+ def amqp_after(scope = :each, &block)
89
89
  raise ArgumentError, "amqp_after only supports :each scope" unless :each == scope
90
90
  em_hooks[:amqp_after].unshift block
91
91
  end
@@ -94,14 +94,16 @@ module AMQP
94
94
  def em_hooks
95
95
  metadata[:em_hooks] ||= {}
96
96
  metadata[:em_hooks][self] ||=
97
- {em_before: (superclass.em_hooks[:em_before].clone rescue []),
98
- em_after: (superclass.em_hooks[:em_after].clone rescue []),
99
- amqp_before: (superclass.em_hooks[:amqp_before].clone rescue []),
100
- amqp_after: (superclass.em_hooks[:amqp_after].clone rescue [])}
97
+ {
98
+ :em_before => (superclass.em_hooks[:em_before].clone rescue []),
99
+ :em_after => (superclass.em_hooks[:em_after].clone rescue []),
100
+ :amqp_before => (superclass.em_hooks[:amqp_before].clone rescue []),
101
+ :amqp_after => (superclass.em_hooks[:amqp_after].clone rescue [])
102
+ }
101
103
  end
102
104
  end
103
105
 
104
- def self.included example_group
106
+ def self.included(example_group)
105
107
  unless example_group.respond_to? :default_timeout
106
108
  example_group.extend GroupMethods
107
109
  end
@@ -131,7 +133,7 @@ module AMQP
131
133
  # to force spec to timeout if something goes wrong and EM/AMQP loop hangs for some
132
134
  # reason. SpecTimeoutExceededError is raised if it happens.
133
135
  #
134
- def amqp opts={}, &block
136
+ def amqp(opts = {}, &block)
135
137
  opts = default_options.merge opts
136
138
  @evented_example = AMQPExample.new(opts, self, &block)
137
139
  @evented_example.run
@@ -144,8 +146,8 @@ module AMQP
144
146
  # For compatibility with EM-Spec API, em method accepts either options Hash
145
147
  # or numeric timeout in seconds.
146
148
  #
147
- def em opts = {}, &block
148
- opts = default_options.merge(opts.is_a?(Hash) ? opts : {spec_timeout: opts})
149
+ def em(opts = {}, &block)
150
+ opts = default_options.merge(opts.is_a?(Hash) ? opts : { :spec_timeout => opts })
149
151
  @evented_example = EMExample.new(opts, self, &block)
150
152
  @evented_example.run
151
153
  end
@@ -159,13 +161,13 @@ module AMQP
159
161
  # that your (default or explicit) spec timeout may fire before your delayed done
160
162
  # callback is due, leading to SpecTimeoutExceededError
161
163
  #
162
- def done *args, &block
164
+ def done(*args, &block)
163
165
  @evented_example.done *args, &block
164
166
  end
165
167
 
166
168
  # Manually sets timeout for currently running example
167
169
  #
168
- def timeout *args
170
+ def timeout(*args)
169
171
  @evented_example.timeout *args
170
172
  end
171
173
 
@@ -208,9 +210,3 @@ module AMQP
208
210
  end
209
211
  end
210
212
  end
211
-
212
- # Monkey patching EM to provide drop-in experience for legacy EM-Spec based examples
213
- module EventMachine
214
- Spec = AMQP::EMSpec
215
- SpecHelper = AMQP::SpecHelper
216
- end
@@ -1,7 +1,9 @@
1
1
  require 'spec_helper'
2
2
 
3
- def hook symbol=nil, reactor, connection
4
- @hooks_called << symbol.to_sym if symbol
3
+ # Registers specific hook type as being called,
4
+ # sets expectations about EM reactor and AMQP connection state
5
+ def hook(type, reactor, connection)
6
+ @hooks_called << type.to_sym if type
5
7
  if :reactor_running == reactor
6
8
  EM.reactor_running?.should be_true
7
9
  else
@@ -88,7 +90,7 @@ describe AMQP::SpecHelper, ".em_before/.em_after" do
88
90
  context 'for non-evented specs' do
89
91
  after {
90
92
  @hooks_called.should == [:before]
91
- hook :reactor_not_running, :amqp_not_connected }
93
+ hook :after, :reactor_not_running, :amqp_not_connected }
92
94
 
93
95
  it 'should NOT execute em_before or em_after' do
94
96
  @hooks_called.should_not include :em_before
@@ -109,7 +111,7 @@ describe AMQP::SpecHelper, ".em_before/.em_after" do
109
111
  context 'for evented specs' do #, pending: true do
110
112
  after {
111
113
  @hooks_called.should include :before, :em_before, :em_after
112
- hook :reactor_not_running, :amqp_not_connected }
114
+ hook :after, :reactor_not_running, :amqp_not_connected }
113
115
 
114
116
  context 'with em block' do
115
117
 
@@ -143,7 +145,7 @@ describe AMQP::SpecHelper, ".em_before/.em_after" do
143
145
  :context_em_before,
144
146
  :context_em_after,
145
147
  :em_after
146
- hook :reactor_not_running, :amqp_not_connected
148
+ hook :after, :reactor_not_running, :amqp_not_connected
147
149
  }
148
150
 
149
151
  it_should_behave_like 'hooked em specs'
@@ -200,7 +202,7 @@ describe AMQP::SpecHelper, ".em_before/.em_after" do
200
202
  :amqp_after,
201
203
  :amqp_context_em_after,
202
204
  :em_after]
203
- hook :reactor_not_running, :amqp_not_connected }
205
+ hook :after, :reactor_not_running, :amqp_not_connected }
204
206
 
205
207
  it_should_behave_like 'hooked amqp specs'
206
208
 
@@ -1,5 +1,7 @@
1
1
  require 'spec_helper'
2
2
 
3
+ require 'amqp-spec/em_spec_shim'
4
+
3
5
  describe 'Legacy EM-Spec based examples should run unmodified' do
4
6
  describe EM::SpecHelper, ' when included' do
5
7
  include EM::SpecHelper
@@ -12,7 +14,7 @@ describe 'Legacy EM-Spec based examples should run unmodified' do
12
14
  start = Time.now
13
15
  em do
14
16
  EM.add_timer(0.5) {
15
- (Time.now-start).should be_close(0.5, 0.1)
17
+ (Time.now-start).should be_within(0.1).of(0.5)
16
18
  done
17
19
  }
18
20
  end
@@ -25,7 +27,7 @@ describe 'Legacy EM-Spec based examples should run unmodified' do
25
27
  EM.add_timer(1) { done }
26
28
  end
27
29
  }.to raise_error SpecTimeoutExceededError
28
- (Time.now-start).should be_close(0.5, 0.1)
30
+ (Time.now-start).should be_within(0.5).of(0.1)
29
31
  end
30
32
 
31
33
  it "should be possible to set spec timeout as an option (amqp interface compatibility)" do
@@ -35,7 +37,7 @@ describe 'Legacy EM-Spec based examples should run unmodified' do
35
37
  EM.add_timer(1) { done }
36
38
  end
37
39
  }.to raise_error SpecTimeoutExceededError
38
- (Time.now-start).should be_close(0.5, 0.1)
40
+ (Time.now-start).should be_within(0.1).of(0.5)
39
41
  end
40
42
  end
41
43
 
@@ -12,7 +12,7 @@ describe 'Plain EM, no AMQP' do
12
12
  start = Time.now
13
13
  em do
14
14
  EM.add_timer(0.5) {
15
- (Time.now-start).should be_close(0.5, 0.1)
15
+ (Time.now-start).should be_within(0.1).of(0.5)
16
16
  done
17
17
  }
18
18
  end
@@ -25,7 +25,7 @@ describe 'Plain EM, no AMQP' do
25
25
  EM.add_timer(1) { done }
26
26
  end
27
27
  }.to raise_error SpecTimeoutExceededError
28
- (Time.now-start).should be_close(0.5, 0.1)
28
+ (Time.now-start).should be_within(0.1).of(0.5)
29
29
  end
30
30
 
31
31
  it "should be possible to set spec timeout as an option (amqp interface compatibility)" do
@@ -35,7 +35,7 @@ describe 'Plain EM, no AMQP' do
35
35
  EM.add_timer(1) { done }
36
36
  end
37
37
  }.to raise_error SpecTimeoutExceededError
38
- (Time.now-start).should be_close(0.5, 0.1)
38
+ (Time.now-start).should be_within(0.1).of(0.5)
39
39
  end
40
40
  end
41
41
 
@@ -16,7 +16,7 @@ shared_examples_for 'SpecHelper examples' do
16
16
  start = Time.now
17
17
  amqp do
18
18
  EM.add_timer(0.5) {
19
- (Time.now-start).should be_close(0.5, 0.1)
19
+ (Time.now-start).should be_within(0.1).of(0.5)
20
20
  done
21
21
  }
22
22
  end
@@ -85,7 +85,7 @@ shared_examples_for 'done examples' do
85
85
  done(0.2) { @block_called = true; EM.reactor_running?.should == true }
86
86
  end
87
87
  @block_called.should == true
88
- (Time.now-start).should be_close(0.2, 0.1)
88
+ (Time.now-start).should be_within(0.1).of(0.2)
89
89
  end
90
90
 
91
91
  it 'should have delayed done (when em is used)' do
@@ -94,7 +94,7 @@ shared_examples_for 'done examples' do
94
94
  done(0.2) { @block_called = true; EM.reactor_running?.should == true }
95
95
  end
96
96
  @block_called.should == true
97
- (Time.now-start).should be_close(0.2, 0.1)
97
+ (Time.now-start).should be_within(0.1).of(0.2)
98
98
  end
99
99
  end
100
100
 
@@ -104,7 +104,7 @@ shared_examples_for 'timeout examples' do
104
104
  it 'should timeout before reaching done because of default spec timeout' do
105
105
  expect { amqp { EM.add_timer(2) { done } } }.
106
106
  to raise_error SpecTimeoutExceededError
107
- (Time.now-@start).should be_close(1.0, 0.1)
107
+ (Time.now-@start).should be_within(0.1).of(1.0)
108
108
  end
109
109
 
110
110
  it 'should timeout before reaching done because of explicit in-loop timeout' do
@@ -114,19 +114,19 @@ shared_examples_for 'timeout examples' do
114
114
  EM.add_timer(0.5) { done }
115
115
  end
116
116
  }.to raise_error SpecTimeoutExceededError
117
- (Time.now-@start).should be_close(0.2, 0.1)
117
+ (Time.now-@start).should be_within(0.1).of(0.2)
118
118
  end
119
119
 
120
120
  specify "spec timeout given in amqp options has higher priority than default" do
121
121
  expect { amqp(:spec_timeout => 0.2) {} }.
122
122
  to raise_error SpecTimeoutExceededError
123
- (Time.now-@start).should be_close(0.2, 0.1)
123
+ (Time.now-@start).should be_within(0.1).of(0.2)
124
124
  end
125
125
 
126
126
  specify "but timeout call inside amqp loop has even higher priority" do
127
127
  expect { amqp(:spec_timeout => 0.5) { timeout(0.2) } }.
128
128
  to raise_error SpecTimeoutExceededError
129
- (Time.now-@start).should be_close(0.2, 0.1)
129
+ (Time.now-@start).should be_within(0.1).of(0.2)
130
130
  end
131
131
 
132
132
  specify "AMQP connection should not leak between examples" do
@@ -138,7 +138,7 @@ shared_examples_for 'timeout examples' do
138
138
 
139
139
  specify 'default timeout should be 0.2' do
140
140
  expect { em { EM.add_timer(2) { done } } }.to raise_error SpecTimeoutExceededError
141
- (Time.now-@start).should be_close(0.2, 0.1)
141
+ (Time.now-@start).should be_within(0.1).of(0.2)
142
142
  end
143
143
 
144
144
  context 'deeply embedded context can set up separate defaults' do
@@ -146,7 +146,7 @@ shared_examples_for 'timeout examples' do
146
146
 
147
147
  specify 'default timeout should be 0.5' do
148
148
  expect { amqp { EM.add_timer(2) { done } } }.to raise_error SpecTimeoutExceededError
149
- (Time.now-@start).should be_close(0.5, 0.1)
149
+ (Time.now-@start).should be_within(0.1).of(0.5)
150
150
  end
151
151
  end
152
152
  end
@@ -167,7 +167,7 @@ shared_examples_for 'Spec examples' do
167
167
  start = Time.now
168
168
 
169
169
  EM.add_timer(0.2) {
170
- (Time.now-start).should be_close(0.2, 0.1)
170
+ (Time.now-start).should be_within(0.1).of(0.2)
171
171
  done
172
172
  }
173
173
  end
@@ -178,7 +178,7 @@ shared_examples_for 'Spec examples' do
178
178
 
179
179
  timer = EM.add_periodic_timer(0.2) {
180
180
  if (num += 1) == 2
181
- (Time.now-start).should be_close(0.5, 0.1)
181
+ (Time.now-start).should be_within(0.1).of(0.5)
182
182
  EM.cancel_timer timer
183
183
  done
184
184
  end
@@ -18,31 +18,36 @@ end
18
18
  def done
19
19
  end
20
20
 
21
- RSPEC = rspec2? ? RSpec : Spec
21
+ RSPEC = rspec2? ? RSpec : Spec
22
22
 
23
23
  amqp_config = File.dirname(__FILE__) + '/amqp.yml'
24
24
 
25
- if File.exists? amqp_config
26
- class Hash
27
- def symbolize_keys
28
- self.inject({}) { |result, (key, value)|
29
- new_key = case key
30
- when String then
31
- key.to_sym
32
- else
33
- key
25
+ AMQP_OPTS = unless File.exists? amqp_config
26
+ {:user => 'guest',
27
+ :pass => 'guest',
28
+ :host => '10.211.55.2',
29
+ :vhost => '/'}
30
+ else
31
+ class Hash
32
+ def symbolize_keys
33
+ self.inject({}) { |result, (key, value)|
34
+ new_key = case key
35
+ when String then
36
+ key.to_sym
37
+ else
38
+ key
39
+ end
40
+ new_value = case value
41
+ when Hash then
42
+ value.symbolize_keys
43
+ else
44
+ value
45
+ end
46
+ result[new_key] = new_value
47
+ result
48
+ }
34
49
  end
35
- new_value = case value
36
- when Hash then
37
- value.symbolize_keys
38
- else
39
- value
40
- end
41
- result[new_key] = new_value
42
- result
43
- }
44
- end
45
- end
46
-
47
- AMQP_OPTS = YAML::load_file(amqp_config).symbolize_keys[:test]
48
- end
50
+ end
51
+
52
+ YAML::load_file(amqp_config).symbolize_keys[:test]
53
+ end
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 3
8
- - 7
9
- version: 0.3.7
8
+ - 8
9
+ version: 0.3.8
10
10
  platform: ruby
11
11
  authors:
12
12
  - Arvicco
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2011-01-07 00:00:00 +03:00
17
+ date: 2011-01-26 00:00:00 +03:00
18
18
  default_executable:
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
@@ -74,6 +74,7 @@ extra_rdoc_files:
74
74
  - README.rdoc
75
75
  files:
76
76
  - lib/amqp-spec/amqp.rb
77
+ - lib/amqp-spec/em_spec_shim.rb
77
78
  - lib/amqp-spec/evented_example.rb
78
79
  - lib/amqp-spec/rspec.rb
79
80
  - lib/amqp-spec.rb
@@ -83,7 +84,6 @@ files:
83
84
  - spec/em_legacy_spec.rb
84
85
  - spec/em_metadata_spec.rb
85
86
  - spec/failing_rspec_spec.rb
86
- - spec/problematic_rspec_spec.rb
87
87
  - spec/rspec_amqp_spec.rb
88
88
  - spec/rspec_em_spec.rb
89
89
  - spec/shared_examples.rb
@@ -144,7 +144,6 @@ test_files:
144
144
  - spec/em_legacy_spec.rb
145
145
  - spec/em_metadata_spec.rb
146
146
  - spec/failing_rspec_spec.rb
147
- - spec/problematic_rspec_spec.rb
148
147
  - spec/rspec_amqp_spec.rb
149
148
  - spec/rspec_em_spec.rb
150
149
  - spec/shared_examples.rb
@@ -1,7 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe '!!!!!!!!! LEAKING OR PROBLEMATIC EXAMPLES !!!!!!!!!' do
4
- describe 'None' do
5
-
6
- end
7
- end