minitest 5.14.4 → 5.20.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.
@@ -48,9 +48,11 @@ class TestMinitestUnit < MetaMetaMetaTestCase
48
48
  "test/test_autotest.rb:62:in `test_add_exception'"]
49
49
  ex = util_expand_bt ex
50
50
 
51
- fu = Minitest.filter_backtrace(bt)
51
+ Minitest::Test.io_lock.synchronize do # try not to trounce in parallel
52
+ fu = Minitest.filter_backtrace(bt)
52
53
 
53
- assert_equal ex, fu
54
+ assert_equal ex, fu
55
+ end
54
56
  end
55
57
 
56
58
  def test_filter_backtrace_all_unit
@@ -71,8 +73,10 @@ class TestMinitestUnit < MetaMetaMetaTestCase
71
73
  bt = util_expand_bt bt
72
74
 
73
75
  ex = ["-e:1"]
74
- fu = Minitest.filter_backtrace bt
75
- assert_equal ex, fu
76
+ Minitest::Test.io_lock.synchronize do # try not to trounce in parallel
77
+ fu = Minitest.filter_backtrace bt
78
+ assert_equal ex, fu
79
+ end
76
80
  end
77
81
 
78
82
  def test_filter_backtrace__empty
@@ -95,24 +99,26 @@ class TestMinitestUnit < MetaMetaMetaTestCase
95
99
  end
96
100
 
97
101
  expected = clean <<-EOM
98
- EF
102
+ FE
99
103
 
100
104
  Finished in 0.00
101
105
 
102
- 1) Error:
103
- FakeNamedTestXX#test_this_is_non_ascii_failure_message:
104
- RuntimeError: ЁЁЁ
105
- FILE:LINE:in `test_this_is_non_ascii_failure_message'
106
-
107
- 2) Failure:
106
+ 1) Failure:
108
107
  FakeNamedTestXX#test_this_is_not_ascii_assertion [FILE:LINE]:
109
108
  Expected: \"ЁЁЁ\"
110
109
  Actual: \"ёёё\"
111
110
 
111
+ 2) Error:
112
+ FakeNamedTestXX#test_this_is_non_ascii_failure_message:
113
+ RuntimeError: ЁЁЁ
114
+ FILE:LINE:in `test_this_is_non_ascii_failure_message'
115
+
112
116
  2 runs, 1 assertions, 1 failures, 1 errors, 0 skips
113
117
  EOM
114
118
 
115
- assert_report expected
119
+ Minitest::Test.io_lock.synchronize do # try not to trounce in parallel
120
+ assert_report expected
121
+ end
116
122
  end
117
123
 
118
124
  def test_passed_eh_teardown_good
@@ -158,11 +164,7 @@ class TestMinitestUnit < MetaMetaMetaTestCase
158
164
  end
159
165
 
160
166
  def util_expand_bt bt
161
- if RUBY_VERSION >= "1.9.0" then
162
- bt.map { |f| (f =~ /^\./) ? File.expand_path(f) : f }
163
- else
164
- bt
165
- end
167
+ bt.map { |f| (f =~ /^\./) ? File.expand_path(f) : f }
166
168
  end
167
169
  end
168
170
 
@@ -254,7 +256,7 @@ class TestMinitestRunner < MetaMetaMetaTestCase
254
256
  end
255
257
 
256
258
  expected = clean <<-EOM
257
- E.
259
+ .E
258
260
 
259
261
  Finished in 0.00
260
262
 
@@ -301,7 +303,7 @@ class TestMinitestRunner < MetaMetaMetaTestCase
301
303
  setup_basic_tu
302
304
 
303
305
  expected = clean <<-EOM
304
- F.
306
+ .F
305
307
 
306
308
  Finished in 0.00
307
309
 
@@ -328,6 +330,10 @@ class TestMinitestRunner < MetaMetaMetaTestCase
328
330
  end
329
331
  end
330
332
 
333
+ def test_seed # this is set for THIS run, so I'm not testing it's actual value
334
+ assert_instance_of Integer, Minitest.seed
335
+ end
336
+
331
337
  def test_run_failing_filtered
