spicycode-micronaut 0.0.4 → 0.0.5

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.
Files changed (29) hide show
  1. data/RSPEC-LICENSE +23 -0
  2. data/Rakefile +2 -2
  3. data/examples/example_helper.rb +10 -0
  4. data/examples/lib/micronaut/behaviour_group_example.rb +170 -159
  5. data/examples/lib/micronaut/expectations/fail_with_example.rb +10 -64
  6. data/examples/lib/micronaut/formatters/progress_formatter_example.rb +3 -7
  7. data/examples/lib/micronaut/matchers/description_generation_example.rb +1 -1
  8. data/examples/lib/micronaut/matchers/have_example.rb +2 -2
  9. data/examples/lib/micronaut/matchers/operator_matcher_example.rb +0 -2
  10. data/examples/lib/micronaut/matchers/raise_error_example.rb +32 -1
  11. data/examples/lib/micronaut/{example_runner_example.rb → runner_example.rb} +0 -0
  12. data/examples/lib/micronaut/runner_options_example.rb +5 -0
  13. data/examples/lib/micronaut/world_example.rb +94 -0
  14. data/lib/micronaut.rb +1 -15
  15. data/lib/micronaut/behaviour_group.rb +34 -16
  16. data/lib/micronaut/behaviour_group_class_methods.rb +32 -47
  17. data/lib/micronaut/expectations.rb +0 -12
  18. data/lib/micronaut/extensions/kernel.rb +2 -2
  19. data/lib/micronaut/formatters/base_formatter.rb +4 -3
  20. data/lib/micronaut/formatters/base_text_formatter.rb +29 -17
  21. data/lib/micronaut/formatters/progress_formatter.rb +1 -1
  22. data/lib/micronaut/runner.rb +2 -2
  23. data/lib/micronaut/world.rb +36 -0
  24. metadata +7 -10
  25. data/examples/lib/micronaut/expectations/differs/default_example.rb +0 -125
  26. data/examples/lib/micronaut/matchers/exist_example.rb +0 -69
  27. data/lib/micronaut/example_world.rb +0 -17
  28. data/lib/micronaut/expectations/differs/default.rb +0 -58
  29. data/lib/micronaut/matchers/exist.rb +0 -16
@@ -16,7 +16,7 @@ describe Micronaut::Formatters::ProgressFormatter do
16
16
 
17
17
  it "should produce standard summary without pending when pending has a 0 count" do
18
18
  @formatter.dump_summary(3, 2, 1, 0)
19
- @io.string.should == "\nFinished in 3 seconds\n\n2 examples, 1 failure\n"
19
+ @io.string.should == "\nFinished in 3 seconds\n2 examples, 1 failure\n"
20
20
  end
21
21
 
22
22
  it "should produce standard summary" do
@@ -27,11 +27,7 @@ describe Micronaut::Formatters::ProgressFormatter do
27
27
  @formatter.example_pending(example, "message")
28
28
  @io.rewind
29
29
  @formatter.dump_summary(3, 2, 1, 1)
30
- @io.string.should eql(%Q|
31
- Finished in 3 seconds
32
-
33
- 2 examples, 1 failure, 1 pending
34
- |)
30
+ @io.string.should == "\nFinished in 3 seconds\n2 examples, 1 failure, 1 pending\n"
35
31
  end
36
32
 
37
33
  it "should push green dot for passing spec" do
@@ -85,7 +81,7 @@ EOE
85
81
  @formatter.class.__send__ :public, :output_to_tty?
86
82
  end
87
83
 
88
- after(:each) do
84
+ after do
89
85
  @formatter.class.__send__ :protected, :output_to_tty?
90
86
  end
91
87
 
@@ -1,7 +1,7 @@
1
1
  require File.expand_path(File.dirname(__FILE__) + "/../../../example_helper")
2
2
 
3
3
  describe "Matchers should be able to generate their own descriptions" do
4
- after(:each) do
4
+ after do
5
5
  Micronaut::Matchers.clear_generated_description
6
6
  end
7
7
 
@@ -112,7 +112,7 @@ describe 'should have(1).item when ActiveSupport::Inflector is defined' do
112
112
  owner.should have(1).item
113
113
  end
