amqp-spec 0.3.2 → 0.3.3

Sign up to get free protection for your applications and to get access to all the features.
data/HISTORY CHANGED
@@ -65,3 +65,7 @@
65
65
  == 0.3.2 / 2010-11-23
66
66
 
67
67
  * EM hooks now working as they should - bugs fixed
68
+
69
+ == 0.3.3 / 2010-11-24
70
+
71
+ * Spec timeout refactored
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.3.2
1
+ 0.3.3
@@ -38,18 +38,10 @@ module AMQP
38
38
  end
39
39
  end
40
40
 
41
- # Retrieves metadata passed in from enclosing example groups
42
- #
43
- def metadata
44
- @metadata ||= @example_group_instance.metadata.dup rescue {}
45
- end
46
-
47
41
  # Runs hooks of specified type (hopefully, inside the event loop)
48
42
  #
49
43
  def run_em_hooks type
50
- hooks = @example_group_instance.class.all_hooks type
51
- (:before == type ? hooks : hooks.reverse).each do |hook|
52
- # @example_group_instance.class.all_hooks(type).each do |hook|
44
+ @example_group_instance.class.em_hooks[type].each do |hook|
53
45
  if @example_group_instance.respond_to? :instance_eval_without_event_loop
54
46
  @example_group_instance.instance_eval_without_event_loop(&hook)
55
47
  else
@@ -78,7 +70,7 @@ module AMQP
78
70
  end
79
71
  rescue Exception => @spec_exception
80
72
  # p "Outside loop, caught #{@spec_exception}"
81
- run_em_hooks :after # Event loop was broken, but we still need to run em_after hooks
73
+ run_em_hooks :after # Event loop broken, but we still need to run em_after hooks
82
74
  ensure
83
75
  finish_example
84
76
  end
@@ -91,7 +83,8 @@ module AMQP
91
83
  EM.stop_event_loop if EM.reactor_running?
92
84
  end
93
85
 
94
- # Called from #run_event_loop when event loop is stopped, but before example returns.
86
+ # Called from #run_event_loop when event loop is stopped,
87
+ # but before the example returns.
95
88
  # Descendant classes may redefine to clean up type-specific state.
96
89
  #
97
90
  def finish_example
@@ -54,16 +54,16 @@ module AMQP
54
54
  # example group and its nested groups.
55
55
  #
56
56
  def default_timeout spec_timeout=nil
57
- metadata[:em_timeout] = spec_timeout if spec_timeout
58
- metadata[:em_timeout]
57
+ default_options[:spec_timeout] = spec_timeout || default_options[:spec_timeout]
59
58
  end
60
59
 
61
60
  # Sets/retrieves default AMQP.start options for this example group
62
61
  # and its nested groups.
63
62
  #
64
63
  def default_options opts=nil
65
- metadata[:em_defaults] = opts if opts
66
- metadata[:em_defaults]
64
+ metadata[:em_defaults] ||= {}
65
+ metadata[:em_defaults][self] ||= (superclass.default_options.dup rescue {})
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
@@ -75,42 +75,21 @@ module AMQP
75
75
  # Add after hook that will run inside EM event loop
76
76
  def em_after scope = :each, &block
77
77
  raise ArgumentError, "em_after only supports :each scope" unless :each == scope
78
- em_hooks[:after] << block
78
+ em_hooks[:after].unshift block
79
79
  end
80
80
 
81
- # Collection of evented hooks
81
+ # Collection of evented hooks for THIS example group
82
82
  def em_hooks
83
83
  metadata[:em_hooks] ||= {}
84
- metadata[:em_hooks][self] ||= {:before => [], :after => []}
85
- # p "#{self} < #{superclass}", em_metadata[:em_hooks].keys
86
- metadata[:em_hooks][self]
84
+ metadata[:em_hooks][self] ||=
85
+ {before: (superclass.em_hooks[:before].clone rescue []),
86
+ after: (superclass.em_hooks[:after].clone rescue [])}
87
87
  end
