miniunit 1.1.0 → 1.2.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/.autotest +10 -2
- data/History.txt +57 -2
- data/Manifest.txt +9 -2
- data/README.txt +14 -5
- data/Rakefile +50 -20
- data/bin/use_miniunit +23 -0
- data/lib/mini/mock.rb +31 -0
- data/lib/mini/spec.rb +81 -0
- data/lib/mini/test.rb +423 -0
- data/lib/test/unit.rb +14 -297
- data/lib/test/unit/assertions.rb +75 -0
- data/lib/test/unit/error.rb +8 -0
- data/lib/test/unit/testcase.rb +1 -6
- data/test/test_mini_mock.rb +76 -0
- data/test/test_mini_spec.rb +147 -0
- data/test/test_mini_test.rb +682 -0
- metadata +63 -47
- data/test/test_test_case.rb +0 -321
- data/test/test_test_unit.rb +0 -75
@@ -0,0 +1,147 @@
|
|
1
|
+
require 'mini/spec'
|
2
|
+
|
3
|
+
Mini::Test.autorun
|
4
|
+
|
5
|
+
describe Mini::Spec do
|
6
|
+
before do
|
7
|
+
@assertion_count = 5
|
8
|
+
end
|
9
|
+
|
10
|
+
after do
|
11
|
+
self._assertions.must_equal @assertion_count
|
12
|
+
end
|
13
|
+
|
14
|
+
it "needs to have all methods named well" do
|
15
|
+
@assertion_count = 2
|
16
|
+
|
17
|
+
methods = Object.public_instance_methods.find_all { |n| n =~ /^must|^wont/ }
|
18
|
+
methods.map! { |m| m.to_s } if Symbol === methods.first
|
19
|
+
|
20
|
+
musts, wonts = methods.sort.partition { |m| m =~ /^must/ }
|
21
|
+
|
22
|
+
expected_musts = %w(must_be
|
23
|
+
must_be_close_to
|
24
|
+
must_be_empty
|
25
|
+
must_be_instance_of
|
26
|
+
must_be_kind_of
|
27
|
+
must_be_nil
|
28
|
+
must_be_same_as
|
29
|
+
must_be_within_delta
|
30
|
+
must_be_within_epsilon
|
31
|
+
must_equal
|
32
|
+
must_include
|
33
|
+
must_match
|
34
|
+
must_raise
|
35
|
+
must_respond_to
|
36
|
+
must_throw)
|
37
|
+
|
38
|
+
expected_wonts = expected_musts.map { |m| m.sub(/^must/, 'wont') }
|
39
|
+
expected_wonts.reject! { |m| m =~ /wont_(not|raise|throw)/ }
|
40
|
+
|
41
|
+
musts.must_equal expected_musts
|
42
|
+
wonts.must_equal expected_wonts
|
43
|
+
end
|
44
|
+
|
45
|
+
it "needs to verify equality" do
|
46
|
+
(6 * 7).must_equal(42).must_equal true
|
47
|
+
proc { (6 * 9).must_equal(42) }.must_raise Mini::Assertion
|
48
|
+
end
|
49
|
+
|
50
|
+
it "needs to verify floats within a delta" do
|
51
|
+
(6.0 * 7).must_be_close_to(42.0).must_equal true
|
52
|
+
proc { 42.002.must_be_close_to 42.0 }.must_raise Mini::Assertion
|
53
|
+
end
|
54
|
+
|
55
|
+
it "needs to verify types of objects" do
|
56
|
+
(6 * 7).must_be_instance_of(Fixnum).must_equal true
|
57
|
+
proc { (6 * 7).must_be_instance_of String }.must_raise Mini::Assertion
|
58
|
+
end
|
59
|
+
|
60
|
+
it "needs to verify kinds of objects" do
|
61
|
+
@assertion_count = 7
|
62
|
+
|
63
|
+
(6 * 7).must_be_kind_of(Fixnum).must_equal true
|
64
|
+
(6 * 7).must_be_kind_of(Numeric).must_equal true
|
65
|
+
proc { (6 * 7).must_be_kind_of String }.must_raise Mini::Assertion
|
66
|
+
end
|
67
|
+
|
68
|
+
it "needs to verify regexp matches" do
|
69
|
+
"blah".must_match(/\w+/).must_equal true
|
70
|
+
proc { "blah".must_match(/\d+/) }.must_raise Mini::Assertion
|
71
|
+
end
|
72
|
+
|
73
|
+
it "needs to verify nil" do
|
74
|
+
nil.must_be_nil.must_equal true
|
75
|
+
proc { 42.must_be_nil }.must_raise Mini::Assertion
|
76
|
+
end
|
77
|
+
|
78
|
+
it "needs to verify using any operator" do
|
79
|
+
41.must_be(:<, 42).must_equal true
|
80
|
+
proc { 42.must_be(:<, 41) }.must_raise Mini::Assertion
|
81
|
+
end
|
82
|
+
|
83
|
+
it "needs to catch an expected exception" do
|
84
|
+
@assertion_count = 4
|
85
|
+
|
86
|
+
proc { raise "blah" }.must_raise RuntimeError
|
87
|
+
proc { raise Mini::Assertion }.must_raise Mini::Assertion
|
88
|
+
end
|
89
|
+
|
90
|
+
it "needs to catch an unexpected exception" do
|
91
|
+
@assertion_count = 4
|
92
|
+
|
93
|
+
proc {
|
94
|
+
proc { raise Mini::Assertion }.must_raise(RuntimeError)
|
95
|
+
}.must_raise Mini::Assertion
|
96
|
+
end
|
97
|
+
|
98
|
+
it "needs raise if an expected exception is not raised" do
|
99
|
+
@assertion_count = 3
|
100
|
+
|
101
|
+
proc { proc { 42 }.must_raise(RuntimeError) }.must_raise Mini::Assertion
|
102
|
+
end
|
103
|
+
|
104
|
+
it "needs to be able to catch a Mini::Assertion exception" do
|
105
|
+
@assertion_count = 3
|
106
|
+
|
107
|
+
proc { 1.wont_equal 1 }.must_raise Mini::Assertion
|
108
|
+
end
|
109
|
+
|
110
|
+
it "needs to verify using respond_to" do
|
111
|
+
42.must_respond_to(:+).must_equal true
|
112
|
+
proc { 42.must_respond_to(:clear) }.must_raise Mini::Assertion
|
113
|
+
end
|
114
|
+
|
115
|
+
it "needs to verify identity" do
|
116
|
+
1.must_be_same_as(1).must_equal true
|
117
|
+
proc { 1.must_be_same_as 2 }.must_raise Mini::Assertion
|
118
|
+
end
|
119
|
+
|
120
|
+
it "needs to verify throw" do
|
121
|
+
@assertion_count = 8
|
122
|
+
|
123
|
+
proc { throw :blah }.must_throw(:blah).must_equal true
|
124
|
+
proc { proc { }.must_throw(:blah) }.must_raise Mini::Assertion
|
125
|
+
proc { proc { throw :xxx }.must_throw(:blah) }.must_raise Mini::Assertion
|
126
|
+
end
|
127
|
+
|
128
|
+
it "needs to verify inequality" do
|
129
|
+
42.wont_equal(6 * 9).must_equal false
|
130
|
+
proc { 1.wont_equal 1 }.must_raise Mini::Assertion
|
131
|
+
end
|
132
|
+
|
133
|
+
it "needs to verify mismatch" do
|
134
|
+
"blah".wont_match(/\d+/).must_equal false
|
135
|
+
proc { "blah".wont_match(/\w+/) }.must_raise Mini::Assertion
|
136
|
+
end
|
137
|
+
|
138
|
+
it "needs to verify non-nil" do
|
139
|
+
42.wont_be_nil.must_equal false
|
140
|
+
proc { nil.wont_be_nil }.must_raise Mini::Assertion
|
141
|
+
end
|
142
|
+
|
143
|
+
it "needs to verify non-identity" do
|
144
|
+
1.wont_be_same_as(2).must_equal false
|
145
|
+
proc { 1.wont_be_same_as 1 }.must_raise Mini::Assertion
|
146
|
+
end
|
147
|
+
end
|
@@ -0,0 +1,682 @@
|
|
1
|
+
require 'stringio'
|
2
|
+
require 'mini/test'
|
3
|
+
|
4
|
+
Mini::Test.autorun
|
5
|
+
|
6
|
+
class Mini::Test
|
7
|
+
attr_accessor :test_count
|
8
|
+
attr_accessor :assertion_count
|
9
|
+
end
|
10
|
+
|
11
|
+
class TestMiniTest < Mini::Test::TestCase
|
12
|
+
|
13
|
+
def setup
|
14
|
+
Mini::Test::TestCase.reset
|
15
|
+
@tu = Mini::Test.new
|
16
|
+
@output = StringIO.new("")
|
17
|
+
Mini::Test.output = @output
|
18
|
+
assert_equal [0, 0], @tu.run_test_suites
|
19
|
+
end
|
20
|
+
|
21
|
+
def teardown
|
22
|
+
Mini::Test.output = $stdout
|
23
|
+
end
|
24
|
+
|
25
|
+
BT_MIDDLE = ["./lib/mini/test.rb:165:in `run_test_suites'",
|
26
|
+
"./lib/mini/test.rb:161:in `each'",
|
27
|
+
"./lib/mini/test.rb:161:in `run_test_suites'",
|
28
|
+
"./lib/mini/test.rb:158:in `each'",
|
29
|
+
"./lib/mini/test.rb:158:in `run_test_suites'",
|
30
|
+
"./lib/mini/test.rb:139:in `run'",
|
31
|
+
"./lib/mini/test.rb:106:in `run'"]
|
32
|
+
|
33
|
+
def test_filter_backtrace
|
34
|
+
# this is a semi-lame mix of relative paths.
|
35
|
+
# I cheated by making the autotest parts not have ./
|
36
|
+
bt = (["lib/autotest.rb:571:in `add_exception'",
|
37
|
+
"test/test_autotest.rb:62:in `test_add_exception'",
|
38
|
+
"./lib/mini/test.rb:165:in `__send__'"] +
|
39
|
+
BT_MIDDLE +
|
40
|
+
["./lib/mini/test.rb:29",
|
41
|
+
"test/test_autotest.rb:422"])
|
42
|
+
ex = ["lib/autotest.rb:571:in `add_exception'",
|
43
|
+
"test/test_autotest.rb:62:in `test_add_exception'"]
|
44
|
+
fu = Mini::filter_backtrace(bt)
|
45
|
+
|
46
|
+
assert_equal ex, fu
|
47
|
+
end
|
48
|
+
|
49
|
+
def test_filter_backtrace_all_unit
|
50
|
+
bt = (["./lib/mini/test.rb:165:in `__send__'"] +
|
51
|
+
BT_MIDDLE +
|
52
|
+
["./lib/mini/test.rb:29"])
|
53
|
+
ex = bt.clone
|
54
|
+
fu = Mini::filter_backtrace(bt)
|
55
|
+
assert_equal ex, fu
|
56
|
+
end
|
57
|
+
|
58
|
+
def test_filter_backtrace_unit_starts
|
59
|
+
bt = (["./lib/mini/test.rb:165:in `__send__'"] +
|
60
|
+
BT_MIDDLE +
|
61
|
+
["./lib/mini/test.rb:29",
|
62
|
+
"-e:1"])
|
63
|
+
ex = ["-e:1"]
|
64
|
+
fu = Mini::filter_backtrace(bt)
|
65
|
+
assert_equal ex, fu
|
66
|
+
end
|
67
|
+
|
68
|
+
def test_class_puke_with_assertion_failed
|
69
|
+
exception = Mini::Assertion.new "Oh no!"
|
70
|
+
exception.set_backtrace ["unhappy"]
|
71
|
+
assert_equal 'F', @tu.puke('SomeClass', 'method_name', exception)
|
72
|
+
assert_equal 1, @tu.failures
|
73
|
+
assert_match(/^Failure.*Oh no!/m, @tu.report.first)
|
74
|
+
end
|
75
|
+
|
76
|
+
def test_class_puke_with_failure_and_flunk_in_backtrace
|
77
|
+
exception = begin
|
78
|
+
Mini::Test::TestCase.new('fake tc').flunk
|
79
|
+
rescue Mini::Assertion => failure
|
80
|
+
failure
|
81
|
+
end
|
82
|
+
assert_equal 'F', @tu.puke('SomeClass', 'method_name', exception)
|
83
|
+
refute @tu.report.any?{|line| line =~ /in .flunk/}
|
84
|
+
end
|
85
|
+
|
86
|
+
def test_class_puke_with_non_failure_exception
|
87
|
+
exception = Exception.new("Oh no again!")
|
88
|
+
assert_equal 'E', @tu.puke('SomeClass', 'method_name', exception)
|
89
|
+
assert_equal 1, @tu.errors
|
90
|
+
assert_match(/^Exception.*Oh no again!/m, @tu.report.first)
|
91
|
+
end
|
92
|
+
|
93
|
+
def test_class_run_test_suites
|
94
|
+
create_a_test_case_named("ATestCase")
|
95
|
+
assert_equal [1, 1], @tu.run_test_suites
|
96
|
+
end
|
97
|
+
|
98
|
+
def test_run_failing # TODO: add error test
|
99
|
+
create_a_test_case_named("FailingTest", :failing => true)
|
100
|
+
@tu.run([])
|
101
|
+
|
102
|
+
util_assert_counts(2, 2, ["Failure:
|
103
|
+
test_failure(TestMiniTest::FailingTest) [(eval):5]:
|
104
|
+
Failed assertion, no message given.
|
105
|
+
"])
|
106
|
+
|
107
|
+
expected = "Loaded suite blah
|
108
|
+
Started
|
109
|
+
F.
|
110
|
+
Finished in 0.00
|
111
|
+
|
112
|
+
1) Failure:
|
113
|
+
test_failure(TestMiniTest::FailingTest) [(eval):5]:
|
114
|
+
Failed assertion, no message given.
|
115
|
+
|
116
|
+
2 tests, 2 assertions, 1 failures, 0 errors
|
117
|
+
"
|
118
|
+
util_assert_report expected
|
119
|
+
end
|
120
|
+
|
121
|
+
def util_assert_counts(assertions, count, expected = [])
|
122
|
+
assert_equal(expected, @tu.report)
|
123
|
+
|
124
|
+
assert_equal assertions, @tu.assertion_count
|
125
|
+
assert_equal count, @tu.test_count
|
126
|
+
end
|
127
|
+
|
128
|
+
def util_assert_report expected = nil
|
129
|
+
expected ||= "Loaded suite blah
|
130
|
+
Started
|
131
|
+
.
|
132
|
+
Finished in 0.00
|
133
|
+
|
134
|
+
1 tests, 1 assertions, 0 failures, 0 errors
|
135
|
+
"
|
136
|
+
output = @output.string.sub(/Finished in .*/, "Finished in 0.00")
|
137
|
+
output.sub!(/Loaded suite .*/, 'Loaded suite blah')
|
138
|
+
assert_equal(expected, output)
|
139
|
+
end
|
140
|
+
|
141
|
+
def test_run_failing_filtered
|
142
|
+
create_a_test_case_named("FailingTest2", :failing => true)
|
143
|
+
@tu.run(%w(-n /something/))
|
144
|
+
|
145
|
+
util_assert_counts(1, 1)
|
146
|
+
util_assert_report
|
147
|
+
end
|
148
|
+
|
149
|
+
def test_run_passing
|
150
|
+
create_a_test_case_named("PassingTest")
|
151
|
+
@tu.run([])
|
152
|
+
|
153
|
+
util_assert_counts(1, 1)
|
154
|
+
util_assert_report
|
155
|
+
end
|
156
|
+
|
157
|
+
# TODO: nuke
|
158
|
+
def create_a_test_case_named(name, options = {})
|
159
|
+
eval <<-CODE
|
160
|
+
class #{name} < Mini::Test::TestCase
|
161
|
+
def test_something
|
162
|
+
assert true
|
163
|
+
end
|
164
|
+
#{if options[:failing]; "def test_failure; assert false; end"; end}
|
165
|
+
end
|
166
|
+
CODE
|
167
|
+
end
|
168
|
+
end
|
169
|
+
|
170
|
+
class TestMiniTestTestCase < Mini::Test::TestCase
|
171
|
+
def setup
|
172
|
+
util_test_suites.clear
|
173
|
+
@tc = Mini::Test::TestCase.new 'fake tc'
|
174
|
+
@zomg = "zomg ponies!"
|
175
|
+
@assertion_count = 1
|
176
|
+
end
|
177
|
+
|
178
|
+
def teardown
|
179
|
+
assert_equal @assertion_count, @tc._assertions, "expected #{@assertion_count} assertions to be fired during the test, not #{@tc._assertions}" if @tc._assertions
|
180
|
+
Object.send :remove_const, :ATestCase if defined? ATestCase
|
181
|
+
end
|
182
|
+
|
183
|
+
def test_class_inherited
|
184
|
+
@assertion_count = 0
|
185
|
+
|
186
|
+
util_test_case
|
187
|
+
assert util_test_suites[ATestCase]
|
188
|
+
end
|
189
|
+
|
190
|
+
def test_class_test_suites
|
191
|
+
@assertion_count = 0
|
192
|
+
|
193
|
+
util_test_case
|
194
|
+
assert_equal 1, Mini::Test::TestCase.test_suites.size
|
195
|
+
assert_equal [ATestCase], Mini::Test::TestCase.test_suites
|
196
|
+
end
|
197
|
+
|
198
|
+
def test_class_asserts_match_refutes
|
199
|
+
@assertion_count = 0
|
200
|
+
|
201
|
+
methods = Mini::Assertions.public_instance_methods
|
202
|
+
methods.map! { |m| m.to_s } if Symbol === methods.first
|
203
|
+
|
204
|
+
ignores = %w(assert_block assert_no_match assert_not_equal assert_not_nil
|
205
|
+
assert_not_same assert_nothing_thrown assert_raise
|
206
|
+
assert_nothing_raised assert_raises assert_throws)
|
207
|
+
asserts = methods.grep(/^assert/).sort - ignores
|
208
|
+
refutes = methods.grep(/^refute/).sort - ignores
|
209
|
+
|
210
|
+
assert_empty refutes.map { |n| n.sub(/^refute/, 'assert') } - asserts
|
211
|
+
assert_empty asserts.map { |n| n.sub(/^assert/, 'refute') } - refutes
|
212
|
+
end
|
213
|
+
|
214
|
+
def test_assert
|
215
|
+
@assertion_count = 2
|
216
|
+
|
217
|
+
@tc.assert_equal true, @tc.assert(true), "returns true on success"
|
218
|
+
end
|
219
|
+
|
220
|
+
def test_assert__triggered
|
221
|
+
util_assert_triggered "Failed assertion, no message given." do
|
222
|
+
@tc.assert false
|
223
|
+
end
|
224
|
+
end
|
225
|
+
|
226
|
+
def test_assert__triggered_message
|
227
|
+
util_assert_triggered @zomg do
|
228
|
+
@tc.assert false, @zomg
|
229
|
+
end
|
230
|
+
end
|
231
|
+
|
232
|
+
def test_assert_block
|
233
|
+
@tc.assert_block do
|
234
|
+
true
|
235
|
+
end
|
236
|
+
end
|
237
|
+
|
238
|
+
def test_assert_block_triggered
|
239
|
+
util_assert_triggered 'Expected block to return true value.' do
|
240
|
+
@tc.assert_block do
|
241
|
+
false
|
242
|
+
end
|
243
|
+
end
|
244
|
+
end
|
245
|
+
|
246
|
+
def test_assert_empty
|
247
|
+
@assertion_count = 2
|
248
|
+
|
249
|
+
@tc.assert_empty []
|
250
|
+
end
|
251
|
+
|
252
|
+
def test_assert_empty_triggered
|
253
|
+
@assertion_count = 2
|
254
|
+
|
255
|
+
util_assert_triggered "Expected [1] to be empty." do
|
256
|
+
@tc.assert_empty [1]
|
257
|
+
end
|
258
|
+
end
|
259
|
+
|
260
|
+
def test_assert_equal
|
261
|
+
@tc.assert_equal 1, 1
|
262
|
+
end
|
263
|
+
|
264
|
+
def test_assert_equal_different
|
265
|
+
util_assert_triggered "Expected 1, not 2." do
|
266
|
+
@tc.assert_equal 1, 2
|
267
|
+
end
|
268
|
+
end
|
269
|
+
|
270
|
+
def test_assert_in_delta
|
271
|
+
@tc.assert_in_delta 0.0, 1.0 / 1000, 0.1
|
272
|
+
end
|
273
|
+
|
274
|
+
def test_assert_in_delta_triggered
|
275
|
+
util_assert_triggered 'Expected 0.0 - 0.001 (0.001) to be < 1.0e-06.' do
|
276
|
+
@tc.assert_in_delta 0.0, 1.0 / 1000, 0.000001
|
277
|
+
end
|
278
|
+
end
|
279
|
+
|
280
|
+
def test_assert_in_epsilon
|
281
|
+
@assertion_count = 8
|
282
|
+
|
283
|
+
@tc.assert_in_epsilon 10000, 9991
|
284
|
+
@tc.assert_in_epsilon 9991, 10000
|
285
|
+
@tc.assert_in_epsilon 1.0, 1.001
|
286
|
+
@tc.assert_in_epsilon 1.001, 1.0
|
287
|
+
|
288
|
+
@tc.assert_in_epsilon 10000, 9999.1, 0.0001
|
289
|
+
@tc.assert_in_epsilon 9999.1, 10000, 0.0001
|
290
|
+
@tc.assert_in_epsilon 1.0, 1.0001, 0.0001
|
291
|
+
@tc.assert_in_epsilon 1.0001, 1.0, 0.0001
|
292
|
+
end
|
293
|
+
|
294
|
+
def test_assert_in_epsilon_triggered
|
295
|
+
util_assert_triggered 'Expected 10000 - 9990 (10) to be < 9.99.' do
|
296
|
+
@tc.assert_in_epsilon 10000, 9990
|
297
|
+
end
|
298
|
+
end
|
299
|
+
|
300
|
+
def test_assert_includes
|
301
|
+
@assertion_count = 2
|
302
|
+
|
303
|
+
@tc.assert_includes [true], true
|
304
|
+
end
|
305
|
+
|
306
|
+
def test_assert_includes_triggered
|
307
|
+
@assertion_count = 4
|
308
|
+
|
309
|
+
e = @tc.assert_raises Mini::Assertion do
|
310
|
+
@tc.assert_includes [true], false
|
311
|
+
end
|
312
|
+
|
313
|
+
expected = "Expected [true] to include false."
|
314
|
+
assert_equal expected, e.message
|
315
|
+
end
|
316
|
+
|
317
|
+
def test_assert_instance_of
|
318
|
+
@tc.assert_instance_of String, "blah"
|
319
|
+
end
|
320
|
+
|
321
|
+
def test_assert_instance_of_triggered
|
322
|
+
util_assert_triggered 'Expected "blah" to be an instance of Array.' do
|
323
|
+
@tc.assert_instance_of Array, "blah"
|
324
|
+
end
|
325
|
+
end
|
326
|
+
|
327
|
+
def test_assert_kind_of
|
328
|
+
@tc.assert_kind_of String, "blah"
|
329
|
+
end
|
330
|
+
|
331
|
+
def test_assert_kind_of_triggered
|
332
|
+
util_assert_triggered 'Expected "blah" to be a kind of Array.' do
|
333
|
+
@tc.assert_kind_of Array, "blah"
|
334
|
+
end
|
335
|
+
end
|
336
|
+
|
337
|
+
def test_assert_match
|
338
|
+
@tc.assert_match "blah blah blah", /\w+/
|
339
|
+
end
|
340
|
+
|
341
|
+
def test_assert_match_triggered
|
342
|
+
util_assert_triggered 'Expected /\d+/ to match "blah blah blah".' do
|
343
|
+
@tc.assert_match "blah blah blah", /\d+/
|
344
|
+
end
|
345
|
+
end
|
346
|
+
|
347
|
+
def test_assert_nil
|
348
|
+
@tc.assert_nil nil
|
349
|
+
end
|
350
|
+
|
351
|
+
def test_assert_nil_triggered
|
352
|
+
util_assert_triggered 'Expected 42 to be nil.' do
|
353
|
+
@tc.assert_nil 42
|
354
|
+
end
|
355
|
+
end
|
356
|
+
|
357
|
+
def test_assert_operator
|
358
|
+
@tc.assert_operator 2, :>, 1
|
359
|
+
end
|
360
|
+
|
361
|
+
def test_assert_operator_triggered
|
362
|
+
util_assert_triggered "Expected 2 to be < 1." do
|
363
|
+
@tc.assert_operator 2, :<, 1
|
364
|
+
end
|
365
|
+
end
|
366
|
+
|
367
|
+
def test_assert_raises
|
368
|
+
@assertion_count = 2
|
369
|
+
|
370
|
+
@tc.assert_raises RuntimeError do
|
371
|
+
raise "blah"
|
372
|
+
end
|
373
|
+
end
|
374
|
+
|
375
|
+
def test_assert_raises_triggered_different
|
376
|
+
@assertion_count = 2
|
377
|
+
|
378
|
+
e = assert_raises Mini::Assertion do
|
379
|
+
@tc.assert_raises RuntimeError do
|
380
|
+
raise SyntaxError, "icky"
|
381
|
+
end
|
382
|
+
end
|
383
|
+
|
384
|
+
expected = "Expected [RuntimeError] to include SyntaxError."
|
385
|
+
|
386
|
+
assert_equal expected, e.message
|
387
|
+
end
|
388
|
+
|
389
|
+
def test_assert_raises_triggered_none
|
390
|
+
e = assert_raises Mini::Assertion do
|
391
|
+
@tc.assert_raises Mini::Assertion do
|
392
|
+
# do nothing
|
393
|
+
end
|
394
|
+
end
|
395
|
+
|
396
|
+
expected = "Mini::Assertion expected but nothing was raised."
|
397
|
+
|
398
|
+
assert_equal expected, e.message
|
399
|
+
end
|
400
|
+
|
401
|
+
def test_assert_respond_to
|
402
|
+
@tc.assert_respond_to "blah", :empty?
|
403
|
+
end
|
404
|
+
|
405
|
+
def test_assert_respond_to_triggered
|
406
|
+
util_assert_triggered 'Expected "blah" to respond to rawr!.' do
|
407
|
+
@tc.assert_respond_to "blah", :rawr!
|
408
|
+
end
|
409
|
+
end
|
410
|
+
|
411
|
+
def test_assert_same
|
412
|
+
@assertion_count = 3
|
413
|
+
|
414
|
+
o = "blah"
|
415
|
+
@tc.assert_same 1, 1
|
416
|
+
@tc.assert_same :blah, :blah
|
417
|
+
@tc.assert_same o, o
|
418
|
+
end
|
419
|
+
|
420
|
+
def test_assert_same_triggered
|
421
|
+
@assertion_count = 2
|
422
|
+
|
423
|
+
util_assert_triggered 'Expected 2 to be the same as 1.' do
|
424
|
+
@tc.assert_same 1, 2
|
425
|
+
end
|
426
|
+
|
427
|
+
util_assert_triggered 'Expected "blah" to be the same as "blah".' do
|
428
|
+
s1 = "blah"
|
429
|
+
s2 = "blah"
|
430
|
+
@tc.assert_same s1, s2
|
431
|
+
end
|
432
|
+
end
|
433
|
+
|
434
|
+
def test_assert_throws
|
435
|
+
@tc.assert_throws(:blah) do
|
436
|
+
throw :blah
|
437
|
+
end
|
438
|
+
end
|
439
|
+
|
440
|
+
def test_assert_throws_different
|
441
|
+
util_assert_triggered 'Expected :blah to have been thrown, not :not_blah.' do
|
442
|
+
@tc.assert_throws(:blah) do
|
443
|
+
throw :not_blah
|
444
|
+
end
|
445
|
+
end
|
446
|
+
end
|
447
|
+
|
448
|
+
def test_assert_throws_unthrown
|
449
|
+
util_assert_triggered 'Expected :blah to have been thrown.' do
|
450
|
+
@tc.assert_throws(:blah) do
|
451
|
+
# do nothing
|
452
|
+
end
|
453
|
+
end
|
454
|
+
end
|
455
|
+
|
456
|
+
def test_capture_io
|
457
|
+
@assertion_count = 0
|
458
|
+
|
459
|
+
out, err = capture_io do
|
460
|
+
puts 'hi'
|
461
|
+
warn 'bye!'
|
462
|
+
end
|
463
|
+
|
464
|
+
assert_equal "hi\n", out
|
465
|
+
assert_equal "bye!\n", err
|
466
|
+
end
|
467
|
+
|
468
|
+
def test_message
|
469
|
+
@assertion_count = 0
|
470
|
+
|
471
|
+
assert_equal "blah2.", @tc.message(nil, "blah2")
|
472
|
+
assert_equal "blah2.", @tc.message("", "blah2")
|
473
|
+
assert_equal "blah1.\nblah2.", @tc.message("blah1", "blah2")
|
474
|
+
end
|
475
|
+
|
476
|
+
def test_flunk
|
477
|
+
util_assert_triggered 'Epic Fail!' do
|
478
|
+
@tc.flunk
|
479
|
+
end
|
480
|
+
end
|
481
|
+
|
482
|
+
def test_flunk_message
|
483
|
+
util_assert_triggered @zomg do
|
484
|
+
@tc.flunk @zomg
|
485
|
+
end
|
486
|
+
end
|
487
|
+
|
488
|
+
def test_pass
|
489
|
+
@tc.pass
|
490
|
+
end
|
491
|
+
|
492
|
+
def test_test_methods
|
493
|
+
@assertion_count = 0
|
494
|
+
|
495
|
+
# TODO: remove
|
496
|
+
sample_test_case = util_test_case
|
497
|
+
sample_test_case.instance_eval do
|
498
|
+
define_method :test_one_test do
|
499
|
+
assert "does not matter"
|
500
|
+
end
|
501
|
+
end
|
502
|
+
assert_equal(%w(test_one_test), sample_test_case.test_methods)
|
503
|
+
end
|
504
|
+
|
505
|
+
def test_refute
|
506
|
+
@assertion_count = 2
|
507
|
+
|
508
|
+
@tc.assert_equal false, @tc.refute(false), "returns false on success"
|
509
|
+
end
|
510
|
+
|
511
|
+
def test_refute_empty
|
512
|
+
@assertion_count = 2
|
513
|
+
|
514
|
+
@tc.refute_empty [1]
|
515
|
+
end
|
516
|
+
|
517
|
+
def test_refute_empty_triggered
|
518
|
+
@assertion_count = 2
|
519
|
+
|
520
|
+
util_assert_triggered "Expected [] to not be empty." do
|
521
|
+
@tc.refute_empty []
|
522
|
+
end
|
523
|
+
end
|
524
|
+
|
525
|
+
def test_refute_equal
|
526
|
+
@tc.refute_equal "blah", "yay"
|
527
|
+
end
|
528
|
+
|
529
|
+
def test_refute_equal_triggered
|
530
|
+
util_assert_triggered 'Expected "blah" to not be equal to "blah".' do
|
531
|
+
@tc.refute_equal "blah", "blah"
|
532
|
+
end
|
533
|
+
end
|
534
|
+
|
535
|
+
def test_refute_in_delta
|
536
|
+
@tc.refute_in_delta 0.0, 1.0 / 1000, 0.000001
|
537
|
+
end
|
538
|
+
|
539
|
+
def test_refute_in_delta_triggered
|
540
|
+
util_assert_triggered 'Expected 0.0 - 0.001 (0.001) to not be < 0.1.' do
|
541
|
+
@tc.refute_in_delta 0.0, 1.0 / 1000, 0.1
|
542
|
+
end
|
543
|
+
end
|
544
|
+
|
545
|
+
def test_refute_in_epsilon
|
546
|
+
@tc.refute_in_epsilon 10000, 9990
|
547
|
+
end
|
548
|
+
|
549
|
+
def test_refute_in_epsilon_triggered
|
550
|
+
util_assert_triggered 'Expected 10000 - 9991 (9) to not be < 10.0.' do
|
551
|
+
@tc.refute_in_epsilon 10000, 9991
|
552
|
+
fail
|
553
|
+
end
|
554
|
+
end
|
555
|
+
|
556
|
+
def test_refute_includes
|
557
|
+
@assertion_count = 2
|
558
|
+
|
559
|
+
@tc.refute_includes [true], false
|
560
|
+
end
|
561
|
+
|
562
|
+
def test_refute_includes_triggered
|
563
|
+
@assertion_count = 4
|
564
|
+
|
565
|
+
e = @tc.assert_raises Mini::Assertion do
|
566
|
+
@tc.refute_includes [true], true
|
567
|
+
end
|
568
|
+
|
569
|
+
expected = "Expected [true] to not include true."
|
570
|
+
assert_equal expected, e.message
|
571
|
+
end
|
572
|
+
|
573
|
+
def test_refute_instance_of
|
574
|
+
@tc.refute_instance_of Array, "blah"
|
575
|
+
end
|
576
|
+
|
577
|
+
def test_refute_instance_of_triggered
|
578
|
+
util_assert_triggered 'Expected "blah" to not be an instance of String.' do
|
579
|
+
@tc.refute_instance_of String, "blah"
|
580
|
+
end
|
581
|
+
end
|
582
|
+
|
583
|
+
def test_refute_kind_of
|
584
|
+
@tc.refute_kind_of Array, "blah"
|
585
|
+
end
|
586
|
+
|
587
|
+
def test_refute_kind_of_triggered
|
588
|
+
util_assert_triggered 'Expected "blah" to not be a kind of String.' do
|
589
|
+
@tc.refute_kind_of String, "blah"
|
590
|
+
end
|
591
|
+
end
|
592
|
+
|
593
|
+
def test_refute_match
|
594
|
+
@tc.refute_match "blah blah blah", /\d+/
|
595
|
+
end
|
596
|
+
|
597
|
+
def test_refute_match_triggered
|
598
|
+
util_assert_triggered 'Expected /\w+/ to not match "blah blah blah".' do
|
599
|
+
@tc.refute_match "blah blah blah", /\w+/
|
600
|
+
end
|
601
|
+
end
|
602
|
+
|
603
|
+
def test_refute_nil
|
604
|
+
@tc.refute_nil 42
|
605
|
+
end
|
606
|
+
|
607
|
+
def test_refute_nil_triggered
|
608
|
+
util_assert_triggered 'Expected nil to not be nil.' do
|
609
|
+
@tc.refute_nil nil
|
610
|
+
end
|
611
|
+
end
|
612
|
+
|
613
|
+
def test_refute_operator
|
614
|
+
@tc.refute_operator 2, :<, 1
|
615
|
+
end
|
616
|
+
|
617
|
+
def test_refute_operator_triggered
|
618
|
+
util_assert_triggered "Expected 2 to not be > 1." do
|
619
|
+
@tc.refute_operator 2, :>, 1
|
620
|
+
end
|
621
|
+
end
|
622
|
+
|
623
|
+
def test_refute_respond_to
|
624
|
+
@tc.refute_respond_to "blah", :rawr!
|
625
|
+
end
|
626
|
+
|
627
|
+
def test_refute_respond_to_triggered
|
628
|
+
util_assert_triggered 'Expected "blah" to not respond to empty?.' do
|
629
|
+
@tc.refute_respond_to "blah", :empty?
|
630
|
+
end
|
631
|
+
end
|
632
|
+
|
633
|
+
def test_refute_same
|
634
|
+
@tc.refute_same 1, 2
|
635
|
+
end
|
636
|
+
|
637
|
+
# TODO: "with id <id>" crap from assertions.rb
|
638
|
+
def test_refute_same_triggered
|
639
|
+
util_assert_triggered 'Expected 1 to not be the same as 1.' do
|
640
|
+
@tc.refute_same 1, 1
|
641
|
+
end
|
642
|
+
end
|
643
|
+
|
644
|
+
def util_assert_triggered expected
|
645
|
+
e = assert_raises(Mini::Assertion) do
|
646
|
+
yield
|
647
|
+
end
|
648
|
+
|
649
|
+
assert_equal expected, e.message.sub(/(---Backtrace---).*/m, '\1')
|
650
|
+
end
|
651
|
+
|
652
|
+
def util_test_suites
|
653
|
+
Mini::Test::TestCase.__send__(:class_variable_get, :@@test_suites)
|
654
|
+
end
|
655
|
+
|
656
|
+
# TODO: remove
|
657
|
+
def util_test_case
|
658
|
+
Object.const_set(:ATestCase, Class.new(Mini::Test::TestCase))
|
659
|
+
end
|
660
|
+
|
661
|
+
if ENV['DEPRECATED'] then
|
662
|
+
require 'test/unit/assertions'
|
663
|
+
def test_assert_nothing_raised
|
664
|
+
@tc.assert_nothing_raised do
|
665
|
+
# do nothing
|
666
|
+
end
|
667
|
+
end
|
668
|
+
|
669
|
+
def test_assert_nothing_raised_triggered
|
670
|
+
expected = 'Exception raised:
|
671
|
+
Class: <RuntimeError>
|
672
|
+
Message: <"oops!">
|
673
|
+
---Backtrace---'
|
674
|
+
|
675
|
+
util_assert_triggered expected do
|
676
|
+
@tc.assert_nothing_raised do
|
677
|
+
raise "oops!"
|
678
|
+
end
|
679
|
+
end
|
680
|
+
end
|
681
|
+
end
|
682
|
+
end
|