spicycode-micronaut 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (58) hide show
  1. data/Rakefile +23 -10
  2. data/examples/example_helper.rb +3 -3
  3. data/examples/lib/micronaut/behaviour_group_example.rb +175 -0
  4. data/examples/lib/micronaut/expectations/differs/default_example.rb +1 -2
  5. data/examples/lib/micronaut/expectations/extensions/object_example.rb +15 -8
  6. data/examples/lib/micronaut/expectations/fail_with_example.rb +2 -2
  7. data/examples/lib/micronaut/matchers/be_close_example.rb +42 -0
  8. data/examples/lib/micronaut/matchers/be_example.rb +257 -0
  9. data/examples/lib/micronaut/matchers/change_example.rb +329 -0
  10. data/examples/lib/micronaut/matchers/description_generation_example.rb +167 -0
  11. data/examples/lib/micronaut/matchers/eql_example.rb +29 -0
  12. data/examples/lib/micronaut/matchers/equal_example.rb +29 -0
  13. data/examples/lib/micronaut/matchers/exist_example.rb +69 -0
  14. data/examples/lib/micronaut/matchers/handler_example.rb +146 -0
  15. data/examples/lib/micronaut/matchers/has_example.rb +63 -0
  16. data/examples/lib/micronaut/matchers/have_example.rb +575 -0
  17. data/examples/lib/micronaut/matchers/include_example.rb +88 -0
  18. data/examples/lib/micronaut/matchers/match_example.rb +41 -0
  19. data/examples/lib/micronaut/matchers/matcher_methods_example.rb +66 -0
  20. data/examples/lib/micronaut/matchers/operator_matcher_example.rb +191 -0
  21. data/examples/lib/micronaut/matchers/raise_error_example.rb +315 -0
  22. data/examples/lib/micronaut/matchers/respond_to_example.rb +54 -0
  23. data/examples/lib/micronaut/matchers/satisfy_example.rb +36 -0
  24. data/examples/lib/micronaut/matchers/simple_matcher_example.rb +93 -0
  25. data/examples/lib/micronaut/matchers/throw_symbol_example.rb +96 -0
  26. data/examples/resources/example_classes.rb +67 -0
  27. data/lib/autotest/micronaut.rb +9 -4
  28. data/lib/micronaut/behaviour_group.rb +43 -0
  29. data/lib/micronaut/behaviour_group_class_methods.rb +134 -0
  30. data/lib/micronaut/example_runner.rb +7 -9
  31. data/lib/micronaut/example_world.rb +11 -7
  32. data/lib/micronaut/expectations/differs/default.rb +6 -15
  33. data/lib/micronaut/expectations/errors.rb +7 -0
  34. data/lib/micronaut/expectations/{object_extensions.rb → extensions/object.rb} +5 -4
  35. data/lib/micronaut/expectations/{string_and_symbol_extensions.rb → extensions/string_and_symbol.rb} +0 -0
  36. data/lib/micronaut/expectations/extensions.rb +2 -0
  37. data/lib/micronaut/expectations/wrap_expectation.rb +5 -0
  38. data/lib/micronaut/expectations.rb +5 -5
  39. data/lib/micronaut/extensions/kernel.rb +2 -4
  40. data/lib/micronaut/matchers/be_close.rb +6 -22
  41. data/lib/micronaut/matchers/eql.rb +7 -25
  42. data/lib/micronaut/matchers/equal.rb +6 -24
  43. data/lib/micronaut/matchers/exist.rb +8 -14
  44. data/lib/micronaut/matchers/has.rb +12 -28
  45. data/lib/micronaut/matchers/include.rb +12 -9
  46. data/lib/micronaut/matchers/match.rb +8 -27
  47. data/lib/micronaut/matchers/method_missing.rb +1 -1
  48. data/lib/micronaut/matchers/operator_matcher.rb +23 -46
  49. data/lib/micronaut/matchers/raise_error.rb +4 -8
  50. data/lib/micronaut/matchers/respond_to.rb +2 -1
  51. data/lib/micronaut/matchers/throw_symbol.rb +9 -3
  52. data/lib/micronaut/matchers.rb +10 -3
  53. data/lib/micronaut/mocking/with_mocha.rb +0 -1
  54. data/lib/micronaut.rb +3 -3
  55. metadata +31 -7
  56. data/examples/lib/micronaut/example_group_example.rb +0 -116
  57. data/lib/micronaut/example_group.rb +0 -100
  58. data/lib/micronaut/exceptions.rb +0 -7
