test-unit 3.2.9 → 3.5.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/BSDL +24 -0
- data/COPYING +41 -44
- data/README.md +18 -11
- data/Rakefile +0 -23
- data/doc/text/getting-started.md +2 -2
- data/doc/text/news.md +329 -1
- data/lib/test/unit/assertion-failed-error.rb +35 -0
- data/lib/test/unit/assertions.rb +453 -161
- data/lib/test/unit/attribute.rb +3 -1
- data/lib/test/unit/autorunner.rb +78 -30
- data/lib/test/unit/code-snippet-fetcher.rb +7 -7
- data/lib/test/unit/collector/descendant.rb +1 -0
- data/lib/test/unit/collector/dir.rb +4 -2
- data/lib/test/unit/collector/load.rb +3 -3
- data/lib/test/unit/collector/objectspace.rb +1 -0
- data/lib/test/unit/collector.rb +31 -0
- data/lib/test/unit/color-scheme.rb +20 -2
- data/lib/test/unit/data-sets.rb +26 -15
- data/lib/test/unit/data.rb +5 -5
- data/lib/test/unit/diff.rb +2 -3
- data/lib/test/unit/fixture.rb +6 -0
- data/lib/test/unit/notification.rb +9 -7
- data/lib/test/unit/omission.rb +34 -31
- data/lib/test/unit/pending.rb +12 -11
- data/lib/test/unit/priority.rb +7 -5
- data/lib/test/unit/runner/console.rb +0 -17
- data/lib/test/unit/testcase.rb +222 -146
- data/lib/test/unit/testsuite.rb +1 -1
- data/lib/test/unit/ui/console/testrunner.rb +58 -49
- data/lib/test/unit/util/memory-usage.rb +47 -0
- data/lib/test/unit/util/observable.rb +2 -2
- data/lib/test/unit/util/output.rb +5 -4
- data/lib/test/unit/version.rb +1 -1
- data/lib/test/unit/warning.rb +3 -0
- data/lib/test/unit.rb +177 -161
- data/lib/test-unit.rb +2 -17
- metadata +14 -91
- data/GPL +0 -339
- data/LGPL +0 -502
- data/test/collector/test-descendant.rb +0 -182
- data/test/collector/test-load.rb +0 -442
- data/test/collector/test_dir.rb +0 -407
- data/test/collector/test_objectspace.rb +0 -102
- data/test/fixtures/header-label.csv +0 -3
- data/test/fixtures/header-label.tsv +0 -3
- data/test/fixtures/header.csv +0 -3
- data/test/fixtures/header.tsv +0 -3
- data/test/fixtures/no-header.csv +0 -2
- data/test/fixtures/no-header.tsv +0 -2
- data/test/fixtures/plus.csv +0 -3
- data/test/run-test.rb +0 -22
- data/test/test-assertions.rb +0 -2180
- data/test/test-attribute-matcher.rb +0 -38
- data/test/test-attribute.rb +0 -123
- data/test/test-code-snippet.rb +0 -37
- data/test/test-color-scheme.rb +0 -82
- data/test/test-color.rb +0 -47
- data/test/test-data.rb +0 -419
- data/test/test-diff.rb +0 -518
- data/test/test-emacs-runner.rb +0 -60
- data/test/test-error.rb +0 -26
- data/test/test-failure.rb +0 -33
- data/test/test-fault-location-detector.rb +0 -163
- data/test/test-fixture.rb +0 -713
- data/test/test-notification.rb +0 -33
- data/test/test-omission.rb +0 -81
- data/test/test-pending.rb +0 -70
- data/test/test-priority.rb +0 -173
- data/test/test-test-case.rb +0 -1279
- data/test/test-test-result.rb +0 -113
- data/test/test-test-suite-creator.rb +0 -97
- data/test/test-test-suite.rb +0 -151
- data/test/testunit-test-util.rb +0 -31
- data/test/ui/test_testrunmediator.rb +0 -20
- data/test/util/test-method-owner-finder.rb +0 -38
- data/test/util/test-output.rb +0 -11
- data/test/util/test_backtracefilter.rb +0 -52
- data/test/util/test_observable.rb +0 -102
- data/test/util/test_procwrapper.rb +0 -36
data/lib/test/unit/pending.rb
CHANGED
@@ -65,19 +65,20 @@ module Test
|
|
65
65
|
# Marks the test or part of the test is pending.
|
66
66
|
#
|
67
67
|
# Example:
|
68
|
-
# def test_pending
|
69
|
-
# pend
|
70
|
-
# # Not reached here
|
71
|
-
# end
|
72
68
|
#
|
73
|
-
#
|
74
|
-
#
|
75
|
-
# #
|
76
|
-
#
|
77
|
-
#
|
69
|
+
# def test_pending
|
70
|
+
# pend
|
71
|
+
# # Not reached here
|
72
|
+
# end
|
73
|
+
#
|
74
|
+
# def test_pending_with_here
|
75
|
+
# pend do
|
76
|
+
# # Ran here
|
77
|
+
# # Fails if the block doesn't raise any error.
|
78
|
+
# # Because it means the block is passed unexpectedly.
|
79
|
+
# end
|
80
|
+
# # Reached here
|
78
81
|
# end
|
79
|
-
# # Reached here
|
80
|
-
# end
|
81
82
|
def pend(message=nil, &block)
|
82
83
|
message ||= "pended."
|
83
84
|
if block_given?
|
data/lib/test/unit/priority.rb
CHANGED
@@ -1,5 +1,3 @@
|
|
1
|
-
require "fileutils"
|
2
|
-
|
3
1
|
module Test
|
4
2
|
module Unit
|
5
3
|
module Priority
|
@@ -148,15 +146,19 @@ module Test
|
|
148
146
|
end
|
149
147
|
|
150
148
|
def escape_class_name(class_name)
|
151
|
-
class_name
|
149
|
+
escape_name(class_name)
|
152
150
|
end
|
153
151
|
|
154
152
|
def escaped_method_name
|
155
|
-
@test.method_name.to_s
|
153
|
+
escape_name(@test.method_name.to_s)
|
154
|
+
end
|
155
|
+
|
156
|
+
def escape_name(name)
|
157
|
+
name.gsub(/(?:[: \/!?=])/) do |matched|
|
156
158
|
case matched
|
157
159
|
when ":"
|
158
160
|
"_colon_"
|
159
|
-
when " "
|
161
|
+
when " ", "/"
|
160
162
|
"_"
|
161
163
|
when "!"
|
162
164
|
".destructive"
|
@@ -1,21 +1,4 @@
|
|
1
1
|
# Copyright (C) 2008-2017 Kouhei Sutou <kou@clear-code.com>
|
2
|
-
#
|
3
|
-
# License: Ruby OR LGPL-2.1+
|
4
|
-
#
|
5
|
-
# This library is free software; you can redistribute it and/or
|
6
|
-
# modify it under the terms of the GNU Lesser General Public
|
7
|
-
# License as published by the Free Software Foundation; either
|
8
|
-
# version 2.1 of the License, or (at your option) any later version.
|
9
|
-
#
|
10
|
-
# This library is distributed in the hope that it will be useful,
|
11
|
-
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
12
|
-
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
13
|
-
# Lesser General Public License for more details.
|
14
|
-
#
|
15
|
-
# You should have received a copy of the GNU Lesser General Public
|
16
|
-
# License along with this library; if not, write to the Free Software
|
17
|
-
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
18
|
-
# 02110-1301 USA
|
19
2
|
|
20
3
|
module Test
|
21
4
|
module Unit
|
data/lib/test/unit/testcase.rb
CHANGED
@@ -130,6 +130,16 @@ module Test
|
|
130
130
|
super
|
131
131
|
end
|
132
132
|
|
133
|
+
def include(*modules, &block) # :nodoc:
|
134
|
+
result = super
|
135
|
+
modules.each do |mod|
|
136
|
+
mod.public_instance_methods(false).each do |method_name|
|
137
|
+
AutoRunnerLoader.check(self, method_name.to_s)
|
138
|
+
end
|
139
|
+
end
|
140
|
+
result
|
141
|
+
end
|
142
|
+
|
133
143
|
@@added_method_names = {}
|
134
144
|
def method_added(name) # :nodoc:
|
135
145
|
super
|
@@ -150,11 +160,12 @@ module Test
|
|
150
160
|
path, line, = caller[0].split(/:(\d+)/, 2)
|
151
161
|
line = line.to_i if line
|
152
162
|
end
|
153
|
-
|
163
|
+
location = {
|
154
164
|
:method_name => stringified_name,
|
155
165
|
:path => File.expand_path(path),
|
156
166
|
:line => line,
|
157
167
|
}
|
168
|
+
add_method_location(location)
|
158
169
|
added_method_names[stringified_name] = true
|
159
170
|
AutoRunnerLoader.check(self, stringified_name)
|
160
171
|
end
|
@@ -176,27 +187,29 @@ module Test
|
|
176
187
|
# scope.
|
177
188
|
#
|
178
189
|
# Here is an example test case:
|
179
|
-
#
|
180
|
-
# class
|
181
|
-
#
|
182
|
-
#
|
190
|
+
#
|
191
|
+
# class TestMyClass < Test::Unit::TestCase
|
192
|
+
# class << self
|
193
|
+
# def startup
|
194
|
+
# ...
|
195
|
+
# end
|
183
196
|
# end
|
184
|
-
# end
|
185
197
|
#
|
186
|
-
#
|
187
|
-
#
|
188
|
-
#
|
198
|
+
# def setup
|
199
|
+
# ...
|
200
|
+
# end
|
189
201
|
#
|
190
|
-
#
|
191
|
-
#
|
192
|
-
#
|
202
|
+
# def test_my_class1
|
203
|
+
# ...
|
204
|
+
# end
|
193
205
|
#
|
194
|
-
#
|
195
|
-
#
|
206
|
+
# def test_my_class2
|
207
|
+
# ...
|
208
|
+
# end
|
196
209
|
# end
|
197
|
-
# end
|
198
210
|
#
|
199
211
|
# Here is a call order:
|
212
|
+
#
|
200
213
|
# * startup
|
201
214
|
# * setup
|
202
215
|
# * test_my_class1 (or test_my_class2)
|
@@ -212,27 +225,29 @@ module Test
|
|
212
225
|
# down fixture information used in test case scope.
|
213
226
|
#
|
214
227
|
# Here is an example test case:
|
215
|
-
#
|
216
|
-
# class
|
217
|
-
#
|
218
|
-
#
|
228
|
+
#
|
229
|
+
# class TestMyClass < Test::Unit::TestCase
|
230
|
+
# class << self
|
231
|
+
# def shutdown
|
232
|
+
# ...
|
233
|
+
# end
|
219
234
|
# end
|
220
|
-
# end
|
221
235
|
#
|
222
|
-
#
|
223
|
-
#
|
224
|
-
#
|
236
|
+
# def teardown
|
237
|
+
# ...
|
238
|
+
# end
|
225
239
|
#
|
226
|
-
#
|
227
|
-
#
|
228
|
-
#
|
240
|
+
# def test_my_class1
|
241
|
+
# ...
|
242
|
+
# end
|
229
243
|
#
|
230
|
-
#
|
231
|
-
#
|
244
|
+
# def test_my_class2
|
245
|
+
# ...
|
246
|
+
# end
|
232
247
|
# end
|
233
|
-
# end
|
234
248
|
#
|
235
249
|
# Here is a call order:
|
250
|
+
#
|
236
251
|
# * test_my_class1 (or test_my_class2)
|
237
252
|
# * teardown
|
238
253
|
# * test_my_class2 (or test_my_class1)
|
@@ -247,7 +262,7 @@ module Test
|
|
247
262
|
@@test_orders = {}
|
248
263
|
|
249
264
|
# Returns the current test order. This returns
|
250
|
-
#
|
265
|
+
# `:alphabetic` by default.
|
251
266
|
def test_order
|
252
267
|
ancestors.each do |ancestor|
|
253
268
|
order = @@test_orders[ancestor]
|
@@ -259,12 +274,15 @@ module Test
|
|
259
274
|
# Sets the current test order.
|
260
275
|
#
|
261
276
|
# Here are the available _order_:
|
262
|
-
#
|
263
|
-
#
|
264
|
-
#
|
265
|
-
#
|
266
|
-
#
|
267
|
-
#
|
277
|
+
#
|
278
|
+
# :alphabetic
|
279
|
+
# : Default. Tests are sorted in alphabetic order.
|
280
|
+
#
|
281
|
+
# :random
|
282
|
+
# : Tests are sorted in random order.
|
283
|
+
#
|
284
|
+
# :defined
|
285
|
+
# : Tests are sorted in defined order.
|
268
286
|
def test_order=(order)
|
269
287
|
@@test_orders[self] = order
|
270
288
|
end
|
@@ -275,22 +293,22 @@ module Test
|
|
275
293
|
# In declarative syntax usage, the following two
|
276
294
|
# test definitions are the almost same:
|
277
295
|
#
|
278
|
-
#
|
279
|
-
#
|
280
|
-
#
|
281
|
-
#
|
296
|
+
# description "register user"
|
297
|
+
# def test_register_user
|
298
|
+
# ...
|
299
|
+
# end
|
282
300
|
#
|
283
|
-
#
|
284
|
-
#
|
285
|
-
#
|
301
|
+
# test "register user" do
|
302
|
+
# ...
|
303
|
+
# end
|
286
304
|
#
|
287
305
|
# In test method mark usage, the "my_test_method" is
|
288
306
|
# treated as a test method:
|
289
307
|
#
|
290
|
-
#
|
291
|
-
#
|
292
|
-
#
|
293
|
-
#
|
308
|
+
# test
|
309
|
+
# def my_test_method
|
310
|
+
# assert_equal("call me", ...)
|
311
|
+
# end
|
294
312
|
def test(*test_description_or_targets, &block)
|
295
313
|
if block_given?
|
296
314
|
test_description = test_description_or_targets.first
|
@@ -324,35 +342,67 @@ module Test
|
|
324
342
|
# normal user" description with "test_register"
|
325
343
|
# test.
|
326
344
|
#
|
327
|
-
#
|
328
|
-
#
|
329
|
-
#
|
330
|
-
#
|
345
|
+
# description "register a normal user"
|
346
|
+
# def test_register
|
347
|
+
# ...
|
348
|
+
# end
|
331
349
|
def description(value, target=nil)
|
332
350
|
targets = [target].compact
|
333
351
|
attribute(:description, value, {}, *targets)
|
334
352
|
end
|
335
353
|
|
354
|
+
# Declares that the following test uses Ractor.
|
355
|
+
#
|
356
|
+
# Tests that use Ractor are executed at the end. Because multi
|
357
|
+
# Ractor mode is enabled in the current process and it's not
|
358
|
+
# disabled even when only one Ractor is running after running
|
359
|
+
# a test that uses Ractor on Ruby 3.0. It will be solved in
|
360
|
+
# Ruby 3.1.
|
361
|
+
#
|
362
|
+
# This is implemented by setting the `:ractor` attribute of
|
363
|
+
# the test to `true`.
|
364
|
+
#
|
365
|
+
# @param options [Hash] See {Attribute::ClassMethods#attribute}
|
366
|
+
# for details.
|
367
|
+
#
|
368
|
+
# @return [void]
|
369
|
+
#
|
370
|
+
# @example Declares that test_do_something_with_ractor uses Ractor
|
371
|
+
#
|
372
|
+
# ractor
|
373
|
+
# def test_do_something_with_ractor
|
374
|
+
# Ractor.new do
|
375
|
+
# # ...
|
376
|
+
# end
|
377
|
+
# end
|
378
|
+
#
|
379
|
+
# @since 3.4.6
|
380
|
+
def ractor(options={})
|
381
|
+
attribute(:ractor, true, options)
|
382
|
+
end
|
383
|
+
|
336
384
|
# Defines a sub test case.
|
337
385
|
#
|
338
386
|
# This is a syntax sugar. The both of the following codes are
|
339
387
|
# the same in meaning:
|
340
388
|
#
|
341
389
|
# Standard:
|
342
|
-
#
|
343
|
-
# class
|
344
|
-
#
|
390
|
+
#
|
391
|
+
# class TestParent < Test::Unit::TestCase
|
392
|
+
# class TestChild < self
|
393
|
+
# def test_in_child
|
394
|
+
# end
|
345
395
|
# end
|
346
396
|
# end
|
347
|
-
# end
|
348
397
|
#
|
349
398
|
# Syntax sugar:
|
350
|
-
#
|
351
|
-
#
|
352
|
-
#
|
399
|
+
#
|
400
|
+
# class TestParent < Test::Unit::TestCase
|
401
|
+
# sub_test_case("TestChild") do
|
402
|
+
# def test_in_child
|
403
|
+
# end
|
353
404
|
# end
|
354
405
|
# end
|
355
|
-
# end
|
356
406
|
#
|
357
407
|
# The difference of them are the following:
|
358
408
|
#
|
@@ -369,13 +419,7 @@ module Test
|
|
369
419
|
# case class context.
|
370
420
|
# @return [Test::Unit::TestCase] Created sub test case class.
|
371
421
|
def sub_test_case(name, &block)
|
372
|
-
|
373
|
-
sub_test_case = Class.new(self) do
|
374
|
-
singleton_class = class << self; self; end
|
375
|
-
singleton_class.__send__(:define_method, :name) do
|
376
|
-
[parent_test_case.name, name].compact.join("::")
|
377
|
-
end
|
378
|
-
end
|
422
|
+
sub_test_case = sub_test_case_class(name)
|
379
423
|
sub_test_case.class_eval(&block)
|
380
424
|
sub_test_case
|
381
425
|
end
|
@@ -426,31 +470,54 @@ module Test
|
|
426
470
|
private
|
427
471
|
# @private
|
428
472
|
@@method_locations = {}
|
473
|
+
# @private
|
474
|
+
@@method_location_mutex = Thread::Mutex.new
|
475
|
+
|
429
476
|
# @private
|
430
477
|
def method_locations
|
431
478
|
@@method_locations[self] ||= []
|
432
479
|
end
|
433
480
|
|
434
481
|
# @private
|
435
|
-
def
|
436
|
-
|
437
|
-
|
438
|
-
path = self_location[:path] if self_location
|
482
|
+
def add_method_location(location)
|
483
|
+
@@method_location_mutex.synchronize do
|
484
|
+
method_locations << location
|
439
485
|
end
|
440
|
-
|
441
|
-
|
442
|
-
|
443
|
-
|
444
|
-
|
445
|
-
|
446
|
-
|
447
|
-
|
448
|
-
|
449
|
-
|
486
|
+
end
|
487
|
+
|
488
|
+
# @private
|
489
|
+
def target_method_locations(path)
|
490
|
+
@@method_location_mutex.synchronize do
|
491
|
+
if path.nil?
|
492
|
+
self_location = method_locations.first
|
493
|
+
path = self_location[:path] if self_location
|
494
|
+
end
|
495
|
+
return [] if path.nil?
|
496
|
+
|
497
|
+
target_locations = []
|
498
|
+
@@method_locations.each do |test_case, locations|
|
499
|
+
locations.each do |location|
|
500
|
+
absolete_path = File.expand_path(path)
|
501
|
+
location_path = location[:path]
|
502
|
+
location_basename = File.basename(location_path)
|
503
|
+
if location_path == absolete_path or location_basename == path
|
504
|
+
target_locations << location.merge(:test_case => test_case)
|
505
|
+
end
|
450
506
|
end
|
451
507
|
end
|
508
|
+
target_locations
|
509
|
+
end
|
510
|
+
end
|
511
|
+
|
512
|
+
# @private
|
513
|
+
def sub_test_case_class(name)
|
514
|
+
parent_test_case = self
|
515
|
+
Class.new(self) do
|
516
|
+
singleton_class = class << self; self; end
|
517
|
+
singleton_class.__send__(:define_method, :name) do
|
518
|
+
[parent_test_case.name, name].compact.join("::")
|
519
|
+
end
|
452
520
|
end
|
453
|
-
target_locations
|
454
521
|
end
|
455
522
|
end
|
456
523
|
|
@@ -537,35 +604,37 @@ module Test
|
|
537
604
|
#
|
538
605
|
# You can add additional setup tasks by the following
|
539
606
|
# code:
|
540
|
-
# class TestMyClass < Test::Unit::TestCase
|
541
|
-
# def setup
|
542
|
-
# ...
|
543
|
-
# end
|
544
607
|
#
|
545
|
-
#
|
546
|
-
#
|
547
|
-
#
|
548
|
-
#
|
608
|
+
# class TestMyClass < Test::Unit::TestCase
|
609
|
+
# def setup
|
610
|
+
# ...
|
611
|
+
# end
|
549
612
|
#
|
550
|
-
#
|
551
|
-
#
|
552
|
-
#
|
613
|
+
# setup
|
614
|
+
# def my_setup1
|
615
|
+
# ...
|
616
|
+
# end
|
553
617
|
#
|
554
|
-
#
|
555
|
-
#
|
556
|
-
#
|
557
|
-
# end
|
618
|
+
# setup do
|
619
|
+
# ... # setup callback1
|
620
|
+
# end
|
558
621
|
#
|
559
|
-
#
|
560
|
-
#
|
561
|
-
#
|
622
|
+
# setup
|
623
|
+
# def my_setup2
|
624
|
+
# ...
|
625
|
+
# end
|
626
|
+
#
|
627
|
+
# setup do
|
628
|
+
# ... # setup callback2
|
629
|
+
# end
|
562
630
|
#
|
563
|
-
#
|
564
|
-
#
|
631
|
+
# def test_my_class
|
632
|
+
# ...
|
633
|
+
# end
|
565
634
|
# end
|
566
|
-
# end
|
567
635
|
#
|
568
636
|
# Here is a call order:
|
637
|
+
#
|
569
638
|
# * setup
|
570
639
|
# * my_setup1
|
571
640
|
# * setup callback1
|
@@ -582,35 +651,37 @@ module Test
|
|
582
651
|
#
|
583
652
|
# You can add additional cleanup tasks by the following
|
584
653
|
# code:
|
585
|
-
# class TestMyClass < Test::Unit::TestCase
|
586
|
-
# def cleanup
|
587
|
-
# ...
|
588
|
-
# end
|
589
654
|
#
|
590
|
-
#
|
591
|
-
#
|
592
|
-
#
|
593
|
-
#
|
655
|
+
# class TestMyClass < Test::Unit::TestCase
|
656
|
+
# def cleanup
|
657
|
+
# ...
|
658
|
+
# end
|
594
659
|
#
|
595
|
-
#
|
596
|
-
#
|
597
|
-
#
|
660
|
+
# cleanup
|
661
|
+
# def my_cleanup1
|
662
|
+
# ...
|
663
|
+
# end
|
598
664
|
#
|
599
|
-
#
|
600
|
-
#
|
601
|
-
#
|
602
|
-
# end
|
665
|
+
# cleanup do
|
666
|
+
# ... # cleanup callback1
|
667
|
+
# end
|
603
668
|
#
|
604
|
-
#
|
605
|
-
#
|
606
|
-
#
|
669
|
+
# cleanup
|
670
|
+
# def my_cleanup2
|
671
|
+
# ...
|
672
|
+
# end
|
673
|
+
#
|
674
|
+
# cleanup do
|
675
|
+
# ... # cleanup callback2
|
676
|
+
# end
|
607
677
|
#
|
608
|
-
#
|
609
|
-
#
|
678
|
+
# def test_my_class
|
679
|
+
# ...
|
680
|
+
# end
|
610
681
|
# end
|
611
|
-
# end
|
612
682
|
#
|
613
683
|
# Here is a call order:
|
684
|
+
#
|
614
685
|
# * test_my_class
|
615
686
|
# * cleanup callback2
|
616
687
|
# * my_cleanup2
|
@@ -625,35 +696,37 @@ module Test
|
|
625
696
|
#
|
626
697
|
# You can add additional teardown tasks by the following
|
627
698
|
# code:
|
628
|
-
# class TestMyClass < Test::Unit::TestCase
|
629
|
-
# def teardown
|
630
|
-
# ...
|
631
|
-
# end
|
632
699
|
#
|
633
|
-
#
|
634
|
-
#
|
635
|
-
#
|
636
|
-
#
|
700
|
+
# class TestMyClass < Test::Unit::TestCase
|
701
|
+
# def teardown
|
702
|
+
# ...
|
703
|
+
# end
|
637
704
|
#
|
638
|
-
#
|
639
|
-
#
|
640
|
-
#
|
705
|
+
# teardown
|
706
|
+
# def my_teardown1
|
707
|
+
# ...
|
708
|
+
# end
|
641
709
|
#
|
642
|
-
#
|
643
|
-
#
|
644
|
-
#
|
645
|
-
# end
|
710
|
+
# teardown do
|
711
|
+
# ... # teardown callback1
|
712
|
+
# end
|
646
713
|
#
|
647
|
-
#
|
648
|
-
#
|
649
|
-
#
|
714
|
+
# teardown
|
715
|
+
# def my_teardown2
|
716
|
+
# ...
|
717
|
+
# end
|
650
718
|
#
|
651
|
-
#
|
652
|
-
#
|
719
|
+
# teardown do
|
720
|
+
# ... # teardown callback2
|
721
|
+
# end
|
722
|
+
#
|
723
|
+
# def test_my_class
|
724
|
+
# ...
|
725
|
+
# end
|
653
726
|
# end
|
654
|
-
# end
|
655
727
|
#
|
656
728
|
# Here is a call order:
|
729
|
+
#
|
657
730
|
# * test_my_class
|
658
731
|
# * teardown callback2
|
659
732
|
# * my_teardown2
|
@@ -673,13 +746,13 @@ module Test
|
|
673
746
|
|
674
747
|
# Returns a label of test data for the test. If the
|
675
748
|
# test isn't associated with any test data, it returns
|
676
|
-
#
|
749
|
+
# `nil`.
|
677
750
|
def data_label
|
678
751
|
@internal_data.test_data_label
|
679
752
|
end
|
680
753
|
|
681
754
|
# Returns test data for the test. If the test isn't associated
|
682
|
-
# with any test data, it returns
|
755
|
+
# with any test data, it returns `nil`.
|
683
756
|
def data
|
684
757
|
@internal_data.test_data
|
685
758
|
end
|
@@ -783,6 +856,9 @@ module Test
|
|
783
856
|
notify("<#{signature}> was redefined",
|
784
857
|
:backtrace => redefined_info[:backtrace])
|
785
858
|
end
|
859
|
+
if self[:ractor] and not defined?(::Ractor)
|
860
|
+
omit("<#{signature}> requires Ractor")
|
861
|
+
end
|
786
862
|
if @internal_data.have_test_data?
|
787
863
|
test_method = method(@method_name)
|
788
864
|
arity = test_method.arity
|
data/lib/test/unit/testsuite.rb
CHANGED
@@ -77,7 +77,7 @@ module Test
|
|
77
77
|
@tests -= tests
|
78
78
|
end
|
79
79
|
|
80
|
-
#
|
80
|
+
# Returns the rolled up number of tests in this suite;
|
81
81
|
# i.e. if the suite contains other suites, it counts the
|
82
82
|
# tests within those suites, not the suites themselves.
|
83
83
|
def size
|