rspec 0.9.4 → 1.0.0
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.
- data/CHANGES +24 -0
- data/EXAMPLES.rd +6 -2
- data/README +9 -9
- data/Rakefile +32 -29
- data/examples/not_yet_implemented_spec.rb +12 -0
- data/examples/shared_behaviours_example.rb +8 -0
- data/examples/stack_spec.rb +1 -0
- data/lib/spec/dsl/behaviour.rb +21 -6
- data/lib/spec/dsl/behaviour_callbacks.rb +44 -26
- data/lib/spec/dsl/behaviour_eval.rb +21 -12
- data/lib/spec/dsl/behaviour_factory.rb +23 -13
- data/lib/spec/dsl/configuration.rb +85 -5
- data/lib/spec/dsl/description.rb +14 -6
- data/lib/spec/dsl/example.rb +2 -2
- data/lib/spec/matchers.rb +5 -5
- data/lib/spec/matchers/be.rb +16 -0
- data/lib/spec/matchers/operator_matcher.rb +21 -1
- data/lib/spec/matchers/raise_error.rb +1 -1
- data/lib/spec/rake/verify_rcov.rb +5 -1
- data/lib/spec/runner.rb +7 -27
- data/lib/spec/runner/behaviour_runner.rb +1 -1
- data/lib/spec/runner/extensions/kernel.rb +20 -0
- data/lib/spec/runner/formatter/base_formatter.rb +6 -1
- data/lib/spec/runner/formatter/base_text_formatter.rb +10 -2
- data/lib/spec/runner/formatter/failing_behaviours_formatter.rb +1 -1
- data/lib/spec/runner/formatter/failing_examples_formatter.rb +1 -1
- data/lib/spec/runner/formatter/html_formatter.rb +63 -31
- data/lib/spec/runner/formatter/progress_bar_formatter.rb +5 -0
- data/lib/spec/runner/formatter/rdoc_formatter.rb +4 -0
- data/lib/spec/runner/formatter/specdoc_formatter.rb +6 -1
- data/lib/spec/runner/option_parser.rb +1 -1
- data/lib/spec/runner/reporter.rb +13 -4
- data/lib/spec/runner/spec_parser.rb +1 -1
- data/lib/spec/version.rb +5 -5
- data/spec/spec/dsl/behaviour_spec.rb +88 -24
- data/spec/spec/dsl/configuration_spec.rb +8 -1
- data/spec/spec/dsl/example_class_spec.rb +1 -1
- data/spec/spec/dsl/example_instance_spec.rb +5 -5
- data/spec/spec/dsl/shared_behaviour_spec.rb +24 -2
- data/spec/spec/matchers/be_spec.rb +20 -2
- data/spec/spec/matchers/operator_matcher_spec.rb +158 -0
- data/spec/spec/runner/command_line_spec.rb +5 -4
- data/spec/spec/runner/drb_command_line_spec.rb +15 -8
- data/spec/spec/runner/formatter/html_formatter_spec.rb +22 -5
- data/spec/spec/runner/formatter/progress_bar_formatter_dry_run_spec.rb +1 -1
- data/spec/spec/runner/formatter/progress_bar_formatter_spec.rb +7 -2
- data/spec/spec/runner/formatter/rdoc_formatter_dry_run_spec.rb +1 -1
- data/spec/spec/runner/formatter/rdoc_formatter_spec.rb +6 -1
- data/spec/spec/runner/formatter/specdoc_formatter_dry_run_spec.rb +1 -1
- data/spec/spec/runner/formatter/specdoc_formatter_spec.rb +15 -5
- data/spec/spec/runner/option_parser_spec.rb +5 -0
- data/spec/spec/runner/reporter_spec.rb +23 -5
- data/spec/spec/runner/spec_matcher_spec.rb +1 -1
- data/spec/spec/runner/spec_parser_spec.rb +1 -1
- data/spec/spec_helper.rb +38 -2
- metadata +41 -42
- data/spec/spec/matchers/should_===_spec.rb +0 -38
- data/spec/spec/matchers/should_==_spec.rb +0 -37
- data/spec/spec/matchers/should_=~_spec.rb +0 -36
@@ -12,7 +12,7 @@ module Spec
|
|
12
12
|
@config.mock_framework.should =~ /\/plugins\/mock_frameworks\/rspec$/
|
13
13
|
end
|
14
14
|
|
15
|
-
it "should let you set rspec explicitly" do
|
15
|
+
it "should let you set rspec mocking explicitly" do
|
16
16
|
@config.mock_with(:rspec)
|
17
17
|
@config.mock_framework.should =~ /\/plugins\/mock_frameworks\/rspec$/
|
18
18
|
end
|
@@ -38,6 +38,13 @@ module Spec
|
|
38
38
|
@config.include mod
|
39
39
|
@config.included_modules.should include(mod)
|
40
40
|
end
|
41
|
+
|
42
|
+
[:prepend_before, :append_before, :prepend_after, :append_after].each do |m|
|
43
|
+
it "should delegate ##{m} to Behaviour class" do
|
44
|
+
Behaviour.should_receive(m).with(:whatever)
|
45
|
+
@config.__send__(m, :whatever)
|
46
|
+
end
|
47
|
+
end
|
41
48
|
end
|
42
49
|
end
|
43
50
|
end
|
@@ -15,7 +15,7 @@ module Spec
|
|
15
15
|
|
16
16
|
it "should report errors in example" do
|
17
17
|
error = Exception.new
|
18
|
-
@reporter.should_receive(:example_finished).with("example", error, "example")
|
18
|
+
@reporter.should_receive(:example_finished).with("example", error, "example", false)
|
19
19
|
|
20
20
|
run(@example_class.new("example") {raise(error)})
|
21
21
|
end
|
@@ -27,7 +27,7 @@ module Spec
|
|
27
27
|
|
28
28
|
it "should report success" do
|
29
29
|
example=Example.new("example") {}
|
30
|
-
@reporter.should_receive(:example_finished).with("example", nil, nil)
|
30
|
+
@reporter.should_receive(:example_finished).with("example", nil, nil, false)
|
31
31
|
example.run(@reporter, nil, nil, nil, nil)
|
32
32
|
end
|
33
33
|
|
@@ -35,7 +35,7 @@ module Spec
|
|
35
35
|
example=Example.new("example") do
|
36
36
|
(2+2).should == 5
|
37
37
|
end
|
38
|
-
@reporter.should_receive(:example_finished).with("example", is_a(Spec::Expectations::ExpectationNotMetError), "example")
|
38
|
+
@reporter.should_receive(:example_finished).with("example", is_a(Spec::Expectations::ExpectationNotMetError), "example", false)
|
39
39
|
example.run(@reporter, nil, nil, nil, nil)
|
40
40
|
end
|
41
41
|
|
@@ -44,7 +44,7 @@ module Spec
|
|
44
44
|
example=Example.new("example") do
|
45
45
|
raise(error)
|
46
46
|
end
|
47
|
-
@reporter.should_receive(:example_finished).with("example", error, "example")
|
47
|
+
@reporter.should_receive(:example_finished).with("example", error, "example", false)
|
48
48
|
example.run(@reporter, nil, nil, nil, nil)
|
49
49
|
end
|
50
50
|
|
@@ -54,7 +54,7 @@ module Spec
|
|
54
54
|
self.instance_of?(Example).should == false
|
55
55
|
self.instance_of?(scope_class).should == true
|
56
56
|
end
|
57
|
-
@reporter.should_receive(:example_finished).with("should pass", nil, nil)
|
57
|
+
@reporter.should_receive(:example_finished).with("should pass", nil, nil, false)
|
58
58
|
example.run(@reporter, nil, nil, nil, scope_class.new)
|
59
59
|
end
|
60
60
|
|
@@ -148,7 +148,7 @@ module Spec
|
|
148
148
|
example = Example.new(:__generate_description) {
|
149
149
|
5.should == 5
|
150
150
|
}
|
151
|
-
@reporter.should_receive(:example_finished).with("should == 5", :anything, :anything)
|
151
|
+
@reporter.should_receive(:example_finished).with("should == 5", :anything, :anything, false)
|
152
152
|
example.run(@reporter, nil, nil, nil, Object.new)
|
153
153
|
end
|
154
154
|
|
@@ -6,7 +6,7 @@ module Spec
|
|
6
6
|
|
7
7
|
before do
|
8
8
|
@formatter = Spec::Mocks::Mock.new("formatter", :null_object => true)
|
9
|
-
@behaviour = behaviour_class.new("
|
9
|
+
@behaviour = behaviour_class.new("behaviour") {}
|
10
10
|
end
|
11
11
|
|
12
12
|
after do
|
@@ -66,11 +66,17 @@ module Spec
|
|
66
66
|
shared_behaviour.number_of_examples.should == 1
|
67
67
|
end
|
68
68
|
|
69
|
-
it "should complain when adding a shared behaviour with the same description" do
|
69
|
+
it "should complain when adding a second shared behaviour with the same description" do
|
70
70
|
make_shared_behaviour("shared behaviour", :shared => true) {}
|
71
71
|
lambda { make_shared_behaviour("shared behaviour", :shared => true) {} }.should raise_error(ArgumentError)
|
72
72
|
end
|
73
73
|
|
74
|
+
it "should NOT complain when adding a the same shared behaviour again (i.e. file gets reloaded)" do
|
75
|
+
behaviour = behaviour_class.new("shared behaviour", :shared => true) {}
|
76
|
+
behaviour_class.add_shared_behaviour(behaviour)
|
77
|
+
behaviour_class.add_shared_behaviour(behaviour)
|
78
|
+
end
|
79
|
+
|
74
80
|
it "should add examples to current behaviour when calling it_should_behave_like" do
|
75
81
|
shared_behaviour = make_shared_behaviour("shared behaviour", :shared => true) {}
|
76
82
|
shared_behaviour.it("shared example") {}
|
@@ -166,6 +172,22 @@ module Spec
|
|
166
172
|
mod1_method_called.should be_true
|
167
173
|
mod2_method_called.should be_true
|
168
174
|
end
|
175
|
+
|
176
|
+
it "should make methods defined in the shared behaviour available in consuming behaviour" do
|
177
|
+
shared_behaviour = make_shared_behaviour("shared behaviour xyz", :shared => true) do
|
178
|
+
def a_shared_helper_method
|
179
|
+
"this got defined in a shared behaviour"
|
180
|
+
end
|
181
|
+
end
|
182
|
+
@behaviour.it_should_behave_like("shared behaviour xyz")
|
183
|
+
success = false
|
184
|
+
@behaviour.it("should access a_shared_helper_method") do
|
185
|
+
a_shared_helper_method
|
186
|
+
success = true
|
187
|
+
end
|
188
|
+
@behaviour.run(@formatter)
|
189
|
+
success.should be_true
|
190
|
+
end
|
169
191
|
|
170
192
|
it "should error if told to inherit from a class" do
|
171
193
|
shared_behaviour = make_shared_behaviour("shared behaviour", :shared => true) {}
|
@@ -179,6 +179,26 @@ describe "should be >" do
|
|
179
179
|
end
|
180
180
|
end
|
181
181
|
|
182
|
+
describe "should be ==" do
|
183
|
+
it "should pass when == operator returns true" do
|
184
|
+
5.should be == 5
|
185
|
+
end
|
186
|
+
|
187
|
+
it "should fail when == operator returns false" do
|
188
|
+
lambda { 3.should be == 4 }.should fail_with("expected == 4, got 3")
|
189
|
+
end
|
190
|
+
end
|
191
|
+
|
192
|
+
describe "should be ===" do
|
193
|
+
it "should pass when === operator returns true" do
|
194
|
+
Hash.should be === Hash.new
|
195
|
+
end
|
196
|
+
|
197
|
+
it "should fail when === operator returns false" do
|
198
|
+
lambda { Hash.should be === "not a hash" }.should fail_with(%[expected === "not a hash", got Hash])
|
199
|
+
end
|
200
|
+
end
|
201
|
+
|
182
202
|
describe "should be(value)" do
|
183
203
|
it "should pass if actual.equal?(value)" do
|
184
204
|
5.should be(5)
|
@@ -187,5 +207,3 @@ describe "should be(value)" do
|
|
187
207
|
lambda { 5.should be(6) }.should fail_with("expected 6, got 5")
|
188
208
|
end
|
189
209
|
end
|
190
|
-
|
191
|
-
|
@@ -0,0 +1,158 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../../spec_helper.rb'
|
2
|
+
|
3
|
+
require 'spec/expectations/differs/default'
|
4
|
+
|
5
|
+
describe "should ==" do
|
6
|
+
|
7
|
+
it "should delegate message to target" do
|
8
|
+
subject = "apple"
|
9
|
+
subject.should_receive(:==).with("apple").and_return(true)
|
10
|
+
subject.should == "apple"
|
11
|
+
end
|
12
|
+
|
13
|
+
it "should fail when target.==(actual) returns false" do
|
14
|
+
subject = "apple"
|
15
|
+
Spec::Expectations.should_receive(:fail_with).with(%[expected "orange", got "apple" (using ==)], "orange", "apple")
|
16
|
+
subject.should == "orange"
|
17
|
+
end
|
18
|
+
|
19
|
+
end
|
20
|
+
|
21
|
+
describe "should_not ==" do
|
22
|
+
|
23
|
+
it "should delegate message to target" do
|
24
|
+
subject = "orange"
|
25
|
+
subject.should_receive(:==).with("apple").and_return(false)
|
26
|
+
subject.should_not == "apple"
|
27
|
+
end
|
28
|
+
|
29
|
+
it "should fail when target.==(actual) returns false" do
|
30
|
+
subject = "apple"
|
31
|
+
Spec::Expectations.should_receive(:fail_with).with(%[expected not == "apple", got "apple"], "apple", "apple")
|
32
|
+
subject.should_not == "apple"
|
33
|
+
end
|
34
|
+
|
35
|
+
end
|
36
|
+
|
37
|
+
describe "should ===" do
|
38
|
+
|
39
|
+
it "should delegate message to target" do
|
40
|
+
subject = "apple"
|
41
|
+
subject.should_receive(:===).with("apple").and_return(true)
|
42
|
+
subject.should === "apple"
|
43
|
+
end
|
44
|
+
|
45
|
+
it "should fail when target.===(actual) returns false" do
|
46
|
+
subject = "apple"
|
47
|
+
subject.should_receive(:===).with("orange").and_return(false)
|
48
|
+
Spec::Expectations.should_receive(:fail_with).with(%[expected "orange", got "apple" (using ===)], "orange", "apple")
|
49
|
+
subject.should === "orange"
|
50
|
+
end
|
51
|
+
|
52
|
+
end
|
53
|
+
|
54
|
+
describe "should_not ===" do
|
55
|
+
|
56
|
+
it "should delegate message to target" do
|
57
|
+
subject = "orange"
|
58
|
+
subject.should_receive(:===).with("apple").and_return(false)
|
59
|
+
subject.should_not === "apple"
|
60
|
+
end
|
61
|
+
|
62
|
+
it "should fail when target.===(actual) returns false" do
|
63
|
+
subject = "apple"
|
64
|
+
subject.should_receive(:===).with("apple").and_return(true)
|
65
|
+
Spec::Expectations.should_receive(:fail_with).with(%[expected not === "apple", got "apple"], "apple", "apple")
|
66
|
+
subject.should_not === "apple"
|
67
|
+
end
|
68
|
+
|
69
|
+
end
|
70
|
+
|
71
|
+
describe "should =~" do
|
72
|
+
|
73
|
+
it "should delegate message to target" do
|
74
|
+
subject = "foo"
|
75
|
+
subject.should_receive(:=~).with(/oo/).and_return(true)
|
76
|
+
subject.should =~ /oo/
|
77
|
+
end
|
78
|
+
|
79
|
+
it "should fail when target.=~(actual) returns false" do
|
80
|
+
subject = "fu"
|
81
|
+
subject.should_receive(:=~).with(/oo/).and_return(false)
|
82
|
+
Spec::Expectations.should_receive(:fail_with).with(%[expected =~ /oo/, got "fu"], /oo/, "fu")
|
83
|
+
subject.should =~ /oo/
|
84
|
+
end
|
85
|
+
|
86
|
+
end
|
87
|
+
|
88
|
+
describe "should_not =~" do
|
89
|
+
|
90
|
+
it "should delegate message to target" do
|
91
|
+
subject = "fu"
|
92
|
+
subject.should_receive(:=~).with(/oo/).and_return(false)
|
93
|
+
subject.should_not =~ /oo/
|
94
|
+
end
|
95
|
+
|
96
|
+
it "should fail when target.=~(actual) returns false" do
|
97
|
+
subject = "foo"
|
98
|
+
subject.should_receive(:=~).with(/oo/).and_return(true)
|
99
|
+
Spec::Expectations.should_receive(:fail_with).with(%[expected not =~ /oo/, got "foo"], /oo/, "foo")
|
100
|
+
subject.should_not =~ /oo/
|
101
|
+
end
|
102
|
+
|
103
|
+
end
|
104
|
+
|
105
|
+
describe "should >" do
|
106
|
+
|
107
|
+
it "should pass if > passes" do
|
108
|
+
4.should > 3
|
109
|
+
end
|
110
|
+
|
111
|
+
it "should fail if > fails" do
|
112
|
+
Spec::Expectations.should_receive(:fail_with).with(%[expected > 5, got 4], 5, 4)
|
113
|
+
4.should > 5
|
114
|
+
end
|
115
|
+
|
116
|
+
end
|
117
|
+
|
118
|
+
describe "should >=" do
|
119
|
+
|
120
|
+
it "should pass if >= passes" do
|
121
|
+
4.should > 3
|
122
|
+
4.should >= 4
|
123
|
+
end
|
124
|
+
|
125
|
+
it "should fail if > fails" do
|
126
|
+
Spec::Expectations.should_receive(:fail_with).with(%[expected >= 5, got 4], 5, 4)
|
127
|
+
4.should >= 5
|
128
|
+
end
|
129
|
+
|
130
|
+
end
|
131
|
+
|
132
|
+
describe "should <" do
|
133
|
+
|
134
|
+
it "should pass if < passes" do
|
135
|
+
4.should < 5
|
136
|
+
end
|
137
|
+
|
138
|
+
it "should fail if > fails" do
|
139
|
+
Spec::Expectations.should_receive(:fail_with).with(%[expected < 3, got 4], 3, 4)
|
140
|
+
4.should < 3
|
141
|
+
end
|
142
|
+
|
143
|
+
end
|
144
|
+
|
145
|
+
describe "should <=" do
|
146
|
+
|
147
|
+
it "should pass if <= passes" do
|
148
|
+
4.should <= 5
|
149
|
+
4.should <= 4
|
150
|
+
end
|
151
|
+
|
152
|
+
it "should fail if > fails" do
|
153
|
+
Spec::Expectations.should_receive(:fail_with).with(%[expected <= 3, got 4], 3, 4)
|
154
|
+
4.should <= 3
|
155
|
+
end
|
156
|
+
|
157
|
+
end
|
158
|
+
|
@@ -1,4 +1,5 @@
|
|
1
|
-
require '
|
1
|
+
require File.dirname(__FILE__) + '/../../spec_helper.rb'
|
2
|
+
|
2
3
|
describe "CommandLine" do
|
3
4
|
it "should run directory" do
|
4
5
|
file = File.dirname(__FILE__) + '/../../../examples'
|
@@ -7,17 +8,17 @@ describe "CommandLine" do
|
|
7
8
|
Spec::Runner::CommandLine.run([file], err, out, false, true)
|
8
9
|
|
9
10
|
out.rewind
|
10
|
-
out.read.should =~ /
|
11
|
+
out.read.should =~ /77 examples, 0 failures/n
|
11
12
|
end
|
12
13
|
|
13
14
|
it "should run file" do
|
14
|
-
file = File.dirname(__FILE__) + '/../../../
|
15
|
+
file = File.dirname(__FILE__) + '/../../../failing_examples/predicate_example.rb'
|
15
16
|
err = StringIO.new
|
16
17
|
out = StringIO.new
|
17
18
|
Spec::Runner::CommandLine.run([file], err, out, false, true)
|
18
19
|
|
19
20
|
out.rewind
|
20
|
-
out.read.should =~ /2 examples,
|
21
|
+
out.read.should =~ /2 examples, 1 failure/n
|
21
22
|
end
|
22
23
|
|
23
24
|
it "should raise when file does not exist" do
|
@@ -1,5 +1,4 @@
|
|
1
|
-
require '
|
2
|
-
require 'rbconfig'
|
1
|
+
require File.dirname(__FILE__) + '/../../spec_helper.rb'
|
3
2
|
|
4
3
|
describe "DrbCommandLine without running local server" do
|
5
4
|
|
@@ -18,15 +17,23 @@ end
|
|
18
17
|
describe "DrbCommandLine with local server" do
|
19
18
|
|
20
19
|
unless Config::CONFIG['ruby_install_name'] == 'jruby'
|
21
|
-
before
|
22
|
-
create_dummy_spec_file
|
20
|
+
before(:all) do
|
23
21
|
DRb.start_service("druby://localhost:8989", Spec::Runner::CommandLine)
|
22
|
+
$drb_example_file_counter = 0
|
24
23
|
end
|
25
24
|
|
26
|
-
|
27
|
-
|
25
|
+
before(:each) do
|
26
|
+
create_dummy_spec_file
|
27
|
+
$drb_example_file_counter = $drb_example_file_counter + 1
|
28
|
+
end
|
29
|
+
|
30
|
+
after(:each) do
|
28
31
|
File.delete(@dummy_spec_filename)
|
29
32
|
end
|
33
|
+
|
34
|
+
after(:all) do
|
35
|
+
DRb.stop_service
|
36
|
+
end
|
30
37
|
|
31
38
|
it "should run against local server" do
|
32
39
|
out = run_spec_via_druby(['--version'])
|
@@ -44,7 +51,7 @@ describe "DrbCommandLine with local server" do
|
|
44
51
|
end
|
45
52
|
|
46
53
|
def create_dummy_spec_file
|
47
|
-
@dummy_spec_filename = File.expand_path(File.dirname(__FILE__)) +
|
54
|
+
@dummy_spec_filename = File.expand_path(File.dirname(__FILE__)) + "/_dummy_spec#{$drb_example_file_counter}.rb"
|
48
55
|
File.open(@dummy_spec_filename, 'w') do |f|
|
49
56
|
f.write %{
|
50
57
|
describe "DUMMY CONTEXT for 'DrbCommandLine with -c option'" do
|
@@ -53,7 +60,7 @@ describe "DUMMY CONTEXT for 'DrbCommandLine with -c option'" do
|
|
53
60
|
end
|
54
61
|
|
55
62
|
it "should be output with red bar" do
|
56
|
-
violated("I
|
63
|
+
violated("I want to see a red bar!")
|
57
64
|
end
|
58
65
|
end
|
59
66
|
}
|
@@ -1,6 +1,8 @@
|
|
1
1
|
require File.dirname(__FILE__) + '/../../../spec_helper.rb'
|
2
|
-
|
2
|
+
|
3
3
|
describe "HtmlFormatter" do
|
4
|
+
it_should_behave_like "Examples that have to load files"
|
5
|
+
|
4
6
|
['--diff', '--dry-run'].each do |opt|
|
5
7
|
it "should produce HTML identical to the one we designed manually with #{opt}" do
|
6
8
|
root = File.expand_path(File.dirname(__FILE__) + '/../../../..')
|
@@ -8,10 +10,10 @@ describe "HtmlFormatter" do
|
|
8
10
|
expected_file = File.dirname(__FILE__) + "/html_formatted-#{VERSION}#{suffix}.html"
|
9
11
|
raise "There is no HTML file with expected content for this platform: #{expected_file}" unless File.file?(expected_file)
|
10
12
|
expected_html = File.read(expected_file)
|
11
|
-
raise "There should be no absolute paths in html_formatted.html!!" if expected_html =~ /\/Users/n
|
13
|
+
raise "There should be no absolute paths in html_formatted.html!!" if (expected_html =~ /\/Users/n || expected_html =~ /\/home/n)
|
12
14
|
|
13
15
|
Dir.chdir(root) do
|
14
|
-
args = ['failing_examples/mocking_example.rb', 'failing_examples/diffing_spec.rb', 'examples/stubbing_example.rb', '--format', 'html', opt]
|
16
|
+
args = ['failing_examples/mocking_example.rb', 'failing_examples/diffing_spec.rb', 'examples/stubbing_example.rb', 'examples/not_yet_implemented_spec.rb', '--format', 'html', opt]
|
15
17
|
err = StringIO.new
|
16
18
|
out = StringIO.new
|
17
19
|
Spec::Runner::CommandLine.run(
|
@@ -28,9 +30,24 @@ describe "HtmlFormatter" do
|
|
28
30
|
if opt == '--diff'
|
29
31
|
# Uncomment this line temporarily in order to overwrite the expected with actual.
|
30
32
|
# Use with care!!!
|
31
|
-
|
33
|
+
File.open(expected_file, 'w') {|io| io.write(html)}
|
34
|
+
|
35
|
+
doc = Hpricot(html)
|
36
|
+
backtraces = doc.search("div.backtrace").collect {|e| e.at("/pre").inner_html}
|
37
|
+
doc.search("div.backtrace").remove
|
38
|
+
|
39
|
+
expected_doc = Hpricot(expected_html)
|
40
|
+
expected_backtraces = expected_doc.search("div.backtrace").collect {|e| e.at("/pre").inner_html}
|
41
|
+
expected_doc.search("div.backtrace").remove
|
42
|
+
|
43
|
+
doc.inner_html.should == expected_doc.inner_html
|
32
44
|
|
33
|
-
|
45
|
+
expected_backtraces.each_with_index do |expected_line, i|
|
46
|
+
expected_path, expected_line_number, expected_suffix = expected_line.split(':')
|
47
|
+
actual_path, actual_line_number, actual_suffix = backtraces[i].split(':')
|
48
|
+
File.expand_path(actual_path).should == File.expand_path(expected_path)
|
49
|
+
actual_line_number.should == expected_line_number
|
50
|
+
end
|
34
51
|
else
|
35
52
|
html.should =~ /This was a dry-run/m
|
36
53
|
end
|