mattly-minitest 1.4.2.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/.autotest +15 -0
- data/History.txt +175 -0
- data/Manifest.txt +13 -0
- data/README.txt +60 -0
- data/Rakefile +42 -0
- data/design_rationale.rb +52 -0
- data/lib/minitest/autorun.rb +5 -0
- data/lib/minitest/mock.rb +31 -0
- data/lib/minitest/spec.rb +125 -0
- data/lib/minitest/unit.rb +530 -0
- data/test/test_mini_mock.rb +77 -0
- data/test/test_mini_spec.rb +202 -0
- data/test/test_mini_test.rb +980 -0
- metadata +69 -0
@@ -0,0 +1,77 @@
|
|
1
|
+
require 'minitest/mock'
|
2
|
+
require 'minitest/unit'
|
3
|
+
|
4
|
+
MiniTest::Unit.autorun
|
5
|
+
|
6
|
+
class TestMiniMock < MiniTest::Unit::TestCase
|
7
|
+
def setup
|
8
|
+
@mock = MiniTest::Mock.new.expect(:foo, nil)
|
9
|
+
@mock.expect(:meaning_of_life, 42)
|
10
|
+
end
|
11
|
+
|
12
|
+
def test_should_create_stub_method
|
13
|
+
assert_nil @mock.foo
|
14
|
+
end
|
15
|
+
|
16
|
+
def test_should_allow_return_value_specification
|
17
|
+
assert_equal 42, @mock.meaning_of_life
|
18
|
+
end
|
19
|
+
|
20
|
+
def test_should_blow_up_if_not_called
|
21
|
+
@mock.foo
|
22
|
+
|
23
|
+
util_verify_bad
|
24
|
+
end
|
25
|
+
|
26
|
+
def test_should_not_blow_up_if_everything_called
|
27
|
+
@mock.foo
|
28
|
+
@mock.meaning_of_life
|
29
|
+
|
30
|
+
assert @mock.verify
|
31
|
+
end
|
32
|
+
|
33
|
+
def test_should_allow_expectations_to_be_added_after_creation
|
34
|
+
@mock.expect(:bar, true)
|
35
|
+
assert @mock.bar
|
36
|
+
end
|
37
|
+
|
38
|
+
def test_should_not_verify_if_new_expected_method_is_not_called
|
39
|
+
@mock.foo
|
40
|
+
@mock.meaning_of_life
|
41
|
+
@mock.expect(:bar, true)
|
42
|
+
|
43
|
+
util_verify_bad
|
44
|
+
end
|
45
|
+
|
46
|
+
def test_should_not_verify_if_unexpected_method_is_called
|
47
|
+
assert_raises NoMethodError do
|
48
|
+
@mock.unexpected
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
def test_should_blow_up_on_wrong_number_of_arguments
|
53
|
+
@mock.foo
|
54
|
+
@mock.meaning_of_life
|
55
|
+
@mock.expect(:sum, 3, [1, 2])
|
56
|
+
|
57
|
+
assert_raises ArgumentError do
|
58
|
+
@mock.sum
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
def test_should_blow_up_on_wrong_arguments
|
63
|
+
@mock.foo
|
64
|
+
@mock.meaning_of_life
|
65
|
+
@mock.expect(:sum, 3, [1, 2])
|
66
|
+
|
67
|
+
@mock.sum(2, 4)
|
68
|
+
|
69
|
+
util_verify_bad
|
70
|
+
end
|
71
|
+
|
72
|
+
def util_verify_bad
|
73
|
+
assert_raises MockExpectationError do
|
74
|
+
@mock.verify
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
@@ -0,0 +1,202 @@
|
|
1
|
+
require 'minitest/spec'
|
2
|
+
|
3
|
+
MiniTest::Unit.autorun
|
4
|
+
|
5
|
+
describe MiniTest::Spec do
|
6
|
+
before do
|
7
|
+
@assertion_count = 4
|
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_send
|
37
|
+
must_throw)
|
38
|
+
|
39
|
+
expected_wonts = expected_musts.map { |m| m.sub(/^must/, 'wont') }
|
40
|
+
expected_wonts.reject! { |m| m =~ /wont_(not|raise|throw|send)/ }
|
41
|
+
|
42
|
+
musts.must_equal expected_musts
|
43
|
+
wonts.must_equal expected_wonts
|
44
|
+
end
|
45
|
+
|
46
|
+
it "needs to verify equality" do
|
47
|
+
(6 * 7).must_equal(42).must_equal true
|
48
|
+
proc { (6 * 9).must_equal(42) }.must_raise MiniTest::Assertion
|
49
|
+
end
|
50
|
+
|
51
|
+
it "needs to verify floats within a delta" do
|
52
|
+
(6.0 * 7).must_be_close_to(42.0).must_equal true
|
53
|
+
proc { 42.002.must_be_close_to 42.0 }.must_raise MiniTest::Assertion
|
54
|
+
end
|
55
|
+
|
56
|
+
it "needs to verify types of objects" do
|
57
|
+
(6 * 7).must_be_instance_of(Fixnum).must_equal true
|
58
|
+
proc { (6 * 7).must_be_instance_of String }.must_raise MiniTest::Assertion
|
59
|
+
end
|
60
|
+
|
61
|
+
it "needs to verify kinds of objects" do
|
62
|
+
@assertion_count = 6
|
63
|
+
|
64
|
+
(6 * 7).must_be_kind_of(Fixnum).must_equal true
|
65
|
+
(6 * 7).must_be_kind_of(Numeric).must_equal true
|
66
|
+
proc { (6 * 7).must_be_kind_of String }.must_raise MiniTest::Assertion
|
67
|
+
end
|
68
|
+
|
69
|
+
it "needs to verify regexp matches" do
|
70
|
+
@assertion_count = 6
|
71
|
+
|
72
|
+
"blah".must_match(/\w+/).must_equal true
|
73
|
+
proc { "blah".must_match(/\d+/) }.must_raise MiniTest::Assertion
|
74
|
+
end
|
75
|
+
|
76
|
+
it "needs to verify nil" do
|
77
|
+
nil.must_be_nil.must_equal true
|
78
|
+
proc { 42.must_be_nil }.must_raise MiniTest::Assertion
|
79
|
+
end
|
80
|
+
|
81
|
+
it "needs to verify using any operator" do
|
82
|
+
41.must_be(:<, 42).must_equal true
|
83
|
+
proc { 42.must_be(:<, 41) }.must_raise MiniTest::Assertion
|
84
|
+
end
|
85
|
+
|
86
|
+
it "needs to catch an expected exception" do
|
87
|
+
@assertion_count = 2
|
88
|
+
|
89
|
+
proc { raise "blah" }.must_raise RuntimeError
|
90
|
+
proc { raise MiniTest::Assertion }.must_raise MiniTest::Assertion
|
91
|
+
end
|
92
|
+
|
93
|
+
it "needs to catch an unexpected exception" do
|
94
|
+
@assertion_count = 2
|
95
|
+
|
96
|
+
proc {
|
97
|
+
proc { raise MiniTest::Assertion }.must_raise(RuntimeError)
|
98
|
+
}.must_raise MiniTest::Assertion
|
99
|
+
end
|
100
|
+
|
101
|
+
it "needs raise if an expected exception is not raised" do
|
102
|
+
@assertion_count = 2
|
103
|
+
|
104
|
+
proc { proc { 42 }.must_raise(RuntimeError) }.must_raise MiniTest::Assertion
|
105
|
+
end
|
106
|
+
|
107
|
+
it "needs to be able to catch a MiniTest::Assertion exception" do
|
108
|
+
@assertion_count = 2
|
109
|
+
|
110
|
+
proc { 1.wont_equal 1 }.must_raise MiniTest::Assertion
|
111
|
+
end
|
112
|
+
|
113
|
+
it "needs to verify using respond_to" do
|
114
|
+
42.must_respond_to(:+).must_equal true
|
115
|
+
proc { 42.must_respond_to(:clear) }.must_raise MiniTest::Assertion
|
116
|
+
end
|
117
|
+
|
118
|
+
it "needs to verify identity" do
|
119
|
+
1.must_be_same_as(1).must_equal true
|
120
|
+
proc { 1.must_be_same_as 2 }.must_raise MiniTest::Assertion
|
121
|
+
end
|
122
|
+
|
123
|
+
it "needs to verify throw" do
|
124
|
+
@assertion_count = 6
|
125
|
+
|
126
|
+
proc { throw :blah }.must_throw(:blah).must_equal true
|
127
|
+
proc { proc { }.must_throw(:blah) }.must_raise MiniTest::Assertion
|
128
|
+
proc { proc { throw :xxx }.must_throw(:blah) }.must_raise MiniTest::Assertion
|
129
|
+
end
|
130
|
+
|
131
|
+
it "needs to verify inequality" do
|
132
|
+
42.wont_equal(6 * 9).must_equal false
|
133
|
+
proc { 1.wont_equal 1 }.must_raise MiniTest::Assertion
|
134
|
+
end
|
135
|
+
|
136
|
+
it "needs to verify mismatch" do
|
137
|
+
@assertion_count = 6
|
138
|
+
"blah".wont_match(/\d+/).must_equal false
|
139
|
+
proc { "blah".wont_match(/\w+/) }.must_raise MiniTest::Assertion
|
140
|
+
end
|
141
|
+
|
142
|
+
it "needs to verify non-nil" do
|
143
|
+
42.wont_be_nil.must_equal false
|
144
|
+
proc { nil.wont_be_nil }.must_raise MiniTest::Assertion
|
145
|
+
end
|
146
|
+
|
147
|
+
it "needs to verify non-identity" do
|
148
|
+
1.wont_be_same_as(2).must_equal false
|
149
|
+
proc { 1.wont_be_same_as 1 }.must_raise MiniTest::Assertion
|
150
|
+
end
|
151
|
+
|
152
|
+
it "needs to be sensible about must_include order" do
|
153
|
+
@assertion_count = 9
|
154
|
+
[1, 2, 3].must_include(2).must_equal true
|
155
|
+
proc { [1, 2, 3].must_include 5 }.must_raise MiniTest::Assertion
|
156
|
+
%w(foo bar baz).must_include("foo").must_equal true
|
157
|
+
end
|
158
|
+
|
159
|
+
it "needs to be sensible about wont_include order" do
|
160
|
+
@assertion_count = 9
|
161
|
+
[1, 2, 3].wont_include(5).must_equal false
|
162
|
+
proc { [1, 2, 3].wont_include 2 }.must_raise MiniTest::Assertion
|
163
|
+
%w(foo bar baz).wont_include("bee").must_equal false
|
164
|
+
end
|
165
|
+
|
166
|
+
describe "nested describe blocks" do
|
167
|
+
before do
|
168
|
+
@assertion_count = 1
|
169
|
+
@var = 0
|
170
|
+
end
|
171
|
+
it "must be zero" do
|
172
|
+
@var.must_equal 0
|
173
|
+
end
|
174
|
+
describe "should clear" do
|
175
|
+
before { @var += 1 }
|
176
|
+
it "must be one" do
|
177
|
+
@var.must_equal 1
|
178
|
+
end
|
179
|
+
describe "their parent block's methods" do
|
180
|
+
before { @var += 1 }
|
181
|
+
it "must be two" do
|
182
|
+
@var.must_equal 2
|
183
|
+
end
|
184
|
+
end
|
185
|
+
end
|
186
|
+
|
187
|
+
describe "should allow their descendents" do
|
188
|
+
describe "have similar descriptions" do
|
189
|
+
it "must be zero" do
|
190
|
+
@var.must_equal 0
|
191
|
+
end
|
192
|
+
end
|
193
|
+
end
|
194
|
+
describe "should let their descendents" do
|
195
|
+
describe "have similar descriptions" do
|
196
|
+
it "must be zero" do
|
197
|
+
@var.must_equal 0
|
198
|
+
end
|
199
|
+
end
|
200
|
+
end
|
201
|
+
end
|
202
|
+
end
|
@@ -0,0 +1,980 @@
|
|
1
|
+
require 'stringio'
|
2
|
+
require 'pathname'
|
3
|
+
require 'minitest/unit'
|
4
|
+
|
5
|
+
MiniTest::Unit.autorun
|
6
|
+
|
7
|
+
module M; end
|
8
|
+
class E < StandardError; include M; end
|
9
|
+
|
10
|
+
class TestMiniTest < MiniTest::Unit::TestCase
|
11
|
+
def setup
|
12
|
+
srand 42
|
13
|
+
MiniTest::Unit::TestCase.reset
|
14
|
+
@tu = MiniTest::Unit.new
|
15
|
+
@output = StringIO.new("")
|
16
|
+
MiniTest::Unit.output = @output
|
17
|
+
assert_equal [0, 0], @tu.run_test_suites
|
18
|
+
end
|
19
|
+
|
20
|
+
def teardown
|
21
|
+
MiniTest::Unit.output = $stdout
|
22
|
+
Object.send :remove_const, :ATestCase if defined? ATestCase
|
23
|
+
end
|
24
|
+
|
25
|
+
pwd = Pathname.new(File.expand_path(Dir.pwd))
|
26
|
+
basedir = Pathname.new(File.expand_path(MiniTest::MINI_DIR)) + 'mini'
|
27
|
+
basedir = basedir.relative_path_from(pwd).to_s
|
28
|
+
MINITEST_BASE_DIR = basedir[/\A\./] ? basedir : "./#{basedir}"
|
29
|
+
BT_MIDDLE = ["#{MINITEST_BASE_DIR}/test.rb:165:in `run_test_suites'",
|
30
|
+
"#{MINITEST_BASE_DIR}/test.rb:161:in `each'",
|
31
|
+
"#{MINITEST_BASE_DIR}/test.rb:161:in `run_test_suites'",
|
32
|
+
"#{MINITEST_BASE_DIR}/test.rb:158:in `each'",
|
33
|
+
"#{MINITEST_BASE_DIR}/test.rb:158:in `run_test_suites'",
|
34
|
+
"#{MINITEST_BASE_DIR}/test.rb:139:in `run'",
|
35
|
+
"#{MINITEST_BASE_DIR}/test.rb:106:in `run'"]
|
36
|
+
|
37
|
+
def test_filter_backtrace
|
38
|
+
# this is a semi-lame mix of relative paths.
|
39
|
+
# I cheated by making the autotest parts not have ./
|
40
|
+
bt = (["lib/autotest.rb:571:in `add_exception'",
|
41
|
+
"test/test_autotest.rb:62:in `test_add_exception'",
|
42
|
+
"#{MINITEST_BASE_DIR}/test.rb:165:in `__send__'"] +
|
43
|
+
BT_MIDDLE +
|
44
|
+
["#{MINITEST_BASE_DIR}/test.rb:29",
|
45
|
+
"test/test_autotest.rb:422"])
|
46
|
+
bt = util_expand_bt bt
|
47
|
+
|
48
|
+
ex = ["lib/autotest.rb:571:in `add_exception'",
|
49
|
+
"test/test_autotest.rb:62:in `test_add_exception'"]
|
50
|
+
ex = util_expand_bt ex
|
51
|
+
|
52
|
+
fu = MiniTest::filter_backtrace(bt)
|
53
|
+
|
54
|
+
assert_equal ex, fu
|
55
|
+
end
|
56
|
+
|
57
|
+
def util_expand_bt bt
|
58
|
+
if RUBY_VERSION =~ /^1\.9/ then
|
59
|
+
bt.map { |f| (f =~ /^\./) ? File.expand_path(f) : f }
|
60
|
+
else
|
61
|
+
bt
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
def test_filter_backtrace_all_unit
|
66
|
+
bt = (["#{MINITEST_BASE_DIR}/test.rb:165:in `__send__'"] +
|
67
|
+
BT_MIDDLE +
|
68
|
+
["#{MINITEST_BASE_DIR}/test.rb:29"])
|
69
|
+
ex = bt.clone
|
70
|
+
fu = MiniTest::filter_backtrace(bt)
|
71
|
+
assert_equal ex, fu
|
72
|
+
end
|
73
|
+
|
74
|
+
def test_filter_backtrace_unit_starts
|
75
|
+
bt = (["#{MINITEST_BASE_DIR}/test.rb:165:in `__send__'"] +
|
76
|
+
BT_MIDDLE +
|
77
|
+
["#{MINITEST_BASE_DIR}/mini/test.rb:29",
|
78
|
+
"-e:1"])
|
79
|
+
|
80
|
+
bt = util_expand_bt bt
|
81
|
+
|
82
|
+
ex = ["-e:1"]
|
83
|
+
fu = MiniTest::filter_backtrace(bt)
|
84
|
+
assert_equal ex, fu
|
85
|
+
end
|
86
|
+
|
87
|
+
def test_class_puke_with_assertion_failed
|
88
|
+
exception = MiniTest::Assertion.new "Oh no!"
|
89
|
+
exception.set_backtrace ["unhappy"]
|
90
|
+
assert_equal 'F', @tu.puke('SomeClass', 'method_name', exception)
|
91
|
+
assert_equal 1, @tu.failures
|
92
|
+
assert_match(/^Failure.*Oh no!/m, @tu.report.first)
|
93
|
+
assert_match("method_name(SomeClass) [unhappy]", @tu.report.first)
|
94
|
+
end
|
95
|
+
|
96
|
+
def test_class_puke_with_failure_and_flunk_in_backtrace
|
97
|
+
exception = begin
|
98
|
+
MiniTest::Unit::TestCase.new('fake tc').flunk
|
99
|
+
rescue MiniTest::Assertion => failure
|
100
|
+
failure
|
101
|
+
end
|
102
|
+
assert_equal 'F', @tu.puke('SomeClass', 'method_name', exception)
|
103
|
+
refute @tu.report.any?{|line| line =~ /in .flunk/}
|
104
|
+
end
|
105
|
+
|
106
|
+
def test_class_puke_with_assertion_failed_and_long_backtrace
|
107
|
+
bt = (["test/test_some_class.rb:615:in `method_name'",
|
108
|
+
"#{MINITEST_BASE_DIR}/unit.rb:140:in `assert_raises'",
|
109
|
+
"test/test_some_class.rb:615:in `each'",
|
110
|
+
"test/test_some_class.rb:614:in `test_method_name'",
|
111
|
+
"#{MINITEST_BASE_DIR}/test.rb:165:in `__send__'"] +
|
112
|
+
BT_MIDDLE +
|
113
|
+
["#{MINITEST_BASE_DIR}/test.rb:29"])
|
114
|
+
bt = util_expand_bt bt
|
115
|
+
|
116
|
+
ex_location = util_expand_bt(["test/test_some_class.rb:615"]).first
|
117
|
+
|
118
|
+
exception = MiniTest::Assertion.new "Oh no!"
|
119
|
+
exception.set_backtrace bt
|
120
|
+
assert_equal 'F', @tu.puke('TestSomeClass', 'test_method_name', exception)
|
121
|
+
assert_equal 1, @tu.failures
|
122
|
+
assert_match(/^Failure.*Oh no!/m, @tu.report.first)
|
123
|
+
assert_match("test_method_name(TestSomeClass) [#{ex_location}]", @tu.report.first)
|
124
|
+
end
|
125
|
+
|
126
|
+
def test_class_puke_with_assertion_failed_and_user_defined_assertions
|
127
|
+
bt = (["lib/test/my/util.rb:16:in `another_method_name'",
|
128
|
+
"#{MINITEST_BASE_DIR}/unit.rb:140:in `assert_raises'",
|
129
|
+
"lib/test/my/util.rb:15:in `block in assert_something'",
|
130
|
+
"lib/test/my/util.rb:14:in `each'",
|
131
|
+
"lib/test/my/util.rb:14:in `assert_something'",
|
132
|
+
"test/test_some_class.rb:615:in `each'",
|
133
|
+
"test/test_some_class.rb:614:in `test_method_name'",
|
134
|
+
"#{MINITEST_BASE_DIR}/test.rb:165:in `__send__'"] +
|
135
|
+
BT_MIDDLE +
|
136
|
+
["#{MINITEST_BASE_DIR}/test.rb:29"])
|
137
|
+
bt = util_expand_bt bt
|
138
|
+
|
139
|
+
ex_location = util_expand_bt(["test/test_some_class.rb:615"]).first
|
140
|
+
|
141
|
+
exception = MiniTest::Assertion.new "Oh no!"
|
142
|
+
exception.set_backtrace bt
|
143
|
+
assert_equal 'F', @tu.puke('TestSomeClass', 'test_method_name', exception)
|
144
|
+
assert_equal 1, @tu.failures
|
145
|
+
assert_match(/^Failure.*Oh no!/m, @tu.report.first)
|
146
|
+
assert_match("test_method_name(TestSomeClass) [#{ex_location}]", @tu.report.first)
|
147
|
+
end
|
148
|
+
|
149
|
+
def test_class_puke_with_flunk_and_user_defined_assertions
|
150
|
+
bt = (["lib/test/my/util.rb:16:in `flunk'",
|
151
|
+
"#{MINITEST_BASE_DIR}/unit.rb:140:in `assert_raises'",
|
152
|
+
"lib/test/my/util.rb:15:in `block in assert_something'",
|
153
|
+
"lib/test/my/util.rb:14:in `each'",
|
154
|
+
"lib/test/my/util.rb:14:in `assert_something'",
|
155
|
+
"test/test_some_class.rb:615:in `each'",
|
156
|
+
"test/test_some_class.rb:614:in `test_method_name'",
|
157
|
+
"#{MINITEST_BASE_DIR}/test.rb:165:in `__send__'"] +
|
158
|
+
BT_MIDDLE +
|
159
|
+
["#{MINITEST_BASE_DIR}/test.rb:29"])
|
160
|
+
bt = util_expand_bt bt
|
161
|
+
|
162
|
+
ex_location = util_expand_bt(["test/test_some_class.rb:615"]).first
|
163
|
+
|
164
|
+
exception = MiniTest::Assertion.new "Oh no!"
|
165
|
+
exception.set_backtrace bt
|
166
|
+
assert_equal 'F', @tu.puke('TestSomeClass', 'test_method_name', exception)
|
167
|
+
assert_equal 1, @tu.failures
|
168
|
+
assert_match(/^Failure.*Oh no!/m, @tu.report.first)
|
169
|
+
assert_match("test_method_name(TestSomeClass) [#{ex_location}]", @tu.report.first)
|
170
|
+
end
|
171
|
+
|
172
|
+
def test_class_puke_with_non_failure_exception
|
173
|
+
exception = Exception.new("Oh no again!")
|
174
|
+
assert_equal 'E', @tu.puke('SomeClass', 'method_name', exception)
|
175
|
+
assert_equal 1, @tu.errors
|
176
|
+
assert_match(/^Exception.*Oh no again!/m, @tu.report.first)
|
177
|
+
end
|
178
|
+
|
179
|
+
def test_class_run_test_suites
|
180
|
+
tc = Class.new(MiniTest::Unit::TestCase) do
|
181
|
+
def test_something
|
182
|
+
assert true
|
183
|
+
end
|
184
|
+
end
|
185
|
+
|
186
|
+
Object.const_set(:ATestCase, tc)
|
187
|
+
|
188
|
+
assert_equal [1, 1], @tu.run_test_suites
|
189
|
+
end
|
190
|
+
|
191
|
+
def test_run_failing # TODO: add error test
|
192
|
+
tc = Class.new(MiniTest::Unit::TestCase) do
|
193
|
+
def test_something
|
194
|
+
assert true
|
195
|
+
end
|
196
|
+
|
197
|
+
def test_failure
|
198
|
+
assert false
|
199
|
+
end
|
200
|
+
end
|
201
|
+
|
202
|
+
Object.const_set(:ATestCase, tc)
|
203
|
+
|
204
|
+
@tu.run
|
205
|
+
|
206
|
+
expected = "Loaded suite blah
|
207
|
+
Started
|
208
|
+
F.
|
209
|
+
Finished in 0.00
|
210
|
+
|
211
|
+
1) Failure:
|
212
|
+
test_failure(ATestCase) [FILE:LINE]:
|
213
|
+
Failed assertion, no message given.
|
214
|
+
|
215
|
+
2 tests, 2 assertions, 1 failures, 0 errors, 0 skips
|
216
|
+
"
|
217
|
+
util_assert_report expected
|
218
|
+
end
|
219
|
+
|
220
|
+
def test_run_error
|
221
|
+
tc = Class.new(MiniTest::Unit::TestCase) do
|
222
|
+
def test_something
|
223
|
+
assert true
|
224
|
+
end
|
225
|
+
|
226
|
+
def test_error
|
227
|
+
raise "unhandled exception"
|
228
|
+
end
|
229
|
+
end
|
230
|
+
|
231
|
+
Object.const_set(:ATestCase, tc)
|
232
|
+
|
233
|
+
@tu.run
|
234
|
+
|
235
|
+
expected = "Loaded suite blah
|
236
|
+
Started
|
237
|
+
E.
|
238
|
+
Finished in 0.00
|
239
|
+
|
240
|
+
1) Error:
|
241
|
+
test_error(ATestCase):
|
242
|
+
RuntimeError: unhandled exception
|
243
|
+
FILE:LINE:in `test_error'
|
244
|
+
|
245
|
+
2 tests, 1 assertions, 0 failures, 1 errors, 0 skips
|
246
|
+
"
|
247
|
+
util_assert_report expected
|
248
|
+
end
|
249
|
+
|
250
|
+
def test_run_error_teardown
|
251
|
+
tc = Class.new(MiniTest::Unit::TestCase) do
|
252
|
+
def test_something
|
253
|
+
assert true
|
254
|
+
end
|
255
|
+
|
256
|
+
def teardown
|
257
|
+
raise "unhandled exception"
|
258
|
+
end
|
259
|
+
end
|
260
|
+
|
261
|
+
Object.const_set(:ATestCase, tc)
|
262
|
+
|
263
|
+
@tu.run
|
264
|
+
|
265
|
+
expected = "Loaded suite blah
|
266
|
+
Started
|
267
|
+
E
|
268
|
+
Finished in 0.00
|
269
|
+
|
270
|
+
1) Error:
|
271
|
+
test_something(ATestCase):
|
272
|
+
RuntimeError: unhandled exception
|
273
|
+
FILE:LINE:in `teardown'
|
274
|
+
|
275
|
+
1 tests, 1 assertions, 0 failures, 1 errors, 0 skips
|
276
|
+
"
|
277
|
+
util_assert_report expected
|
278
|
+
end
|
279
|
+
|
280
|
+
def test_run_skip
|
281
|
+
tc = Class.new(MiniTest::Unit::TestCase) do
|
282
|
+
def test_something
|
283
|
+
assert true
|
284
|
+
end
|
285
|
+
|
286
|
+
def test_skip
|
287
|
+
skip "not yet"
|
288
|
+
end
|
289
|
+
end
|
290
|
+
|
291
|
+
Object.const_set(:ATestCase, tc)
|
292
|
+
|
293
|
+
@tu.run
|
294
|
+
|
295
|
+
expected = "Loaded suite blah
|
296
|
+
Started
|
297
|
+
S.
|
298
|
+
Finished in 0.00
|
299
|
+
|
300
|
+
1) Skipped:
|
301
|
+
test_skip(ATestCase) [FILE:LINE]:
|
302
|
+
not yet
|
303
|
+
|
304
|
+
2 tests, 1 assertions, 0 failures, 0 errors, 1 skips
|
305
|
+
"
|
306
|
+
util_assert_report expected
|
307
|
+
end
|
308
|
+
|
309
|
+
def util_assert_report expected = nil
|
310
|
+
expected ||= "Loaded suite blah
|
311
|
+
Started
|
312
|
+
.
|
313
|
+
Finished in 0.00
|
314
|
+
|
315
|
+
1 tests, 1 assertions, 0 failures, 0 errors, 0 skips
|
316
|
+
"
|
317
|
+
output = @output.string.sub(/Finished in .*/, "Finished in 0.00")
|
318
|
+
output.sub!(/Loaded suite .*/, 'Loaded suite blah')
|
319
|
+
output.sub!(/^(\s+)(?:#{Regexp.union(__FILE__, File.expand_path(__FILE__))}):\d+:/o, '\1FILE:LINE:')
|
320
|
+
output.sub!(/\[(?:#{Regexp.union(__FILE__, File.expand_path(__FILE__))}):\d+\]/o, '[FILE:LINE]')
|
321
|
+
assert_equal(expected, output)
|
322
|
+
end
|
323
|
+
|
324
|
+
def test_run_failing_filtered
|
325
|
+
tc = Class.new(MiniTest::Unit::TestCase) do
|
326
|
+
def test_something
|
327
|
+
assert true
|
328
|
+
end
|
329
|
+
|
330
|
+
def test_failure
|
331
|
+
assert false
|
332
|
+
end
|
333
|
+
end
|
334
|
+
|
335
|
+
Object.const_set(:ATestCase, tc)
|
336
|
+
|
337
|
+
@tu.run(%w(-n /something/))
|
338
|
+
|
339
|
+
util_assert_report
|
340
|
+
end
|
341
|
+
|
342
|
+
def test_run_passing
|
343
|
+
tc = Class.new(MiniTest::Unit::TestCase) do
|
344
|
+
def test_something
|
345
|
+
assert true
|
346
|
+
end
|
347
|
+
end
|
348
|
+
|
349
|
+
Object.const_set(:ATestCase, tc)
|
350
|
+
|
351
|
+
@tu.run
|
352
|
+
|
353
|
+
util_assert_report
|
354
|
+
end
|
355
|
+
end
|
356
|
+
|
357
|
+
class TestMiniTestTestCase < MiniTest::Unit::TestCase
|
358
|
+
def setup
|
359
|
+
MiniTest::Unit::TestCase.reset
|
360
|
+
|
361
|
+
@tc = MiniTest::Unit::TestCase.new 'fake tc'
|
362
|
+
@zomg = "zomg ponies!"
|
363
|
+
@assertion_count = 1
|
364
|
+
end
|
365
|
+
|
366
|
+
def teardown
|
367
|
+
assert_equal(@assertion_count, @tc._assertions,
|
368
|
+
"expected #{@assertion_count} assertions to be fired during the test, not #{@tc._assertions}") if @tc._assertions
|
369
|
+
Object.send :remove_const, :ATestCase if defined? ATestCase
|
370
|
+
end
|
371
|
+
|
372
|
+
def test_class_inherited
|
373
|
+
@assertion_count = 0
|
374
|
+
|
375
|
+
Object.const_set(:ATestCase, Class.new(MiniTest::Unit::TestCase))
|
376
|
+
|
377
|
+
assert_equal [ATestCase], MiniTest::Unit::TestCase.test_suites
|
378
|
+
end
|
379
|
+
|
380
|
+
def test_class_test_suites
|
381
|
+
@assertion_count = 0
|
382
|
+
|
383
|
+
Object.const_set(:ATestCase, Class.new(MiniTest::Unit::TestCase))
|
384
|
+
|
385
|
+
assert_equal 1, MiniTest::Unit::TestCase.test_suites.size
|
386
|
+
assert_equal [ATestCase], MiniTest::Unit::TestCase.test_suites
|
387
|
+
end
|
388
|
+
|
389
|
+
def test_class_asserts_match_refutes
|
390
|
+
@assertion_count = 0
|
391
|
+
|
392
|
+
methods = MiniTest::Assertions.public_instance_methods
|
393
|
+
methods.map! { |m| m.to_s } if Symbol === methods.first
|
394
|
+
|
395
|
+
ignores = %w(assert_block assert_no_match assert_not_equal assert_not_nil
|
396
|
+
assert_not_same assert_nothing_thrown assert_raise
|
397
|
+
assert_nothing_raised assert_raises assert_throws assert_send)
|
398
|
+
asserts = methods.grep(/^assert/).sort - ignores
|
399
|
+
refutes = methods.grep(/^refute/).sort - ignores
|
400
|
+
|
401
|
+
assert_empty refutes.map { |n| n.sub(/^refute/, 'assert') } - asserts
|
402
|
+
assert_empty asserts.map { |n| n.sub(/^assert/, 'refute') } - refutes
|
403
|
+
end
|
404
|
+
|
405
|
+
def test_assert
|
406
|
+
@assertion_count = 2
|
407
|
+
|
408
|
+
@tc.assert_equal true, @tc.assert(true), "returns true on success"
|
409
|
+
end
|
410
|
+
|
411
|
+
def test_assert__triggered
|
412
|
+
util_assert_triggered "Failed assertion, no message given." do
|
413
|
+
@tc.assert false
|
414
|
+
end
|
415
|
+
end
|
416
|
+
|
417
|
+
def test_assert__triggered_message
|
418
|
+
util_assert_triggered @zomg do
|
419
|
+
@tc.assert false, @zomg
|
420
|
+
end
|
421
|
+
end
|
422
|
+
|
423
|
+
def test_assert_block
|
424
|
+
@tc.assert_block do
|
425
|
+
true
|
426
|
+
end
|
427
|
+
end
|
428
|
+
|
429
|
+
def test_assert_block_triggered
|
430
|
+
util_assert_triggered 'Expected block to return true value.' do
|
431
|
+
@tc.assert_block do
|
432
|
+
false
|
433
|
+
end
|
434
|
+
end
|
435
|
+
end
|
436
|
+
|
437
|
+
def test_assert_empty
|
438
|
+
@assertion_count = 2
|
439
|
+
|
440
|
+
@tc.assert_empty []
|
441
|
+
end
|
442
|
+
|
443
|
+
def test_assert_empty_triggered
|
444
|
+
@assertion_count = 2
|
445
|
+
|
446
|
+
util_assert_triggered "Expected [1] to be empty." do
|
447
|
+
@tc.assert_empty [1]
|
448
|
+
end
|
449
|
+
end
|
450
|
+
|
451
|
+
def test_assert_equal
|
452
|
+
@tc.assert_equal 1, 1
|
453
|
+
end
|
454
|
+
|
455
|
+
def test_assert_equal_different
|
456
|
+
util_assert_triggered "Expected 1, not 2." do
|
457
|
+
@tc.assert_equal 1, 2
|
458
|
+
end
|
459
|
+
end
|
460
|
+
|
461
|
+
def test_assert_in_delta
|
462
|
+
@tc.assert_in_delta 0.0, 1.0 / 1000, 0.1
|
463
|
+
end
|
464
|
+
|
465
|
+
def test_assert_in_delta_triggered
|
466
|
+
util_assert_triggered 'Expected 0.0 - 0.001 (0.001) to be < 1.0e-06.' do
|
467
|
+
@tc.assert_in_delta 0.0, 1.0 / 1000, 0.000001
|
468
|
+
end
|
469
|
+
end
|
470
|
+
|
471
|
+
def test_assert_in_epsilon
|
472
|
+
@assertion_count = 8
|
473
|
+
|
474
|
+
@tc.assert_in_epsilon 10000, 9991
|
475
|
+
@tc.assert_in_epsilon 9991, 10000
|
476
|
+
@tc.assert_in_epsilon 1.0, 1.001
|
477
|
+
@tc.assert_in_epsilon 1.001, 1.0
|
478
|
+
|
479
|
+
@tc.assert_in_epsilon 10000, 9999.1, 0.0001
|
480
|
+
@tc.assert_in_epsilon 9999.1, 10000, 0.0001
|
481
|
+
@tc.assert_in_epsilon 1.0, 1.0001, 0.0001
|
482
|
+
@tc.assert_in_epsilon 1.0001, 1.0, 0.0001
|
483
|
+
end
|
484
|
+
|
485
|
+
def test_assert_in_epsilon_triggered
|
486
|
+
util_assert_triggered 'Expected 10000 - 9990 (10) to be < 9.99.' do
|
487
|
+
@tc.assert_in_epsilon 10000, 9990
|
488
|
+
end
|
489
|
+
end
|
490
|
+
|
491
|
+
def test_assert_includes
|
492
|
+
@assertion_count = 2
|
493
|
+
|
494
|
+
@tc.assert_includes [true], true
|
495
|
+
end
|
496
|
+
|
497
|
+
def test_assert_includes_triggered
|
498
|
+
@assertion_count = 3
|
499
|
+
|
500
|
+
e = @tc.assert_raises MiniTest::Assertion do
|
501
|
+
@tc.assert_includes [true], false
|
502
|
+
end
|
503
|
+
|
504
|
+
expected = "Expected [true] to include false."
|
505
|
+
assert_equal expected, e.message
|
506
|
+
end
|
507
|
+
|
508
|
+
def test_assert_instance_of
|
509
|
+
@tc.assert_instance_of String, "blah"
|
510
|
+
end
|
511
|
+
|
512
|
+
def test_assert_instance_of_triggered
|
513
|
+
util_assert_triggered 'Expected "blah" to be an instance of Array, not String.' do
|
514
|
+
@tc.assert_instance_of Array, "blah"
|
515
|
+
end
|
516
|
+
end
|
517
|
+
|
518
|
+
def test_assert_kind_of
|
519
|
+
@tc.assert_kind_of String, "blah"
|
520
|
+
end
|
521
|
+
|
522
|
+
def test_assert_kind_of_triggered
|
523
|
+
util_assert_triggered 'Expected "blah" to be a kind of Array, not String.' do
|
524
|
+
@tc.assert_kind_of Array, "blah"
|
525
|
+
end
|
526
|
+
end
|
527
|
+
|
528
|
+
def test_assert_match
|
529
|
+
@assertion_count = 2
|
530
|
+
@tc.assert_match(/\w+/, "blah blah blah")
|
531
|
+
end
|
532
|
+
|
533
|
+
def test_assert_match_object
|
534
|
+
@assertion_count = 2
|
535
|
+
|
536
|
+
pattern = Object.new
|
537
|
+
def pattern.=~(other) true end
|
538
|
+
|
539
|
+
@tc.assert_match pattern, 5
|
540
|
+
end
|
541
|
+
|
542
|
+
def test_assert_match_object_triggered
|
543
|
+
@assertion_count = 2
|
544
|
+
|
545
|
+
pattern = Object.new
|
546
|
+
def pattern.=~(other) false end
|
547
|
+
def pattern.inspect; "<<Object>>" end
|
548
|
+
|
549
|
+
util_assert_triggered 'Expected <<Object>> to match 5.' do
|
550
|
+
@tc.assert_match pattern, 5
|
551
|
+
end
|
552
|
+
end
|
553
|
+
|
554
|
+
def test_assert_match_triggered
|
555
|
+
@assertion_count = 2
|
556
|
+
util_assert_triggered 'Expected /\d+/ to match "blah blah blah".' do
|
557
|
+
@tc.assert_match(/\d+/, "blah blah blah")
|
558
|
+
end
|
559
|
+
end
|
560
|
+
|
561
|
+
def test_assert_nil
|
562
|
+
@tc.assert_nil nil
|
563
|
+
end
|
564
|
+
|
565
|
+
def test_assert_nil_triggered
|
566
|
+
util_assert_triggered 'Expected 42 to be nil.' do
|
567
|
+
@tc.assert_nil 42
|
568
|
+
end
|
569
|
+
end
|
570
|
+
|
571
|
+
def test_assert_operator
|
572
|
+
@tc.assert_operator 2, :>, 1
|
573
|
+
end
|
574
|
+
|
575
|
+
def test_assert_operator_triggered
|
576
|
+
util_assert_triggered "Expected 2 to be < 1." do
|
577
|
+
@tc.assert_operator 2, :<, 1
|
578
|
+
end
|
579
|
+
end
|
580
|
+
|
581
|
+
def test_assert_raises
|
582
|
+
@tc.assert_raises RuntimeError do
|
583
|
+
raise "blah"
|
584
|
+
end
|
585
|
+
end
|
586
|
+
|
587
|
+
def test_assert_raises_module
|
588
|
+
@tc.assert_raises M do
|
589
|
+
raise E
|
590
|
+
end
|
591
|
+
end
|
592
|
+
|
593
|
+
def test_assert_raises_triggered_different
|
594
|
+
e = assert_raises MiniTest::Assertion do
|
595
|
+
@tc.assert_raises RuntimeError do
|
596
|
+
raise SyntaxError, "icky"
|
597
|
+
end
|
598
|
+
end
|
599
|
+
|
600
|
+
expected = "[RuntimeError] exception expected, not
|
601
|
+
Class: <SyntaxError>
|
602
|
+
Message: <\"icky\">
|
603
|
+
---Backtrace---
|
604
|
+
FILE:LINE:in `test_assert_raises_triggered_different'
|
605
|
+
---------------"
|
606
|
+
|
607
|
+
actual = e.message.gsub(/^.+:\d+/, 'FILE:LINE')
|
608
|
+
actual.gsub!(/block \(\d+ levels\) in /, '') if RUBY_VERSION =~ /^1\.9/
|
609
|
+
|
610
|
+
assert_equal expected, actual
|
611
|
+
end
|
612
|
+
|
613
|
+
def test_assert_raises_triggered_none
|
614
|
+
e = assert_raises MiniTest::Assertion do
|
615
|
+
@tc.assert_raises MiniTest::Assertion do
|
616
|
+
# do nothing
|
617
|
+
end
|
618
|
+
end
|
619
|
+
|
620
|
+
expected = "MiniTest::Assertion expected but nothing was raised."
|
621
|
+
|
622
|
+
assert_equal expected, e.message
|
623
|
+
end
|
624
|
+
|
625
|
+
def test_assert_raises_triggered_subclass
|
626
|
+
e = assert_raises MiniTest::Assertion do
|
627
|
+
@tc.assert_raises StandardError do
|
628
|
+
raise E
|
629
|
+
end
|
630
|
+
end
|
631
|
+
|
632
|
+
expected = "[StandardError] exception expected, not
|
633
|
+
Class: <E>
|
634
|
+
Message: <\"E\">
|
635
|
+
---Backtrace---
|
636
|
+
FILE:LINE:in `test_assert_raises_triggered_subclass'
|
637
|
+
---------------"
|
638
|
+
|
639
|
+
actual = e.message.gsub(/^.+:\d+/, 'FILE:LINE')
|
640
|
+
actual.gsub!(/block \(\d+ levels\) in /, '') if RUBY_VERSION =~ /^1\.9/
|
641
|
+
|
642
|
+
assert_equal expected, actual
|
643
|
+
end
|
644
|
+
|
645
|
+
def test_assert_respond_to
|
646
|
+
@tc.assert_respond_to "blah", :empty?
|
647
|
+
end
|
648
|
+
|
649
|
+
def test_assert_respond_to_triggered
|
650
|
+
util_assert_triggered 'Expected "blah" (String) to respond to #rawr!.' do
|
651
|
+
@tc.assert_respond_to "blah", :rawr!
|
652
|
+
end
|
653
|
+
end
|
654
|
+
|
655
|
+
def test_assert_same
|
656
|
+
@assertion_count = 3
|
657
|
+
|
658
|
+
o = "blah"
|
659
|
+
@tc.assert_same 1, 1
|
660
|
+
@tc.assert_same :blah, :blah
|
661
|
+
@tc.assert_same o, o
|
662
|
+
end
|
663
|
+
|
664
|
+
def test_assert_same_triggered
|
665
|
+
@assertion_count = 2
|
666
|
+
|
667
|
+
util_assert_triggered 'Expected 2 (0xXXX) to be the same as 1 (0xXXX).' do
|
668
|
+
@tc.assert_same 1, 2
|
669
|
+
end
|
670
|
+
|
671
|
+
s1 = "blah"
|
672
|
+
s2 = "blah"
|
673
|
+
|
674
|
+
util_assert_triggered 'Expected "blah" (0xXXX) to be the same as "blah" (0xXXX).' do
|
675
|
+
@tc.assert_same s1, s2
|
676
|
+
end
|
677
|
+
end
|
678
|
+
|
679
|
+
def test_assert_send
|
680
|
+
@tc.assert_send [1, :<, 2]
|
681
|
+
end
|
682
|
+
|
683
|
+
def test_assert_send_bad
|
684
|
+
util_assert_triggered "Expected 1.>(*[2]) to return true." do
|
685
|
+
@tc.assert_send [1, :>, 2]
|
686
|
+
end
|
687
|
+
end
|
688
|
+
|
689
|
+
def test_assert_throws
|
690
|
+
@tc.assert_throws(:blah) do
|
691
|
+
throw :blah
|
692
|
+
end
|
693
|
+
end
|
694
|
+
|
695
|
+
def test_assert_throws_different
|
696
|
+
util_assert_triggered 'Expected :blah to have been thrown, not :not_blah.' do
|
697
|
+
@tc.assert_throws(:blah) do
|
698
|
+
throw :not_blah
|
699
|
+
end
|
700
|
+
end
|
701
|
+
end
|
702
|
+
|
703
|
+
def test_assert_throws_unthrown
|
704
|
+
util_assert_triggered 'Expected :blah to have been thrown.' do
|
705
|
+
@tc.assert_throws(:blah) do
|
706
|
+
# do nothing
|
707
|
+
end
|
708
|
+
end
|
709
|
+
end
|
710
|
+
|
711
|
+
def test_capture_io
|
712
|
+
@assertion_count = 0
|
713
|
+
|
714
|
+
out, err = capture_io do
|
715
|
+
puts 'hi'
|
716
|
+
warn 'bye!'
|
717
|
+
end
|
718
|
+
|
719
|
+
assert_equal "hi\n", out
|
720
|
+
assert_equal "bye!\n", err
|
721
|
+
end
|
722
|
+
|
723
|
+
def test_flunk
|
724
|
+
util_assert_triggered 'Epic Fail!' do
|
725
|
+
@tc.flunk
|
726
|
+
end
|
727
|
+
end
|
728
|
+
|
729
|
+
def test_flunk_message
|
730
|
+
util_assert_triggered @zomg do
|
731
|
+
@tc.flunk @zomg
|
732
|
+
end
|
733
|
+
end
|
734
|
+
|
735
|
+
def test_message
|
736
|
+
@assertion_count = 0
|
737
|
+
|
738
|
+
assert_equal "blah2.", @tc.message { "blah2" }.call
|
739
|
+
assert_equal "blah2.", @tc.message("") { "blah2" }.call
|
740
|
+
assert_equal "blah1.\nblah2.", @tc.message("blah1") { "blah2" }.call
|
741
|
+
end
|
742
|
+
|
743
|
+
def test_pass
|
744
|
+
@tc.pass
|
745
|
+
end
|
746
|
+
|
747
|
+
def test_test_methods_sorted
|
748
|
+
@assertion_count = 0
|
749
|
+
|
750
|
+
sample_test_case = Class.new(MiniTest::Unit::TestCase)
|
751
|
+
|
752
|
+
class << sample_test_case
|
753
|
+
def test_order; :sorted end
|
754
|
+
end
|
755
|
+
|
756
|
+
sample_test_case.instance_eval do
|
757
|
+
define_method :test_test3 do assert "does not matter" end
|
758
|
+
define_method :test_test2 do assert "does not matter" end
|
759
|
+
define_method :test_test1 do assert "does not matter" end
|
760
|
+
end
|
761
|
+
|
762
|
+
expected = %w(test_test1 test_test2 test_test3)
|
763
|
+
assert_equal expected, sample_test_case.test_methods
|
764
|
+
end
|
765
|
+
|
766
|
+
def test_test_methods_random
|
767
|
+
@assertion_count = 0
|
768
|
+
|
769
|
+
sample_test_case = Class.new(MiniTest::Unit::TestCase)
|
770
|
+
|
771
|
+
class << sample_test_case
|
772
|
+
def test_order; :random end
|
773
|
+
end
|
774
|
+
|
775
|
+
sample_test_case.instance_eval do
|
776
|
+
define_method :test_test1 do assert "does not matter" end
|
777
|
+
define_method :test_test2 do assert "does not matter" end
|
778
|
+
define_method :test_test3 do assert "does not matter" end
|
779
|
+
end
|
780
|
+
|
781
|
+
srand 42
|
782
|
+
expected = %w(test_test1 test_test2 test_test3)
|
783
|
+
max = expected.size
|
784
|
+
expected = expected.sort_by { rand(max) }
|
785
|
+
|
786
|
+
srand 42
|
787
|
+
result = sample_test_case.test_methods
|
788
|
+
|
789
|
+
assert_equal expected, result
|
790
|
+
end
|
791
|
+
|
792
|
+
def test_refute
|
793
|
+
@assertion_count = 2
|
794
|
+
|
795
|
+
@tc.assert_equal false, @tc.refute(false), "returns false on success"
|
796
|
+
end
|
797
|
+
|
798
|
+
def test_refute_empty
|
799
|
+
@assertion_count = 2
|
800
|
+
|
801
|
+
@tc.refute_empty [1]
|
802
|
+
end
|
803
|
+
|
804
|
+
def test_refute_empty_triggered
|
805
|
+
@assertion_count = 2
|
806
|
+
|
807
|
+
util_assert_triggered "Expected [] to not be empty." do
|
808
|
+
@tc.refute_empty []
|
809
|
+
end
|
810
|
+
end
|
811
|
+
|
812
|
+
def test_refute_equal
|
813
|
+
@tc.refute_equal "blah", "yay"
|
814
|
+
end
|
815
|
+
|
816
|
+
def test_refute_equal_triggered
|
817
|
+
util_assert_triggered 'Expected "blah" to not be equal to "blah".' do
|
818
|
+
@tc.refute_equal "blah", "blah"
|
819
|
+
end
|
820
|
+
end
|
821
|
+
|
822
|
+
def test_refute_in_delta
|
823
|
+
@tc.refute_in_delta 0.0, 1.0 / 1000, 0.000001
|
824
|
+
end
|
825
|
+
|
826
|
+
def test_refute_in_delta_triggered
|
827
|
+
util_assert_triggered 'Expected 0.0 - 0.001 (0.001) to not be < 0.1.' do
|
828
|
+
@tc.refute_in_delta 0.0, 1.0 / 1000, 0.1
|
829
|
+
end
|
830
|
+
end
|
831
|
+
|
832
|
+
def test_refute_in_epsilon
|
833
|
+
@tc.refute_in_epsilon 10000, 9990
|
834
|
+
end
|
835
|
+
|
836
|
+
def test_refute_in_epsilon_triggered
|
837
|
+
util_assert_triggered 'Expected 10000 - 9991 (9) to not be < 10.0.' do
|
838
|
+
@tc.refute_in_epsilon 10000, 9991
|
839
|
+
fail
|
840
|
+
end
|
841
|
+
end
|
842
|
+
|
843
|
+
def test_refute_includes
|
844
|
+
@assertion_count = 2
|
845
|
+
|
846
|
+
@tc.refute_includes [true], false
|
847
|
+
end
|
848
|
+
|
849
|
+
def test_refute_includes_triggered
|
850
|
+
@assertion_count = 3
|
851
|
+
|
852
|
+
e = @tc.assert_raises MiniTest::Assertion do
|
853
|
+
@tc.refute_includes [true], true
|
854
|
+
end
|
855
|
+
|
856
|
+
expected = "Expected [true] to not include true."
|
857
|
+
assert_equal expected, e.message
|
858
|
+
end
|
859
|
+
|
860
|
+
def test_refute_instance_of
|
861
|
+
@tc.refute_instance_of Array, "blah"
|
862
|
+
end
|
863
|
+
|
864
|
+
def test_refute_instance_of_triggered
|
865
|
+
util_assert_triggered 'Expected "blah" to not be an instance of String.' do
|
866
|
+
@tc.refute_instance_of String, "blah"
|
867
|
+
end
|
868
|
+
end
|
869
|
+
|
870
|
+
def test_refute_kind_of
|
871
|
+
@tc.refute_kind_of Array, "blah"
|
872
|
+
end
|
873
|
+
|
874
|
+
def test_refute_kind_of_triggered
|
875
|
+
util_assert_triggered 'Expected "blah" to not be a kind of String.' do
|
876
|
+
@tc.refute_kind_of String, "blah"
|
877
|
+
end
|
878
|
+
end
|
879
|
+
|
880
|
+
def test_refute_match
|
881
|
+
@assertion_count = 2
|
882
|
+
@tc.refute_match(/\d+/, "blah blah blah")
|
883
|
+
end
|
884
|
+
|
885
|
+
def test_refute_match_object
|
886
|
+
@assertion_count = 2
|
887
|
+
@tc.refute_match Object.new, 5 # default #=~ returns false
|
888
|
+
end
|
889
|
+
|
890
|
+
def test_assert_object_triggered
|
891
|
+
@assertion_count = 2
|
892
|
+
|
893
|
+
pattern = Object.new
|
894
|
+
def pattern.=~(other) false end
|
895
|
+
def pattern.inspect; "<<Object>>" end
|
896
|
+
|
897
|
+
util_assert_triggered 'Expected <<Object>> to match 5.' do
|
898
|
+
@tc.assert_match pattern, 5
|
899
|
+
end
|
900
|
+
end
|
901
|
+
|
902
|
+
def test_refute_match_object_triggered
|
903
|
+
@assertion_count = 2
|
904
|
+
|
905
|
+
pattern = Object.new
|
906
|
+
def pattern.=~(other) true end
|
907
|
+
def pattern.inspect; "<<Object>>" end
|
908
|
+
|
909
|
+
util_assert_triggered 'Expected <<Object>> to not match 5.' do
|
910
|
+
@tc.refute_match pattern, 5
|
911
|
+
end
|
912
|
+
end
|
913
|
+
|
914
|
+
def test_refute_match_triggered
|
915
|
+
@assertion_count = 2
|
916
|
+
util_assert_triggered 'Expected /\w+/ to not match "blah blah blah".' do
|
917
|
+
@tc.refute_match(/\w+/, "blah blah blah")
|
918
|
+
end
|
919
|
+
end
|
920
|
+
|
921
|
+
def test_refute_nil
|
922
|
+
@tc.refute_nil 42
|
923
|
+
end
|
924
|
+
|
925
|
+
def test_refute_nil_triggered
|
926
|
+
util_assert_triggered 'Expected nil to not be nil.' do
|
927
|
+
@tc.refute_nil nil
|
928
|
+
end
|
929
|
+
end
|
930
|
+
|
931
|
+
def test_refute_operator
|
932
|
+
@tc.refute_operator 2, :<, 1
|
933
|
+
end
|
934
|
+
|
935
|
+
def test_refute_operator_triggered
|
936
|
+
util_assert_triggered "Expected 2 to not be > 1." do
|
937
|
+
@tc.refute_operator 2, :>, 1
|
938
|
+
end
|
939
|
+
end
|
940
|
+
|
941
|
+
def test_refute_respond_to
|
942
|
+
@tc.refute_respond_to "blah", :rawr!
|
943
|
+
end
|
944
|
+
|
945
|
+
def test_refute_respond_to_triggered
|
946
|
+
util_assert_triggered 'Expected "blah" to not respond to empty?.' do
|
947
|
+
@tc.refute_respond_to "blah", :empty?
|
948
|
+
end
|
949
|
+
end
|
950
|
+
|
951
|
+
def test_refute_same
|
952
|
+
@tc.refute_same 1, 2
|
953
|
+
end
|
954
|
+
|
955
|
+
# TODO: "with id <id>" crap from assertions.rb
|
956
|
+
def test_refute_same_triggered
|
957
|
+
util_assert_triggered 'Expected 1 to not be the same as 1.' do
|
958
|
+
@tc.refute_same 1, 1
|
959
|
+
end
|
960
|
+
end
|
961
|
+
|
962
|
+
def test_skip
|
963
|
+
@assertion_count = 0
|
964
|
+
|
965
|
+
util_assert_triggered "haha!", MiniTest::Skip do
|
966
|
+
@tc.skip "haha!"
|
967
|
+
end
|
968
|
+
end
|
969
|
+
|
970
|
+
def util_assert_triggered expected, klass = MiniTest::Assertion
|
971
|
+
e = assert_raises(klass) do
|
972
|
+
yield
|
973
|
+
end
|
974
|
+
|
975
|
+
msg = e.message.sub(/(---Backtrace---).*/m, '\1')
|
976
|
+
msg.gsub!(/\(0x[0-9a-f]+\)/, '(0xXXX)')
|
977
|
+
|
978
|
+
assert_equal expected, msg
|
979
|
+
end
|
980
|
+
end
|