88
-
89
- # # Returns a collection of all em hooks of given type
90
- # # (including ancestor hooks)
91
- # #
92
- # def all_hooks type
93
- # hooks = superclass.all_hooks(type) rescue []
94
- # hooks += em_hooks[type]
95
- # end
96
-
97
- # Returns a collection of all em hooks of given type
98
- # (including ancestor hooks)
99
- #
100
- def all_hooks type
101
- hooks = superclass.all_hooks(type) rescue []
102
- hooks += em_hooks[type]
103
- # :before == type ? hooks : hooks.reverse
104
- hooks
105
- end
106
-
107
88
  end
108
89
 
109
90
  def self.included example_group
110
91
  unless example_group.respond_to? :default_timeout
111
92
  example_group.extend GroupMethods
112
- example_group.metadata[:em_defaults] = {}
113
- example_group.metadata[:em_timeout] = nil
114
93
  end
115
94
  end
116
95
 
@@ -120,6 +99,12 @@ module AMQP
120
99
  @em_metadata ||= self.class.metadata.dup rescue {}
121
100
  end
122
101
 
102
+ # Retrieves default options passed in from enclosing example groups
103
+ #
104
+ def default_options
105
+ @em_default_options ||= self.class.default_options.dup rescue {}
106
+ end
107
+
123
108
  # Yields to a given block inside EM.run and AMQP.start loops. This method takes
124
109
  # any option that is accepted by EventMachine::connect. Options for AMQP.start include:
125
110
  # * :user => String (default ‘guest’) - Username as defined by the AMQP server.
@@ -133,8 +118,7 @@ module AMQP
133
118
  # reason. SpecTimeoutExceededError is raised if it happens.
134
119
  #
135
120
  def amqp opts={}, &block
136
- opts = self.class.default_options.merge opts
137
- opts[:spec_timeout] ||= self.class.default_timeout
121
+ opts = default_options.merge opts
138
122
  @evented_example = AMQPExample.new(opts, self, &block)
139
123
  @evented_example.run
140
124
  end
@@ -147,11 +131,7 @@ module AMQP
147
131
  # or numeric timeout in seconds.
148
132
  #
149
133
  def em opts = {}, &block
150
- if opts.is_a? Hash
151
- opts[:spec_timeout] ||= self.class.default_timeout
152
- else
153
- opts = {spec_timeout: opts}
154
- end
134
+ opts = default_options.merge(opts.is_a?(Hash) ? opts : {spec_timeout: opts})
155
135
  @evented_example = EMExample.new(opts, self, &block)
156
136
  @evented_example.run
157
137
  end
@@ -2,58 +2,91 @@ require 'spec_helper'
2
2
 
3
3
  describe AMQP::SpecHelper, " .default_options" do
4
4
  include AMQP::SpecHelper
5
- root_default_options = {:one => 1}
5
+ root_default_options = {:root_key => 1}
6
6
  default_options root_default_options
7
7
 
8
- it 'example has access to default options through self.class.default_options' do
9
- self.class.default_options.should == root_default_options
8
+ it 'subsequent and nested groups should not change root default options' do
9
+ root_default_options.should == {:root_key => 1}
10
+ end
11
+
12
+ it 'example has access to default options' do
13
+ default_options.should == root_default_options
14
+ end
15
+
16
+ it 'defaults can be changed inside example, diverging from example group defaults' do
17
+ default_options[:example_key] = :example_value
18
+ default_options.should have_key :example_key
19
+ default_options.should_not == root_default_options
20
+ end
21
+
22
+ it 'changing example defaults has no effect on subsequent examples' do
23
+ default_options.should_not have_key :example_key
24
+ default_options.should == root_default_options
10
25
  end
11
26
 
12
27
  context 'inside nested example group 1' do
