Upgraded Rails and RSpec
[monkeycharger.git] / vendor / plugins / rspec / spec / spec / dsl / example_instance_spec.rb
blobb5b89ce8b5d038719888a1b38896cd0d23902eca
1 require File.dirname(__FILE__) + '/../../spec_helper.rb'
3 module Spec
4   module DSL
5     describe Example, " instance" do
6       # TODO - this should be
7       #   predicate_matchers :is_a
8       def is_a(error)
9         be_is_a(error)
10       end
11       
12       before do
13         @reporter = stub("reporter", :example_started => nil, :example_finished => nil)
14       end
15       
16       it "should send reporter example_started" do
17         example=Example.new("example") {}
18         @reporter.should_receive(:example_started).with("example")
19         example.run(@reporter, nil, nil, false, nil)
20       end
22       it "should report its name for dry run" do
23         example=Example.new("example") {}
24         @reporter.should_receive(:example_finished).with("example")
25         example.run(@reporter, nil, nil, true, nil) #4th arg indicates dry run
26       end
28       it "should report success" do
29         example=Example.new("example") {}
30         @reporter.should_receive(:example_finished).with("example", nil, nil, false)
31         example.run(@reporter, nil, nil, nil, nil)
32       end
34       it "should report failure due to failure" do
35         example=Example.new("example") do
36           (2+2).should == 5
37         end
38         @reporter.should_receive(:example_finished).with("example", is_a(Spec::Expectations::ExpectationNotMetError), "example", false)
39         example.run(@reporter, nil, nil, nil, nil)
40       end
42       it "should report failure due to error" do
43         error=RuntimeError.new
44         example=Example.new("example") do
45           raise(error)
46         end
47         @reporter.should_receive(:example_finished).with("example", error, "example", false)
48         example.run(@reporter, nil, nil, nil, nil)
49       end
51       it "should run example in scope of supplied object" do
52         scope_class = Class.new
53         example=Example.new("should pass") do
54           self.instance_of?(Example).should == false
55           self.instance_of?(scope_class).should == true
56         end
57         @reporter.should_receive(:example_finished).with("should pass", nil, nil, false)
58         example.run(@reporter, nil, nil, nil, scope_class.new)
59       end
61       it "should not run example block if before_each fails" do
62         example_ran = false
63         example=Example.new("should pass") {example_ran = true}
64         before_each = lambda {raise "Setup error"}
65         example.run(@reporter, before_each, nil, nil, Object.new)
66         example_ran.should == false
67       end
69       it "should run after_each block if before_each fails" do
70         after_each_ran = false
71         example=Example.new("should pass") {}
72         before_each = lambda {raise "Setup error"}
73         after_each = lambda {after_each_ran = true}
74         example.run(@reporter, before_each, after_each, nil, Object.new)
75         after_each_ran.should == true
76       end
78       it "should run after_each block when example fails" do
79         example=Example.new("example") do
80           raise("in body")
81         end
82         after_each=lambda do
83           raise("in after_each")
84         end
85         @reporter.should_receive(:example_finished) do |example, error, location|
86           example.should eql("example")
87           location.should eql("example")
88           error.message.should eql("in body")
89         end
90         example.run(@reporter, nil, after_each, nil, nil)
91       end
93       it "should report failure location when in before_each" do
94         example=Example.new("example") {}
95         before_each=lambda { raise("in before_each") }
96         @reporter.should_receive(:example_finished) do |name, error, location|
97           name.should eql("example")
98           error.message.should eql("in before_each")
99           location.should eql("before(:each)")
100         end
101         example.run(@reporter, before_each, nil, nil, nil)
102       end
104       it "should report failure location when in after_each" do
105         example = Example.new("example") {}
106         after_each = lambda { raise("in after_each") }
107         @reporter.should_receive(:example_finished) do |name, error, location|
108           name.should eql("example")
109           error.message.should eql("in after_each")
110           location.should eql("after(:each)")
111         end
112         example.run(@reporter, nil, after_each, nil, nil)
113       end
115       it "should accept an options hash following the example name" do
116         example = Example.new("name", :key => 'value')
117       end
119       it "should report NO NAME when told to use generated description with --dry-run" do
120         example = Example.new(:__generate_description) {
121           5.should == 5
122         }
123         @reporter.should_receive(:example_finished) do |desc, error, location|
124           desc.should == "NO NAME (Because of --dry-run)"
125         end
126         example.run(@reporter, lambda{}, lambda{}, true, Object.new)
127       end
129       it "should report NO NAME when told to use generated description with no expectations" do
130         example = Example.new(:__generate_description) {}
131         @reporter.should_receive(:example_finished) do |desc, error, location|
132           desc.should == "NO NAME (Because there were no expectations)"
133         end
134         example.run(@reporter, lambda{}, lambda{}, false, Object.new)
135       end
137       it "should report NO NAME when told to use generated description and matcher fails" do
138         example = Example.new(:__generate_description) do
139           5.should "" # Has no matches? method..
140         end
141         @reporter.should_receive(:example_finished) do |desc, error, location|
142           desc.should == "NO NAME (Because of Error raised in matcher)"
143         end
144         example.run(@reporter, nil, nil, nil, Object.new)
145       end
147       it "should report generated description when told to and it is available" do
148         example = Example.new(:__generate_description) {
149           5.should == 5
150         }
151         @reporter.should_receive(:example_finished).with("should == 5", anything(), anything(), false)
152         example.run(@reporter, nil, nil, nil, Object.new)
153       end
155       it "should unregister description_generated callback (lest a memory leak should build up)" do
156         example = Example.new("something")
157         Spec::Matchers.should_receive(:unregister_description_generated).with(is_a(Proc))
158         example.run(@reporter, nil, nil, nil, Object.new)
159       end
160     end
161   end