332
338
  setup_basic_tu
333
339
 
@@ -485,7 +491,7 @@ class TestMinitestRunner < MetaMetaMetaTestCase
485
491
  end
486
492
 
487
493
  expected = clean <<-EOM
488
- S.
494
+ .S
489
495
 
490
496
  Finished in 0.00
491
497
 
@@ -512,8 +518,8 @@ class TestMinitestRunner < MetaMetaMetaTestCase
512
518
  end
513
519
 
514
520
  expected = clean <<-EOM
515
- FakeNamedTestXX#test_skip = 0.00 s = S
516
521
  FakeNamedTestXX#test_something = 0.00 s = .
522
+ FakeNamedTestXX#test_skip = 0.00 s = S
517
523
 
518
524
  Finished in 0.00
519
525
 
@@ -527,6 +533,33 @@ class TestMinitestRunner < MetaMetaMetaTestCase
527
533
  assert_report expected, %w[--seed 42 --verbose]
528
534
  end
529
535
 
536
+ def test_run_skip_show_skips
537
+ @tu =
538
+ Class.new FakeNamedTest do
539
+ def test_something
540
+ assert true
541
+ end
542
+
543
+ def test_skip
544
+ skip "not yet"
545
+ end
546
+ end
547
+
548
+ expected = clean <<-EOM
549
+ .S
550
+
551
+ Finished in 0.00
552
+
553
+ 1) Skipped:
554
+ FakeNamedTestXX#test_skip [FILE:LINE]:
555
+ not yet
556
+
557
+ 2 runs, 1 assertions, 0 failures, 0 errors, 1 skips
558
+ EOM
559
+
560
+ assert_report expected, %w[--seed 42 --show-skips]
561
+ end
562
+
530
563
  def test_run_with_other_runner
531
564
  @tu =
532
565
  Class.new FakeNamedTest do
@@ -627,6 +660,8 @@ class TestMinitestRunner < MetaMetaMetaTestCase
627
660
  2 runs, 2 assertions, 0 failures, 0 errors, 0 skips
628
661
  EOM
629
662
 
663
+ skip if Minitest.parallel_executor.size < 2 # locks up test runner if 1 CPU
664
+
630
665
  assert_report(expected) do |reporter|