114
114
 
115
- after(:each) do
115
+ after do
116
116
  if @active_support_was_not_defined
117
117
  Object.__send__ :remove_const, :ActiveSupport
118
118
  end
@@ -160,7 +160,7 @@ describe 'should have(1).item when Inflector is defined' do
160
160
  owner.should have(1).item
161
161
  end
162
162
 
163
- after(:each) do
163
+ after do
164
164
  if @inflector_was_not_defined
165
165
  Object.__send__ :remove_const, :Inflector
166
166
  end
@@ -1,7 +1,5 @@
1
1
  require File.expand_path(File.dirname(__FILE__) + "/../../../example_helper")
2
2
 
3
- require 'micronaut/expectations/differs/default'
4
-
5
3
  describe "should ==" do
6
4
 
7
5
  it "should delegate message to target" do
@@ -1,6 +1,7 @@
1
1
  require File.expand_path(File.dirname(__FILE__) + "/../../../example_helper")
2
2
 
3
3
  describe "should raise_error" do
4
+
4
5
  it "should pass if anything is raised" do
5
6
  lambda {raise}.should raise_error
6
7
  end
@@ -10,9 +11,11 @@ describe "should raise_error" do
10
11
  lambda {}.should raise_error
11
12
  }.should fail_with("expected Exception but nothing was raised")
12
13
  end
14
+
13
15
  end
14
16
 
15
17
  describe "should_not raise_error" do
18
+
16
19
  it "should pass if nothing is raised" do
17
20
  lambda {}.should_not raise_error
18
21
  end
@@ -22,50 +25,63 @@ describe "should_not raise_error" do
22
25
  lambda {raise}.should_not raise_error
23
26
  }.should fail_with("expected no Exception, got RuntimeError")
24
27
  end
28
+
25
29
  end
26
30
 
27
31
  describe "should raise_error(message)" do
32
+
28
33
  it "should pass if RuntimeError is raised with the right message" do
29
34
  lambda {raise 'blah'}.should raise_error('blah')
30
35
  end
36
+
31
37
  it "should pass if RuntimeError is raised with a matching message" do
32
38
  lambda {raise 'blah'}.should raise_error(/blah/)
33
39
  end
40
+
34
41
  it "should pass if any other error is raised with the right message" do
35
42
  lambda {raise NameError.new('blah')}.should raise_error('blah')
36
43
  end
44
+
37
45
  it "should fail if RuntimeError error is raised with the wrong message" do
38
46
  lambda do
39
47
  lambda {raise 'blarg'}.should raise_error('blah')
40
48
  end.should fail_with("expected Exception with \"blah\", got #<RuntimeError: blarg>")
41
49
  end
50
+
42
51
  it "should fail if any other error is raised with the wrong message" do
43
52
  lambda do
44
53
  lambda {raise NameError.new('blarg')}.should raise_error('blah')
45
54
  end.should fail_with("expected Exception with \"blah\", got #<NameError: blarg>")
46
55
  end
56
+
47
57
  end
48
58
 
49
59
  describe "should_not raise_error(message)" do
60
+
50
61
  it "should pass if RuntimeError error is raised with the different message" do
51
62
  lambda {raise 'blarg'}.should_not raise_error('blah')
52
63
  end
64
+
53
65
  it "should pass if any other error is raised with the wrong message" do
54
66
  lambda {raise NameError.new('blarg')}.should_not raise_error('blah')
55
67
  end
68
+
56
69
  it "should fail if RuntimeError is raised with message" do
57
70
  lambda do
58
71
  lambda {raise 'blah'}.should_not raise_error('blah')