data/Rakefile CHANGED
@@ -4,7 +4,7 @@ require 'rubygems/specification'
4
4
  require 'date'
5
5
 
6
6
  GEM = "micronaut"
7
- GEM_VERSION = "0.0.2"
7
+ GEM_VERSION = "0.0.3"
8
8
  AUTHOR = "Chad Humphries"
9
9
  EMAIL = "chad@spicycode.com"
10
10
  HOMEPAGE = "http://spicycode.com"
@@ -30,14 +30,6 @@ spec = Gem::Specification.new do |s|
30
30
  s.files = %w(LICENSE README Rakefile) + Dir.glob("{lib,examples}/**/*")
31
31
  end
32
32
 
33
- desc "Run all examples"
34
- task :default do
35
- examples = Dir["examples/**/*_example.rb"].map { |g| Dir.glob(g) }.flatten
36
- examples.map! {|f| %Q(require "#{f}")}
37
- command = "-e '#{examples.join("; ")}'"
38
- ruby command
39
- end
40
-
41
33
  Rake::GemPackageTask.new(spec) do |pkg|
42
34
  pkg.gem_spec = spec
43
35
  end
@@ -52,4 +44,25 @@ task :make_spec do
52
44
  File.open("#{GEM}.gemspec", "w") do |file|
53
45
  file.puts spec.to_ruby
54
46
  end
55
- end
47
+ end
48
+
49
+ namespace :micronaut do
50
+
51
+ desc 'Run all examples'
52
+ task :examples do
53
+ examples = Dir["examples/**/*_example.rb"].map { |g| Dir.glob(g) }.flatten
54
+ examples.map! {|f| %Q(require "#{f}")}
55
+ command = "-e '#{examples.join("; ")}'"
56
+ ruby command
57
+ end
58
+
59
+ desc "Run all examples using rcov"
60
+ task :coverage do
61
+ examples = Dir["examples/**/*_example.rb"].map { |g| Dir.glob(g) }.flatten
62
+ system "rcov --exclude \"examples/*,gems/*,db/*,/Library/Ruby/*,config/*\" --text-report --sort coverage --no-validator-links #{examples.join(' ')}"
63
+ end
64
+
65
+ end
66
+
67
+ task :default => 'micronaut:coverage'
68
+
@@ -2,16 +2,16 @@ lib_path = File.expand_path(File.dirname(__FILE__) + "/../lib")
2
2
  $LOAD_PATH.unshift lib_path unless $LOAD_PATH.include?(lib_path)
3
3
 
4
4
  require 'micronaut'
5
-
5
+ require File.expand_path(File.dirname(__FILE__) + "/resources/example_classes")
6
6
 
7
7
  module Micronaut
8
8
  module Matchers
9
9
  def fail
10
- raise_error(::Micronaut::Exceptions::ExpectationNotMetError)
10
+ raise_error(::Micronaut::Expectations::ExpectationNotMetError)
11
11
  end
12
12
 
13
13
  def fail_with(message)
14
- raise_error(::Micronaut::Exceptions::ExpectationNotMetError, message)
14
+ raise_error(::Micronaut::Expectations::ExpectationNotMetError, message)
15
15
  end
16
16
  end
17
17
  end
