minitest 5.15.0 → 5.20.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -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"
@@ -805,13 +847,134 @@ class TestMinitestRunnable < Minitest::Test
805
847
  end
806
848
 
807
849
  def test_spec_marshal_with_exception
808
- klass = describe("whatever") { it("passes") { raise Class.new(StandardError)} }
850
+ klass = describe("whatever") {
851
+ it("raises, badly") {
852
+ raise Class.new(StandardError), "this is bad!"
853
+ }
854
+ }
855
+
809
856
  rm = klass.runnable_methods.first
810
857
 
811
858
  # Run the test
812
859
  @tc = klass.new(rm).run
813
860
 
814
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
815
978
 
816
979
  # Pass it over the wire
817
980
  over_the_wire = Marshal.load Marshal.dump @tc
@@ -885,7 +1048,7 @@ class TestMinitestUnitTestCase < Minitest::Test
885
1048
  random_tests_3 = sample_test_case 1_000
886
1049
 
887
1050
  assert_equal random_tests_1, random_tests_2
888
- refute_equal random_tests_1, random_tests_3
1051
+ assert_equal random_tests_1, random_tests_3
889
1052
  end
890
1053
 
891
1054
  def test_runnable_methods_sorted
@@ -926,17 +1089,27 @@ class TestMinitestUnitTestCase < Minitest::Test
926
1089
 
927
1090
  def test_autorun_does_not_affect_fork_success_status
928
1091
  @assertion_count = 0
929
- skip "windows doesn't have skip" unless Process.respond_to?(:fork)
1092
+ skip "windows doesn't have fork" unless Process.respond_to?(:fork)
930
1093
  Process.waitpid(fork {})
931
1094
  assert_equal true, $?.success?
932
1095
  end
933
1096
 
934
1097
  def test_autorun_does_not_affect_fork_exit_status
935
1098
  @assertion_count = 0
936
- skip "windows doesn't have skip" unless Process.respond_to?(:fork)
1099
+ skip "windows doesn't have fork" unless Process.respond_to?(:fork)
937
1100
  Process.waitpid(fork { exit 42 })
938
1101
  assert_equal 42, $?.exitstatus
939
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
940
1113
  end
941
1114
 
942
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.15.0
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-12-15 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.2.16
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