59
72
  end.should fail_with(%Q|expected no Exception with "blah", got #<RuntimeError: blah>|)
60
73
  end
74
+
61
75
  it "should fail if any other error is raised with message" do
62
76
  lambda do
63
77
  lambda {raise NameError.new('blah')}.should_not raise_error('blah')
64
78
  end.should fail_with(%Q|expected no Exception with "blah", got #<NameError: blah>|)
65
79
  end
80
+
66
81
  end
67
82
 
68
83
  describe "should raise_error(NamedError)" do
84
+
69
85
  it "should pass if named error is raised" do
70
86
  lambda { non_existent_method }.should raise_error(NameError)
71
87
  end
@@ -87,9 +103,11 @@ describe "should raise_error(NamedError)" do
87
103
  lambda { load "non/existent/file" }.should raise_error(NameError)
88
104
  }.should fail_with(/expected NameError, got #<LoadError/)
89
105
  end
106
+
90
107
  end
91
108
 
92
109
  describe "should_not raise_error(NamedError)" do
110
+
93
111
  it "should pass if nothing is raised" do
94
112
  lambda { }.should_not raise_error(NameError)
95
113
  end
@@ -103,9 +121,11 @@ describe "should_not raise_error(NamedError)" do
103
121
  lambda { non_existent_method }.should_not raise_error(NameError)
104
122
  }.should fail_with(/expected no NameError, got #<NameError: undefined/)
105
123
  end
124
+
106
125
  end
107
126
 
108
127
  describe "should raise_error(NamedError, error_message) with String" do
128
+
109
129
  it "should pass if named error is raised with same message" do
110
130
  lambda { raise "example message" }.should raise_error(RuntimeError, "example message")
111
131
  end
@@ -127,9 +147,11 @@ describe "should raise_error(NamedError, error_message) with String" do
127
147
  lambda { raise RuntimeError.new("not the example message") }.should raise_error(RuntimeError, "example message")
128
148
  }.should fail_with(/expected RuntimeError with \"example message\", got #<RuntimeError: not the example message/)
129
149
  end
150
+
130
151
  end
131
152
 
132
153
  describe "should raise_error(NamedError, error_message) { |err| ... }" do
154
+
133
155
  it "should yield exception if named error is raised with same message" do
134
156
  ran = false
135
157
 
@@ -200,9 +222,11 @@ describe "should raise_error(NamedError, error_message) { |err| ... }" do
200
222
 
201
223
  ran.should == false
202
224
  end
225
+
203
226
  end
204
227
 
205
228
  describe "should_not raise_error(NamedError, error_message) { |err| ... }" do
229
+
206
230
  it "should pass if nothing is raised" do
207
231
  ran = false
208
232
 
@@ -248,9 +272,11 @@ describe "should_not raise_error(NamedError, error_message) { |err| ... }" do
248
272
 
249
273
  ran.should == false
250
274
  end
275
+
251
276
  end
252
277
 
253
278
  describe "should_not raise_error(NamedError, error_message) with String" do
279
+
254
280
  it "should pass if nothing is raised" do
255
281
  lambda {}.should_not raise_error(RuntimeError, "example message")
256
282
  end
@@ -268,9 +294,11 @@ describe "should_not raise_error(NamedError, error_message) with String" do
268
294
  lambda { raise "example message" }.should_not raise_error(RuntimeError, "example message")
269
295
  }.should fail_with("expected no RuntimeError with \"example message\", got #<RuntimeError: example message>")
270
296
  end
297
+
271
298
  end
272
299
 
273
300
  describe "should raise_error(NamedError, error_message) with Regexp" do
301
+
274
302
  it "should pass if named error is raised with matching message" do
275
303
  lambda { raise "example message" }.should raise_error(RuntimeError, /ample mess/)
276
304
  end
@@ -292,9 +320,11 @@ describe "should raise_error(NamedError, error_message) with Regexp" do
292
320
  lambda { raise RuntimeError.new("not the example message") }.should raise_error(RuntimeError, /less than ample mess/)
293
321
  }.should fail_with("expected RuntimeError with message matching /less than ample mess/, got #<RuntimeError: not the example message>")
294
322
  end
323
+
295
324
  end
296
325
 
297
326
  describe "should_not raise_error(NamedError, error_message) with Regexp" do
327
+
298
328
  it "should pass if nothing is raised" do
299
329
  lambda {}.should_not raise_error(RuntimeError, /ample mess/)
300
330
  end
@@ -312,4 +342,5 @@ describe "should_not raise_error(NamedError, error_message) with Regexp" do
312
342
  lambda { raise "example message" }.should_not raise_error(RuntimeError, /ample mess/)
313
343
  }.should fail_with("expected no RuntimeError with message matching /ample mess/, got #<RuntimeError: example message>")
314
344
  end