13
- it 'defaults start as a copy of enclosing example group default_options' do
14
- self.class.default_options.should == root_default_options
28
+ nested_default_options = default_options
29
+
30
+ it 'nested group defaults start as a copy of enclosing group default_options' do
31
+ nested_default_options.should == root_default_options
32
+ end
33
+
34
+ it 'example has access to default options' do
35
+ default_options.should == nested_default_options
15
36
  end
16
37
 
17
38
  it 'can be changed, thus diverging from example group default_options' do
18
- self.class.default_options[:example_key] = :example_value
19
- self.class.default_options.should have_key :example_key
20
- self.class.default_options.should_not == root_default_options
39
+ default_options[:example_key] = :example_value
40
+ default_options.should have_key :example_key
41
+ default_options.should_not == root_default_options
21
42
  end
22
43
 
23
44
  it 'changing example default_options has no effect on subsequent examples' do
24
- self.class.default_options.should == root_default_options
45
+ default_options.should_not have_key :example_key
46
+ default_options.should == root_default_options
25
47
  end
26
48
 
27
49
  context 'inside deeply nested example group 1' do
28
- it 'example default_options starts as a copy of enclosing example group default_options' do
29
- default_options.should == root_default_options
50
+ nested_default_options = default_options
51
+
52
+ it 'nested group defaults start as a copy of enclosing group default_options' do
53
+ nested_default_options.should == root_default_options
30
54
  end
31
55
 
32
- it 'can be changed, thus diverging from example group default_options' do
33
- self.class.default_options[:example_key] = :example_value
34
- self.class.default_options.should have_key :example_key
35
- self.class.default_options.should_not == root_default_options
56
+ it 'example has access to default options' do
57
+ default_options.should == nested_default_options
58
+ end
59
+
60
+ it 'can be changed in example, thus diverging from example group default_options' do
61
+ default_options[:example_key] = :example_value
62
+ default_options.should have_key :example_key
63
+ default_options.should_not == nested_default_options
36
64
  end
37
65
 
38
66
  it 'changing example default_options has no effect on subsequent examples' do
39
- self.class.default_options.should_not have_key :example_key
40
- self.class.default_options.should == root_default_options
67
+ default_options.should_not have_key :example_key
68
+ default_options.should == nested_default_options
41
69
  end
42
- end
70
+ end # inside deeply nested example group 1
43
71
  end # inside nested example group 1
44
72
 
45
73
  context 'inside nested example group 2' do
46
74
  default_options[:nested_key] = :nested_value
47
75
  nested_default_options = default_options
48
76
 
49
- it 'changing default_options in nested group affects example group default_options' do
77
+ it 'changing default options inside nested group works' do
78
+ nested_default_options.should have_key :nested_key
79
+ end
80
+
81
+ it 'changing default_options in nested group affects example default_options' do
50
82
  default_options.should == nested_default_options
51
83
  default_options.should_not == root_default_options
52
84
  end
53
85
 
54
- it 'can be changed, thus diverging from example group default_options' do
86
+ it 'can be changed in example, thus diverging from example group default_options' do
55
87
  default_options[:example_key] = :example_value
56
88
  default_options.should have_key :example_key
89
+ default_options.should have_key :nested_key
57
90
  default_options.should_not == nested_default_options
58
91
  default_options.should_not == root_default_options
59
92
  end
@@ -66,16 +99,27 @@ describe AMQP::SpecHelper, " .default_options" do
66
99
  default_options[:deeply_nested_key] = :deeply_nested_value
67
100
  deeply_nested_default_options = default_options
68
101
 
102
+ it 'inherits default options from enclosing group' do
103
+ deeply_nested_default_options.should have_key :nested_key
104
+ end
105
+
106
+ it 'changing default options inside deeply nested group works' do
107
+ deeply_nested_default_options.should have_key :deeply_nested_key
108
+ end
109
+
69
110
  it 'changing default_options in nested group affects example group default_options' do
70
111
  default_options.should == deeply_nested_default_options
