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.
Files changed (46) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +2 -2
  3. data/Rakefile +12 -6
  4. data/bin/test-unit +5 -0
  5. data/doc/text/getting-started.md +24 -150
  6. data/doc/text/how-to.md +4 -4
  7. data/doc/text/news.md +218 -0
  8. data/lib/test/unit/assertions.rb +8 -8
  9. data/lib/test/unit/auto-runner-loader.rb +2 -2
  10. data/lib/test/unit/autorunner.rb +77 -13
  11. data/lib/test/unit/collector/descendant.rb +1 -1
  12. data/lib/test/unit/collector/dir.rb +2 -2
  13. data/lib/test/unit/collector/load.rb +8 -6
  14. data/lib/test/unit/collector/objectspace.rb +1 -1
  15. data/lib/test/unit/collector/xml.rb +1 -1
  16. data/lib/test/unit/color-scheme.rb +1 -1
  17. data/lib/test/unit/data.rb +1 -1
  18. data/lib/test/unit/error.rb +1 -1
  19. data/lib/test/unit/failure.rb +1 -1
  20. data/lib/test/unit/fault-location-detector.rb +6 -2
  21. data/lib/test/unit/notification.rb +1 -1
  22. data/lib/test/unit/omission.rb +1 -1
  23. data/lib/test/unit/pending.rb +1 -1
  24. data/lib/test/unit/priority.rb +1 -1
  25. data/lib/test/unit/runner/console.rb +23 -4
  26. data/lib/test/unit/runner/emacs.rb +1 -1
  27. data/lib/test/unit/runner/xml.rb +1 -1
  28. data/lib/test/unit/sub-test-result.rb +59 -0
  29. data/lib/test/unit/test-run-context.rb +16 -0
  30. data/lib/test/unit/test-suite-creator.rb +1 -1
  31. data/lib/test/unit/test-suite-runner.rb +130 -0
  32. data/lib/test/unit/test-suite-thread-runner.rb +84 -0
  33. data/lib/test/unit/test-thread-run-context.rb +20 -0
  34. data/lib/test/unit/testcase.rb +65 -20
  35. data/lib/test/unit/testresult.rb +9 -9
  36. data/lib/test/unit/testsuite.rb +22 -85
  37. data/lib/test/unit/ui/console/testrunner.rb +165 -36
  38. data/lib/test/unit/ui/emacs/testrunner.rb +1 -1
  39. data/lib/test/unit/ui/testrunner.rb +2 -2
  40. data/lib/test/unit/ui/testrunnermediator.rb +16 -11
  41. data/lib/test/unit/ui/xml/testrunner.rb +3 -2
  42. data/lib/test/unit/util/observable.rb +4 -8
  43. data/lib/test/unit/version.rb +1 -1
  44. data/lib/test/unit.rb +6 -6
  45. data/lib/test-unit.rb +2 -2
  46. 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-2017 Kouhei Sutou <kou@clear-code.com>
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
- require 'test/unit/color-scheme'
15
- require 'test/unit/code-snippet-fetcher'
16
- require 'test/unit/fault-location-detector'
17
- require 'test/unit/diff'
18
- require 'test/unit/ui/testrunner'
19
- require 'test/unit/ui/testrunnermediator'
20
- require 'test/unit/ui/console/outputlevel'
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
- @output_level = @options[:output_level] || NORMAL
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
- nl(PROGRESS_ONLY)
118
- change_output_level(IMPORTANT_FAULTS_ONLY) do
119
- output_statistics(elapsed_time)
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
- output("Finished in #{elapsed_time} seconds.")
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
- output(@result)
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 > 0
343
- output("-" * @progress_row_max, summary_marker_color)
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
- output_progress(".", color("pass-marker"))
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)" % (Time.now - @test_start), nil, VERBOSE)
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 output_single(mark, color, PROGRESS_ONLY)
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 > 0
463
- output("=" * @progress_row_max)
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
- nl
472
- output_progress_in_detail_marker(fault)
473
- if categorize_fault(fault) == :need_detail_faults
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
- output_fault_in_short(fault)
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 ENV["GITHUB_ACTIONS"] == "true"
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
- require 'test/unit/ui/console/testrunner'
1
+ require_relative '../console/testrunner'
2
2
 
3
3
  module Test
4
4
  module Unit
@@ -1,4 +1,4 @@
1
- require 'test/unit/ui/testrunnerutilities'
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
- require 'test/unit/util/observable'
8
- require 'test/unit/testresult'
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
- catch do |stop_tag|
40
- result.stop_tag = stop_tag
41
- with_listener(result) do
42
- notify_listeners(RESET, @suite.size)
43
- notify_listeners(STARTED, result)
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
- run_suite(result)
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
@@ -7,8 +7,9 @@
7
7
 
8
8
  require 'erb'
9
9
  require 'time'
10
- require 'test/unit/ui/testrunner'
11
- require 'test/unit/ui/testrunnermediator'
10
+
11
+ require_relative '../testrunner'
12
+ require_relative '../testrunnermediator'
12
13
 
13
14
  module Test
14
15
  module Unit
@@ -4,7 +4,7 @@
4
4
  # Copyright:: Copyright (c) 2000-2002 Nathaniel Talbott. All rights reserved.
5
5
  # License:: Ruby license.
6
6
 
7
- require 'test/unit/util/procwrapper'
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
- if (channel.has_key?(key))
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
- listeners = channel.values
78
- listeners.each { |listener| listener.call(*arguments) }
79
- return listeners.size
74
+ channel.each_value { |listener| listener.call(*arguments) }
75
+ return channel.size
80
76
  end
81
77
 
82
78
  private
@@ -1,5 +1,5 @@
1
1
  module Test
2
2
  module Unit
3
- VERSION = "3.5.7"
3
+ VERSION = "3.7.0"
4
4
  end
5
5
  end
data/lib/test/unit.rb CHANGED
@@ -1,7 +1,7 @@
1
- require "test/unit/warning"
1
+ require_relative "unit/warning"
2
2
 
3
- require 'test/unit/testcase'
4
- require 'test/unit/autorunner'
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 superceded Lapidary.
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 supercede RubyUnit
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 merchantibility and fitness for a particular
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
- require "test/unit/warning"
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
- require "test/unit"
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.5.7
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: 2022-12-15 00:00:00.000000000 Z
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: http://test-unit.github.io/
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.4.0.dev
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: []