minitest 5.14.0 → 5.17.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,13 +73,19 @@ 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
- # def test_default_runner_is_minitest_unit
79
- # assert_instance_of Minitest::Unit, Minitest::Unit.runner
80
- # end
82
+ def test_filter_backtrace__empty
83
+ with_empty_backtrace_filter do
84
+ bt = %w[first second third]
85
+ fu = Minitest.filter_backtrace bt.dup
86
+ assert_equal bt, fu
87
+ end
88
+ end
81
89
 
82
90
  def test_infectious_binary_encoding
83
91
  @tu = Class.new FakeNamedTest do
@@ -91,24 +99,26 @@ class TestMinitestUnit < MetaMetaMetaTestCase
91
99
  end
92
100
 
93
101
  expected = clean <<-EOM
94
- EF
102
+ FE
95
103
 
96
104
  Finished in 0.00
97
105
 
98
- 1) Error:
99
- FakeNamedTestXX#test_this_is_non_ascii_failure_message:
100
- RuntimeError: ЁЁЁ
101
- FILE:LINE:in `test_this_is_non_ascii_failure_message'
102
-
103
- 2) Failure:
106
+ 1) Failure:
104
107
  FakeNamedTestXX#test_this_is_not_ascii_assertion [FILE:LINE]:
105
108
  Expected: \"ЁЁЁ\"
106
109
  Actual: \"ёёё\"
107
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
+
108
116
  2 runs, 1 assertions, 1 failures, 1 errors, 0 skips
109
117
  EOM
110
118
 
111
- assert_report expected
119
+ Minitest::Test.io_lock.synchronize do # try not to trounce in parallel
120
+ assert_report expected
121
+ end
112
122
  end
113
123
 
114
124
  def test_passed_eh_teardown_good
@@ -154,11 +164,7 @@ class TestMinitestUnit < MetaMetaMetaTestCase
154
164
  end
155
165
 
156
166
  def util_expand_bt bt
157
- if RUBY_VERSION >= "1.9.0" then
158
- bt.map { |f| (f =~ /^\./) ? File.expand_path(f) : f }
159
- else
160
- bt
161
- end
167
+ bt.map { |f| (f =~ /^\./) ? File.expand_path(f) : f }
162
168
  end
163
169
  end
164
170
 
@@ -250,7 +256,7 @@ class TestMinitestRunner < MetaMetaMetaTestCase
250
256
  end
251
257
 
252
258
  expected = clean <<-EOM
253
- E.
259
+ .E
254
260
 
255
261
  Finished in 0.00
256
262
 
@@ -297,7 +303,7 @@ class TestMinitestRunner < MetaMetaMetaTestCase
297
303
  setup_basic_tu
298
304
 
299
305
  expected = clean <<-EOM
300
- F.
306
+ .F
301
307
 
302
308
  Finished in 0.00
303
309
 
@@ -324,6 +330,10 @@ class TestMinitestRunner < MetaMetaMetaTestCase
324
330
  end
325
331
  end
326
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
+
327
337
  def test_run_failing_filtered
328
338
  setup_basic_tu
329
339
 
@@ -481,7 +491,7 @@ class TestMinitestRunner < MetaMetaMetaTestCase
481
491
  end
482
492
 
483
493
  expected = clean <<-EOM
484
- S.
494
+ .S
485
495
 
486
496
  Finished in 0.00
487
497
 
@@ -508,8 +518,8 @@ class TestMinitestRunner < MetaMetaMetaTestCase
508
518
  end
509
519
 
510
520
  expected = clean <<-EOM
511
- FakeNamedTestXX#test_skip = 0.00 s = S
512
521
  FakeNamedTestXX#test_something = 0.00 s = .
522
+ FakeNamedTestXX#test_skip = 0.00 s = S
513
523
 
514
524
  Finished in 0.00
515
525
 
@@ -523,6 +533,33 @@ class TestMinitestRunner < MetaMetaMetaTestCase
523
533
  assert_report expected, %w[--seed 42 --verbose]
524
534
  end
525
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
+
526
563
  def test_run_with_other_runner
527
564
  @tu =
528
565
  Class.new FakeNamedTest do
@@ -623,6 +660,8 @@ class TestMinitestRunner < MetaMetaMetaTestCase
623
660
  2 runs, 2 assertions, 0 failures, 0 errors, 0 skips
624
661
  EOM
625
662
 
663
+ skip if Minitest.parallel_executor.size < 2 # locks up test runner if 1 CPU
664
+
626
665
  assert_report(expected) do |reporter|
627
666
  reporter.extend(Module.new {
628
667
  define_method("record") do |result|
@@ -747,6 +786,13 @@ class TestMinitestUnitOrder < MetaMetaMetaTestCase
747
786
  end
748
787
  end
749
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
+
750
796
  class TestMinitestRunnable < Minitest::Test
751
797
  def setup_marshal klass
752
798
  tc = klass.new "whatever"
@@ -799,6 +845,146 @@ class TestMinitestRunnable < Minitest::Test
799
845
  assert_equal @tc.failures, over_the_wire.failures
800
846
  assert_equal @tc.klass, over_the_wire.klass
801
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
802
988
  end
803
989
 
804
990
  class TestMinitestTest < TestMinitestRunnable
@@ -844,19 +1030,25 @@ class TestMinitestUnitTestCase < Minitest::Test
844
1030
  $VERBOSE = orig_verbose
845
1031
  end
846
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
847
1043
  def test_runnable_methods_random
848
1044
  @assertion_count = 0
849
1045
 
850
- sample_test_case = Class.new FakeNamedTest do
851
- def self.test_order; :random; end
852
- def test_test1; assert "does not matter" end
853
- def test_test2; assert "does not matter" end
854
- def test_test3; assert "does not matter" end
855
- 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
856
1049
 
857
- srand 42
858
- expected = %w[test_test2 test_test1 test_test3]
859
- 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
860
1052
  end
861
1053
 
862
1054
  def test_runnable_methods_sorted
@@ -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,18 +1,18 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: minitest
3
3
  version: !ruby/object:Gem::Version
4
- version: 5.14.0
4
+ version: 5.17.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ryan Davis
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain:
11
11
  - |
12
12
  -----BEGIN CERTIFICATE-----
13
- MIIDPjCCAiagAwIBAgIBBDANBgkqhkiG9w0BAQsFADBFMRMwEQYDVQQDDApyeWFu
13
+ MIIDPjCCAiagAwIBAgIBBzANBgkqhkiG9w0BAQsFADBFMRMwEQYDVQQDDApyeWFu
14
14
  ZC1ydWJ5MRkwFwYKCZImiZPyLGQBGRYJemVuc3BpZGVyMRMwEQYKCZImiZPyLGQB
15
- GRYDY29tMB4XDTE5MTIxMzAwMDIwNFoXDTIwMTIxMjAwMDIwNFowRTETMBEGA1UE
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
- AQCkkcHqAa6IKLYGl93rn78J3L+LnqyxaA059n4IGMHWN5bv9KBQnIjOrpLadtYZ
26
- vhWkunWDKdfVapBEq5+T4HzqnsEXC3aCv6JEKJY6Zw7iSzl0M8hozuzRr+w46wvT
27
- fV2yTN6QTVxqbMsJJyjosks4ZdQYov2zdvQpt1HsLi+Qmckmg8SPZsd+T8uiiBCf
28
- b+1ORSM5eEfBQenPXy83LZcoQz8i6zVB4aAfTGGdhxjoMGUEmSZ6xpkOzmnGa9QK
29
- m5x9IDiApM+vCELNwDXXGNFEnQBBK+wAe4Pek8o1V1TTOxL1kGPewVOitX1p3xoN
30
- h7iEjga8iM1LbZUfiISZ+WrB
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: 2020-01-12 00:00:00.000000000 Z
32
+ date: 2023-01-01 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.21'
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.21'
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,13 +156,14 @@ 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
159
+ - test/minitest/test_minitest_test_task.rb
158
160
  homepage: https://github.com/seattlerb/minitest
159
161
  licenses:
160
162
  - MIT
161
163
  metadata:
162
164
  homepage_uri: https://github.com/seattlerb/minitest
163
165
  bug_tracker_uri: https://github.com/seattlerb/minitest/issues
164
- post_install_message:
166
+ post_install_message:
165
167
  rdoc_options:
166
168
  - "--main"
167
169
  - README.rdoc
@@ -169,17 +171,20 @@ require_paths:
169
171
  - lib
170
172
  required_ruby_version: !ruby/object:Gem::Requirement
171
173
  requirements:
172
- - - "~>"
174
+ - - ">="
175
+ - !ruby/object:Gem::Version
176
+ version: '2.6'
177
+ - - "<"
173
178
  - !ruby/object:Gem::Version
174
- version: '2.2'
179
+ version: '4.0'
175
180
  required_rubygems_version: !ruby/object:Gem::Requirement
176
181
  requirements:
177
182
  - - ">="
178
183
  - !ruby/object:Gem::Version
179
184
  version: '0'
180
185
  requirements: []
181
- rubygems_version: 3.0.3
182
- signing_key:
186
+ rubygems_version: 3.3.12
187
+ signing_key:
183
188
  specification_version: 4
184
189
  summary: minitest provides a complete suite of testing facilities supporting TDD,
185
190
  BDD, mocking, and benchmarking
metadata.gz.sig CHANGED
Binary file