112
+ default_options.should have_key :nested_key
113
+ default_options.should have_key :deeply_nested_key
71
114
  default_options.should_not == nested_default_options
72
115
  default_options.should_not == root_default_options
73
- default_options.should have_key :deeply_nested_key
74
116
  end
75
117
 
76
- it 'can be changed, thus diverging from example group default_options' do
118
+ it 'can be changed in example, thus diverging from example group default_options' do
77
119
  default_options[:example_key] = :example_value
78
120
  default_options.should have_key :example_key
121
+ default_options.should have_key :nested_key
122
+ default_options.should have_key :deeply_nested_key
79
123
  default_options.should_not == nested_default_options
80
124
  default_options.should_not == root_default_options
81
125
  end
@@ -83,7 +127,6 @@ describe AMQP::SpecHelper, " .default_options" do
83
127
  it 'changing example default_options has no effect on subsequent examples' do
84
128
  default_options.should == deeply_nested_default_options
85
129
  end
86
- end
130
+ end # inside deeply nested example group 2
87
131
  end # inside nested example group 2
88
-
89
132
  end # describe AMQP, "default_options"
@@ -58,17 +58,17 @@ shared_examples_for 'hooked amqp specs' do
58
58
  end
59
59
  end
60
60
 
61
- describe AMQP, " with em_before/em_after" do
62
- before { @hooks_called = [] } #; puts "In before: #{self}"} #
61
+ describe AMQP::SpecHelper, ".em_before/.em_after" do
62
+ before { @hooks_called = [] }
63
63
 
64
64
  describe AMQP, " tested with AMQP::SpecHelper" do
65
65
  include AMQP::SpecHelper
66
66
  default_options AMQP_OPTS if defined? AMQP_OPTS
67
67
 
68
- before { @hooks_called << :before } #; puts "In before 2: #{self}" }
68
+ before { @hooks_called << :before }
69
69
 
70
- em_before { @hooks_called << :em_before } # puts "In em_before: #{self}";
71
- em_after { @hooks_called << :em_after } # puts "In em_after: #{self}";
70
+ em_before { @hooks_called << :em_before }
71
+ em_after { @hooks_called << :em_after }
72
72
 
73
73
  context 'for non-evented specs' do
74
74
  after { @hooks_called.should == [:before] }
@@ -159,7 +159,7 @@ describe AMQP, " with em_before/em_after" do
159
159
  end
160
160
 
161
161
  context 'inside nested example group' do
162
- before { @hooks_called << :amqp_context_before }
162
+ before { @hooks_called << :amqp_context_before; $debug = true }
163
163
  em_before { @hooks_called << :amqp_context_em_before }
164
164
  em_after { @hooks_called << :amqp_context_em_after }
165
165
 
@@ -168,7 +168,7 @@ describe AMQP, " with em_before/em_after" do
168
168
  :em_before,
169
169
  :amqp_context_em_before,
170
170
  :amqp_context_em_after,
171
- :em_after] }
171
+ :em_after] ; $debug = nil}
172
172
 
173
173
  it_should_behave_like 'hooked amqp specs'
174
174
 
@@ -22,10 +22,12 @@ describe AMQP::SpecHelper, " .metadata" do
22
22
  context 'inside nested example group 1' do
23
23
  nested_metadata = metadata
24
24
 
25
- it 'nested group metadata CONTAINS root enclosing group metadata' do
26
- nested_metadata.should_not == root_metadata
27
- nested_metadata[:example_group][:example_group].should ==
28
- root_metadata[:example_group]
25
+ if rspec2? #describes RSpec2-specific behavior
26
+ it 'nested group metadata CONTAINS root enclosing group metadata' do
27
+ nested_metadata.should_not == root_metadata
28
+ nested_metadata[:example_group][:example_group].should ==
29
+ root_metadata[:example_group]
30
+ end
29
31
  end
30
32
 
31
33
  it 'except for :example_group key, nested and root group metadata is the same' do
