test-unit 3.5.7 → 3.7.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.
- checksums.yaml +4 -4
- data/README.md +2 -2
- data/Rakefile +12 -6
- data/bin/test-unit +5 -0
- data/doc/text/getting-started.md +24 -150
- data/doc/text/how-to.md +4 -4
- data/doc/text/news.md +218 -0
- data/lib/test/unit/assertions.rb +8 -8
- data/lib/test/unit/auto-runner-loader.rb +2 -2
- data/lib/test/unit/autorunner.rb +77 -13
- data/lib/test/unit/collector/descendant.rb +1 -1
- data/lib/test/unit/collector/dir.rb +2 -2
- data/lib/test/unit/collector/load.rb +8 -6
- data/lib/test/unit/collector/objectspace.rb +1 -1
- data/lib/test/unit/collector/xml.rb +1 -1
- data/lib/test/unit/color-scheme.rb +1 -1
- data/lib/test/unit/data.rb +1 -1
- data/lib/test/unit/error.rb +1 -1
- data/lib/test/unit/failure.rb +1 -1
- data/lib/test/unit/fault-location-detector.rb +6 -2
- data/lib/test/unit/notification.rb +1 -1
- data/lib/test/unit/omission.rb +1 -1
- data/lib/test/unit/pending.rb +1 -1
- data/lib/test/unit/priority.rb +1 -1
- data/lib/test/unit/runner/console.rb +23 -4
- data/lib/test/unit/runner/emacs.rb +1 -1
- data/lib/test/unit/runner/xml.rb +1 -1
- data/lib/test/unit/sub-test-result.rb +59 -0
- data/lib/test/unit/test-run-context.rb +16 -0
- data/lib/test/unit/test-suite-creator.rb +1 -1
- data/lib/test/unit/test-suite-runner.rb +130 -0
- data/lib/test/unit/test-suite-thread-runner.rb +84 -0
- data/lib/test/unit/test-thread-run-context.rb +20 -0
- data/lib/test/unit/testcase.rb +65 -20
- data/lib/test/unit/testresult.rb +9 -9
- data/lib/test/unit/testsuite.rb +22 -85
- data/lib/test/unit/ui/console/testrunner.rb +165 -36
- data/lib/test/unit/ui/emacs/testrunner.rb +1 -1
- data/lib/test/unit/ui/testrunner.rb +2 -2
- data/lib/test/unit/ui/testrunnermediator.rb +16 -11
- data/lib/test/unit/ui/xml/testrunner.rb +3 -2
- data/lib/test/unit/util/observable.rb +4 -8
- data/lib/test/unit/version.rb +1 -1
- data/lib/test/unit.rb +6 -6
- data/lib/test-unit.rb +2 -2
- metadata +12 -78
@@ -3,21 +3,22 @@
|
|
3
3
|
# Author:: Nathaniel Talbott.
|
4
4
|
# Copyright::
|
5
5
|
# * Copyright (c) 2000-2003 Nathaniel Talbott. All rights reserved.
|
6
|
-
# * Copyright (c) 2008-
|
6
|
+
# * Copyright (c) 2008-2023 Sutou Kouhei <kou@clear-code.com>
|
7
7
|
# License:: Ruby license.
|
8
8
|
|
9
9
|
begin
|
10
10
|
require 'io/console'
|
11
11
|
rescue LoadError
|
12
12
|
end
|
13
|
+
require "pathname"
|
13
14
|
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
15
|
+
require_relative '../../color-scheme'
|
16
|
+
require_relative '../../code-snippet-fetcher'
|
17
|
+
require_relative '../../fault-location-detector'
|
18
|
+
require_relative '../../diff'
|
19
|
+
require_relative '../testrunner'
|
20
|
+
require_relative '../testrunnermediator'
|
21
|
+
require_relative 'outputlevel'
|
21
22
|
|
22
23
|
module Test
|
23
24
|
module Unit
|
@@ -28,6 +29,8 @@ module Test
|
|
28
29
|
class TestRunner < UI::TestRunner
|
29
30
|
include OutputLevel
|
30
31
|
|
32
|
+
N_REPORT_SLOW_TESTS = 5
|
33
|
+
|
31
34
|
# Creates a new TestRunner for running the passed
|
32
35
|
# suite. If quiet_mode is true, the output while
|
33
36
|
# running is limited to progress dots, errors and
|
@@ -36,12 +39,16 @@ module Test
|
|
36
39
|
# STDOUT.
|
37
40
|
def initialize(suite, options={})
|
38
41
|
super
|
39
|
-
@
|
42
|
+
@on_github_actions = (ENV["GITHUB_ACTIONS"] == "true")
|
43
|
+
@output_level = @options[:output_level] || guess_output_level
|
40
44
|
@output = @options[:output] || STDOUT
|
41
45
|
@use_color = @options[:use_color]
|
42
46
|
@use_color = guess_color_availability if @use_color.nil?
|
43
47
|
@color_scheme = @options[:color_scheme] || ColorScheme.default
|
44
48
|
@reset_color = Color.new("reset")
|
49
|
+
@progress_style = @options[:progress_style] || guess_progress_style
|
50
|
+
@progress_marks = ["|", "/", "-", "\\", "|", "/", "-", "\\"]
|
51
|
+
@progress_mark_index = 0
|
45
52
|
@progress_row = 0
|
46
53
|
@progress_row_max = @options[:progress_row_max]
|
47
54
|
@progress_row_max ||= guess_progress_row_max
|
@@ -54,6 +61,7 @@ module Test
|
|
54
61
|
@faults = []
|
55
62
|
@code_snippet_fetcher = CodeSnippetFetcher.new
|
56
63
|
@test_suites = []
|
64
|
+
@test_statistics = []
|
57
65
|
end
|
58
66
|
|
59
67
|
private
|
@@ -114,10 +122,13 @@ module Test
|
|
114
122
|
nl if output?(NORMAL) and !output?(VERBOSE)
|
115
123
|
output_faults
|
116
124
|
end
|
117
|
-
|
118
|
-
|
119
|
-
|
125
|
+
case @progress_style
|
126
|
+
when :inplace
|
127
|
+
output_single("\r", nil, PROGRESS_ONLY)
|
128
|
+
when :mark
|
129
|
+
nl(PROGRESS_ONLY)
|
120
130
|
end
|
131
|
+
output_statistics(elapsed_time)
|
121
132
|
end
|
122
133
|
|
123
134
|
def output_faults
|
@@ -186,12 +197,71 @@ module Test
|
|
186
197
|
output(fault.test_name, fault_color(fault))
|
187
198
|
output_fault_backtrace(fault)
|
188
199
|
output_failure_message(fault)
|
200
|
+
output_fault_on_github_actions(fault)
|
189
201
|
else
|
190
202
|
output_single("#{fault.label}: ")
|
191
203
|
output_single(fault.test_name, fault_color(fault))
|
192
204
|
output_fault_message(fault)
|
193
205
|
output_fault_backtrace(fault)
|
206
|
+
output_fault_on_github_actions(fault) if fault.is_a?(Error)
|
207
|
+
if fault.is_a?(Error) and fault.exception.respond_to?(:cause)
|
208
|
+
cause = fault.exception.cause
|
209
|
+
i = 0
|
210
|
+
while cause
|
211
|
+
sub_fault = Error.new(fault.test_name,
|
212
|
+
cause,
|
213
|
+
method_name: fault.method_name)
|
214
|
+
output_single("Cause#{i}", fault_color(sub_fault))
|
215
|
+
output_fault_message(sub_fault)
|
216
|
+
output_fault_backtrace(sub_fault)
|
217
|
+
cause = cause.cause
|
218
|
+
i += 1
|
219
|
+
end
|
220
|
+
end
|
221
|
+
end
|
222
|
+
end
|
223
|
+
|
224
|
+
def detect_target_location_on_github_actions(fault)
|
225
|
+
return nil unless @on_github_actions
|
226
|
+
|
227
|
+
base_dir = ENV["GITHUB_WORKSPACE"]
|
228
|
+
return nil unless base_dir
|
229
|
+
base_dir = Pathname(base_dir).expand_path
|
230
|
+
|
231
|
+
detector = FaultLocationDetector.new(fault, @code_snippet_fetcher)
|
232
|
+
backtrace = fault.location || []
|
233
|
+
backtrace.each_with_index do |entry, i|
|
234
|
+
next unless detector.target?(entry)
|
235
|
+
file, line, = detector.split_backtrace_entry(entry)
|
236
|
+
file = Pathname(file).expand_path
|
237
|
+
relative_file = file.relative_path_from(base_dir)
|
238
|
+
first_component = relative_file.descend do |component|
|
239
|
+
break component
|
240
|
+
end
|
241
|
+
# file isn't under base_dir
|
242
|
+
next if first_component.to_s == "..."
|
243
|
+
return [relative_file, line]
|
194
244
|
end
|
245
|
+
nil
|
246
|
+
end
|
247
|
+
|
248
|
+
def output_fault_on_github_actions(fault)
|
249
|
+
location = detect_target_location_on_github_actions(fault)
|
250
|
+
return unless location
|
251
|
+
|
252
|
+
parameters = [
|
253
|
+
"file=#{location[0]}",
|
254
|
+
"line=#{location[1]}",
|
255
|
+
"title=#{fault.label}",
|
256
|
+
].join(",")
|
257
|
+
message = fault.message
|
258
|
+
if fault.is_a?(Error)
|
259
|
+
message = ([message] + (fault.location || [])).join("\n")
|
260
|
+
end
|
261
|
+
# We need to use URL encode for new line:
|
262
|
+
# https://github.com/actions/toolkit/issues/193
|
263
|
+
message = message.gsub("\n", "%0A")
|
264
|
+
output("::error #{parameters}::#{message}")
|
195
265
|
end
|
196
266
|
|
197
267
|
def output_fault_message(fault)
|
@@ -322,9 +392,29 @@ module Test
|
|
322
392
|
end
|
323
393
|
|
324
394
|
def output_statistics(elapsed_time)
|
325
|
-
|
395
|
+
change_output_level(IMPORTANT_FAULTS_ONLY) do
|
396
|
+
output("Finished in #{elapsed_time} seconds.")
|
397
|
+
end
|
398
|
+
if @options[:report_slow_tests]
|
399
|
+
output_summary_marker
|
400
|
+
output("Top #{N_REPORT_SLOW_TESTS} slow tests")
|
401
|
+
@test_statistics.sort_by {|statistic| -statistic[:elapsed_time]}
|
402
|
+
.first(N_REPORT_SLOW_TESTS)
|
403
|
+
.each do |slow_statistic|
|
404
|
+
left_side = "#{slow_statistic[:name]}: "
|
405
|
+
right_width = @progress_row_max - left_side.size
|
406
|
+
output("%s%*f" % [
|
407
|
+
left_side,
|
408
|
+
right_width,
|
409
|
+
slow_statistic[:elapsed_time],
|
410
|
+
])
|
411
|
+
output("--location #{slow_statistic[:location]}")
|
412
|
+
end
|
413
|
+
end
|
326
414
|
output_summary_marker
|
327
|
-
|
415
|
+
change_output_level(IMPORTANT_FAULTS_ONLY) do
|
416
|
+
output(@result)
|
417
|
+
end
|
328
418
|
output("%g%% passed" % @result.pass_percentage)
|
329
419
|
unless elapsed_time.zero?
|
330
420
|
output_summary_marker
|
@@ -339,11 +429,8 @@ module Test
|
|
339
429
|
end
|
340
430
|
|
341
431
|
def output_summary_marker
|
342
|
-
if @progress_row_max
|
343
|
-
|
344
|
-
else
|
345
|
-
nl
|
346
|
-
end
|
432
|
+
return if @progress_row_max <= 0
|
433
|
+
output("-" * @progress_row_max, summary_marker_color)
|
347
434
|
end
|
348
435
|
|
349
436
|
def test_started(test)
|
@@ -367,18 +454,33 @@ module Test
|
|
367
454
|
output_single("#{indent}#{name}#{separator}#{tab_stop}",
|
368
455
|
nil,
|
369
456
|
VERBOSE)
|
370
|
-
@test_start = Time.now
|
371
457
|
end
|
372
458
|
|
373
459
|
def test_finished(test)
|
374
460
|
unless @already_outputted
|
375
|
-
|
461
|
+
case @progress_style
|
462
|
+
when :inplace
|
463
|
+
mark = @progress_marks[@progress_mark_index]
|
464
|
+
@progress_mark_index =
|
465
|
+
(@progress_mark_index + 1) % @progress_marks.size
|
466
|
+
output_progress(mark, color("pass-marker"))
|
467
|
+
when :mark
|
468
|
+
output_progress(".", color("pass-marker"))
|
469
|
+
end
|
376
470
|
end
|
377
471
|
@already_outputted = false
|
378
472
|
|
473
|
+
if @options[:report_slow_tests]
|
474
|
+
@test_statistics << {
|
475
|
+
name: test.name,
|
476
|
+
elapsed_time: test.elapsed_time,
|
477
|
+
location: test.method(test.method_name).source_location.join(":"),
|
478
|
+
}
|
479
|
+
end
|
480
|
+
|
379
481
|
return unless output?(VERBOSE)
|
380
482
|
|
381
|
-
output(": (%f)" %
|
483
|
+
output(": (%f)" % test.elapsed_time, nil, VERBOSE)
|
382
484
|
end
|
383
485
|
|
384
486
|
def suite_name(prefix, suite)
|
@@ -448,7 +550,11 @@ module Test
|
|
448
550
|
end
|
449
551
|
|
450
552
|
def output_progress(mark, color=nil)
|
451
|
-
if
|
553
|
+
if @progress_style == :inplace
|
554
|
+
output_single("\r#{mark}", color, PROGRESS_ONLY)
|
555
|
+
else
|
556
|
+
return unless output?(PROGRESS_ONLY)
|
557
|
+
output_single(mark, color)
|
452
558
|
return unless @progress_row_max > 0
|
453
559
|
@progress_row += mark.size
|
454
560
|
if @progress_row >= @progress_row_max
|
@@ -459,24 +565,29 @@ module Test
|
|
459
565
|
end
|
460
566
|
|
461
567
|
def output_progress_in_detail_marker(fault)
|
462
|
-
if @progress_row_max
|
463
|
-
|
464
|
-
else
|
465
|
-
nl
|
466
|
-
end
|
568
|
+
return if @progress_row_max <= 0
|
569
|
+
output("=" * @progress_row_max)
|
467
570
|
end
|
468
571
|
|
469
572
|
def output_progress_in_detail(fault)
|
470
573
|
return if @output_level == SILENT
|
471
|
-
|
472
|
-
|
473
|
-
|
474
|
-
output_fault_in_detail(fault)
|
574
|
+
need_detail_faults = (categorize_fault(fault) == :need_detail_faults)
|
575
|
+
if need_detail_faults
|
576
|
+
log_level = IMPORTANT_FAULTS_ONLY
|
475
577
|
else
|
476
|
-
|
578
|
+
log_level = @current_output_level
|
579
|
+
end
|
580
|
+
change_output_level(log_level) do
|
581
|
+
nl(NORMAL)
|
582
|
+
output_progress_in_detail_marker(fault)
|
583
|
+
if need_detail_faults
|
584
|
+
output_fault_in_detail(fault)
|
585
|
+
else
|
586
|
+
output_fault_in_short(fault)
|
587
|
+
end
|
588
|
+
output_progress_in_detail_marker(fault)
|
589
|
+
@progress_row = 0
|
477
590
|
end
|
478
|
-
output_progress_in_detail_marker(fault)
|
479
|
-
@progress_row = 0
|
480
591
|
end
|
481
592
|
|
482
593
|
def output?(level)
|
@@ -510,6 +621,14 @@ module Test
|
|
510
621
|
color("#{@result.status}-marker")
|
511
622
|
end
|
512
623
|
|
624
|
+
def guess_output_level
|
625
|
+
if @on_github_actions
|
626
|
+
IMPORTANT_FAULTS_ONLY
|
627
|
+
else
|
628
|
+
NORMAL
|
629
|
+
end
|
630
|
+
end
|
631
|
+
|
513
632
|
TERM_COLOR_SUPPORT = /
|
514
633
|
color| # explicitly claims color support in the name
|
515
634
|
direct| # explicitly claims "direct color" (24 bit) support
|
@@ -526,7 +645,7 @@ module Test
|
|
526
645
|
/x
|
527
646
|
|
528
647
|
def guess_color_availability
|
529
|
-
return true if
|
648
|
+
return true if @on_github_actions
|
530
649
|
return false unless @output.tty?
|
531
650
|
return true if windows? and ruby_2_0_or_later?
|
532
651
|
case ENV["TERM"]
|
@@ -540,6 +659,16 @@ module Test
|
|
540
659
|
end
|
541
660
|
end
|
542
661
|
|
662
|
+
def guess_progress_style
|
663
|
+
if @output_level >= VERBOSE
|
664
|
+
:mark
|
665
|
+
else
|
666
|
+
return :fault_only if @on_github_actions
|
667
|
+
return :fault_only unless @output.tty?
|
668
|
+
:inplace
|
669
|
+
end
|
670
|
+
end
|
671
|
+
|
543
672
|
def windows?
|
544
673
|
/mswin|mingw/ === RUBY_PLATFORM
|
545
674
|
end
|
@@ -1,4 +1,4 @@
|
|
1
|
-
|
1
|
+
require_relative 'testrunnerutilities'
|
2
2
|
|
3
3
|
module Test
|
4
4
|
module Unit
|
@@ -27,7 +27,7 @@ module Test
|
|
27
27
|
|
28
28
|
private
|
29
29
|
def setup_mediator
|
30
|
-
@mediator = TestRunnerMediator.new(@suite)
|
30
|
+
@mediator = TestRunnerMediator.new(@suite, @options)
|
31
31
|
end
|
32
32
|
|
33
33
|
def attach_listeners
|
@@ -4,8 +4,8 @@
|
|
4
4
|
# Copyright:: Copyright (c) 2000-2002 Nathaniel Talbott. All rights reserved.
|
5
5
|
# License:: Ruby license.
|
6
6
|
|
7
|
-
|
8
|
-
|
7
|
+
require_relative '../util/observable'
|
8
|
+
require_relative '../testresult'
|
9
9
|
|
10
10
|
module Test
|
11
11
|
module Unit
|
@@ -22,8 +22,11 @@ module Test
|
|
22
22
|
|
23
23
|
# Creates a new TestRunnerMediator initialized to run
|
24
24
|
# the passed suite.
|
25
|
-
def initialize(suite)
|
25
|
+
def initialize(suite, options={})
|
26
26
|
@suite = suite
|
27
|
+
@options = options
|
28
|
+
@test_suite_runner_class = @options[:test_suite_runner_class]
|
29
|
+
@test_suite_runner_class ||= TestSuiteRunner
|
27
30
|
end
|
28
31
|
|
29
32
|
# Runs the suite the TestRunnerMediator was created
|
@@ -36,13 +39,15 @@ module Test
|
|
36
39
|
Test::Unit.run_at_start_hooks
|
37
40
|
start_time = Time.now
|
38
41
|
begin
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
42
|
+
with_listener(result) do
|
43
|
+
@test_suite_runner_class.run_all_tests do |run_context|
|
44
|
+
catch do |stop_tag|
|
45
|
+
result.stop_tag = stop_tag
|
46
|
+
notify_listeners(RESET, @suite.size)
|
47
|
+
notify_listeners(STARTED, result)
|
44
48
|
|
45
|
-
|
49
|
+
run_suite(result, run_context)
|
50
|
+
end
|
46
51
|
end
|
47
52
|
end
|
48
53
|
ensure
|
@@ -60,11 +65,11 @@ module Test
|
|
60
65
|
#
|
61
66
|
# See GitHub#38
|
62
67
|
# https://github.com/test-unit/test-unit/issues/38
|
63
|
-
def run_suite(result=nil)
|
68
|
+
def run_suite(result=nil, run_context=nil)
|
64
69
|
if result.nil?
|
65
70
|
run
|
66
71
|
else
|
67
|
-
@suite.run(result) do |channel, value|
|
72
|
+
@suite.run(result, run_context: run_context) do |channel, value|
|
68
73
|
notify_listeners(channel, value)
|
69
74
|
end
|
70
75
|
end
|
@@ -4,7 +4,7 @@
|
|
4
4
|
# Copyright:: Copyright (c) 2000-2002 Nathaniel Talbott. All rights reserved.
|
5
5
|
# License:: Ruby license.
|
6
6
|
|
7
|
-
|
7
|
+
require_relative 'procwrapper'
|
8
8
|
|
9
9
|
module Test
|
10
10
|
module Unit
|
@@ -55,10 +55,7 @@ module Test
|
|
55
55
|
if (listener_key.instance_of?(Proc))
|
56
56
|
key = ProcWrapper.new(listener_key)
|
57
57
|
end
|
58
|
-
|
59
|
-
return channel.delete(key)
|
60
|
-
end
|
61
|
-
return nil
|
58
|
+
return channel.delete(key)
|
62
59
|
end
|
63
60
|
|
64
61
|
# Calls all the procs registered on the channel
|
@@ -74,9 +71,8 @@ module Test
|
|
74
71
|
def notify_listeners(channel_name, *arguments)
|
75
72
|
channel = channels[channel_name]
|
76
73
|
return 0 unless (channel)
|
77
|
-
|
78
|
-
|
79
|
-
return listeners.size
|
74
|
+
channel.each_value { |listener| listener.call(*arguments) }
|
75
|
+
return channel.size
|
80
76
|
end
|
81
77
|
|
82
78
|
private
|
data/lib/test/unit/version.rb
CHANGED
data/lib/test/unit.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
|
-
|
1
|
+
require_relative "unit/warning"
|
2
2
|
|
3
|
-
|
4
|
-
|
3
|
+
require_relative 'unit/testcase'
|
4
|
+
require_relative 'unit/autorunner'
|
5
5
|
|
6
6
|
module Test # :nodoc:
|
7
7
|
#
|
@@ -28,7 +28,7 @@ module Test # :nodoc:
|
|
28
28
|
#
|
29
29
|
# ## Notes
|
30
30
|
#
|
31
|
-
# Test::Unit has grown out of and
|
31
|
+
# Test::Unit has grown out of and superseded Lapidary.
|
32
32
|
#
|
33
33
|
#
|
34
34
|
# ## Feedback
|
@@ -69,7 +69,7 @@ module Test # :nodoc:
|
|
69
69
|
# Masaki Suketa, for his work on RubyUnit, which filled a vital need in
|
70
70
|
# the Ruby world for a very long time. I'm also grateful for his help in
|
71
71
|
# polishing Test::Unit and getting the RubyUnit compatibility layer
|
72
|
-
# right. His graciousness in allowing Test::Unit to
|
72
|
+
# right. His graciousness in allowing Test::Unit to supersede RubyUnit
|
73
73
|
# continues to be a challenge to me to be more willing to defer my own
|
74
74
|
# rights.
|
75
75
|
#
|
@@ -109,7 +109,7 @@ module Test # :nodoc:
|
|
109
109
|
#
|
110
110
|
# This software is provided "as is" and without any express or
|
111
111
|
# implied warranties, including, without limitation, the implied
|
112
|
-
# warranties of
|
112
|
+
# warranties of merchantability and fitness for a particular
|
113
113
|
# purpose.
|
114
114
|
#
|
115
115
|
#
|
data/lib/test-unit.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# Copyright (C) 2012-2015 Kouhei Sutou <kou@clear-code.com>
|
2
2
|
|
3
|
-
|
3
|
+
require_relative "test/unit/warning"
|
4
4
|
|
5
5
|
module Test
|
6
6
|
module Unit
|
@@ -14,6 +14,6 @@ unless respond_to?(:run_test, true)
|
|
14
14
|
# Is this API OK or dirty?
|
15
15
|
def run_test
|
16
16
|
self.class.send(:undef_method, :run_test)
|
17
|
-
|
17
|
+
require_relative "test/unit"
|
18
18
|
end
|
19
19
|
end
|
metadata
CHANGED
@@ -1,15 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: test-unit
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.
|
4
|
+
version: 3.7.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Kouhei Sutou
|
8
8
|
- Haruka Yoshihara
|
9
|
-
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date:
|
11
|
+
date: 1980-01-02 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
14
|
name: power_assert
|
@@ -25,76 +24,6 @@ dependencies:
|
|
25
24
|
- - ">="
|
26
25
|
- !ruby/object:Gem::Version
|
27
26
|
version: '0'
|
28
|
-
- !ruby/object:Gem::Dependency
|
29
|
-
name: bundler
|
30
|
-
requirement: !ruby/object:Gem::Requirement
|
31
|
-
requirements:
|
32
|
-
- - ">="
|
33
|
-
- !ruby/object:Gem::Version
|
34
|
-
version: '0'
|
35
|
-
type: :development
|
36
|
-
prerelease: false
|
37
|
-
version_requirements: !ruby/object:Gem::Requirement
|
38
|
-
requirements:
|
39
|
-
- - ">="
|
40
|
-
- !ruby/object:Gem::Version
|
41
|
-
version: '0'
|
42
|
-
- !ruby/object:Gem::Dependency
|
43
|
-
name: rake
|
44
|
-
requirement: !ruby/object:Gem::Requirement
|
45
|
-
requirements:
|
46
|
-
- - ">="
|
47
|
-
- !ruby/object:Gem::Version
|
48
|
-
version: '0'
|
49
|
-
type: :development
|
50
|
-
prerelease: false
|
51
|
-
version_requirements: !ruby/object:Gem::Requirement
|
52
|
-
requirements:
|
53
|
-
- - ">="
|
54
|
-
- !ruby/object:Gem::Version
|
55
|
-
version: '0'
|
56
|
-
- !ruby/object:Gem::Dependency
|
57
|
-
name: yard
|
58
|
-
requirement: !ruby/object:Gem::Requirement
|
59
|
-
requirements:
|
60
|
-
- - ">="
|
61
|
-
- !ruby/object:Gem::Version
|
62
|
-
version: '0'
|
63
|
-
type: :development
|
64
|
-
prerelease: false
|
65
|
-
version_requirements: !ruby/object:Gem::Requirement
|
66
|
-
requirements:
|
67
|
-
- - ">="
|
68
|
-
- !ruby/object:Gem::Version
|
69
|
-
version: '0'
|
70
|
-
- !ruby/object:Gem::Dependency
|
71
|
-
name: kramdown
|
72
|
-
requirement: !ruby/object:Gem::Requirement
|
73
|
-
requirements:
|
74
|
-
- - ">="
|
75
|
-
- !ruby/object:Gem::Version
|
76
|
-
version: '0'
|
77
|
-
type: :development
|
78
|
-
prerelease: false
|
79
|
-
version_requirements: !ruby/object:Gem::Requirement
|
80
|
-
requirements:
|
81
|
-
- - ">="
|
82
|
-
- !ruby/object:Gem::Version
|
83
|
-
version: '0'
|
84
|
-
- !ruby/object:Gem::Dependency
|
85
|
-
name: packnga
|
86
|
-
requirement: !ruby/object:Gem::Requirement
|
87
|
-
requirements:
|
88
|
-
- - ">="
|
89
|
-
- !ruby/object:Gem::Version
|
90
|
-
version: '0'
|
91
|
-
type: :development
|
92
|
-
prerelease: false
|
93
|
-
version_requirements: !ruby/object:Gem::Requirement
|
94
|
-
requirements:
|
95
|
-
- - ">="
|
96
|
-
- !ruby/object:Gem::Version
|
97
|
-
version: '0'
|
98
27
|
description: |-
|
99
28
|
test-unit (Test::Unit) is unit testing framework for Ruby, based on xUnit
|
100
29
|
principles. These were originally designed by Kent Beck, creator of extreme
|
@@ -103,7 +32,8 @@ description: |-
|
|
103
32
|
email:
|
104
33
|
- kou@cozmixng.org
|
105
34
|
- yoshihara@clear-code.com
|
106
|
-
executables:
|
35
|
+
executables:
|
36
|
+
- test-unit
|
107
37
|
extensions: []
|
108
38
|
extra_rdoc_files: []
|
109
39
|
files:
|
@@ -112,6 +42,7 @@ files:
|
|
112
42
|
- PSFL
|
113
43
|
- README.md
|
114
44
|
- Rakefile
|
45
|
+
- bin/test-unit
|
115
46
|
- doc/text/getting-started.md
|
116
47
|
- doc/text/how-to.md
|
117
48
|
- doc/text/news.md
|
@@ -147,7 +78,12 @@ files:
|
|
147
78
|
- lib/test/unit/runner/console.rb
|
148
79
|
- lib/test/unit/runner/emacs.rb
|
149
80
|
- lib/test/unit/runner/xml.rb
|
81
|
+
- lib/test/unit/sub-test-result.rb
|
82
|
+
- lib/test/unit/test-run-context.rb
|
150
83
|
- lib/test/unit/test-suite-creator.rb
|
84
|
+
- lib/test/unit/test-suite-runner.rb
|
85
|
+
- lib/test/unit/test-suite-thread-runner.rb
|
86
|
+
- lib/test/unit/test-thread-run-context.rb
|
151
87
|
- lib/test/unit/testcase.rb
|
152
88
|
- lib/test/unit/testresult.rb
|
153
89
|
- lib/test/unit/testsuite.rb
|
@@ -171,7 +107,7 @@ files:
|
|
171
107
|
- sample/test_adder.rb
|
172
108
|
- sample/test_subtracter.rb
|
173
109
|
- sample/test_user.rb
|
174
|
-
homepage:
|
110
|
+
homepage: https://test-unit.github.io/
|
175
111
|
licenses:
|
176
112
|
- Ruby
|
177
113
|
- BSDL
|
@@ -180,7 +116,6 @@ metadata:
|
|
180
116
|
source_code_uri: https://github.com/test-unit/test-unit
|
181
117
|
documentation_uri: https://test-unit.github.io/test-unit/en/
|
182
118
|
bug_tracker_uri: https://github.com/test-unit/test-unit/issues
|
183
|
-
post_install_message:
|
184
119
|
rdoc_options: []
|
185
120
|
require_paths:
|
186
121
|
- lib
|
@@ -195,8 +130,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
195
130
|
- !ruby/object:Gem::Version
|
196
131
|
version: '0'
|
197
132
|
requirements: []
|
198
|
-
rubygems_version: 3.
|
199
|
-
signing_key:
|
133
|
+
rubygems_version: 3.6.7
|
200
134
|
specification_version: 4
|
201
135
|
summary: An xUnit family unit testing framework for Ruby.
|
202
136
|
test_files: []
|