315
- end
345
+
346
+ end
@@ -0,0 +1,5 @@
1
+ require File.expand_path(File.dirname(__FILE__) + "/../../example_helper")
2
+
3
+ describe Micronaut::RunnerOptions do
4
+
5
+ end
@@ -0,0 +1,94 @@
1
+ require File.expand_path(File.dirname(__FILE__) + "/../../example_helper")
2
+
3
+ class Bar; end
4
+
5
+ describe Micronaut::World do
6
+
7
+ describe "behaviour groups" do
8
+
9
+ it "should contain all defined behaviour groups" do
10
+ behaviour_group = Micronaut::BehaviourGroup.describe(Bar, 'Empty Behaviour Group') { }
11
+ Micronaut::World.behaviour_groups.should include(behaviour_group)
12
+ remove_last_describe_from_world
13
+ end
14
+
15
+ end
16
+
17
+ describe "find" do
18
+
19
+ before(:all) do
20
+ options_1 = { :foo => 1, :color => 'blue', :feature => 'reporting' }
21
+ options_2 = { :pending => true, :feature => 'reporting' }
22
+ options_3 = { :array => [1,2,3,4], :color => 'blue', :feature => 'weather status' }
23
+ @bg1 = Micronaut::BehaviourGroup.describe(Bar, "find group-1", options_1) { }
24
+ @bg2 = Micronaut::BehaviourGroup.describe(Bar, "find group-2", options_2) { }
25
+ @bg3 = Micronaut::BehaviourGroup.describe(Bar, "find group-3", options_3) { }
26
+ end
27
+
28
+ after(:all) do
29
+ Micronaut::World.behaviour_groups.delete(@bg1)
30
+ Micronaut::World.behaviour_groups.delete(@bg2)
31
+ Micronaut::World.behaviour_groups.delete(@bg3)
32
+ end
33
+
34
+ it "should find no groups when given no search parameters" do
35
+ Micronaut::World.find.should == []
36
+ end
37
+
38
+ it "should find three groups when searching for :described_type => Bar" do
39
+ Micronaut::World.find(:described_type => Bar).should == [@bg1, @bg2, @bg3]
40
+ end
41
+
42
+ it "should find one group when searching for :description => 'find group-1'" do
43
+ Micronaut::World.find(:description => 'find group-1').should == [@bg1]
44
+ end
45
+
46
+ it "should find two groups when searching for :description => lambda { |v| v.include?('-1') || v.include?('-3') }" do
47
+ Micronaut::World.find(:description => lambda { |v| v.include?('-1') || v.include?('-3') }).should == [@bg1, @bg3]
48
+ end
49
+
50
+ it "should find three groups when searching for :description => /find group/" do
51
+ Micronaut::World.find(:description => /find group/).should == [@bg1, @bg2, @bg3]
52
+ end
53
+
54
+ it "should find one group when searching for :options => { :foo => 1 }" do
55
+ Micronaut::World.find(:options => { :foo => 1 }).should == [@bg1]
56
+ end
57
+
58
+ it "should find one group when searching for :options => { :pending => true }" do
59
+ Micronaut::World.find(:options => { :pending => true }).should == [@bg2]
60
+ end
61
+
62
+ it "should find one group when searching for :options => { :array => [1,2,3,4] }" do
63
+ Micronaut::World.find(:options => { :array => [1,2,3,4] }).should == [@bg3]
64
+ end
65
+
66
+ it "should find no group when searching for :options => { :array => [4,3,2,1] }" do
67
+ Micronaut::World.find(:options => { :array => [4,3,2,1] }).should be_empty
68
+ end
69
+
70
+ it "should find two groups when searching for :options => { :color => 'blue' }" do
71
+ Micronaut::World.find(:options => { :color => 'blue' }).should == [@bg1, @bg3]
72
+ end
73
+
74
+ it "should find two groups when searching for :options => { :feature => 'reporting' }" do
75
+ Micronaut::World.find(:options => { :feature => 'reporting' }).should == [@bg1, @bg2]
76
+ end
77
+
78
+ end
79
+
80
+ describe "reset" do
81
+
82
+ it "should clear the list of behaviour groups" do
83
+ original_groups = Micronaut::World.behaviour_groups
84
+
85
+ Micronaut::World.behaviour_groups.should_not be_empty
86
+ Micronaut::World.reset
87
+ Micronaut::World.behaviour_groups.should be_empty
88
+
89
+ Micronaut::World.behaviour_groups.concat(original_groups)
90
+ end
91
+
92
+ end
93
+
94
+ end
data/lib/micronaut.rb CHANGED
@@ -1,7 +1,7 @@
1
1
  require 'micronaut/mocking/with_mocha'
