minitest 1.5.0 → 1.6.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.tar.gz.sig +0 -0
- data/.autotest +2 -0
- data/History.txt +20 -0
- data/lib/minitest/mock.rb +1 -0
- data/lib/minitest/spec.rb +174 -16
- data/lib/minitest/unit.rb +285 -51
- data/test/test_mini_spec.rb +3 -0
- data/test/test_mini_test.rb +41 -40
- metadata +37 -28
- metadata.gz.sig +0 -0
data.tar.gz.sig
CHANGED
Binary file
|
data/.autotest
CHANGED
data/History.txt
CHANGED
@@ -1,3 +1,23 @@
|
|
1
|
+
=== 1.6.0 / 2010-03-27
|
2
|
+
|
3
|
+
* 10 minor enhancements:
|
4
|
+
|
5
|
+
* Added --seed argument so you can reproduce a random order for debugging.
|
6
|
+
* Added documentation for assertions
|
7
|
+
* Added more rdoc and tons of :nodoc:
|
8
|
+
* Added output to give you all the options you need to reproduce that run.
|
9
|
+
* Added proper argument parsing to minitest.
|
10
|
+
* Added unique serial # to spec names so order can be preserved (needs tests). (phrogz)
|
11
|
+
* Empty 'it' fails with default msg. (phrogz)
|
12
|
+
* Remove previous method on expect to remove 1.9 warnings
|
13
|
+
* Spec#it is now order-proof wrt subclasses/nested describes.
|
14
|
+
* assert_same error message now reports in decimal, eg: oid=123. (mattkent)
|
15
|
+
|
16
|
+
* 2 bug fixes:
|
17
|
+
|
18
|
+
* Fixed message on refute_same to be consistent with assert_same.
|
19
|
+
* Fixed method randomization to be stable for testing.
|
20
|
+
|
1
21
|
=== 1.5.0 / 2010-01-06
|
2
22
|
|
3
23
|
* 4 minor enhancements:
|
data/lib/minitest/mock.rb
CHANGED
@@ -10,6 +10,7 @@ module MiniTest
|
|
10
10
|
def expect(name, retval, args=[])
|
11
11
|
n, r, a = name, retval, args # for the closure below
|
12
12
|
@expected_calls[name] = { :retval => retval, :args => args }
|
13
|
+
self.class.__send__ :remove_method, name if respond_to? name
|
13
14
|
self.class.__send__(:define_method, name) { |*x|
|
14
15
|
raise ArgumentError unless @expected_calls[n][:args].size == x.size
|
15
16
|
@actual_calls[n] << { :retval => r, :args => x }
|
data/lib/minitest/spec.rb
CHANGED
@@ -58,6 +58,14 @@ class Object
|
|
58
58
|
end
|
59
59
|
|
60
60
|
module Kernel
|
61
|
+
##
|
62
|
+
# Describe a series of expectations for a given target +desc+.
|
63
|
+
#
|
64
|
+
# TODO: find good tutorial url.
|
65
|
+
#
|
66
|
+
# Defines a test class subclassing from either
|
67
|
+
# MiniTest::Unit::TestCase or from the surrounding describe's class.
|
68
|
+
|
61
69
|
def describe desc, &block
|
62
70
|
stack = MiniTest::Spec.describe_stack
|
63
71
|
name = desc.to_s.split(/\W+/).map { |s| s.capitalize }.join + "Spec"
|
@@ -74,28 +82,36 @@ module Kernel
|
|
74
82
|
private :describe
|
75
83
|
end
|
76
84
|
|
85
|
+
class Module
|
86
|
+
def classes type = Object # :nodoc:
|
87
|
+
constants.map { |n| const_get n }.find_all { |c|
|
88
|
+
c.class == Class and type > c
|
89
|
+
} - [self]
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
77
93
|
class MiniTest::Spec < MiniTest::Unit::TestCase
|
78
94
|
@@describe_stack = [MiniTest::Spec]
|
79
|
-
def self.describe_stack
|
95
|
+
def self.describe_stack # :nodoc:
|
80
96
|
@@describe_stack
|
81
97
|
end
|
82
98
|
|
83
|
-
def self.current
|
99
|
+
def self.current # :nodoc:
|
84
100
|
@@current_spec
|
85
101
|
end
|
86
102
|
|
87
|
-
def initialize name
|
103
|
+
def initialize name # :nodoc:
|
88
104
|
super
|
89
105
|
@@current_spec = self
|
90
106
|
end
|
91
107
|
|
92
|
-
def self.nuke_test_methods!
|
108
|
+
def self.nuke_test_methods! # :nodoc:
|
93
109
|
self.public_instance_methods.grep(/^test_/).each do |name|
|
94
110
|
self.send :undef_method, name
|
95
111
|
end
|
96
112
|
end
|
97
113
|
|
98
|
-
def self.define_inheritable_method name, &block
|
114
|
+
def self.define_inheritable_method name, &block # :nodoc:
|
99
115
|
super_method = self.superclass.instance_method name
|
100
116
|
|
101
117
|
define_method name do
|
@@ -104,25 +120,167 @@ class MiniTest::Spec < MiniTest::Unit::TestCase
|
|
104
120
|
end
|
105
121
|
end
|
106
122
|
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
123
|
+
##
|
124
|
+
# Define a 'before' action. Inherits the way normal methods should.
|
125
|
+
#
|
126
|
+
# NOTE: +type+ is ignored and is only there to make porting easier.
|
127
|
+
#
|
128
|
+
# Equivalent to MiniTest::Unit::TestCase#setup.
|
129
|
+
|
130
|
+
def self.before type = :each, &block
|
112
131
|
raise "unsupported before type: #{type}" unless type == :each
|
113
132
|
define_inheritable_method :setup, &block
|
114
133
|
end
|
115
134
|
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
135
|
+
##
|
136
|
+
# Define an 'after' action. Inherits the way normal methods should.
|
137
|
+
#
|
138
|
+
# NOTE: +type+ is ignored and is only there to make porting easier.
|
139
|
+
#
|
140
|
+
# Equivalent to MiniTest::Unit::TestCase#teardown.
|
141
|
+
|
142
|
+
def self.after type = :each, &block
|
121
143
|
raise "unsupported after type: #{type}" unless type == :each
|
122
144
|
define_inheritable_method :teardown, &block
|
123
145
|
end
|
124
146
|
|
147
|
+
##
|
148
|
+
# Define an expectation with name +desc+. Name gets morphed to a
|
149
|
+
# proper test method name. For some freakish reason, people who
|
150
|
+
# write specs don't like class inheritence, so this goes way out of
|
151
|
+
# its way to make sure that expectations aren't inherited.
|
152
|
+
#
|
153
|
+
# Hint: If you _do_ want inheritence, use minitest/unit. You can mix
|
154
|
+
# and match between assertions and expectations as much as you want.
|
155
|
+
|
125
156
|
def self.it desc, &block
|
126
|
-
|
157
|
+
block ||= proc { skip "(no tests defined)" }
|
158
|
+
|
159
|
+
@specs ||= 0
|
160
|
+
@specs += 1
|
161
|
+
|
162
|
+
name = "test_%04d_%s" % [ @specs, desc.gsub(/\W+/, '_').downcase ]
|
163
|
+
|
164
|
+
define_method name, &block
|
165
|
+
|
166
|
+
classes(MiniTest::Spec).each do |mod|
|
167
|
+
mod.send :undef_method, name if mod.respond_to? name
|
168
|
+
end
|
127
169
|
end
|
170
|
+
|
171
|
+
##
|
172
|
+
# :method: must_be
|
173
|
+
# See MiniTest::Assertions#assert
|
174
|
+
|
175
|
+
##
|
176
|
+
# :method: must_be_close_to
|
177
|
+
# See MiniTest::Assertions#assert_in_delta
|
178
|
+
|
179
|
+
##
|
180
|
+
# :method: must_be_empty
|
181
|
+
# See MiniTest::Assertions#assert_empty
|
182
|
+
|
183
|
+
##
|
184
|
+
# :method: must_be_instance_of
|
185
|
+
# See MiniTest::Assertions#assert_instance_of
|
186
|
+
|
187
|
+
##
|
188
|
+
# :method: must_be_kind_of
|
189
|
+
# See MiniTest::Assertions#assert_kind_of
|
190
|
+
|
191
|
+
##
|
192
|
+
# :method: must_be_nil
|
193
|
+
# See MiniTest::Assertions#assert_nil
|
194
|
+
|
195
|
+
##
|
196
|
+
# :method: must_be_same_as
|
197
|
+
# See MiniTest::Assertions#assert_same
|
198
|
+
|
199
|
+
##
|
200
|
+
# :method: must_be_within_delta
|
201
|
+
# See MiniTest::Assertions#assert_in_delta
|
202
|
+
|
203
|
+
##
|
204
|
+
# :method: must_be_within_epsilon
|
205
|
+
# See MiniTest::Assertions#assert_in_epsilon
|
206
|
+
|
207
|
+
##
|
208
|
+
# :method: must_equal
|
209
|
+
# See MiniTest::Assertions#assert_equal
|
210
|
+
|
211
|
+
##
|
212
|
+
# :method: must_include
|
213
|
+
# See MiniTest::Assertions#assert_includes
|
214
|
+
|
215
|
+
##
|
216
|
+
# :method: must_match
|
217
|
+
# See MiniTest::Assertions#assert_match
|
218
|
+
|
219
|
+
##
|
220
|
+
# :method: must_raise
|
221
|
+
# See MiniTest::Assertions#assert_raises
|
222
|
+
|
223
|
+
##
|
224
|
+
# :method: must_respond_to
|
225
|
+
# See MiniTest::Assertions#assert_respond_to
|
226
|
+
|
227
|
+
##
|
228
|
+
# :method: must_send
|
229
|
+
# See MiniTest::Assertions#assert_send
|
230
|
+
|
231
|
+
##
|
232
|
+
# :method: must_throw
|
233
|
+
# See MiniTest::Assertions#assert_throw
|
234
|
+
|
235
|
+
##
|
236
|
+
# :method: wont_be
|
237
|
+
# See MiniTest::Assertions#refute
|
238
|
+
|
239
|
+
##
|
240
|
+
# :method: wont_be_close_to
|
241
|
+
# See MiniTest::Assertions#refute_in_delta
|
242
|
+
|
243
|
+
##
|
244
|
+
# :method: wont_be_empty
|
245
|
+
# See MiniTest::Assertions#refute_empty
|
246
|
+
|
247
|
+
##
|
248
|
+
# :method: wont_be_instance_of
|
249
|
+
# See MiniTest::Assertions#refute_instance_of
|
250
|
+
|
251
|
+
##
|
252
|
+
# :method: wont_be_kind_of
|
253
|
+
# See MiniTest::Assertions#refute_kind_of
|
254
|
+
|
255
|
+
##
|
256
|
+
# :method: wont_be_nil
|
257
|
+
# See MiniTest::Assertions#refute_nil
|
258
|
+
|
259
|
+
##
|
260
|
+
# :method: wont_be_same_as
|
261
|
+
# See MiniTest::Assertions#refute_same
|
262
|
+
|
263
|
+
##
|
264
|
+
# :method: wont_be_within_delta
|
265
|
+
# See MiniTest::Assertions#refute_in_delta
|
266
|
+
|
267
|
+
##
|
268
|
+
# :method: wont_be_within_epsilon
|
269
|
+
# See MiniTest::Assertions#refute_in_epsilon
|
270
|
+
|
271
|
+
##
|
272
|
+
# :method: wont_equal
|
273
|
+
# See MiniTest::Assertions#refute_equal
|
274
|
+
|
275
|
+
##
|
276
|
+
# :method: wont_include
|
277
|
+
# See MiniTest::Assertions#refute_includes
|
278
|
+
|
279
|
+
##
|
280
|
+
# :method: wont_match
|
281
|
+
# See MiniTest::Assertions#refute_match
|
282
|
+
|
283
|
+
##
|
284
|
+
# :method: wont_respond_to
|
285
|
+
# See MiniTest::Assertions#refute_respond_to
|
128
286
|
end
|
data/lib/minitest/unit.rb
CHANGED
@@ -1,11 +1,18 @@
|
|
1
|
+
require 'optparse'
|
2
|
+
|
1
3
|
##
|
2
|
-
#
|
3
|
-
# Totally minimal drop-in replacement for test-unit
|
4
|
-
#
|
5
|
-
# TODO: refute -> debunk, prove/rebut, show/deny... lots of possibilities
|
4
|
+
# Minimal (mostly drop-in) replacement for test-unit.
|
6
5
|
|
7
6
|
module MiniTest
|
7
|
+
|
8
|
+
##
|
9
|
+
# Assertion base class
|
10
|
+
|
8
11
|
class Assertion < Exception; end
|
12
|
+
|
13
|
+
##
|
14
|
+
# Assertion raised when skipping a test
|
15
|
+
|
9
16
|
class Skip < Assertion; end
|
10
17
|
|
11
18
|
file = if RUBY_VERSION =~ /^1\.9/ then # bt's expanded, but __FILE__ isn't :(
|
@@ -21,9 +28,9 @@ module MiniTest
|
|
21
28
|
end
|
22
29
|
|
23
30
|
# './lib' in project dir, or '/usr/local/blahblah' if installed
|
24
|
-
MINI_DIR = File.dirname(File.dirname(file))
|
31
|
+
MINI_DIR = File.dirname(File.dirname(file)) # :nodoc:
|
25
32
|
|
26
|
-
def self.filter_backtrace bt
|
33
|
+
def self.filter_backtrace bt # :nodoc:
|
27
34
|
return ["No backtrace"] unless bt
|
28
35
|
|
29
36
|
new_bt = []
|
@@ -37,21 +44,33 @@ module MiniTest
|
|
37
44
|
new_bt
|
38
45
|
end
|
39
46
|
|
47
|
+
##
|
48
|
+
# MiniTest Assertions. All assertion methods accept a +msg+ which is
|
49
|
+
# printed if the assertion fails.
|
50
|
+
|
40
51
|
module Assertions
|
41
|
-
|
52
|
+
|
53
|
+
##
|
54
|
+
# mu_pp gives a human-readable version of +obj+. By default #inspect is
|
55
|
+
# called. You can override this to use #pretty_print if you want.
|
56
|
+
|
57
|
+
def mu_pp obj
|
42
58
|
s = obj.inspect
|
43
59
|
s = s.force_encoding(Encoding.default_external) if defined? Encoding
|
44
60
|
s
|
45
61
|
end
|
46
62
|
|
47
|
-
def _assertions= n
|
63
|
+
def _assertions= n # :nodoc:
|
48
64
|
@_assertions = n
|
49
65
|
end
|
50
66
|
|
51
|
-
def _assertions
|
67
|
+
def _assertions # :nodoc:
|
52
68
|
@_assertions ||= 0
|
53
69
|
end
|
54
70
|
|
71
|
+
##
|
72
|
+
# Fails unless +test+ is a true value.
|
73
|
+
|
55
74
|
def assert test, msg = nil
|
56
75
|
msg ||= "Failed assertion, no message given."
|
57
76
|
self._assertions += 1
|
@@ -62,32 +81,56 @@ module MiniTest
|
|
62
81
|
true
|
63
82
|
end
|
64
83
|
|
84
|
+
##
|
85
|
+
# Fails unless the block returns a true value.
|
86
|
+
|
65
87
|
def assert_block msg = nil
|
66
88
|
msg = message(msg) { "Expected block to return true value" }
|
67
89
|
assert yield, msg
|
68
90
|
end
|
69
91
|
|
92
|
+
##
|
93
|
+
# Fails unless +obj+ is empty.
|
94
|
+
|
70
95
|
def assert_empty obj, msg = nil
|
71
96
|
msg = message(msg) { "Expected #{obj.inspect} to be empty" }
|
72
97
|
assert_respond_to obj, :empty?
|
73
98
|
assert obj.empty?, msg
|
74
99
|
end
|
75
100
|
|
101
|
+
##
|
102
|
+
# Fails unless <tt>exp == act</tt>.
|
103
|
+
#
|
104
|
+
# For floats use assert_in_delta
|
105
|
+
|
76
106
|
def assert_equal exp, act, msg = nil
|
77
107
|
msg = message(msg) { "Expected #{mu_pp(exp)}, not #{mu_pp(act)}" }
|
78
108
|
assert(exp == act, msg)
|
79
109
|
end
|
80
110
|
|
111
|
+
##
|
112
|
+
# For comparing Floats. Fails unless +exp+ and +act+ are within +delta+
|
113
|
+
# of each other.
|
114
|
+
#
|
115
|
+
# assert_in_delta Math::PI, (22.0 / 7.0), 0.01
|
116
|
+
|
81
117
|
def assert_in_delta exp, act, delta = 0.001, msg = nil
|
82
118
|
n = (exp - act).abs
|
83
119
|
msg = message(msg) { "Expected #{exp} - #{act} (#{n}) to be < #{delta}" }
|
84
120
|
assert delta >= n, msg
|
85
121
|
end
|
86
122
|
|
123
|
+
##
|
124
|
+
# For comparing Floats. Fails unless +exp+ and +act+ have a relative
|
125
|
+
# error less than +epsilon+.
|
126
|
+
|
87
127
|
def assert_in_epsilon a, b, epsilon = 0.001, msg = nil
|
88
128
|
assert_in_delta a, b, [a, b].min * epsilon, msg
|
89
129
|
end
|
90
130
|
|
131
|
+
##
|
132
|
+
# Fails unless +collection+ includes +obj+.
|
133
|
+
|
91
134
|
def assert_includes collection, obj, msg = nil
|
92
135
|
msg = message(msg) {
|
93
136
|
"Expected #{mu_pp(collection)} to include #{mu_pp(obj)}"
|
@@ -96,6 +139,9 @@ module MiniTest
|
|
96
139
|
assert collection.include?(obj), msg
|
97
140
|
end
|
98
141
|
|
142
|
+
##
|
143
|
+
# Fails unless +obj+ is an instace of +cls+.
|
144
|
+
|
99
145
|
def assert_instance_of cls, obj, msg = nil
|
100
146
|
msg = message(msg) {
|
101
147
|
"Expected #{mu_pp(obj)} to be an instance of #{cls}, not #{obj.class}"
|
@@ -104,6 +150,9 @@ module MiniTest
|
|
104
150
|
assert obj.instance_of?(cls), msg
|
105
151
|
end
|
106
152
|
|
153
|
+
##
|
154
|
+
# Fails unless +obj+ is a kind of +cls+.
|
155
|
+
|
107
156
|
def assert_kind_of cls, obj, msg = nil # TODO: merge with instance_of
|
108
157
|
msg = message(msg) {
|
109
158
|
"Expected #{mu_pp(obj)} to be a kind of #{cls}, not #{obj.class}" }
|
@@ -111,23 +160,37 @@ module MiniTest
|
|
111
160
|
assert obj.kind_of?(cls), msg
|
112
161
|
end
|
113
162
|
|
163
|
+
##
|
164
|
+
# Fails unless +exp+ is <tt>=~</tt> +act+.
|
165
|
+
|
114
166
|
def assert_match exp, act, msg = nil
|
115
167
|
msg = message(msg) { "Expected #{mu_pp(exp)} to match #{mu_pp(act)}" }
|
116
168
|
assert_respond_to act, :"=~"
|
117
|
-
exp = /#{Regexp.escape
|
169
|
+
exp = /#{Regexp.escape exp}/ if String === exp && String === act
|
118
170
|
assert exp =~ act, msg
|
119
171
|
end
|
120
172
|
|
173
|
+
##
|
174
|
+
# Fails unless +obj+ is nil
|
175
|
+
|
121
176
|
def assert_nil obj, msg = nil
|
122
177
|
msg = message(msg) { "Expected #{mu_pp(obj)} to be nil" }
|
123
178
|
assert obj.nil?, msg
|
124
179
|
end
|
125
180
|
|
181
|
+
##
|
182
|
+
# For testing equality operators and so-forth.
|
183
|
+
#
|
184
|
+
# assert_operator 5, :<=, 4
|
185
|
+
|
126
186
|
def assert_operator o1, op, o2, msg = nil
|
127
187
|
msg = message(msg) { "Expected #{mu_pp(o1)} to be #{op} #{mu_pp(o2)}" }
|
128
188
|
assert o1.__send__(op, o2), msg
|
129
189
|
end
|
130
190
|
|
191
|
+
##
|
192
|
+
# Fails unless the block raises one of +exp+
|
193
|
+
|
131
194
|
def assert_raises *exp
|
132
195
|
msg = String === exp.last ? exp.pop : nil
|
133
196
|
msg = msg.to_s + "\n" if msg
|
@@ -149,6 +212,9 @@ module MiniTest
|
|
149
212
|
should_raise
|
150
213
|
end
|
151
214
|
|
215
|
+
##
|
216
|
+
# Fails unless +obj+ responds to +meth+.
|
217
|
+
|
152
218
|
def assert_respond_to obj, meth, msg = nil
|
153
219
|
msg = message(msg) {
|
154
220
|
"Expected #{mu_pp(obj)} (#{obj.class}) to respond to ##{meth}"
|
@@ -156,14 +222,22 @@ module MiniTest
|
|
156
222
|
assert obj.respond_to?(meth), msg
|
157
223
|
end
|
158
224
|
|
225
|
+
##
|
226
|
+
# Fails unless +exp+ and +act+ are #equal?
|
227
|
+
|
159
228
|
def assert_same exp, act, msg = nil
|
160
229
|
msg = message(msg) {
|
161
230
|
data = [mu_pp(act), act.object_id, mu_pp(exp), exp.object_id]
|
162
|
-
"Expected %s (
|
231
|
+
"Expected %s (oid=%d) to be the same as %s (oid=%d)" % data
|
163
232
|
}
|
164
233
|
assert exp.equal?(act), msg
|
165
234
|
end
|
166
235
|
|
236
|
+
##
|
237
|
+
# +send_ary+ is a receiver, message and arguments.
|
238
|
+
#
|
239
|
+
# Fails unless the call returns a true value
|
240
|
+
|
167
241
|
def assert_send send_ary, m = nil
|
168
242
|
recv, msg, *args = send_ary
|
169
243
|
m = message(m) {
|
@@ -171,6 +245,9 @@ module MiniTest
|
|
171
245
|
assert recv.__send__(msg, *args), m
|
172
246
|
end
|
173
247
|
|
248
|
+
##
|
249
|
+
# Fails unless the block throws +sym+
|
250
|
+
|
174
251
|
def assert_throws sym, msg = nil
|
175
252
|
default = "Expected #{mu_pp(sym)} to have been thrown"
|
176
253
|
caught = true
|
@@ -188,6 +265,15 @@ module MiniTest
|
|
188
265
|
assert caught, message(msg) { default }
|
189
266
|
end
|
190
267
|
|
268
|
+
##
|
269
|
+
# Captures $stdout and $stderr into strings:
|
270
|
+
#
|
271
|
+
# out, err = capture_io do
|
272
|
+
# warn "You did a bad thing"
|
273
|
+
# end
|
274
|
+
#
|
275
|
+
# assert_match %r%bad%, err
|
276
|
+
|
191
277
|
def capture_io
|
192
278
|
require 'stringio'
|
193
279
|
|
@@ -203,15 +289,24 @@ module MiniTest
|
|
203
289
|
$stderr = orig_stderr
|
204
290
|
end
|
205
291
|
|
292
|
+
##
|
293
|
+
# Returns details for exception +e+
|
294
|
+
|
206
295
|
def exception_details e, msg
|
207
296
|
"#{msg}\nClass: <#{e.class}>\nMessage: <#{e.message.inspect}>\n---Backtrace---\n#{MiniTest::filter_backtrace(e.backtrace).join("\n")}\n---------------"
|
208
297
|
end
|
209
298
|
|
299
|
+
##
|
300
|
+
# Fails with +msg+
|
301
|
+
|
210
302
|
def flunk msg = nil
|
211
303
|
msg ||= "Epic Fail!"
|
212
304
|
assert false, msg
|
213
305
|
end
|
214
306
|
|
307
|
+
##
|
308
|
+
# Returns a proc that will output +msg+ along with the default message.
|
309
|
+
|
215
310
|
def message msg = nil, &default
|
216
311
|
proc {
|
217
312
|
if msg then
|
@@ -225,22 +320,35 @@ module MiniTest
|
|
225
320
|
}
|
226
321
|
end
|
227
322
|
|
323
|
+
##
|
228
324
|
# used for counting assertions
|
325
|
+
|
229
326
|
def pass msg = nil
|
230
327
|
assert true
|
231
328
|
end
|
232
329
|
|
330
|
+
##
|
331
|
+
# Fails if +test+ is a true value
|
332
|
+
|
233
333
|
def refute test, msg = nil
|
234
334
|
msg ||= "Failed refutation, no message given"
|
235
335
|
not assert(! test, msg)
|
236
336
|
end
|
237
337
|
|
338
|
+
##
|
339
|
+
# Fails if +obj+ is empty.
|
340
|
+
|
238
341
|
def refute_empty obj, msg = nil
|
239
342
|
msg = message(msg) { "Expected #{obj.inspect} to not be empty" }
|
240
343
|
assert_respond_to obj, :empty?
|
241
344
|
refute obj.empty?, msg
|
242
345
|
end
|
243
346
|
|
347
|
+
##
|
348
|
+
# Fails if <tt>exp == act</tt>.
|
349
|
+
#
|
350
|
+
# For floats use refute_in_delta.
|
351
|
+
|
244
352
|
def refute_equal exp, act, msg = nil
|
245
353
|
msg = message(msg) {
|
246
354
|
"Expected #{mu_pp(act)} to not be equal to #{mu_pp(exp)}"
|
@@ -248,6 +356,11 @@ module MiniTest
|
|
248
356
|
refute exp == act, msg
|
249
357
|
end
|
250
358
|
|
359
|
+
##
|
360
|
+
# For comparing Floats. Fails if +exp+ is within +delta+ of +act+
|
361
|
+
#
|
362
|
+
# refute_in_delta Math::PI, (22.0 / 7.0)
|
363
|
+
|
251
364
|
def refute_in_delta exp, act, delta = 0.001, msg = nil
|
252
365
|
n = (exp - act).abs
|
253
366
|
msg = message(msg) {
|
@@ -256,10 +369,17 @@ module MiniTest
|
|
256
369
|
refute delta > n, msg
|
257
370
|
end
|
258
371
|
|
372
|
+
##
|
373
|
+
# For comparing Floats. Fails if +exp+ and +act+ have a relative error
|
374
|
+
# less than +epsilon+.
|
375
|
+
|
259
376
|
def refute_in_epsilon a, b, epsilon = 0.001, msg = nil
|
260
377
|
refute_in_delta a, b, a * epsilon, msg
|
261
378
|
end
|
262
379
|
|
380
|
+
##
|
381
|
+
# Fails if +collection+ includes +obj+
|
382
|
+
|
263
383
|
def refute_includes collection, obj, msg = nil
|
264
384
|
msg = message(msg) {
|
265
385
|
"Expected #{mu_pp(collection)} to not include #{mu_pp(obj)}"
|
@@ -268,6 +388,9 @@ module MiniTest
|
|
268
388
|
refute collection.include?(obj), msg
|
269
389
|
end
|
270
390
|
|
391
|
+
##
|
392
|
+
# Fails if +obj+ is an instance of +cls+
|
393
|
+
|
271
394
|
def refute_instance_of cls, obj, msg = nil
|
272
395
|
msg = message(msg) {
|
273
396
|
"Expected #{mu_pp(obj)} to not be an instance of #{cls}"
|
@@ -275,23 +398,38 @@ module MiniTest
|
|
275
398
|
refute obj.instance_of?(cls), msg
|
276
399
|
end
|
277
400
|
|
401
|
+
##
|
402
|
+
# Fails if +obj+ is a kind of +cls+
|
403
|
+
|
278
404
|
def refute_kind_of cls, obj, msg = nil # TODO: merge with instance_of
|
279
405
|
msg = message(msg) { "Expected #{mu_pp(obj)} to not be a kind of #{cls}" }
|
280
406
|
refute obj.kind_of?(cls), msg
|
281
407
|
end
|
282
408
|
|
409
|
+
##
|
410
|
+
# Fails if +exp+ <tt>=~</tt> +act+
|
411
|
+
|
283
412
|
def refute_match exp, act, msg = nil
|
284
413
|
msg = message(msg) { "Expected #{mu_pp(exp)} to not match #{mu_pp(act)}" }
|
285
414
|
assert_respond_to act, :"=~"
|
286
|
-
exp = /#{Regexp.escape
|
415
|
+
exp = (/#{Regexp.escape exp}/) if String === exp and String === act
|
287
416
|
refute exp =~ act, msg
|
288
417
|
end
|
289
418
|
|
419
|
+
##
|
420
|
+
# Fails if +obj+ is nil.
|
421
|
+
|
290
422
|
def refute_nil obj, msg = nil
|
291
423
|
msg = message(msg) { "Expected #{mu_pp(obj)} to not be nil" }
|
292
424
|
refute obj.nil?, msg
|
293
425
|
end
|
294
426
|
|
427
|
+
##
|
428
|
+
# Fails if +o1+ is not +op+ +o2+ nil. eg:
|
429
|
+
#
|
430
|
+
# refute_operator 1, :>, 2 #=> pass
|
431
|
+
# refute_operator 1, :<, 2 #=> fail
|
432
|
+
|
295
433
|
def refute_operator o1, op, o2, msg = nil
|
296
434
|
msg = message(msg) {
|
297
435
|
"Expected #{mu_pp(o1)} to not be #{op} #{mu_pp(o2)}"
|
@@ -299,19 +437,30 @@ module MiniTest
|
|
299
437
|
refute o1.__send__(op, o2), msg
|
300
438
|
end
|
301
439
|
|
440
|
+
##
|
441
|
+
# Fails if +obj+ responds to the message +meth+.
|
442
|
+
|
302
443
|
def refute_respond_to obj, meth, msg = nil
|
303
444
|
msg = message(msg) { "Expected #{mu_pp(obj)} to not respond to #{meth}" }
|
304
445
|
|
305
446
|
refute obj.respond_to?(meth), msg
|
306
447
|
end
|
307
448
|
|
449
|
+
##
|
450
|
+
# Fails if +exp+ is the same (by object identity) as +act+.
|
451
|
+
|
308
452
|
def refute_same exp, act, msg = nil
|
309
453
|
msg = message(msg) {
|
310
|
-
|
454
|
+
data = [mu_pp(act), act.object_id, mu_pp(exp), exp.object_id]
|
455
|
+
"Expected %s (oid=%d) to not be the same as %s (oid=%d)" % data
|
311
456
|
}
|
312
457
|
refute exp.equal?(act), msg
|
313
458
|
end
|
314
459
|
|
460
|
+
##
|
461
|
+
# Skips the current test. Gets listed at the end of the run but
|
462
|
+
# doesn't cause a failure exit code.
|
463
|
+
|
315
464
|
def skip msg = nil, bt = caller
|
316
465
|
msg ||= "Skipped, no message given"
|
317
466
|
raise MiniTest::Skip, msg, bt
|
@@ -319,15 +468,18 @@ module MiniTest
|
|
319
468
|
end
|
320
469
|
|
321
470
|
class Unit
|
322
|
-
VERSION = "1.
|
471
|
+
VERSION = "1.6.0" # :nodoc:
|
323
472
|
|
324
|
-
attr_accessor :report, :failures, :errors, :skips
|
325
|
-
attr_accessor :test_count, :assertion_count
|
326
|
-
attr_accessor :start_time
|
473
|
+
attr_accessor :report, :failures, :errors, :skips # :nodoc:
|
474
|
+
attr_accessor :test_count, :assertion_count # :nodoc:
|
475
|
+
attr_accessor :start_time # :nodoc:
|
327
476
|
|
328
477
|
@@installed_at_exit ||= false
|
329
478
|
@@out = $stdout
|
330
479
|
|
480
|
+
##
|
481
|
+
# Registers MiniTest::Unit to run tests at process exit
|
482
|
+
|
331
483
|
def self.autorun
|
332
484
|
at_exit {
|
333
485
|
next if $! # don't run if there was an exception
|
@@ -337,11 +489,15 @@ module MiniTest
|
|
337
489
|
@@installed_at_exit = true
|
338
490
|
end
|
339
491
|
|
492
|
+
##
|
493
|
+
# Sets MiniTest::Unit to write output to +stream+. $stdout is the default
|
494
|
+
# output
|
495
|
+
|
340
496
|
def self.output= stream
|
341
497
|
@@out = stream
|
342
498
|
end
|
343
499
|
|
344
|
-
def location e
|
500
|
+
def location e # :nodoc:
|
345
501
|
last_before_assertion = ""
|
346
502
|
e.backtrace.reverse_each do |s|
|
347
503
|
break if s =~ /in .(assert|refute|flunk|pass|fail|raise|must|wont)/
|
@@ -350,6 +506,10 @@ module MiniTest
|
|
350
506
|
last_before_assertion.sub(/:in .*$/, '')
|
351
507
|
end
|
352
508
|
|
509
|
+
##
|
510
|
+
# Writes status for failed test +meth+ in +klass+ which finished with
|
511
|
+
# exception +e+
|
512
|
+
|
353
513
|
def puke klass, meth, e
|
354
514
|
e = case e
|
355
515
|
when MiniTest::Skip then
|
@@ -367,25 +527,60 @@ module MiniTest
|
|
367
527
|
e[0, 1]
|
368
528
|
end
|
369
529
|
|
370
|
-
def initialize
|
530
|
+
def initialize # :nodoc:
|
371
531
|
@report = []
|
372
532
|
@errors = @failures = @skips = 0
|
373
533
|
@verbose = false
|
374
534
|
end
|
375
535
|
|
536
|
+
def process_args args = []
|
537
|
+
options = {}
|
538
|
+
|
539
|
+
OptionParser.new do |opts|
|
540
|
+
opts.banner = 'minitest options:'
|
541
|
+
opts.version = MiniTest::Unit::VERSION
|
542
|
+
|
543
|
+
opts.on '-h', '--help', 'Display this help.' do
|
544
|
+
puts opts
|
545
|
+
exit
|
546
|
+
end
|
547
|
+
|
548
|
+
opts.on '-s', '--seed SEED', Integer, "Sets random seed" do |m|
|
549
|
+
options[:seed] = m.to_i
|
550
|
+
end
|
551
|
+
|
552
|
+
opts.on '-v', '--verbose', "Verbose. Show progress processing files." do
|
553
|
+
options[:verbose] = true
|
554
|
+
end
|
555
|
+
|
556
|
+
opts.on '-n', '--name PATTERN', "Filter test names on pattern." do |a|
|
557
|
+
options[:filter] = a
|
558
|
+
end
|
559
|
+
|
560
|
+
opts.parse args
|
561
|
+
end
|
562
|
+
|
563
|
+
options
|
564
|
+
end
|
565
|
+
|
376
566
|
##
|
377
567
|
# Top level driver, controls all output and filtering.
|
378
568
|
|
379
569
|
def run args = []
|
380
|
-
|
570
|
+
options = process_args args
|
571
|
+
|
572
|
+
@verbose = options[:verbose]
|
573
|
+
|
574
|
+
filter = options[:filter] || '/./'
|
575
|
+
filter = Regexp.new $1 if filter and filter =~ /\/(.*)\//
|
576
|
+
|
577
|
+
seed = options[:seed]
|
578
|
+
unless seed then
|
579
|
+
srand
|
580
|
+
seed = srand % 0xFFFF
|
581
|
+
end
|
381
582
|
|
382
|
-
|
383
|
-
args.shift
|
384
|
-
arg = args.shift
|
385
|
-
arg =~ /\/(.*)\// ? Regexp.new($1) : arg
|
386
|
-
else
|
387
|
-
/./ # anything - ^test_ already filtered by #tests
|
388
|
-
end
|
583
|
+
srand seed
|
389
584
|
|
390
585
|
@@out.puts "Loaded suite #{$0.sub(/\.rb$/, '')}\nStarted"
|
391
586
|
|
@@ -403,16 +598,30 @@ module MiniTest
|
|
403
598
|
|
404
599
|
status
|
405
600
|
|
601
|
+
@@out.puts
|
602
|
+
|
603
|
+
help = ["--seed", seed]
|
604
|
+
help.push "--verbose" if @verbose
|
605
|
+
help.push("--name", options[:filter].inspect) if options[:filter]
|
606
|
+
|
607
|
+
@@out.puts "Test run options: #{help.join(" ")}"
|
608
|
+
|
406
609
|
return failures + errors if @test_count > 0 # or return nil...
|
407
610
|
rescue Interrupt
|
408
611
|
abort 'Interrupted'
|
409
612
|
end
|
410
613
|
|
614
|
+
##
|
615
|
+
# Writes status to +io+
|
616
|
+
|
411
617
|
def status io = @@out
|
412
618
|
format = "%d tests, %d assertions, %d failures, %d errors, %d skips"
|
413
619
|
io.puts format % [test_count, assertion_count, failures, errors, skips]
|
414
620
|
end
|
415
621
|
|
622
|
+
##
|
623
|
+
# Runs test suites matching +filter+
|
624
|
+
|
416
625
|
def run_test_suites filter = /./
|
417
626
|
@test_count, @assertion_count = 0, 0
|
418
627
|
old_sync, @@out.sync = @@out.sync, true if @@out.respond_to? :sync=
|
@@ -436,13 +645,20 @@ module MiniTest
|
|
436
645
|
[@test_count, @assertion_count]
|
437
646
|
end
|
438
647
|
|
648
|
+
##
|
649
|
+
# Subclass TestCase to create your own tests. Typically you'll want a
|
650
|
+
# TestCase subclass per implementation class.
|
651
|
+
|
439
652
|
class TestCase
|
440
|
-
attr_reader :__name__
|
653
|
+
attr_reader :__name__ # :nodoc:
|
441
654
|
|
442
|
-
PASSTHROUGH_EXCEPTIONS = [NoMemoryError, SignalException,
|
443
|
-
|
655
|
+
PASSTHROUGH_EXCEPTIONS = [NoMemoryError, SignalException,
|
656
|
+
Interrupt, SystemExit] # :nodoc:
|
444
657
|
|
445
|
-
SUPPORTS_INFO_SIGNAL = Signal.list['INFO']
|
658
|
+
SUPPORTS_INFO_SIGNAL = Signal.list['INFO'] # :nodoc:
|
659
|
+
|
660
|
+
##
|
661
|
+
# Runs the tests reporting the status to +runner+
|
446
662
|
|
447
663
|
def run runner
|
448
664
|
trap 'INFO' do
|
@@ -475,61 +691,79 @@ module MiniTest
|
|
475
691
|
result
|
476
692
|
end
|
477
693
|
|
478
|
-
def initialize name
|
694
|
+
def initialize name # :nodoc:
|
479
695
|
@__name__ = name
|
480
696
|
@passed = nil
|
481
697
|
end
|
482
698
|
|
483
|
-
def self.reset
|
699
|
+
def self.reset # :nodoc:
|
484
700
|
@@test_suites = {}
|
485
701
|
end
|
486
702
|
|
487
703
|
reset
|
488
704
|
|
489
|
-
def self.inherited klass
|
705
|
+
def self.inherited klass # :nodoc:
|
490
706
|
@@test_suites[klass] = true
|
491
707
|
end
|
492
708
|
|
709
|
+
##
|
710
|
+
# Defines test order and is subclassable. Defaults to :random
|
711
|
+
# but can be overridden to return :alpha if your tests are order
|
712
|
+
# dependent (read: weak).
|
713
|
+
|
493
714
|
def self.test_order
|
494
715
|
:random
|
495
716
|
end
|
496
717
|
|
497
|
-
def self.test_suites
|
718
|
+
def self.test_suites # :nodoc:
|
498
719
|
@@test_suites.keys.sort_by { |ts| ts.name }
|
499
720
|
end
|
500
721
|
|
501
|
-
def self.test_methods
|
502
|
-
methods = public_instance_methods(true).grep(/^test/).map { |m|
|
503
|
-
m.to_s
|
504
|
-
}.sort
|
722
|
+
def self.test_methods # :nodoc:
|
723
|
+
methods = public_instance_methods(true).grep(/^test/).map { |m| m.to_s }
|
505
724
|
|
506
|
-
|
725
|
+
case self.test_order
|
726
|
+
when :random then
|
507
727
|
max = methods.size
|
508
|
-
methods
|
728
|
+
methods.sort.sort_by { rand(max) }
|
729
|
+
when :alpha, :sorted then
|
730
|
+
methods.sort
|
731
|
+
else
|
732
|
+
raise "Unknown test_order: #{self.test_order.inspect}"
|
509
733
|
end
|
510
|
-
|
511
|
-
methods
|
512
734
|
end
|
513
735
|
|
514
|
-
|
515
|
-
|
736
|
+
##
|
737
|
+
# Returns true if the test passed.
|
516
738
|
|
517
739
|
def passed?
|
518
740
|
@passed
|
519
741
|
end
|
520
742
|
|
743
|
+
##
|
744
|
+
# Runs before every test. Use this to refactor test initialization.
|
745
|
+
|
746
|
+
def setup; end
|
747
|
+
|
748
|
+
##
|
749
|
+
# Runs after every test. Use this to refactor test cleanup.
|
750
|
+
|
751
|
+
def teardown; end
|
752
|
+
|
521
753
|
include MiniTest::Assertions
|
522
754
|
end # class TestCase
|
523
755
|
end # class Unit
|
524
756
|
end # module MiniTest
|
525
757
|
|
526
758
|
if $DEBUG then
|
527
|
-
#
|
528
|
-
|
529
|
-
|
530
|
-
|
531
|
-
|
532
|
-
|
759
|
+
module Test # :nodoc:
|
760
|
+
module Unit # :nodoc:
|
761
|
+
class TestCase # :nodoc:
|
762
|
+
def self.inherited x # :nodoc:
|
763
|
+
# this helps me ferret out porting issues
|
764
|
+
raise "Using minitest and test/unit in the same process: #{x}"
|
765
|
+
end
|
766
|
+
end
|
533
767
|
end
|
534
768
|
end
|
535
769
|
end
|
data/test/test_mini_spec.rb
CHANGED
@@ -11,6 +11,9 @@ describe MiniTest::Spec do
|
|
11
11
|
self._assertions.must_equal @assertion_count
|
12
12
|
end
|
13
13
|
|
14
|
+
# TODO: figure out how the hell to write a test for this
|
15
|
+
# it "will skip if there is no block"
|
16
|
+
|
14
17
|
it "needs to have all methods named well" do
|
15
18
|
@assertion_count = 2
|
16
19
|
|
data/test/test_mini_test.rb
CHANGED
@@ -201,7 +201,7 @@ class TestMiniTest < MiniTest::Unit::TestCase
|
|
201
201
|
|
202
202
|
Object.const_set(:ATestCase, tc)
|
203
203
|
|
204
|
-
@tu.run
|
204
|
+
@tu.run %w[-s 42]
|
205
205
|
|
206
206
|
expected = "Loaded suite blah
|
207
207
|
Started
|
@@ -213,6 +213,8 @@ test_failure(ATestCase) [FILE:LINE]:
|
|
213
213
|
Failed assertion, no message given.
|
214
214
|
|
215
215
|
2 tests, 2 assertions, 1 failures, 0 errors, 0 skips
|
216
|
+
|
217
|
+
Test run options: --seed 42
|
216
218
|
"
|
217
219
|
util_assert_report expected
|
218
220
|
end
|
@@ -230,7 +232,7 @@ Failed assertion, no message given.
|
|
230
232
|
|
231
233
|
Object.const_set(:ATestCase, tc)
|
232
234
|
|
233
|
-
@tu.run
|
235
|
+
@tu.run %w[-s 42]
|
234
236
|
|
235
237
|
expected = "Loaded suite blah
|
236
238
|
Started
|
@@ -243,6 +245,8 @@ RuntimeError: unhandled exception
|
|
243
245
|
FILE:LINE:in `test_error'
|
244
246
|
|
245
247
|
2 tests, 1 assertions, 0 failures, 1 errors, 0 skips
|
248
|
+
|
249
|
+
Test run options: --seed 42
|
246
250
|
"
|
247
251
|
util_assert_report expected
|
248
252
|
end
|
@@ -260,7 +264,7 @@ RuntimeError: unhandled exception
|
|
260
264
|
|
261
265
|
Object.const_set(:ATestCase, tc)
|
262
266
|
|
263
|
-
@tu.run
|
267
|
+
@tu.run %w[-s 42]
|
264
268
|
|
265
269
|
expected = "Loaded suite blah
|
266
270
|
Started
|
@@ -273,6 +277,8 @@ RuntimeError: unhandled exception
|
|
273
277
|
FILE:LINE:in `teardown'
|
274
278
|
|
275
279
|
1 tests, 1 assertions, 0 failures, 1 errors, 0 skips
|
280
|
+
|
281
|
+
Test run options: --seed 42
|
276
282
|
"
|
277
283
|
util_assert_report expected
|
278
284
|
end
|
@@ -290,7 +296,7 @@ RuntimeError: unhandled exception
|
|
290
296
|
|
291
297
|
Object.const_set(:ATestCase, tc)
|
292
298
|
|
293
|
-
@tu.run
|
299
|
+
@tu.run %w[-s 42]
|
294
300
|
|
295
301
|
expected = "Loaded suite blah
|
296
302
|
Started
|
@@ -302,6 +308,8 @@ test_skip(ATestCase) [FILE:LINE]:
|
|
302
308
|
not yet
|
303
309
|
|
304
310
|
2 tests, 1 assertions, 0 failures, 0 errors, 1 skips
|
311
|
+
|
312
|
+
Test run options: --seed 42
|
305
313
|
"
|
306
314
|
util_assert_report expected
|
307
315
|
end
|
@@ -313,6 +321,8 @@ Started
|
|
313
321
|
Finished in 0.00
|
314
322
|
|
315
323
|
1 tests, 1 assertions, 0 failures, 0 errors, 0 skips
|
324
|
+
|
325
|
+
Test run options: --seed 42
|
316
326
|
"
|
317
327
|
output = @output.string.sub(/Finished in .*/, "Finished in 0.00")
|
318
328
|
output.sub!(/Loaded suite .*/, 'Loaded suite blah')
|
@@ -334,9 +344,18 @@ Finished in 0.00
|
|
334
344
|
|
335
345
|
Object.const_set(:ATestCase, tc)
|
336
346
|
|
337
|
-
@tu.run
|
347
|
+
@tu.run %w[-n /something/ -s 42]
|
338
348
|
|
339
|
-
|
349
|
+
expected = "Loaded suite blah
|
350
|
+
Started
|
351
|
+
.
|
352
|
+
Finished in 0.00
|
353
|
+
|
354
|
+
1 tests, 1 assertions, 0 failures, 0 errors, 0 skips
|
355
|
+
|
356
|
+
Test run options: --seed 42 --name \"/something/\"
|
357
|
+
"
|
358
|
+
util_assert_report expected
|
340
359
|
end
|
341
360
|
|
342
361
|
def test_run_passing
|
@@ -348,7 +367,7 @@ Finished in 0.00
|
|
348
367
|
|
349
368
|
Object.const_set(:ATestCase, tc)
|
350
369
|
|
351
|
-
@tu.run
|
370
|
+
@tu.run %w[-s 42]
|
352
371
|
|
353
372
|
util_assert_report
|
354
373
|
end
|
@@ -697,14 +716,14 @@ FILE:LINE:in `test_assert_raises_triggered_subclass'
|
|
697
716
|
def test_assert_same_triggered
|
698
717
|
@assertion_count = 2
|
699
718
|
|
700
|
-
util_assert_triggered 'Expected 2 (
|
719
|
+
util_assert_triggered 'Expected 2 (oid=N) to be the same as 1 (oid=N).' do
|
701
720
|
@tc.assert_same 1, 2
|
702
721
|
end
|
703
722
|
|
704
723
|
s1 = "blah"
|
705
724
|
s2 = "blah"
|
706
725
|
|
707
|
-
util_assert_triggered 'Expected "blah" (
|
726
|
+
util_assert_triggered 'Expected "blah" (oid=N) to be the same as "blah" (oid=N).' do
|
708
727
|
@tc.assert_same s1, s2
|
709
728
|
end
|
710
729
|
end
|
@@ -780,16 +799,11 @@ FILE:LINE:in `test_assert_raises_triggered_subclass'
|
|
780
799
|
def test_test_methods_sorted
|
781
800
|
@assertion_count = 0
|
782
801
|
|
783
|
-
sample_test_case = Class.new(MiniTest::Unit::TestCase)
|
784
|
-
|
785
|
-
|
786
|
-
def
|
787
|
-
|
788
|
-
|
789
|
-
sample_test_case.instance_eval do
|
790
|
-
define_method :test_test3 do assert "does not matter" end
|
791
|
-
define_method :test_test2 do assert "does not matter" end
|
792
|
-
define_method :test_test1 do assert "does not matter" end
|
802
|
+
sample_test_case = Class.new(MiniTest::Unit::TestCase) do
|
803
|
+
def self.test_order; :sorted end
|
804
|
+
def test_test3; assert "does not matter" end
|
805
|
+
def test_test2; assert "does not matter" end
|
806
|
+
def test_test1; assert "does not matter" end
|
793
807
|
end
|
794
808
|
|
795
809
|
expected = %w(test_test1 test_test2 test_test3)
|
@@ -799,27 +813,15 @@ FILE:LINE:in `test_assert_raises_triggered_subclass'
|
|
799
813
|
def test_test_methods_random
|
800
814
|
@assertion_count = 0
|
801
815
|
|
802
|
-
sample_test_case = Class.new(MiniTest::Unit::TestCase)
|
803
|
-
|
804
|
-
|
805
|
-
def
|
816
|
+
sample_test_case = Class.new(MiniTest::Unit::TestCase) do
|
817
|
+
def test_test1; assert "does not matter" end
|
818
|
+
def test_test2; assert "does not matter" end
|
819
|
+
def test_test3; assert "does not matter" end
|
806
820
|
end
|
807
821
|
|
808
|
-
sample_test_case.instance_eval do
|
809
|
-
define_method :test_test1 do assert "does not matter" end
|
810
|
-
define_method :test_test2 do assert "does not matter" end
|
811
|
-
define_method :test_test3 do assert "does not matter" end
|
812
|
-
end
|
813
|
-
|
814
|
-
srand 42
|
815
|
-
expected = %w(test_test1 test_test2 test_test3)
|
816
|
-
max = expected.size
|
817
|
-
expected = expected.sort_by { rand(max) }
|
818
|
-
|
819
822
|
srand 42
|
820
|
-
|
821
|
-
|
822
|
-
assert_equal expected, result
|
823
|
+
expected = %w(test_test2 test_test1 test_test3)
|
824
|
+
assert_equal expected, sample_test_case.test_methods
|
823
825
|
end
|
824
826
|
|
825
827
|
def test_refute
|
@@ -985,9 +987,8 @@ FILE:LINE:in `test_assert_raises_triggered_subclass'
|
|
985
987
|
@tc.refute_same 1, 2
|
986
988
|
end
|
987
989
|
|
988
|
-
# TODO: "with id <id>" crap from assertions.rb
|
989
990
|
def test_refute_same_triggered
|
990
|
-
util_assert_triggered 'Expected 1 to not be the same as 1.' do
|
991
|
+
util_assert_triggered 'Expected 1 (oid=N) to not be the same as 1 (oid=N).' do
|
991
992
|
@tc.refute_same 1, 1
|
992
993
|
end
|
993
994
|
end
|
@@ -1006,7 +1007,7 @@ FILE:LINE:in `test_assert_raises_triggered_subclass'
|
|
1006
1007
|
end
|
1007
1008
|
|
1008
1009
|
msg = e.message.sub(/(---Backtrace---).*/m, '\1')
|
1009
|
-
msg.gsub!(/\(
|
1010
|
+
msg.gsub!(/\(oid=[-0-9]+\)/, '(oid=N)')
|
1010
1011
|
|
1011
1012
|
assert_equal expected, msg
|
1012
1013
|
end
|
metadata
CHANGED
@@ -1,7 +1,12 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: minitest
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
|
4
|
+
prerelease: false
|
5
|
+
segments:
|
6
|
+
- 1
|
7
|
+
- 6
|
8
|
+
- 0
|
9
|
+
version: 1.6.0
|
5
10
|
platform: ruby
|
6
11
|
authors:
|
7
12
|
- Ryan Davis
|
@@ -30,49 +35,51 @@ cert_chain:
|
|
30
35
|
FBHgymkyj/AOSqKRIpXPhjC6
|
31
36
|
-----END CERTIFICATE-----
|
32
37
|
|
33
|
-
date: 2010-
|
38
|
+
date: 2010-03-27 00:00:00 -07:00
|
34
39
|
default_executable:
|
35
40
|
dependencies:
|
36
41
|
- !ruby/object:Gem::Dependency
|
37
42
|
name: rubyforge
|
38
|
-
|
39
|
-
|
40
|
-
version_requirements: !ruby/object:Gem::Requirement
|
43
|
+
prerelease: false
|
44
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
41
45
|
requirements:
|
42
46
|
- - ">="
|
43
47
|
- !ruby/object:Gem::Version
|
48
|
+
segments:
|
49
|
+
- 2
|
50
|
+
- 0
|
51
|
+
- 3
|
44
52
|
version: 2.0.3
|
45
|
-
version:
|
46
|
-
- !ruby/object:Gem::Dependency
|
47
|
-
name: gemcutter
|
48
53
|
type: :development
|
49
|
-
|
50
|
-
version_requirements: !ruby/object:Gem::Requirement
|
51
|
-
requirements:
|
52
|
-
- - ">="
|
53
|
-
- !ruby/object:Gem::Version
|
54
|
-
version: 0.2.1
|
55
|
-
version:
|
54
|
+
version_requirements: *id001
|
56
55
|
- !ruby/object:Gem::Dependency
|
57
56
|
name: minitest
|
58
|
-
|
59
|
-
|
60
|
-
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
prerelease: false
|
58
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
61
59
|
requirements:
|
62
60
|
- - ">="
|
63
61
|
- !ruby/object:Gem::Version
|
64
|
-
|
65
|
-
|
62
|
+
segments:
|
63
|
+
- 1
|
64
|
+
- 5
|
65
|
+
- 0
|
66
|
+
version: 1.5.0
|
67
|
+
type: :development
|
68
|
+
version_requirements: *id002
|
66
69
|
- !ruby/object:Gem::Dependency
|
67
70
|
name: hoe
|
68
|
-
|
69
|
-
|
70
|
-
version_requirements: !ruby/object:Gem::Requirement
|
71
|
+
prerelease: false
|
72
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
71
73
|
requirements:
|
72
74
|
- - ">="
|
73
75
|
- !ruby/object:Gem::Version
|
74
|
-
|
75
|
-
|
76
|
+
segments:
|
77
|
+
- 2
|
78
|
+
- 6
|
79
|
+
- 0
|
80
|
+
version: 2.6.0
|
81
|
+
type: :development
|
82
|
+
version_requirements: *id003
|
76
83
|
description: |-
|
77
84
|
minitest/unit is a small and fast replacement for ruby's huge and slow
|
78
85
|
test/unit. This is meant to be clean and easy to use both as a regular
|
@@ -122,18 +129,20 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
122
129
|
requirements:
|
123
130
|
- - ">="
|
124
131
|
- !ruby/object:Gem::Version
|
132
|
+
segments:
|
133
|
+
- 0
|
125
134
|
version: "0"
|
126
|
-
version:
|
127
135
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
128
136
|
requirements:
|
129
137
|
- - ">="
|
130
138
|
- !ruby/object:Gem::Version
|
139
|
+
segments:
|
140
|
+
- 0
|
131
141
|
version: "0"
|
132
|
-
version:
|
133
142
|
requirements: []
|
134
143
|
|
135
144
|
rubyforge_project: bfts
|
136
|
-
rubygems_version: 1.3.
|
145
|
+
rubygems_version: 1.3.6
|
137
146
|
signing_key:
|
138
147
|
specification_version: 3
|
139
148
|
summary: minitest/unit is a small and fast replacement for ruby's huge and slow test/unit
|
metadata.gz.sig
CHANGED
Binary file
|