micronaut 0.2.9

Sign up to get free protection for your applications and to get access to all the features.
Files changed (79) hide show
  1. data/History.txt +15 -0
  2. data/LICENSE +45 -0
  3. data/README.markdown +66 -0
  4. data/RSPEC-LICENSE +23 -0
  5. data/Rakefile +78 -0
  6. data/VERSION.yml +4 -0
  7. data/bin/micronaut +4 -0
  8. data/examples/example_helper.rb +54 -0
  9. data/examples/lib/micronaut/behaviour_example.rb +351 -0
  10. data/examples/lib/micronaut/configuration_example.rb +133 -0
  11. data/examples/lib/micronaut/example_example.rb +67 -0
  12. data/examples/lib/micronaut/expectations/extensions/object_example.rb +146 -0
  13. data/examples/lib/micronaut/expectations/fail_with_example.rb +17 -0
  14. data/examples/lib/micronaut/expectations/wrap_expectation_example.rb +27 -0
  15. data/examples/lib/micronaut/formatters/base_formatter_example.rb +117 -0
  16. data/examples/lib/micronaut/formatters/documentation_formatter_example.rb +5 -0
  17. data/examples/lib/micronaut/formatters/progress_formatter_example.rb +29 -0
  18. data/examples/lib/micronaut/kernel_extensions_example.rb +13 -0
  19. data/examples/lib/micronaut/matchers/be_close_example.rb +52 -0
  20. data/examples/lib/micronaut/matchers/be_example.rb +298 -0
  21. data/examples/lib/micronaut/matchers/change_example.rb +360 -0
  22. data/examples/lib/micronaut/matchers/description_generation_example.rb +175 -0
  23. data/examples/lib/micronaut/matchers/eql_example.rb +35 -0
  24. data/examples/lib/micronaut/matchers/equal_example.rb +35 -0
  25. data/examples/lib/micronaut/matchers/has_example.rb +69 -0
  26. data/examples/lib/micronaut/matchers/have_example.rb +392 -0
  27. data/examples/lib/micronaut/matchers/include_example.rb +103 -0
  28. data/examples/lib/micronaut/matchers/match_example.rb +43 -0
  29. data/examples/lib/micronaut/matchers/matcher_methods_example.rb +78 -0
  30. data/examples/lib/micronaut/matchers/operator_matcher_example.rb +193 -0
  31. data/examples/lib/micronaut/matchers/raise_error_example.rb +348 -0
  32. data/examples/lib/micronaut/matchers/respond_to_example.rb +54 -0
  33. data/examples/lib/micronaut/matchers/satisfy_example.rb +36 -0
  34. data/examples/lib/micronaut/matchers/simple_matcher_example.rb +93 -0
  35. data/examples/lib/micronaut/matchers/throw_symbol_example.rb +125 -0
  36. data/examples/lib/micronaut/mocha_example.rb +29 -0
  37. data/examples/lib/micronaut/runner_example.rb +41 -0
  38. data/examples/lib/micronaut/world_example.rb +98 -0
  39. data/examples/lib/micronaut_example.rb +43 -0
  40. data/examples/resources/example_classes.rb +67 -0
  41. data/lib/micronaut.rb +40 -0
  42. data/lib/micronaut/behaviour.rb +217 -0
  43. data/lib/micronaut/configuration.rb +162 -0
  44. data/lib/micronaut/example.rb +112 -0
  45. data/lib/micronaut/expectations.rb +45 -0
  46. data/lib/micronaut/expectations/extensions/object.rb +92 -0
  47. data/lib/micronaut/expectations/handler.rb +51 -0
  48. data/lib/micronaut/expectations/wrap_expectation.rb +52 -0
  49. data/lib/micronaut/formatters.rb +12 -0
  50. data/lib/micronaut/formatters/base_formatter.rb +127 -0
  51. data/lib/micronaut/formatters/base_text_formatter.rb +139 -0
  52. data/lib/micronaut/formatters/documentation_formatter.rb +78 -0
  53. data/lib/micronaut/formatters/progress_formatter.rb +30 -0
  54. data/lib/micronaut/kernel_extensions.rb +11 -0
  55. data/lib/micronaut/matchers.rb +141 -0
  56. data/lib/micronaut/matchers/be.rb +204 -0
  57. data/lib/micronaut/matchers/be_close.rb +37 -0
  58. data/lib/micronaut/matchers/change.rb +148 -0
  59. data/lib/micronaut/matchers/eql.rb +26 -0
  60. data/lib/micronaut/matchers/equal.rb +26 -0
  61. data/lib/micronaut/matchers/generated_descriptions.rb +36 -0
  62. data/lib/micronaut/matchers/has.rb +19 -0
  63. data/lib/micronaut/matchers/have.rb +153 -0
  64. data/lib/micronaut/matchers/include.rb +80 -0
  65. data/lib/micronaut/matchers/match.rb +22 -0
  66. data/lib/micronaut/matchers/method_missing.rb +9 -0
  67. data/lib/micronaut/matchers/operator_matcher.rb +50 -0
  68. data/lib/micronaut/matchers/raise_error.rb +128 -0
  69. data/lib/micronaut/matchers/respond_to.rb +50 -0
  70. data/lib/micronaut/matchers/satisfy.rb +50 -0
  71. data/lib/micronaut/matchers/simple_matcher.rb +135 -0
  72. data/lib/micronaut/matchers/throw_symbol.rb +108 -0
  73. data/lib/micronaut/mocking/with_absolutely_nothing.rb +11 -0
  74. data/lib/micronaut/mocking/with_mocha.rb +15 -0
  75. data/lib/micronaut/mocking/with_rr.rb +24 -0
  76. data/lib/micronaut/rake_task.rb +84 -0
  77. data/lib/micronaut/runner.rb +60 -0
  78. data/lib/micronaut/world.rb +75 -0
  79. metadata +165 -0