@@ -0,0 +1,175 @@
1
+ require File.expand_path(File.dirname(__FILE__) + "/../../example_helper")
2
+
3
+ describe Micronaut::BehaviourGroup do
4
+
5
+ class Foo
6
+
7
+ end
8
+
9
+ def empty_behaviour_group
10
+ Micronaut::BehaviourGroup.describe(Foo, 'Empty Behaviour Group') { }
11
+ end
12
+
13
+ describe "describing behaviour with #describe" do
14
+
15
+ it "should raise an ArgumentError if no name is given" do
16
+ lambda { Micronaut::BehaviourGroup.describe() {} }.should raise_error(ArgumentError)
17
+ end
18
+
19
+ it "should raise an ArgumentError if no block is given" do
20
+ lambda { Micronaut::BehaviourGroup.describe('foo') }.should raise_error(ArgumentError)
21
+ end
22
+
23
+ describe '#name' do
24
+
25
+ it "should expose the first parameter as name" do
26
+ Micronaut::BehaviourGroup.describe("my favorite pony") { }.name.should == 'my favorite pony'
27
+ end
28
+
29
+ it "should call to_s on the first parameter in case it is a constant" do
30
+ Micronaut::BehaviourGroup.describe(Foo) { }.name.should == 'Foo'
31
+ end
32
+
33
+ end
34
+
35
+ describe '#described_type' do
36
+
37
+ it "should be the first parameter when it is a constant" do
38
+ Micronaut::BehaviourGroup.describe(Foo) { }.described_type.should == Foo
39
+ end
40
+
41
+ it "should be Object when the first parameter is a string" do
42
+ Micronaut::BehaviourGroup.describe("i'm a computer") { }.described_type.should == Object
43
+ end
44
+
45
+ end
46
+
47
+ describe '#description' do
48
+
49
+ it "should expose the second parameter as description" do
50
+ Micronaut::BehaviourGroup.describe(Foo, "my desc") { }.description.should == 'my desc'
51
+ end
52
+
53
+ it "should allow the second parameter to be nil" do
54
+ Micronaut::BehaviourGroup.describe(Foo, nil) { }.description.should be_nil
55
+ end
56
+
57
+ end
58
+
59
+ describe '#options' do
60
+
61
+ it "should expose the third parameter as options" do
62
+ Micronaut::BehaviourGroup.describe(Foo, nil, 'foo' => 'bar') { }.options.should == { "foo" => 'bar' }
63
+ end
64
+
65
+ it "should be an empty hash if no options are supplied" do
66
+ Micronaut::BehaviourGroup.describe(Foo, nil) { }.options.should == {}
67
+ end
68
+
69
+ end
70
+
71
+ describe "adding before and after hooks" do
72
+
73
+ it "should expose the before each blocks at before_eachs" do
74
+ group = empty_behaviour_group
75
+ group.before(:each) { 'foo' }
76
+ group.should have(1).before_eachs
77
+ end
78
+
79
+ it "should maintain the before each block order" do
80
+ group = empty_behaviour_group
81
+ group.before(:each) { 15 }
82
+ group.before(:each) { 'A' }
83
+ group.before(:each) { 33.5 }
84
+
85
+ group.before_eachs[0].call.should == 15
86
+ group.before_eachs[1].call.should == 'A'
87
+ group.before_eachs[2].call.should == 33.5
88
+ end
89
+
90
+ it "should expose the before all blocks at before_alls" do
91
+ group = empty_behaviour_group
92
+ group.before(:all) { 'foo' }
93
+ group.should have(1).before_alls
94
+ end
95
+
96
+ it "should maintain the before all block order" do
97
+ group = empty_behaviour_group
98
+ group.before(:all) { 15 }
99
+ group.before(:all) { 'A' }
100
+ group.before(:all) { 33.5 }
101
+
102
+ group.before_alls[0].call.should == 15
103
+ group.before_alls[1].call.should == 'A'
104
+ group.before_alls[2].call.should == 33.5
105
+ end
106
+
107
+ it "should expose the after each blocks at after_eachs" do
108
+ group = empty_behaviour_group
109
+ group.after(:each) { 'foo' }
110
+ group.should have(1).after_eachs
111
+ end
112
+
113
+ it "should maintain the after each block order" do
114
+ group = empty_behaviour_group
115
+ group.after(:each) { 15 }
116
+ group.after(:each) { 'A' }
117
+ group.after(:each) { 33.5 }
118
+
119
+ group.after_eachs[0].call.should == 15
120
+ group.after_eachs[1].call.should == 'A'
121
+ group.after_eachs[2].call.should == 33.5
122
+ end
123
+
124
+ it "should expose the after all blocks at after_alls" do
125
+ group = empty_behaviour_group
126
+ group.after(:all) { 'foo' }
127
+ group.should have(1).after_alls
128
+ end
129
+
130
+ it "should maintain the after each block order" do
131
+ group = empty_behaviour_group
132
+ group.after(:all) { 15 }
133
+ group.after(:all) { 'A' }
134
+ group.after(:all) { 33.5 }
135
+
136
+ group.after_alls[0].call.should == 15
137
+ group.after_alls[1].call.should == 'A'
138
+ group.after_alls[2].call.should == 33.5
139
+ end
140
+
141
+ end
142
+
143
+ describe "adding examples" do
144
+
145
+ it "should allow adding an example using 'it'" do
146
+ group = empty_behaviour_group
147
+ group.it("should do something") { }
148
+ group.examples.size.should == 1
149
+ end
150
+
151
+ it "should expose all examples at examples" do
152
+ group = empty_behaviour_group
153
+ group.it("should do something 1") { }
154
+ group.it("should do something 2") { }
155
+ group.it("should do something 3") { }
156
+ group.examples.size.should == 3
157
+ end
158
+
159
+ it "should maintain the example order" do
160
+ group = empty_behaviour_group
161
+ group.it("should 1") { }
162
+ group.it("should 2") { }
163
+ group.it("should 3") { }
164
+ group.examples[0].first.should == 'should 1'
165
+ group.examples[1].first.should == 'should 2'
166
+ group.examples[2].first.should == 'should 3'
167
+ end
168
+
169
+ end
170
+
171
+
172
+ end
173
+
174
+
175
+ end
@@ -21,7 +21,6 @@ module Micronaut
21
21
  end
