rspec 0.9.4 → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|