@@ -0,0 +1,54 @@
1
+ require File.expand_path(File.dirname(__FILE__) + "/../../../example_helper")
2
+
3
+ describe "should respond_to(:sym)" do
4
+
5
+ it "should pass if target responds to :sym" do
6
+ Object.new.should respond_to(:methods)
7
+ end
8
+
9
+ it "should fail target does not respond to :sym" do
10
+ lambda {
11
+ "this string".should respond_to(:some_method)
12
+ }.should fail_with("expected \"this string\" to respond to :some_method")
13
+ end
14
+
15
+ end
16
+
17
+ describe "should respond_to(message1, message2)" do
18
+
19
+ it "should pass if target responds to both messages" do
20
+ Object.new.should respond_to('methods', 'inspect')
21
+ end
22
+
23
+ it "should fail target does not respond to first message" do
24
+ lambda {
25
+ Object.new.should respond_to('method_one', 'inspect')
26
+ }.should fail_with(/expected #<Object:.*> to respond to "method_one"/)
27
+ end
28
+
29
+ it "should fail target does not respond to second message" do
30
+ lambda {
31
+ Object.new.should respond_to('inspect', 'method_one')
32
+ }.should fail_with(/expected #<Object:.*> to respond to "method_one"/)
33
+ end
34
+
35
+ it "should fail target does not respond to either message" do
36
+ lambda {
37
+ Object.new.should respond_to('method_one', 'method_two')
38
+ }.should fail_with(/expected #<Object:.*> to respond to "method_one", "method_two"/)
39
+ end
40
+ end
41
+
42
+ describe "should_not respond_to(:sym)" do
43
+
44
+ it "should pass if target does not respond to :sym" do
45
+ Object.new.should_not respond_to(:some_method)
46
+ end
47
+
48
+ it "should fail target responds to :sym" do
49
+ lambda {
50
+ Object.new.should_not respond_to(:methods)
51
+ }.should fail_with(/expected #<Object:.*> not to respond to :methods/)
52
+ end
53
+
54
+ end
@@ -0,0 +1,36 @@
1
+ require File.expand_path(File.dirname(__FILE__) + "/../../../example_helper")
2
+
3
+ describe "should satisfy { block }" do
4
+ it "should pass if block returns true" do
5
+ true.should satisfy { |val| val }
6
+ true.should satisfy do |val|
7
+ val
8
+ end
9
+ end
10
+
11
+ it "should fail if block returns false" do
12
+ lambda {
13
+ false.should satisfy { |val| val }
14
+ }.should fail_with("expected false to satisfy block")
15
+ lambda do
16
+ false.should satisfy do |val|
17
+ val
18
+ end
19
+ end.should fail_with("expected false to satisfy block")
20
+ end
21
+ end
22
+
23
+ describe "should_not satisfy { block }" do
24
+ it "should pass if block returns false" do
25
+ false.should_not satisfy { |val| val }
26
+ false.should_not satisfy do |val|
27
+ val
28
+ end
29
+ end
30
+
31
+ it "should fail if block returns true" do
32
+ lambda {
33
+ true.should_not satisfy { |val| val }
34
+ }.should fail_with("expected true not to satisfy block")
35
+ end
36
+ end
@@ -0,0 +1,93 @@
1
+ require File.expand_path(File.dirname(__FILE__) + "/../../../example_helper")
2
+
3
+ module Micronaut
4
+ module Matchers
5
+ describe SimpleMatcher do
6
+ it "should pass match arg to block" do
7
+ actual = nil
8
+ matcher = simple_matcher("message") do |given| actual = given end
9
+ matcher.matches?("foo")
10
+ actual.should == "foo"
11
+ end
12
+
13
+ it "should provide a stock failure message" do
14
+ matcher = simple_matcher("thing") do end
15
+ matcher.matches?("other")
16
+ matcher.failure_message.should =~ /expected \"thing\" but got \"other\"/
17
+ end
18
+
19
+ it "should provide a stock negative failure message" do
20
+ matcher = simple_matcher("thing") do end
21
+ matcher.matches?("other")
22
+ matcher.negative_failure_message.should =~ /expected not to get \"thing\", but got \"other\"/
23
+ end
24
+
25
+ it "should provide the given description" do
26
+ matcher = simple_matcher("thing") do end
27
+ matcher.description.should =="thing"
28
+ end
29
+
30
+ it "should fail if a wrapped 'should' fails" do
31
+ matcher = simple_matcher("should fail") do
32
+ 2.should == 3
33
+ end
34
+ lambda do
35
+ matcher.matches?("anything").should be_true
36
+ end.should fail_with(/expected: 3/)
37
+ end
38
+ end
39
+
40
+ describe "with arity of 2" do
41
+ it "should provide the matcher so you can access its messages" do
42
+ provided_matcher = nil
43
+ matcher = simple_matcher("thing") do |given, matcher|
44
+ provided_matcher = matcher
45
+ end
46
+ matcher.matches?("anything")
47
+ provided_matcher.should equal(matcher)
48
+ end
49
+
50
+ it "should support a custom failure message" do
51
+ matcher = simple_matcher("thing") do |given, matcher|
52
+ matcher.failure_message = "custom message"
53
+ end
54
+ matcher.matches?("other")
55
+ matcher.failure_message.should == "custom message"
56
+ end
57
+
58
+ it "should complain when asked for a failure message if you don't give it a description or a message" do
59
+ matcher = simple_matcher do |given, matcher| end
60
+ matcher.matches?("other")
61
+ matcher.failure_message.should =~ /No description provided/
62
+ end
63
+
64
+ it "should support a custom negative failure message" do
65
+ matcher = simple_matcher("thing") do |given, matcher|
66
+ matcher.negative_failure_message = "custom message"
67
+ end
68
+ matcher.matches?("other")
69
+ matcher.negative_failure_message.should == "custom message"
70
+ end
71
+
72
+ it "should complain when asked for a negative failure message if you don't give it a description or a message" do
73
+ matcher = simple_matcher do |given, matcher| end
74
+ matcher.matches?("other")
75
+ matcher.negative_failure_message.should =~ /No description provided/
76
+ end
77
+
78
+ it "should support a custom description" do
79
+ matcher = simple_matcher("thing") do |given, matcher|
80
+ matcher.description = "custom message"
81
+ end
82
+ matcher.matches?("description")
83
+ matcher.description.should == "custom message"
84
+ end
85
+
86
+ it "should tell you no description was provided when it doesn't receive one" do
87
+ matcher = simple_matcher do end
88
+ matcher.description.should =~ /No description provided/
89
+ end
90
+ end
91
+
92
+ end
93
+ end
@@ -0,0 +1,125 @@
1
+ require File.expand_path(File.dirname(__FILE__) + "/../../../example_helper")
2
+
3
+ describe Micronaut::Matchers::ThrowSymbol do
4
+
5
+ describe "with no args" do
6
+
7
+ before do
8
+ @matcher = Micronaut::Matchers::ThrowSymbol.new
9
+ end
10
+
11
+ it "should match if any Symbol is thrown" do
12
+ @matcher.matches?(lambda{ throw :sym }).should be_true
13
+ end
14
+
15
+ it "should match if any Symbol is thrown with an arg" do
16
+ @matcher.matches?(lambda{ throw :sym, "argument" }).should be_true
17
+ end
18
+
19
+ it "should not match if no Symbol is thrown" do
20
+ @matcher.matches?(lambda{ }).should be_false
21
+ end
22
+
23
+ it "should provide a failure message" do
24
+ @matcher.matches?(lambda{})
25
+ @matcher.failure_message.should == "expected a Symbol but nothing was thrown"
26
+ end
27
+
28
+ it "should provide a negative failure message" do
29
+ @matcher.matches?(lambda{ throw :sym})
30
+ @matcher.negative_failure_message.should == "expected no Symbol, got :sym"
31
+ end
32
+
33
+ end
34
+
35
+ describe "with a symbol" do
36
+
37
+ before do
38
+ @matcher = Micronaut::Matchers::ThrowSymbol.new(:sym)
39
+ end
40
+
41
+ it "should match if correct Symbol is thrown" do
42
+ @matcher.matches?(lambda{ throw :sym }).should be_true
43
+ end
44
+
45
+ it "should match if correct Symbol is thrown with an arg" do
46
+ @matcher.matches?(lambda{ throw :sym, "argument" }).should be_true
47
+ end
48
+
49
+ it "should not match if no Symbol is thrown" do
50
+ @matcher.matches?(lambda{ }).should be_false
51
+ end
52
+
53
+ it "should not match if correct Symbol is thrown" do
54
+ @matcher.matches?(lambda{ throw :other_sym }).should be_false
55
+ end
56
+
57
+ it "should provide a failure message when no Symbol is thrown" do
58
+ @matcher.matches?(lambda{})
59
+ @matcher.failure_message.should == "expected :sym but nothing was thrown"
60
+ end
61
+
62
+ it "should provide a failure message when wrong Symbol is thrown" do
63
+ @matcher.matches?(lambda{ throw :other_sym })
64
+ @matcher.failure_message.should == "expected :sym, got :other_sym"
65
+ end
66
+
67
+ it "should provide a negative failure message" do
68
+ @matcher.matches?(lambda{ throw :sym })
69
+ @matcher.negative_failure_message.should == "expected :sym not to be thrown"
70
+ end
71
+
72
+ it "should only match NameErrors raised by uncaught throws" do
73
+ @matcher.matches?(lambda{ sym }).should be_false
74
+ end
75
+
76
+ end
77
+
78
+ describe "with a symbol and an arg" do
79
+
80
+ before do
81
+ @matcher = Micronaut::Matchers::ThrowSymbol.new(:sym, "a")
82
+ end
83
+
84
+ it "should match if correct Symbol and args are thrown" do
85
+ @matcher.matches?(lambda{ throw :sym, "a" }).should be_true
86
+ end
87
+
88
+ it "should not match if nothing is thrown" do
89
+ @matcher.matches?(lambda{ }).should be_false
90
+ end
91
+
92
+ it "should not match if other Symbol is thrown" do
93
+ @matcher.matches?(lambda{ throw :other_sym, "a" }).should be_false
94
+ end
95
+
96
+ it "should not match if no arg is thrown" do
97
+ @matcher.matches?(lambda{ throw :sym }).should be_false
98
+ end
99
+
100
+ it "should not match if wrong arg is thrown" do
101
+ @matcher.matches?(lambda{ throw :sym, "b" }).should be_false
102
+ end
103
+
104
+ it "should provide a failure message when no Symbol is thrown" do
105
+ @matcher.matches?(lambda{})
106
+ @matcher.failure_message.should == %q[expected :sym with "a" but nothing was thrown]
107
+ end
108
+
109
+ it "should provide a failure message when wrong Symbol is thrown" do
110
+ @matcher.matches?(lambda{ throw :other_sym })
111
+ @matcher.failure_message.should == %q[expected :sym with "a", got :other_sym]
112
+ end
113
+
114
+ it "should provide a negative failure message" do
115
+ @matcher.matches?(lambda{ throw :sym })
116
+ @matcher.negative_failure_message.should == %q[expected :sym with "a" not to be thrown]
117
+ end
118
+
119
+ it "should only match NameErrors raised by uncaught throws" do
120
+ @matcher.matches?(lambda{ sym }).should be_false
121
+ end
122
+
123
+ end
124
+
125
+ end
@@ -0,0 +1,29 @@
1
+ require File.expand_path(File.dirname(__FILE__) + "/../../example_helper")
2
+
3
+ describe "Mocha Regression involving double reporting of errors" do
4
+
5
+ it "should not double report mocha errors" do
6
+ # The below example should have one error, not two
7
+ # I'm also not sure how to test this regression without having the failure counting by
8
+ # the running Micronaut instance
9
+ formatter = Micronaut::Formatters::BaseFormatter.new
10
+
11
+ use_formatter(formatter) do
12
+
13
+ isolate_behaviour do
14
+ desc = Micronaut::Behaviour.describe("my favorite pony") do
15
+ example("showing a double fail") do
16
+ foo = "string"
17
+ foo.expects(:something)
18
+ end
19
+ end
20
+ desc.examples_to_run.replace(desc.examples)
21
+ desc.run(formatter)
22
+ end
23
+
24
+ end
25
+
26
+ formatter.examples.size.should == 1
27
+ end
28
+
29
+ end
@@ -0,0 +1,41 @@
1
+ require File.expand_path(File.dirname(__FILE__) + "/../../example_helper")
2
+
3
+ describe Micronaut::Runner do
4
+
5
+ before do
6
+ @runner = Micronaut::Runner.new
7
+ end
8
+
9
+ describe '#configuration' do
10
+
11
+ it "should return Micronaut.configuration" do
12
+ @runner.configuration.should == Micronaut.configuration
13
+ end
14
+
15
+ end
16
+
17
+ describe '#formatter' do
18
+
19
+ it 'should return the configured formatter' do
20
+ @runner.formatter.should == Micronaut.configuration.formatter
21
+ end
22
+
23
+ end
24
+
25
+ describe 'Micronaut::Runner.at_exit' do
26
+
27
+ it 'should set an at_exit hook if none is already set' do
28
+ Micronaut::Runner.stubs(:installed_at_exit?).returns(false)
29
+ Micronaut::Runner.expects(:at_exit)
30
+ Micronaut::Runner.autorun
31
+ end
32
+
33
+ it 'should not set the at_exit hook if it is already set' do
34
+ Micronaut::Runner.stubs(:installed_at_exit?).returns(true)
35
+ Micronaut::Runner.expects(:at_exit).never
36
+ Micronaut::Runner.autorun
37
+ end
38
+
39
+ end
40
+
41
+ end
@@ -0,0 +1,98 @@
1
+ require File.expand_path(File.dirname(__FILE__) + "/../../example_helper")
2
+
3
+ class Bar; end
4
+ class Foo; end
5
+
6
+ describe Micronaut::World do
7
+
8
+ before do
9
+ @world = Micronaut::World.new
10
+ Micronaut.stubs(:world).returns(@world)
11
+ end
12
+
13
+ describe "behaviour groups" do
14
+
15
+ it "should contain all defined behaviour groups" do
16
+ behaviour_group = Micronaut::Behaviour.describe(Bar, 'Empty Behaviour Group') { }
17
+ @world.behaviours.should include(behaviour_group)
18
+ end
19
+
20
+ end
21
+
22
+ describe "find" do
23
+
24
+ before(:all) do
25
+ options_1 = { :foo => 1, :color => 'blue', :feature => 'reporting' }
26
+ options_2 = { :pending => true, :feature => 'reporting' }
27
+ options_3 = { :array => [1,2,3,4], :color => 'blue', :feature => 'weather status' }
28
+ @bg1 = Micronaut::Behaviour.describe(Bar, "find group-1", options_1) { }
29
+ @bg2 = Micronaut::Behaviour.describe(Bar, "find group-2", options_2) { }
30
+ @bg3 = Micronaut::Behaviour.describe(Bar, "find group-3", options_3) { }
31
+ @bg4 = Micronaut::Behaviour.describe(Foo, "find these examples") do
32
+ it('I have no options') {}
33
+ it("this is awesome", :awesome => true) {}
34
+ it("this is too", :awesome => true) {}
35
+ it("not so awesome", :awesome => false) {}
36
+ it("I also have no options") {}
37
+ end
38
+ @behaviours = [@bg1, @bg2, @bg3, @bg4]
39
+ end
40
+
41
+ after(:all) do
42
+ Micronaut.world.behaviours.delete(@bg1)
43
+ Micronaut.world.behaviours.delete(@bg2)
44
+ Micronaut.world.behaviours.delete(@bg3)
45
+ Micronaut.world.behaviours.delete(@bg4)
46
+ end
47
+
48
+ it "should find awesome examples" do
49
+ @world.find(@bg4.examples, :awesome => true).should == [@bg4.examples[1], @bg4.examples[2]]
50
+ end
51
+
52
+ it "should find no groups when given no search parameters" do
53
+ @world.find([]).should == []
54
+ end
55
+
56
+ it "should find three groups when searching for :behaviour_describes => Bar" do
57
+ @world.find(@behaviours, :behaviour => { :describes => Bar }).should == [@bg1, @bg2, @bg3]
58
+ end
59
+
60
+ it "should find one group when searching for :description => 'find group-1'" do
61
+ @world.find(@behaviours, :behaviour => { :description => 'find group-1' }).should == [@bg1]
62
+ end
63
+
64
+ it "should find two groups when searching for :description => lambda { |v| v.include?('-1') || v.include?('-3') }" do
65
+ @world.find(@behaviours, :behaviour => { :description => lambda { |v| v.include?('-1') || v.include?('-3') } }).should == [@bg1, @bg3]
66
+ end
67
+
68
+ it "should find three groups when searching for :description => /find group/" do
69
+ @world.find(@behaviours, :behaviour => { :description => /find group/ }).should == [@bg1, @bg2, @bg3]
70
+ end
71
+
72
+ it "should find one group when searching for :foo => 1" do
73
+ @world.find(@behaviours, :foo => 1 ).should == [@bg1]
74
+ end
75
+
76
+ it "should find one group when searching for :pending => true" do
77
+ @world.find(@behaviours, :pending => true ).should == [@bg2]
78
+ end
79
+
80
+ it "should find one group when searching for :array => [1,2,3,4]" do
81
+ @world.find(@behaviours, :array => [1,2,3,4]).should == [@bg3]
82
+ end
83
+
84
+ it "should find no group when searching for :array => [4,3,2,1]" do
85
+ @world.find(@behaviours, :array => [4,3,2,1]).should be_empty
86
+ end
87
+
88
+ it "should find two groups when searching for :color => 'blue'" do
89
+ @world.find(@behaviours, :color => 'blue').should == [@bg1, @bg3]
90
+ end
91
+
92
+ it "should find two groups when searching for :feature => 'reporting' }" do
93
+ @world.find(@behaviours, :feature => 'reporting').should == [@bg1, @bg2]
94
+ end
95
+
96
+ end
97
+
98
+ end