22
22
 
23
23
  describe "Diff" do
24
-
25
24
  before do
26
25
  @differ = Micronaut::Expectations::Differs::Default.new(:unified)
27
26
  end
@@ -97,7 +96,7 @@ end
97
96
 
98
97
 
99
98
  describe "Diff in context format" do
100
- before(:each) do
99
+ before do
101
100
  @differ = Micronaut::Expectations::Differs::Default.new(:context)
102
101
  end
103
102
 
@@ -2,7 +2,7 @@ require File.expand_path(File.dirname(__FILE__) + "/../../../../example_helper")
2
2
 
3
3
  describe Object, "#should" do
4
4
 
5
- before(:each) do
5
+ before do
6
6
  @target = "target"
7
7
  @matcher = mock("matcher")
8
8
  @matcher.stubs(:matches?).returns(true)
@@ -17,27 +17,34 @@ describe Object, "#should" do
17
17
  it "should ask for a failure_message when matches? returns false" do
18
18
  @matcher.expects(:matches?).with(@target).returns(false)
19
19
  @matcher.expects(:failure_message).returns("the failure message")
20
-
21
- lambda { @target.should @matcher }.should fail_with("the failure message")
20
+ lambda {
21
+ @target.should @matcher
22
+ }.should fail_with("the failure message")
22
23
  end
23
24
 
24
25
  it "should raise error if it receives false directly" do
25
- lambda { @target.should false }.should raise_error(Micronaut::Expectations::InvalidMatcherError)
26
+ lambda {
27
+ @target.should false
28
+ }.should raise_error(Micronaut::Expectations::InvalidMatcherError)
26
29
  end
27
30
 
28
31
  it "should raise error if it receives false (evaluated)" do
29
- lambda { @target.should eql?("foo") }.should raise_error(Micronaut::Expectations::InvalidMatcherError)
32
+ lambda {
33
+ @target.should eql?("foo")
34
+ }.should raise_error(Micronaut::Expectations::InvalidMatcherError)
30
35
  end
31
36
 
32
37
  it "should raise error if it receives true" do
