rspec 0.5.0 → 0.5.1
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 +9 -5
- data/Rakefile +35 -29
- data/bin/spec +0 -5
- data/doc/README +5 -0
- data/doc/config.yaml +2 -0
- data/doc/plugin/syntax.rb +38 -0
- data/doc/reference/rspec reference.page +0 -0
- data/doc/src/community.page +8 -0
- data/doc/src/default.css +198 -0
- data/doc/src/default.template +34 -0
- data/doc/src/documentation/api.page +251 -0
- data/doc/src/documentation/index.page +8 -0
- data/doc/src/documentation/mocks.page +207 -0
- data/doc/src/documentation/specs.page +20 -0
- data/doc/src/download.page +8 -0
- data/doc/src/examples.page +9 -0
- data/doc/src/images/ul.gif +0 -0
- data/doc/src/index.page +8 -0
- data/doc/src/tools/index.page +8 -0
- data/doc/src/tools/rails.page +8 -0
- data/doc/src/tools/rake.page +8 -0
- data/doc/src/tools/rcov.page +8 -0
- data/doc/src/tools/spec_runner.page +8 -0
- data/doc/src/tools/specdoc.page +8 -0
- data/doc/src/tools/test2rspec.page +8 -0
- data/doc/src/ul.gif +0 -0
- data/doc/src/why_rspec.page +8 -0
- data/examples/mocking_spec.rb +2 -2
- data/examples/spec_framework_spec.rb +4 -4
- data/lib/spec/api/helper/have_helper.rb +55 -55
- data/lib/spec/api/mock.rb +111 -38
- data/lib/spec/runner/backtrace_tweaker.rb +4 -4
- data/lib/spec/runner/context.rb +2 -1
- data/lib/spec/runner/context_runner.rb +3 -3
- data/lib/spec/runner/option_parser.rb +8 -4
- data/lib/spec/runner/simple_text_reporter.rb +29 -19
- data/lib/spec/runner/specification.rb +2 -1
- data/lib/spec/version.rb +1 -1
- data/test/rake/rcov_testtask.rb +45 -0
- data/test/spec/api/helper/arbitrary_predicate_test.rb +39 -24
- data/test/spec/api/helper/equality_test.rb +19 -0
- data/test/spec/api/helper/should_have_test.rb +183 -0
- data/test/spec/api/mock_arg_constraints_test.rb +90 -0
- data/test/spec/api/mock_test.rb +101 -21
- data/test/spec/runner/context_runner_test.rb +3 -3
- data/test/spec/runner/context_test.rb +2 -5
- data/test/spec/runner/execution_context_test.rb +1 -1
- data/test/spec/runner/option_parser_test.rb +16 -8
- data/test/spec/runner/simple_text_reporter_test.rb +57 -33
- data/test/spec/runner/specification_test.rb +7 -7
- data/test/spec/tool/command_line_test.rb +4 -4
- data/test/test_helper.rb +2 -2
- metadata +37 -8
- data/README +0 -38
- data/TODO +0 -9
- data/TUTORIAL +0 -259
- data/WHY_RSPEC +0 -115
@@ -0,0 +1,90 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../../test_helper'
|
2
|
+
|
3
|
+
module Spec
|
4
|
+
module Api
|
5
|
+
class PassingConstraintsTest < Test::Unit::TestCase
|
6
|
+
|
7
|
+
def setup
|
8
|
+
@mock = Mock.new("test mock")
|
9
|
+
end
|
10
|
+
|
11
|
+
def test_should_handle_anything
|
12
|
+
@mock.should.receive(:random_call).at.least(:once).with(:anything)
|
13
|
+
@mock.random_call()
|
14
|
+
@mock.random_call(1)
|
15
|
+
@mock.random_call("a", 2)
|
16
|
+
@mock.random_call([], {}, "joe", 7)
|
17
|
+
@mock.__verify
|
18
|
+
end
|
19
|
+
|
20
|
+
def test_should_handle_anything_in_multi_args
|
21
|
+
@mock.should.receive(:random_call).with("a", :anything, "c")
|
22
|
+
@mock.random_call("a", "whatever", "c")
|
23
|
+
@mock.__verify
|
24
|
+
end
|
25
|
+
|
26
|
+
def test_should_accept_fixnum_as_numeric
|
27
|
+
@mock.should.receive(:random_call).with(:numeric)
|
28
|
+
@mock.random_call(1)
|
29
|
+
@mock.__verify
|
30
|
+
end
|
31
|
+
|
32
|
+
def test_should_accept_float_as_numeric
|
33
|
+
@mock.should.receive(:random_call).with(:numeric)
|
34
|
+
@mock.random_call(1.5)
|
35
|
+
@mock.__verify
|
36
|
+
end
|
37
|
+
|
38
|
+
def test_should_match_true_for_boolean
|
39
|
+
@mock.should.receive(:random_call).with(:boolean)
|
40
|
+
@mock.random_call(true)
|
41
|
+
@mock.__verify
|
42
|
+
end
|
43
|
+
|
44
|
+
def test_should_match_false_for_boolean
|
45
|
+
@mock.should.receive(:random_call).with(:boolean)
|
46
|
+
@mock.random_call(false)
|
47
|
+
@mock.__verify
|
48
|
+
end
|
49
|
+
|
50
|
+
def test_should_match_string
|
51
|
+
@mock.should.receive(:random_call).with(:string)
|
52
|
+
@mock.random_call("a string")
|
53
|
+
@mock.__verify
|
54
|
+
end
|
55
|
+
|
56
|
+
end
|
57
|
+
|
58
|
+
class FailingConstraintsTest < Test::Unit::TestCase
|
59
|
+
|
60
|
+
def setup
|
61
|
+
@mock = Mock.new("test mock")
|
62
|
+
end
|
63
|
+
|
64
|
+
def test_should_reject_non_numeric
|
65
|
+
@mock.should.receive(:random_call).with(:numeric)
|
66
|
+
assert_raise(MockExpectationError) do
|
67
|
+
@mock.random_call("1")
|
68
|
+
@mock.__verify
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
def test_should_reject_non_boolean
|
73
|
+
@mock.should.receive(:random_call).with(:boolean)
|
74
|
+
assert_raise(MockExpectationError) do
|
75
|
+
@mock.random_call("false")
|
76
|
+
@mock.__verify
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
def test_should_reject_non_string
|
81
|
+
@mock.should.receive(:random_call).with(:string)
|
82
|
+
assert_raise(MockExpectationError) do
|
83
|
+
@mock.random_call(123)
|
84
|
+
@mock.__verify
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
data/test/spec/api/mock_test.rb
CHANGED
@@ -10,7 +10,7 @@ module Spec
|
|
10
10
|
end
|
11
11
|
|
12
12
|
def test_should_report_line_number_of_expectation_of_unreceived_message
|
13
|
-
@mock.
|
13
|
+
@mock.should.receive(:wont_happen).with("x", 3)
|
14
14
|
|
15
15
|
begin
|
16
16
|
@mock.__verify
|
@@ -21,33 +21,33 @@ module Spec
|
|
21
21
|
end
|
22
22
|
|
23
23
|
def test_should_allow_block_to_calculate_return_values
|
24
|
-
@mock.
|
24
|
+
@mock.should.receive(:random_call).with("a","b","c").and.return { |a,b,c| c+b+a }
|
25
25
|
assert_equal "cba", @mock.random_call("a","b","c")
|
26
26
|
# TODO: remove __verify when migrating to self-hosting. Verify happens transparently in teardown. (AH)
|
27
27
|
@mock.__verify
|
28
28
|
end
|
29
29
|
|
30
30
|
def test_should_allow_parameter_as_return_value
|
31
|
-
@mock.
|
31
|
+
@mock.should.receive(:random_call).with("a","b","c").and.return("booh")
|
32
32
|
assert_equal "booh", @mock.random_call("a","b","c")
|
33
33
|
@mock.__verify
|
34
34
|
end
|
35
35
|
|
36
36
|
def test_return_nil_if_no_return_value_set
|
37
|
-
@mock.
|
37
|
+
@mock.should.receive(:random_call).with("a","b","c")
|
38
38
|
assert_nil @mock.random_call("a","b","c")
|
39
39
|
@mock.__verify
|
40
40
|
end
|
41
41
|
|
42
42
|
def test_should_test_multiple_calls_to_method_with_same_parameters
|
43
|
-
@mock.
|
43
|
+
@mock.should.receive(:random_call).twice.with("a","b","c")
|
44
44
|
@mock.random_call("a","b","c")
|
45
45
|
@mock.random_call("a","b","c")
|
46
46
|
@mock.__verify
|
47
47
|
end
|
48
48
|
|
49
49
|
def test_should_raise_exception_if_parameters_dont_match_when_method_called
|
50
|
-
@mock.
|
50
|
+
@mock.should.receive(:random_call).with("a","b","c").and.return("booh")
|
51
51
|
assert_raise(MockExpectationError) {
|
52
52
|
@mock.random_call("a","d","c")
|
53
53
|
}
|
@@ -67,7 +67,7 @@ module Spec
|
|
67
67
|
|
68
68
|
# TODO: rename to should_raise_exception_telling_what_message_was_not_received
|
69
69
|
def test_should_raise_exception_on_verify_if_call_counts_not_as_expected
|
70
|
-
@mock.
|
70
|
+
@mock.should.receive(:random_call).twice.with("a","b","c").and.return("booh")
|
71
71
|
@mock.random_call("a","b","c")
|
72
72
|
assert_raise(MockExpectationError) do
|
73
73
|
@mock.__verify
|
@@ -75,7 +75,7 @@ module Spec
|
|
75
75
|
end
|
76
76
|
|
77
77
|
def test_should_use_block_for_expectation_if_provided
|
78
|
-
@mock.
|
78
|
+
@mock.should.receive(:random_call) do | a, b |
|
79
79
|
a.should.equal("a")
|
80
80
|
b.should.equal("b")
|
81
81
|
"booh"
|
@@ -85,21 +85,21 @@ module Spec
|
|
85
85
|
end
|
86
86
|
|
87
87
|
def test_failing_expectation_block_throws
|
88
|
-
@mock.
|
88
|
+
@mock.should.receive(:random_call) {| a | a.should.be true}
|
89
89
|
assert_raise(MockExpectationError) do
|
90
90
|
@mock.random_call false
|
91
91
|
end
|
92
92
|
end
|
93
93
|
|
94
94
|
def test_two_return_values
|
95
|
-
@mock.
|
95
|
+
@mock.should.receive(:multi_call).twice.with(:nothing).and.return([1, 2])
|
96
96
|
assert_equal(1, @mock.multi_call)
|
97
97
|
assert_equal(2, @mock.multi_call)
|
98
98
|
@mock.__verify
|
99
99
|
end
|
100
100
|
|
101
101
|
def test_repeating_final_return_value
|
102
|
-
@mock.
|
102
|
+
@mock.should.receive(:multi_call).at.least(:once).with(:nothing).and.return([1, 2])
|
103
103
|
assert_equal(1, @mock.multi_call)
|
104
104
|
assert_equal(2, @mock.multi_call)
|
105
105
|
assert_equal(2, @mock.multi_call)
|
@@ -107,7 +107,7 @@ module Spec
|
|
107
107
|
end
|
108
108
|
|
109
109
|
def test_should_throw_on_call_of_never_method
|
110
|
-
@mock.
|
110
|
+
@mock.should.receive(:random_call).never
|
111
111
|
assert_raise(MockExpectationError) do
|
112
112
|
@mock.random_call
|
113
113
|
@mock.__verify
|
@@ -115,47 +115,127 @@ module Spec
|
|
115
115
|
end
|
116
116
|
|
117
117
|
def test_should_throw_if_at_least_once_method_not_called
|
118
|
-
@mock.
|
118
|
+
@mock.should.receive(:random_call).at.least(:once)
|
119
119
|
assert_raise(MockExpectationError) do
|
120
120
|
@mock.__verify
|
121
121
|
end
|
122
122
|
end
|
123
123
|
|
124
124
|
def test_should_not_throw_if_any_number_of_times_method_not_called
|
125
|
-
@mock.
|
125
|
+
@mock.should.receive(:random_call).any.number.of.times
|
126
126
|
@mock.__verify
|
127
127
|
end
|
128
128
|
|
129
129
|
def test_should_not_throw_if_any_number_of_times_method_is_called
|
130
|
-
@mock.
|
130
|
+
@mock.should.receive(:random_call).any.number.of.times
|
131
131
|
@mock.random_call
|
132
132
|
@mock.__verify
|
133
133
|
end
|
134
134
|
|
135
135
|
def test_should_not_throw_if_at_least_once_method_is_called_twice
|
136
|
-
@mock.
|
136
|
+
@mock.should.receive(:random_call).at.least(:once)
|
137
137
|
@mock.random_call
|
138
138
|
@mock.random_call
|
139
139
|
@mock.__verify
|
140
140
|
end
|
141
141
|
|
142
142
|
def test_should_support_mutiple_calls_with_different_args
|
143
|
-
@mock.
|
144
|
-
@mock.
|
143
|
+
@mock.should.receive(:random_call).once.with(1)
|
144
|
+
@mock.should.receive(:random_call).once.with(2)
|
145
145
|
@mock.random_call(1)
|
146
146
|
@mock.random_call(2)
|
147
147
|
@mock.__verify
|
148
148
|
end
|
149
149
|
|
150
150
|
def test_should_support_multiple_calls_with_different_args_and_counts
|
151
|
-
@mock.
|
152
|
-
@mock.
|
151
|
+
@mock.should.receive(:random_call).twice.with(1)
|
152
|
+
@mock.should.receive(:random_call).once.with(2)
|
153
153
|
@mock.random_call(1)
|
154
154
|
@mock.random_call(2)
|
155
155
|
@mock.random_call(1)
|
156
156
|
@mock.__verify
|
157
157
|
end
|
158
|
-
|
158
|
+
|
159
|
+
def test_should_not_throw_if_at_least_twice_method_is_called_twice
|
160
|
+
@mock.should.receive(:random_call).at.least(:twice)
|
161
|
+
@mock.random_call
|
162
|
+
@mock.random_call
|
163
|
+
@mock.__verify
|
164
|
+
end
|
165
|
+
|
166
|
+
def test_should_not_throw_if_at_least_twice_method_is_called_three_times
|
167
|
+
@mock.should.receive(:random_call).at.least(:twice)
|
168
|
+
@mock.random_call
|
169
|
+
@mock.random_call
|
170
|
+
@mock.random_call
|
171
|
+
@mock.__verify
|
172
|
+
end
|
173
|
+
|
174
|
+
def test_should_throw_if_at_least_twice_method_is_called_once
|
175
|
+
@mock.should.receive(:random_call).at.least(:twice)
|
176
|
+
@mock.random_call
|
177
|
+
assert_raise(MockExpectationError) do
|
178
|
+
@mock.__verify
|
179
|
+
end
|
180
|
+
end
|
181
|
+
|
182
|
+
def test_should_throw_if_at_least_twice_method_is_never_called
|
183
|
+
@mock.should.receive(:random_call).at.least(:twice)
|
184
|
+
assert_raise(MockExpectationError) do
|
185
|
+
@mock.__verify
|
186
|
+
end
|
187
|
+
end
|
188
|
+
|
189
|
+
def test_should_throw_if_at_least_5_times_method_is_never_called
|
190
|
+
@mock.should.receive(:random_call).at.least(5).times
|
191
|
+
assert_raise(MockExpectationError) do
|
192
|
+
@mock.__verify
|
193
|
+
end
|
194
|
+
end
|
195
|
+
|
196
|
+
def test_should_throw_if_at_least_5_times_method_is_called_once
|
197
|
+
@mock.should.receive(:random_call).at.least(5).times
|
198
|
+
@mock.random_call
|
199
|
+
assert_raise(MockExpectationError) do
|
200
|
+
@mock.__verify
|
201
|
+
end
|
202
|
+
end
|
203
|
+
|
204
|
+
def test_should_not_throw_if_at_least_5_times_method_is_called_5_times
|
205
|
+
@mock.should.receive(:random_call).at.least(5).times
|
206
|
+
@mock.random_call
|
207
|
+
@mock.random_call
|
208
|
+
@mock.random_call
|
209
|
+
@mock.random_call
|
210
|
+
@mock.random_call
|
211
|
+
@mock.__verify
|
212
|
+
end
|
213
|
+
|
214
|
+
def test_should_not_throw_if_at_least_5_times_method_is_called_6_times
|
215
|
+
@mock.should.receive(:random_call).at.least(5).times
|
216
|
+
@mock.random_call
|
217
|
+
@mock.random_call
|
218
|
+
@mock.random_call
|
219
|
+
@mock.random_call
|
220
|
+
@mock.random_call
|
221
|
+
@mock.random_call
|
222
|
+
@mock.__verify
|
223
|
+
end
|
224
|
+
|
225
|
+
def test_raising
|
226
|
+
@mock.should.receive(:random_call).and.raise(RuntimeError)
|
227
|
+
assert_raise(RuntimeError) do
|
228
|
+
@mock.random_call
|
229
|
+
end
|
230
|
+
end
|
231
|
+
|
232
|
+
def test_throwing
|
233
|
+
@mock.should.receive(:random_call).and.throw(:blech)
|
234
|
+
assert_throws(:blech) do
|
235
|
+
@mock.random_call
|
236
|
+
end
|
237
|
+
end
|
238
|
+
|
159
239
|
end
|
160
240
|
end
|
161
241
|
end
|
@@ -5,9 +5,9 @@ module Spec
|
|
5
5
|
def test_should_call_run_doc_on_context
|
6
6
|
context1 = Api::Mock.new "context1"
|
7
7
|
context2 = Api::Mock.new "context2"
|
8
|
-
context1.
|
9
|
-
context2.
|
10
|
-
runner = ContextRunner.new ["-d"]
|
8
|
+
context1.should.receive(:run_docs)
|
9
|
+
context2.should.receive(:run_docs)
|
10
|
+
runner = ContextRunner.new ["-d"], false, StringIO.new
|
11
11
|
runner.add_context context1
|
12
12
|
runner.add_context context2
|
13
13
|
runner.run
|
@@ -10,19 +10,16 @@ module Spec
|
|
10
10
|
end
|
11
11
|
|
12
12
|
def test_should_add_itself_to_listener_on_run
|
13
|
-
@listener.
|
13
|
+
@listener.should.receive(:add_context).with "context", :anything
|
14
14
|
@context.run(@listener)
|
15
15
|
@listener.__verify
|
16
16
|
end
|
17
17
|
|
18
18
|
def test_should_add_itself_to_listener_on_run_docs
|
19
|
-
@listener.
|
19
|
+
@listener.should.receive(:add_context).with "context"
|
20
20
|
@context.run_docs(@listener)
|
21
21
|
@listener.__verify
|
22
22
|
end
|
23
|
-
|
24
|
-
def test_should_execute_setup_from_inherited_context
|
25
|
-
end
|
26
23
|
|
27
24
|
end
|
28
25
|
end
|
@@ -4,7 +4,7 @@ module Spec
|
|
4
4
|
class ExecutionContextTest < Test::Unit::TestCase
|
5
5
|
def test_should_add_new_mock_to_spec_when_mock_message_received
|
6
6
|
spec = Api::Mock.new "spec"
|
7
|
-
spec.
|
7
|
+
spec.should.receive(:add_mock) {|mock| mock.instance_of? Api::Mock}
|
8
8
|
ec = ExecutionContext.new spec
|
9
9
|
mock = ec.mock("a mock")
|
10
10
|
end
|
@@ -5,46 +5,54 @@ module Spec
|
|
5
5
|
module Runner
|
6
6
|
class OptionParserTest < Test::Unit::TestCase
|
7
7
|
|
8
|
+
def setup
|
9
|
+
@err = StringIO.new
|
10
|
+
end
|
11
|
+
|
8
12
|
def test_verbose_should_be_true_by_default
|
9
|
-
options = OptionParser.parse([])
|
13
|
+
options = OptionParser.parse([], false, @err)
|
10
14
|
assert(!options.verbose)
|
11
15
|
end
|
12
16
|
|
13
17
|
def test_out_should_be_stdout_by_default
|
14
|
-
options = OptionParser.parse([])
|
18
|
+
options = OptionParser.parse([], false, @err)
|
15
19
|
assert_equal(STDOUT, options.out)
|
16
20
|
end
|
17
21
|
|
18
22
|
def test_verbose_should_be_settable_with_v
|
19
|
-
options = OptionParser.parse(["-v"])
|
23
|
+
options = OptionParser.parse(["-v"], false, @err)
|
20
24
|
assert(options.verbose)
|
21
25
|
end
|
22
26
|
|
23
27
|
def test_verbose_should_be_settable_with_verbose
|
24
|
-
options = OptionParser.parse(["--verbose"])
|
28
|
+
options = OptionParser.parse(["--verbose"], false, @err)
|
25
29
|
assert(options.verbose)
|
26
30
|
end
|
27
31
|
|
28
32
|
def test_doc_should_be_false_by_default
|
29
|
-
options = OptionParser.parse([])
|
33
|
+
options = OptionParser.parse([], false, @err)
|
30
34
|
assert(!options.doc)
|
31
35
|
end
|
32
36
|
|
33
37
|
def test_doc_should_be_settable_with_d
|
34
|
-
options = OptionParser.parse(["-d"])
|
38
|
+
options = OptionParser.parse(["-d"], false, @err)
|
35
39
|
assert(options.doc)
|
36
40
|
end
|
37
41
|
|
38
42
|
def test_out_should_be_settable_with_o
|
39
|
-
options = OptionParser.parse(["-o","test.txt"])
|
43
|
+
options = OptionParser.parse(["-o","test.txt"], false, @err)
|
40
44
|
assert_equal("test.txt", options.out)
|
41
45
|
end
|
42
46
|
|
43
47
|
def test_out_should_be_settable_with_of
|
44
|
-
options = OptionParser.parse(["--of","test.txt"])
|
48
|
+
options = OptionParser.parse(["--of","test.txt"], false, @err)
|
45
49
|
assert_equal("test.txt", options.out)
|
46
50
|
end
|
47
51
|
|
52
|
+
def test_should_print_usage_if_no_dir_specified
|
53
|
+
options = OptionParser.parse([], false, @err)
|
54
|
+
assert_match(/Usage: spec/, @err.string)
|
55
|
+
end
|
48
56
|
end
|
49
57
|
end
|
50
58
|
end
|
@@ -25,22 +25,23 @@ module Spec
|
|
25
25
|
end
|
26
26
|
|
27
27
|
def test_should_account_for_context_in_stats_for_pass
|
28
|
-
@reporter.add_context
|
28
|
+
@reporter.add_context "context", "calling line"
|
29
29
|
@reporter.dump
|
30
30
|
assert_match(/1 context, 0 specifications, 0 failures/, @io.string)
|
31
31
|
end
|
32
32
|
|
33
33
|
def test_should_account_for_spec_in_stats_for_pass
|
34
|
-
@reporter.add_spec Specification.new("spec") {}
|
34
|
+
@reporter.add_spec Specification.new("spec"), "calling line", {}
|
35
35
|
@reporter.dump
|
36
36
|
assert_match(/0 contexts, 1 specification, 0 failures/, @io.string)
|
37
37
|
end
|
38
38
|
|
39
39
|
def test_should_account_for_spec_and_error_in_stats_for_pass
|
40
|
-
@backtrace_tweaker.
|
41
|
-
@reporter.
|
40
|
+
@backtrace_tweaker.should.receive(:tweak_backtrace)
|
41
|
+
@reporter.add_context "context", "calling line"
|
42
|
+
@reporter.add_spec Specification.new("spec"), "calling line", [RuntimeError.new]
|
42
43
|
@reporter.dump
|
43
|
-
assert_match(/
|
44
|
+
assert_match(/1 context, 1 specification, 1 failure/, @io.string)
|
44
45
|
end
|
45
46
|
|
46
47
|
def test_should_handle_multiple_contexts_same_name
|
@@ -52,23 +53,52 @@ module Spec
|
|
52
53
|
end
|
53
54
|
|
54
55
|
def test_should_handle_multiple_specs_same_name
|
55
|
-
@backtrace_tweaker.
|
56
|
-
@reporter.add_context
|
57
|
-
@reporter.add_spec
|
58
|
-
@reporter.add_spec
|
59
|
-
@reporter.add_context
|
60
|
-
@reporter.add_spec
|
61
|
-
@reporter.add_spec
|
56
|
+
@backtrace_tweaker.should.receive(:tweak_backtrace)
|
57
|
+
@reporter.add_context "context", "calling line"
|
58
|
+
@reporter.add_spec "spec", "calling line"
|
59
|
+
@reporter.add_spec "spec", "calling line", [RuntimeError.new]
|
60
|
+
@reporter.add_context "context", "calling line"
|
61
|
+
@reporter.add_spec "spec", "calling line"
|
62
|
+
@reporter.add_spec "spec", "calling line", [RuntimeError.new]
|
62
63
|
@reporter.dump
|
63
64
|
assert_match(/2 contexts, 4 specifications, 2 failures/, @io.string)
|
64
65
|
end
|
65
66
|
|
66
67
|
def test_should_delegate_to_backtrace_tweaker
|
67
|
-
@backtrace_tweaker.
|
68
|
-
@reporter.
|
68
|
+
@backtrace_tweaker.should.receive(:tweak_backtrace)
|
69
|
+
@reporter.add_context "context", "calling line"
|
70
|
+
@reporter.add_spec "spec", "calling line", [RuntimeError.new]
|
69
71
|
@backtrace_tweaker.__verify
|
70
72
|
end
|
71
|
-
|
73
|
+
|
74
|
+
end
|
75
|
+
|
76
|
+
class FailureDumpTest < Test::Unit::TestCase
|
77
|
+
|
78
|
+
def setup
|
79
|
+
@io = StringIO.new
|
80
|
+
@reporter = SimpleTextReporter.new(@io)
|
81
|
+
@reporter.add_context "failing context", "calling line for context"
|
82
|
+
@reporter.add_spec "failing spec", "calling line for spec", [RuntimeError.new]
|
83
|
+
@reporter.dump
|
84
|
+
end
|
85
|
+
|
86
|
+
def test_should_include_context
|
87
|
+
assert_match(/failing context/, @io.string)
|
88
|
+
end
|
89
|
+
|
90
|
+
def test_should_include_context_calling_line
|
91
|
+
assert_match(/\[calling line for context\]/, @io.string)
|
92
|
+
end
|
93
|
+
|
94
|
+
def test_should_include_spec
|
95
|
+
assert_match(/failing spec/, @io.string)
|
96
|
+
end
|
97
|
+
|
98
|
+
def test_should_include_spec_calling_line
|
99
|
+
assert_match(/[calling line for spec]/, @io.string)
|
100
|
+
end
|
101
|
+
|
72
102
|
end
|
73
103
|
|
74
104
|
class SimpleTextReporterQuietOutputTest < Test::Unit::TestCase
|
@@ -76,51 +106,45 @@ module Spec
|
|
76
106
|
def setup
|
77
107
|
@io = StringIO.new
|
78
108
|
@reporter = SimpleTextReporter.new(@io)
|
109
|
+
@reporter.add_context "context", "calling line for context"
|
79
110
|
end
|
80
111
|
|
81
112
|
def test_should_remain_silent_when_context_name_provided
|
82
|
-
@reporter.add_context "context"
|
83
113
|
assert_equal("\n", @io.string)
|
84
114
|
end
|
85
115
|
|
86
116
|
def test_should_output_dot_when_spec_passed
|
87
|
-
@reporter.add_spec "spec"
|
88
|
-
assert_equal(".", @io.string)
|
117
|
+
@reporter.add_spec "spec", "calling line"
|
118
|
+
assert_equal("\n.", @io.string)
|
89
119
|
end
|
90
120
|
|
91
121
|
def test_should_output_F_when_spec_failed
|
92
|
-
@reporter.add_spec "spec", [RuntimeError.new]
|
93
|
-
assert_equal("
|
122
|
+
@reporter.add_spec "spec", "calling line", [RuntimeError.new]
|
123
|
+
assert_equal("\nF", @io.string)
|
94
124
|
end
|
95
|
-
|
125
|
+
|
96
126
|
end
|
97
127
|
|
98
|
-
|
99
128
|
class SimpleTextReporterVerboseOutputTest < Test::Unit::TestCase
|
100
129
|
|
101
130
|
def setup
|
102
131
|
@io = StringIO.new
|
103
132
|
@reporter = SimpleTextReporter.new(@io, true)
|
133
|
+
@reporter.add_context "context", "calling line for context"
|
104
134
|
end
|
105
135
|
|
106
136
|
def test_should_output_when_context_name_provided
|
107
|
-
@
|
108
|
-
assert_equal("\ncontext\n", @io.string)
|
137
|
+
assert_match(/\ncontext\n/, @io.string)
|
109
138
|
end
|
110
139
|
|
111
140
|
def test_should_output_spec_name_when_spec_passed
|
112
|
-
@reporter.add_spec "spec"
|
113
|
-
|
141
|
+
@reporter.add_spec "spec", "calling line"
|
142
|
+
assert_match(/- spec\n/, @io.string)
|
114
143
|
end
|
115
144
|
|
116
145
|
def test_should_output_failure_when_spec_failed
|
117
|
-
|
118
|
-
|
119
|
-
raise error
|
120
|
-
rescue
|
121
|
-
end
|
122
|
-
@reporter.add_spec "spec", [error]
|
123
|
-
assert_equal("- spec (FAILED)\n#{error.message} (#{error.class.name})\n#{error.backtrace.join("\n")}\n", @io.string)
|
146
|
+
@reporter.add_spec "spec", "calling line", [RuntimeError.new]
|
147
|
+
assert_match(/spec \(FAILED - 1\)/, @io.string)
|
124
148
|
end
|
125
149
|
|
126
150
|
end
|