2
2
  require 'micronaut/matchers'
3
3
  require 'micronaut/expectations'
4
- require 'micronaut/example_world'
4
+ require 'micronaut/world'
5
5
  require 'micronaut/runner'
6
6
  require 'micronaut/runner_options'
7
7
  require 'micronaut/behaviour_group_class_methods'
@@ -24,19 +24,5 @@ module Micronaut
24
24
 
25
25
  # './lib' in project dir, or '/usr/local/blahblah' if installed
26
26
  MICRONAUT_DIR = File.expand_path(File.dirname(File.dirname(file)))
27
-
28
- def self.filter_backtrace(backtrace)
29
- return ["No backtrace"] unless backtrace
30
-
31
- new_backtrace = []
32
- backtrace.each_with_index do |line, index|
33
- break if line.rindex(MICRONAUT_DIR, 0)
34
- new_backtrace << line
35
- end
36
-
37
- new_backtrace = backtrace.reject { |line| line.rindex(MICRONAUT_DIR, 0) } if new_backtrace.empty?
38
- new_backtrace = backtrace.dup if new_backtrace.empty?
39
- new_backtrace
40
- end
41
27
 
42
28
  end
@@ -4,44 +4,62 @@ module Micronaut
4
4
  include Micronaut::Matchers
5
5
  include Micronaut::Mocking::WithMocha
6
6
 
7
+ def eval_before_alls
8
+ self.class.each_ancestor do |ancestor|
9
+ ancestor.before_alls.each { |blk| instance_eval(&blk) }
10
+ end
11
+ end
12
+
13
+ def eval_after_alls
14
+ self.class.each_ancestor(:superclass_first) do |ancestor|
15
+ ancestor.after_alls.each { |blk| instance_eval(&blk) }
16
+ end
17
+ end
18
+
19
+ def eval_before_eachs
20
+ self.class.each_ancestor do |ancestor|
21
+ ancestor.before_eachs.each { |blk| instance_eval(&blk) }
22
+ end
23
+ end
24
+
25
+ def eval_after_eachs
26
+ self.class.each_ancestor(:superclass_first) do |ancestor|
27
+ ancestor.after_eachs.each { |blk| instance_eval(&blk) }
28
+ end
29
+ end
30
+
7
31
  def execute(reporter)
8
32
  return true if self.class.examples.empty?
9
- self.class.all_before_alls.each { |aba| instance_eval(&aba) }
10
-
33
+ eval_before_alls
11
34
  success = true
12
-
35
+
13
36
  self.class.examples.each do |desc, opts, block|
14
- execution_error = nil
15
37
  reporter.example_started(self)
16
-
38
+
39
+ execution_error = nil
17
40
  begin
18
41
  setup_mocks
19
- self.class.befores[:each].each { |be| instance_eval(&be) }
42
+ eval_before_eachs
20
43
  if block
21
44
  instance_eval(&block)
45
+ verify_mocks
22
46
  reporter.example_passed(self)
23
47
  else
24
48
  reporter.example_pending([desc, self], 'Not yet implemented')
25
49
  end
26
- verify_mocks
50
+ eval_after_eachs
27
51
  rescue Exception => e
28
52
  reporter.example_failed(self, e)
29
53
  execution_error ||= e
30
54
  ensure
31
55
  teardown_mocks
32
56
  end
33
-
34
- begin
35
- self.class.afters[:each].each { |ae| instance_eval(&ae) }
36
- rescue Exception => e
37
- execution_error ||= e
38
- end
39
-
57
+
40
58
  success &= execution_error.nil?
41
59
  end
42
-
60
+ eval_after_alls
43
61
  success
44
62
  end
45
-
63
+
46
64
  end
47
65
  end