33
- lambda { @target.should true }.should raise_error(Micronaut::Expectations::InvalidMatcherError)
38
+ lambda {
39
+ @target.should true
40
+ }.should raise_error(Micronaut::Expectations::InvalidMatcherError)
34
41
  end
35
42
 
36
43
  end
37
44
 
38
45
  describe Object, "#should_not" do
39
46
 
40
- before(:each) do
47
+ before do
41
48
  @target = "target"
42
49
  @matcher = mock("matcher")
43
50
  end
@@ -74,5 +81,5 @@ describe Object, "#should_not" do
74
81
  @target.should_not true
75
82
  }.should raise_error(Micronaut::Expectations::InvalidMatcherError)
76
83
  end
77
-
84
+
78
85
  end
@@ -1,7 +1,7 @@
1
1
  require File.expand_path(File.dirname(__FILE__) + "/../../../example_helper")
2
2
 
3
3
  describe Micronaut::Expectations, "#fail_with with no diff" do
4
- before(:each) do
4
+ before do
5
5
  @old_differ = Micronaut::Expectations.differ
6
6
  Micronaut::Expectations.differ = nil
7
7
  end
@@ -24,7 +24,7 @@ describe Micronaut::Expectations, "#fail_with with no diff" do
24
24
  end
25
25
 
26
26
  describe Micronaut::Expectations, "#fail_with with diff" do
27
- before(:each) do
27
+ before do
28
28
  @old_differ = Micronaut::Expectations.differ
29
29
  @differ = mock("differ")
30
30
  Micronaut::Expectations.differ = @differ
@@ -0,0 +1,42 @@
1
+ require File.expand_path(File.dirname(__FILE__) + "/../../../example_helper")
2
+
3
+ module Micronaut
4
+ module Matchers
5
+ describe "be_close" do
6
+ it "should match when value == target" do
7
+ be_close(5.0, 0.5).matches?(5.0).should be_true
8
+ end
9
+ it "should match when value < (target + delta)" do
10
+ be_close(5.0, 0.5).matches?(5.49).should be_true
11
+ end
12
+ it "should match when value > (target - delta)" do
13
+ be_close(5.0, 0.5).matches?(4.51).should be_true
14
+ end
15
+ it "should not match when value == (target - delta)" do
16
+ be_close(5.0, 0.5).matches?(4.5).should be_false
17
+ end
18
+ it "should not match when value < (target - delta)" do
19
+ be_close(5.0, 0.5).matches?(4.49).should be_false
20
+ end
21
+ it "should not match when value == (target + delta)" do
22
+ be_close(5.0, 0.5).matches?(5.5).should be_false
23
+ end
24
+ it "should not match when value > (target + delta)" do
25
+ be_close(5.0, 0.5).matches?(5.51).should be_false
26
+ end
27
+ it "should provide a useful failure message" do
28
+ #given
29
+ matcher = be_close(5.0, 0.5)
30
+ #when
31
+ matcher.matches?(5.51)
32
+ #then
33
+ matcher.failure_message.should == "expected 5.0 +/- (< 0.5), got 5.51"
34
+ end
35
+ it "should describe itself" do
36
+ matcher = be_close(5.0, 0.5)
37
+ matcher.matches?(5.1)
38
+ matcher.description.should == "be close to 5.0 (within +- 0.5)"
39
+ end
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,257 @@
1
+ require File.expand_path(File.dirname(__FILE__) + "/../../../example_helper")
2
+
3
+ describe "should be_predicate" do
4
+ it "should pass when actual returns true for :predicate?" do
5
+ actual = stub("actual", :happy? => true)
6
+ actual.should be_happy
7
+ end
8
+
9
+ it "should pass when actual returns true for :predicates? (present tense)" do
10
+ actual = stub("actual", :exists? => true, :exist? => true)
11
+ actual.should be_exist
12
+ end
13
+
14
+ it "should fail when actual returns false for :predicate?" do
15
+ actual = stub("actual", :happy? => false)
16
+ lambda {
17
+ actual.should be_happy
18
+ }.should fail_with("expected happy? to return true, got false")
19
+ end
20
+
21
+ it "should fail when actual does not respond to :predicate?" do
22
+ lambda {
23
+ Object.new.should be_happy
24
+ }.should raise_error(NameError, /happy\?/)
25
+ end
26
+
27
+ it "should fail on error other than NameError" do
28
+ actual = stub("actual")
29
+ actual.expects(:foo?).raises("aaaah")
30
+ lambda {
31
+ actual.should be_foo
32
+ }.should raise_error(/aaaah/)
33
+ end
34
+
35
+ it "should fail on error other than NameError (with the present tense predicate)" do
36
+ actual = Object.new
37
+ actual.expects(:foos?).raises("aaaah")
38
+ lambda {
39
+ actual.should be_foo
40
+ }.should raise_error(/aaaah/)
41
+ end
42
+ end
43
+
44
+ describe "should_not be_predicate" do
45
+ it "should pass when actual returns false for :sym?" do
46
+ actual = stub("actual", :happy? => false)
47
+ actual.should_not be_happy
48
+ end
49
+
50
+ it "should fail when actual returns true for :sym?" do
51
+ actual = stub("actual", :happy? => true)
52
+ lambda {
53
+ actual.should_not be_happy
54
+ }.should fail_with("expected happy? to return false, got true")
55
+ end
56
+
57
+ it "should fail when actual does not respond to :sym?" do
58
+ lambda {
59
+ Object.new.should_not be_happy
60
+ }.should raise_error(NameError)
61
+ end
62
+ end
63
+
64
+ describe "should be_predicate(*args)" do
65
+ it "should pass when actual returns true for :predicate?(*args)" do
66
+ actual = mock("actual")
67
+ actual.expects(:older_than?).with(3).returns(true)
68
+ actual.should be_older_than(3)
69
+ end
70
+
71
+ it "should fail when actual returns false for :predicate?(*args)" do
72
+ actual = mock("actual")
73
+ actual.expects(:older_than?).with(3).returns(false)
74
+ lambda {
75
+ actual.should be_older_than(3)
76
+ }.should fail_with("expected older_than?(3) to return true, got false")
77
+ end
78
+
79
+ it "should fail when actual does not respond to :predicate?" do
80
+ lambda {
81
+ Object.new.should be_older_than(3)
82
+ }.should raise_error(NameError)
83
+ end
84
+ end
85
+
86
+ describe "should_not be_predicate(*args)" do
87
+ it "should pass when actual returns false for :predicate?(*args)" do
88
+ actual = mock("actual")
89
+ actual.expects(:older_than?).with(3).returns(false)
90
+ actual.should_not be_older_than(3)
91
+ end
92
+
93
+ it "should fail when actual returns true for :predicate?(*args)" do
94
+ actual = mock("actual")
95
+ actual.expects(:older_than?).with(3).returns(true)
96
+ lambda {
97
+ actual.should_not be_older_than(3)
98
+ }.should fail_with("expected older_than?(3) to return false, got true")
99
+ end
100
+
101
+ it "should fail when actual does not respond to :predicate?" do
102
+ lambda {
103
+ Object.new.should_not be_older_than(3)
104
+ }.should raise_error(NameError)
105
+ end
106
+ end
107
+
108
+ describe "should be_true" do
109
+ it "should pass when actual equal(true)" do
110
+ true.should be_true
111
+ end
112
+
113
+ it "should fail when actual equal(false)" do
114
+ lambda {
115
+ false.should be_true
116
+ }.should fail_with("expected true, got false")
117
+ end
118
+ end
119
+
120
+ describe "should be_false" do
121
+ it "should pass when actual equal(false)" do
122
+ false.should be_false
123
+ end
124
+
125
+ it "should fail when actual equal(true)" do
126
+ lambda {
127
+ true.should be_false
128
+ }.should fail_with("expected false, got true")
129
+ end
130
+ end
131
+
132
+ describe "should be_nil" do
133
+ it "should pass when actual is nil" do
134
+ nil.should be_nil
135
+ end
136
+
137
+ it "should fail when actual is not nil" do
138
+ lambda {
139
+ :not_nil.should be_nil
140
+ }.should fail_with("expected nil? to return true, got false")
141
+ end
142
+ end
143
+
144
+ describe "should_not be_nil" do
145
+ it "should pass when actual is not nil" do
146
+ :not_nil.should_not be_nil
147
+ end
148
+
149
+ it "should fail when actual is nil" do
150
+ lambda {
151
+ nil.should_not be_nil
152
+ }.should fail_with("expected nil? to return false, got true")
153
+ end
154
+ end
155
+
156
+ describe "should be <" do
157
+ it "should pass when < operator returns true" do
158
+ 3.should be < 4
159
+ end
160
+
161
+ it "should fail when < operator returns false" do
162
+ lambda { 3.should be < 3 }.should fail_with("expected < 3, got 3")
163
+ end
164
+ end
165
+
166
+ describe "should be <=" do
167
+ it "should pass when <= operator returns true" do
168
+ 3.should be <= 4
169
+ 4.should be <= 4
170
+ end
171
+
172
+ it "should fail when <= operator returns false" do
173
+ lambda { 3.should be <= 2 }.should fail_with("expected <= 2, got 3")
174
+ end
175
+ end
176
+
177
+ describe "should be >=" do
178
+ it "should pass when >= operator returns true" do
179
+ 4.should be >= 4
180
+ 5.should be >= 4
181
+ end
182
+
183
+ it "should fail when >= operator returns false" do
184
+ lambda { 3.should be >= 4 }.should fail_with("expected >= 4, got 3")
185
+ end
186
+ end
187
+
188
+ describe "should be >" do
189
+ it "should pass when > operator returns true" do
190
+ 5.should be > 4
191
+ end
192
+
193
+ it "should fail when > operator returns false" do
194
+ lambda { 3.should be > 4 }.should fail_with("expected > 4, got 3")
195
+ end
196
+ end
197
+
198
+ describe "should be ==" do
199
+ it "should pass when == operator returns true" do
200
+ 5.should be == 5
201
+ end
202
+
203
+ it "should fail when == operator returns false" do
204
+ lambda { 3.should be == 4 }.should fail_with("expected == 4, got 3")
205
+ end
206
+ end
207
+
208
+ describe "should be ===" do
209
+ it "should pass when === operator returns true" do
210
+ Hash.should be === Hash.new
211
+ end
212
+
213
+ it "should fail when === operator returns false" do
214
+ lambda { Hash.should be === "not a hash" }.should fail_with(%[expected === not a hash, got Hash])
215
+ end
216
+ end
217
+
218
+ describe "should_not with operators" do
219
+ it "should coach user to stop using operators with should_not" do
220
+ lambda {
221
+ 5.should_not be < 6
222
+ }.should raise_error(/not only FAILED,\nit reads really poorly./m)
223
+ end
224
+ end
225
+
226
+ describe "should be" do
227
+ it "should pass if actual is true or a set value" do
228
+ true.should be
229
+ 1.should be
230
+ end
231
+
232
+ it "should fail if actual is false" do
233
+ lambda {false.should be}.should fail_with("expected true, got false")
234
+ end
235
+
236
+ it "should fail if actual is nil" do
237
+ lambda {nil.should be}.should fail_with("expected true, got nil")
238
+ end
239
+ end
240
+
241
+ describe "should be(value)" do
242
+ it "should pass if actual.equal?(value)" do
243
+ 5.should be(5)
244
+ end
245
+ it "should fail if !actual.equal?(value)" do
246
+ lambda { 5.should be(6) }.should fail_with("expected 6, got 5")
247
+ end
248
+ end
249
+
250
+ describe "'should be' with operator" do
251
+ it "should include 'be' in the description" do
252
+ (be > 6).description.should =~ /be > 6/
253
+ (be >= 6).description.should =~ /be >= 6/
254
+ (be <= 6).description.should =~ /be <= 6/
255
+ (be < 6).description.should =~ /be < 6/
256
+ end
257
+ end