631
666
  reporter.extend(Module.new {
632
667
  define_method("record") do |result|
@@ -751,6 +786,13 @@ class TestMinitestUnitOrder < MetaMetaMetaTestCase
751
786
  end
752
787
  end
753
788
 
789
+ class BetterError < RuntimeError # like better_error w/o infecting RuntimeError
790
+ def set_backtrace bt
791
+ super
792
+ @bad_ivar = binding
793
+ end
794
+ end
795
+
754
796
  class TestMinitestRunnable < Minitest::Test
755
797
  def setup_marshal klass
756
798
  tc = klass.new "whatever"
@@ -803,6 +845,146 @@ class TestMinitestRunnable < Minitest::Test
803
845
  assert_equal @tc.failures, over_the_wire.failures
804
846
  assert_equal @tc.klass, over_the_wire.klass
805
847
  end
848
+
849
+ def test_spec_marshal_with_exception
850
+ klass = describe("whatever") {
851
+ it("raises, badly") {
852
+ raise Class.new(StandardError), "this is bad!"
853
+ }
854
+ }
855
+
856
+ rm = klass.runnable_methods.first
857
+
858
+ # Run the test
859
+ @tc = klass.new(rm).run
860
+
861
+ assert_kind_of Minitest::Result, @tc
862
+ assert_instance_of Minitest::UnexpectedError, @tc.failure
863
+
864
+ msg = @tc.failure.error.message
865
+ assert_includes msg, "Neutered Exception #<Class:"
866
+ assert_includes msg, "this is bad!"
867
+
868
+ # Pass it over the wire
869
+ over_the_wire = Marshal.load Marshal.dump @tc
870
+
871
+ assert_equal @tc.time, over_the_wire.time
872
+ assert_equal @tc.name, over_the_wire.name
873
+ assert_equal @tc.assertions, over_the_wire.assertions
874
+ assert_equal @tc.failures, over_the_wire.failures
875
+ assert_equal @tc.klass, over_the_wire.klass
876
+ end
877
+
878
+ def test_spec_marshal_with_exception_nameerror
879
+ klass = describe("whatever") {
880
+ it("raises nameerror") {
881
+ NOPE::does_not_exist
882
+ }
883
+ }
884
+
885
+ rm = klass.runnable_methods.first
886
+
887
+ # Run the test
888
+ @tc = klass.new(rm).run
889
+
890
+ assert_kind_of Minitest::Result, @tc
891
+ assert_instance_of Minitest::UnexpectedError, @tc.failure
892
+
893
+ msg = @tc.failure.error.message
894
+ assert_includes msg, "uninitialized constant TestMinitestRunnable::NOPE"
895
+
896
+ # Pass it over the wire
897
+ over_the_wire = Marshal.load Marshal.dump @tc
898
+
899
+ assert_equal @tc.time, over_the_wire.time
900
+ assert_equal @tc.name, over_the_wire.name
901
+ assert_equal @tc.assertions, over_the_wire.assertions
902
+ assert_equal @tc.failures, over_the_wire.failures
903
+ assert_equal @tc.klass, over_the_wire.klass
904
+ end
905
+
906
+ def with_runtime_error klass
907
+ old_runtime = RuntimeError
908
+ Object.send :remove_const, :RuntimeError
909
+ Object.const_set :RuntimeError, klass
910
+ yield
911
+ ensure
912
+ Object.send :remove_const, :RuntimeError
913
+ Object.const_set :RuntimeError, old_runtime
914
+ end
915
+
916
+ def test_spec_marshal_with_exception__better_error_typeerror
917
+ klass = describe("whatever") {
918
+ it("raises with binding") {
919
+ raise BetterError, "boom"
920
+ }
921
+ }
922
+
923
+ rm = klass.runnable_methods.first
924
+
925
+ # Run the test
926
+ @tc = with_runtime_error BetterError do
927
+ klass.new(rm).run
928
+ end
929
+
930
+ assert_kind_of Minitest::Result, @tc
931
+ assert_instance_of Minitest::UnexpectedError, @tc.failure
932
+
933
+ msg = @tc.failure.error.message
934
+ assert_equal "Neutered Exception BetterError: boom", msg
935
+
936
+ # Pass it over the wire
937
+ over_the_wire = Marshal.load Marshal.dump @tc
938
+
939
+ assert_equal @tc.time, over_the_wire.time
940
+ assert_equal @tc.name, over_the_wire.name
941
+ assert_equal @tc.assertions, over_the_wire.assertions
942
+ assert_equal @tc.failures, over_the_wire.failures
943
+ assert_equal @tc.klass, over_the_wire.klass
944
+ end
945
+
946
+ def test_spec_marshal_with_exception__worse_error_typeerror
947
+ worse_error_klass = Class.new(StandardError) do
948
+ # problem #1: anonymous subclass can'tmarshal, fails sanitize_exception
949
+ def initialize(record = nil)
950
+
951
+ super(record.first)
952
+ end
953
+ end
954
+
955
+ klass = describe("whatever") {
956
+ it("raises with NoMethodError") {
957
+ # problem #2: instantiated with a NON-string argument
958
+ #
959
+ # problem #3: arg responds to #first, but it becomes message
960
+ # which gets passed back in via new_exception
961
+ # that passes a string to worse_error_klass#initialize
962
+ # which calls first on it, which raises NoMethodError
963
+ raise worse_error_klass.new(["boom"])
964
+ }
965
+ }
966
+
967
+ rm = klass.runnable_methods.first
968
+
969
+ # Run the test
970
+ @tc = klass.new(rm).run
971
+
972
+ assert_kind_of Minitest::Result, @tc
973
+ assert_instance_of Minitest::UnexpectedError, @tc.failure
974
+
975
+ msg = @tc.failure.error.message.gsub(/0x[A-Fa-f0-9]+/, "0xXXX")
976
+
977
+ assert_equal "Neutered Exception #<Class:0xXXX>: boom", msg
978
+
979
+ # Pass it over the wire
980
+ over_the_wire = Marshal.load Marshal.dump @tc
981
+
982
+ assert_equal @tc.time, over_the_wire.time
983
+ assert_equal @tc.name, over_the_wire.name
984
+ assert_equal @tc.assertions, over_the_wire.assertions
985
+ assert_equal @tc.failures, over_the_wire.failures
986
+ assert_equal @tc.klass, over_the_wire.klass
987
+ end
806
988
  end
807
989
 
808
990
  class TestMinitestTest < TestMinitestRunnable
@@ -848,19 +1030,25 @@ class TestMinitestUnitTestCase < Minitest::Test
848
1030
  $VERBOSE = orig_verbose
849
1031
  end
850
1032
 
1033
+ def sample_test_case(rand)
1034
+ srand rand
1035
+ Class.new FakeNamedTest do
1036
+ 100.times do |i|
1037
+ define_method("test_#{i}") { assert true }
1038
+ end
1039
+ end.runnable_methods
1040
+ end
1041
+
1042
+ # srand varies with OS
851
1043
  def test_runnable_methods_random
852
1044
  @assertion_count = 0
853
1045
 
854
- sample_test_case = Class.new FakeNamedTest do
855
- def self.test_order; :random; end
856
- def test_test1; assert "does not matter" end
857
- def test_test2; assert "does not matter" end
858
- def test_test3; assert "does not matter" end
859
- end
1046
+ random_tests_1 = sample_test_case 42
1047
+ random_tests_2 = sample_test_case 42
1048
+ random_tests_3 = sample_test_case 1_000
860
1049
 
861
- srand 42
862
- expected = %w[test_test2 test_test1 test_test3]
863
- assert_equal expected, sample_test_case.runnable_methods
1050
+ assert_equal random_tests_1, random_tests_2
1051
+ assert_equal random_tests_1, random_tests_3
864
1052
  end
865
1053
 
866
1054
  def test_runnable_methods_sorted
@@ -901,17 +1089,27 @@ class TestMinitestUnitTestCase < Minitest::Test
901
1089
 
902
1090
  def test_autorun_does_not_affect_fork_success_status
903
1091
  @assertion_count = 0
904
- skip "windows doesn't have skip" unless Process.respond_to?(:fork)
1092
+ skip "windows doesn't have fork" unless Process.respond_to?(:fork)
905
1093
  Process.waitpid(fork {})
906
1094
  assert_equal true, $?.success?
907
1095
  end
908
1096
 
909
1097
  def test_autorun_does_not_affect_fork_exit_status
910
1098
  @assertion_count = 0
911
- skip "windows doesn't have skip" unless Process.respond_to?(:fork)
1099
+ skip "windows doesn't have fork" unless Process.respond_to?(:fork)
912
1100
  Process.waitpid(fork { exit 42 })
913
1101
  assert_equal 42, $?.exitstatus
914
1102
  end
1103
+
1104
+ def test_autorun_optionally_can_affect_fork_exit_status
1105
+ @assertion_count = 0
1106
+ skip "windows doesn't have fork" unless Process.respond_to?(:fork)
1107
+ Minitest.allow_fork = true
1108
+ Process.waitpid(fork { exit 42 })
1109
+ refute_equal 42, $?.exitstatus
1110
+ ensure
1111
+ Minitest.allow_fork = false
1112
+ end
915
1113
  end
916
1114
 
917
1115
  class TestMinitestGuard < Minitest::Test
@@ -0,0 +1,46 @@
1
+ require "minitest/autorun"
2
+ require "hoe"
3
+
4
+ require "minitest/test_task"
5
+
6
+ Hoe.load_plugins # make sure Hoe::Test is loaded
7
+
8
+ class TestHoeTest < Minitest::Test
9
+ PATH = "test/minitest/test_minitest_test_task.rb"
10
+
11
+ mt_path = %w[lib test .].join File::PATH_SEPARATOR
12
+
13
+ MT_EXPECTED = %W[-I#{mt_path} -w
14
+ -e '%srequire "#{PATH}"'
15
+ --].join(" ") + " "
16
+
17
+ def test_make_test_cmd_for_minitest
18
+ skip "Using TESTOPTS... skipping" if ENV["TESTOPTS"]
19
+
20
+ require "minitest/test_task"
21
+
22
+ framework = %(require "minitest/autorun"; )
23
+
24
+ @tester = Minitest::TestTask.create :test do |t|
25
+ t.test_globs = [PATH]
26
+ end
27
+
28
+ assert_equal MT_EXPECTED % [framework].join("; "), @tester.make_test_cmd
29
+ end
30
+
31
+ def test_make_test_cmd_for_minitest_prelude
32
+ skip "Using TESTOPTS... skipping" if ENV["TESTOPTS"]
33
+
34
+ require "minitest/test_task"
35
+
36
+ prelude = %(require "other/file")
37
+ framework = %(require "minitest/autorun"; )
38
+
39
+ @tester = Minitest::TestTask.create :test do |t|
40
+ t.test_prelude = prelude
41
+ t.test_globs = [PATH]
42
+ end
43
+
44
+ assert_equal MT_EXPECTED % [prelude, framework].join("; "), @tester.make_test_cmd
45
+ end
46
+ end
data.tar.gz.sig CHANGED
Binary file
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: minitest
3
3
  version: !ruby/object:Gem::Version
4
- version: 5.14.4
4
+ version: 5.20.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ryan Davis
@@ -10,9 +10,9 @@ bindir: bin
10
10
  cert_chain:
11
11
  - |
12
12
  -----BEGIN CERTIFICATE-----
13
- MIIDPjCCAiagAwIBAgIBBTANBgkqhkiG9w0BAQsFADBFMRMwEQYDVQQDDApyeWFu
13
+ MIIDPjCCAiagAwIBAgIBBzANBgkqhkiG9w0BAQsFADBFMRMwEQYDVQQDDApyeWFu
14
14
  ZC1ydWJ5MRkwFwYKCZImiZPyLGQBGRYJemVuc3BpZGVyMRMwEQYKCZImiZPyLGQB
15
- GRYDY29tMB4XDTIwMTIyMjIwMzgzMFoXDTIxMTIyMjIwMzgzMFowRTETMBEGA1UE
15
+ GRYDY29tMB4XDTIzMDEwMTA3NTExN1oXDTI0MDEwMTA3NTExN1owRTETMBEGA1UE
16
16
  AwwKcnlhbmQtcnVieTEZMBcGCgmSJomT8ixkARkWCXplbnNwaWRlcjETMBEGCgmS
17
17
  JomT8ixkARkWA2NvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALda
18
18
  b9DCgK+627gPJkB6XfjZ1itoOQvpqH1EXScSaba9/S2VF22VYQbXU1xQXL/WzCkx
@@ -22,14 +22,14 @@ cert_chain:
22
22
  qhtV7HJxNKuPj/JFH0D2cswvzznE/a5FOYO68g+YCuFi5L8wZuuM8zzdwjrWHqSV
23
23
  gBEfoTEGr7Zii72cx+sCAwEAAaM5MDcwCQYDVR0TBAIwADALBgNVHQ8EBAMCBLAw
24
24
  HQYDVR0OBBYEFEfFe9md/r/tj/Wmwpy+MI8d9k/hMA0GCSqGSIb3DQEBCwUAA4IB
25
- AQAE3XRm1YZcCVjAJy5yMZvTOFrS7B2SYErc+0QwmKYbHztTTDY2m5Bii+jhpuxh
26
- H+ETcU1z8TUKLpsBUP4kUpIRowkVN1p/jKapV8T3Rbwq+VuYFe+GMKsf8wGZSecG
27
- oMQ8DzzauZfbvhe2kDg7G9BBPU0wLQlY25rDcCy9bLnD7R0UK3ONqpwvsI5I7x5X
28
- ZIMXR0a9/DG+55mawwdGzCQobDKiSNLK89KK7OcNTALKU0DfgdTkktdgKchzKHqZ
29
- d/AHw/kcnU6iuMUoJEcGiJd4gVCTn1l3cDcIvxakGslCA88Jubw0Sqatan0TnC9g
30
- KToW560QIey7SPfHWduzFJnV
25
+ AQAkg3y+PBnBAPWdxxITm5sPHqdWQgSyCpRA20o4LTuWr8BWhSXBkfQNa7cY6fOn
26
+ xyM34VPzBFbExv6XOGDfOMFBVaYTHuN9peC/5/umL7kLl+nflXzL2QA7K6LYj5Bg
27
+ sM574Onr0dZDM6Vn69bzQ7rBIFDfK/OhlPzqKZad4nsdcsVH8ODCiT+ATMIZyz5K
28
+ WCnNtqlyiWXI8tdTpahDgcUwfcN/oN7v4K8iU5IbLJX6HQ5DKgmKjfb6XyMth16k
29
+ ROfWo9Uyp8ba/j9eVG14KkYRaLydAY1MNQk2yd3R5CGfeOpD1kttxjoypoUJ2dOG
30
+ nsNBRuQJ1UfiCG97a6DNm+Fr
31
31
  -----END CERTIFICATE-----
32
- date: 2021-02-24 00:00:00.000000000 Z
32
+ date: 2023-09-06 00:00:00.000000000 Z
33
33
  dependencies:
34
34
  - !ruby/object:Gem::Dependency
35
35
  name: rdoc
@@ -57,14 +57,14 @@ dependencies:
57
57
  requirements:
58
58
  - - "~>"
59
59
  - !ruby/object:Gem::Version
60
- version: '3.22'
60
+ version: '4.0'
61
61
  type: :development
62
62
  prerelease: false
63
63
  version_requirements: !ruby/object:Gem::Requirement
64
64
  requirements:
65
65
  - - "~>"
66
66
  - !ruby/object:Gem::Version
67
- version: '3.22'
67
+ version: '4.0'
68
68
  description: |-
69
69
  minitest provides a complete suite of testing facilities supporting
70
70
  TDD, BDD, mocking, and benchmarking.
@@ -147,6 +147,7 @@ files:
147
147
  - lib/minitest/pride_plugin.rb
148
148
  - lib/minitest/spec.rb
149
149
  - lib/minitest/test.rb
150
+ - lib/minitest/test_task.rb
150
151
  - lib/minitest/unit.rb
151
152
  - test/minitest/metametameta.rb
152
153
  - test/minitest/test_minitest_assertions.rb
@@ -155,12 +156,13 @@ files:
155
156
  - test/minitest/test_minitest_reporter.rb
156
157
  - test/minitest/test_minitest_spec.rb
157
158
  - test/minitest/test_minitest_test.rb
158
- homepage: https://github.com/seattlerb/minitest
159
+ - test/minitest/test_minitest_test_task.rb
160
+ homepage: https://github.com/minitest/minitest
159
161
  licenses:
160
162
  - MIT
161
163
  metadata:
162
- homepage_uri: https://github.com/seattlerb/minitest
163
- bug_tracker_uri: https://github.com/seattlerb/minitest/issues
164
+ homepage_uri: https://github.com/minitest/minitest
165
+ bug_tracker_uri: https://github.com/minitest/minitest/issues
164
166
  post_install_message:
165
167
  rdoc_options:
166
168
  - "--main"
@@ -171,7 +173,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
171
173
  requirements:
172
174
  - - ">="
173
175
  - !ruby/object:Gem::Version
174
- version: '2.2'
176
+ version: '2.6'
175
177
  - - "<"
176
178
  - !ruby/object:Gem::Version
177
179
  version: '4.0'
@@ -181,7 +183,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
181
183
  - !ruby/object:Gem::Version
182
184
  version: '0'
183
185
  requirements: []
184
- rubygems_version: 3.1.4
186
+ rubygems_version: 3.4.10
185
187
  signing_key:
186
188
  specification_version: 4
187
189
  summary: minitest provides a complete suite of testing facilities supporting TDD,
metadata.gz.sig CHANGED
Binary file