@@ -54,13 +56,15 @@ describe AMQP::SpecHelper, " .metadata" do
54
56
  context 'inside deeply nested example group 1' do
55
57
  deeply_nested_metadata = metadata
56
58
 
57
- it 'deeply_nested group metadata CONTAINS enclosing group metadata' do
58
- deeply_nested_metadata.should_not == root_metadata
59
- deeply_nested_metadata[:example_group][:example_group].should ==
60
- nested_metadata[:example_group]
59
+ if rspec2? #describes RSpec2-specific behavior
60
+ it 'deeply_nested group metadata CONTAINS enclosing group metadata' do
61
+ deeply_nested_metadata.should_not == root_metadata
62
+ deeply_nested_metadata[:example_group][:example_group].should ==
63
+ nested_metadata[:example_group]
64
+ end
61
65
  end
62
66
 
63
- it 'except for :example_group key, deeply_nested and root group metadata is the same' do
67
+ it 'except for :example_group, deeply_nested and root group metadata is the same' do
64
68
  @root = root_metadata.dup
65
69
  @root.delete(:example_group)
66
70
  @nested = nested_metadata.dup
@@ -85,18 +89,19 @@ describe AMQP::SpecHelper, " .metadata" do
85
89
  metadata.should_not have_key :example_key
86
90
  metadata.should == deeply_nested_metadata
87
91
  end
88
-
89
- end
92
+ end # inside deeply nested example group 1
90
93
  end # inside nested example group 1
91
94
 
92
95
  context 'inside nested example group 2' do
93
96
  metadata[:nested_key] = :nested_value
94
97
  nested_metadata = metadata
95
98
 
96
- it 'nested group metadata CONTAINS root enclosing group metadata' do
97
- nested_metadata.should_not == root_metadata
98
- nested_metadata[:example_group][:example_group].should ==
99
- root_metadata[:example_group]
99
+ if rspec2? #describes RSpec2-specific behavior
100
+ it 'nested group metadata CONTAINS root enclosing group metadata' do
101
+ nested_metadata.should_not == root_metadata
102
+ nested_metadata[:example_group][:example_group].should ==
103
+ root_metadata[:example_group]
104
+ end
100
105
  end
101
106
 
102
107
  it "except for :example_group and modified keys," +
@@ -124,13 +129,15 @@ describe AMQP::SpecHelper, " .metadata" do
124
129
  metadata.should == nested_metadata
125
130
  end
126
131
 
127
- context 'inside deeply nested example group 1' do
132
+ context 'inside deeply nested example group 2' do
128
133
  metadata[:deeply_nested_key] = :deeply_nested_value
129
134
  deeply_nested_metadata = metadata
130
135
 
131
- it 'deeply_nested group metadata CONTAINS enclosing group metadata' do
132
- deeply_nested_metadata[:example_group][:example_group].should ==
133
- nested_metadata[:example_group]
136
+ if rspec2? #describes RSpec2-specific behavior
137
+ it 'deeply_nested group metadata CONTAINS enclosing group metadata' do
138
+ deeply_nested_metadata[:example_group][:example_group].should ==
139
+ nested_metadata[:example_group]
140
+ end
134
141
  end
135
142
 
136
143
  it "except for :example_group and modified keys," +
@@ -161,7 +168,6 @@ describe AMQP::SpecHelper, " .metadata" do
161
168
  metadata.should_not have_key :example_key
162
169
  metadata.should == deeply_nested_metadata
163
170
  end
164
- end
171
+ end # inside deeply nested example group 2
165
172
  end # inside nested example group 2
166
-
167
173
  end # describe AMQP, "metadata"
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 3
8
- - 2
9
- version: 0.3.2
8
+ - 3
9
+ version: 0.3.3
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: 2010-11-23 00:00:00 +03:00
17
+ date: 2010-11-24 00:00:00 +03:00
18
18
  default_executable:
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency