minitest 5.12.0 → 5.22.2
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
- checksums.yaml.gz.sig +0 -0
- data/History.rdoc +262 -5
- data/Manifest.txt +3 -0
- data/README.rdoc +90 -17
- data/Rakefile +5 -16
- data/lib/hoe/minitest.rb +0 -4
- data/lib/minitest/assertions.rb +171 -37
- data/lib/minitest/benchmark.rb +7 -7
- data/lib/minitest/compress.rb +94 -0
- data/lib/minitest/expectations.rb +72 -35
- data/lib/minitest/mock.rb +123 -34
- data/lib/minitest/pride_plugin.rb +1 -1
- data/lib/minitest/spec.rb +24 -10
- data/lib/minitest/test.rb +44 -16
- data/lib/minitest/test_task.rb +301 -0
- data/lib/minitest/unit.rb +5 -8
- data/lib/minitest.rb +245 -70
- data/test/minitest/metametameta.rb +45 -11
- data/test/minitest/test_minitest_assertions.rb +357 -29
- data/test/minitest/test_minitest_benchmark.rb +2 -2
- data/test/minitest/test_minitest_mock.rb +287 -15
- data/test/minitest/test_minitest_reporter.rb +158 -17
- data/test/minitest/test_minitest_spec.rb +184 -59
- data/test/minitest/test_minitest_test.rb +362 -42
- data/test/minitest/test_minitest_test_task.rb +46 -0
- data.tar.gz.sig +2 -2
- metadata +28 -19
- metadata.gz.sig +0 -0
@@ -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
|
-
|
51
|
+
Minitest::Test.io_lock.synchronize do # try not to trounce in parallel
|
52
|
+
fu = Minitest.filter_backtrace(bt)
|
52
53
|
|
53
|
-
|
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
|
-
|
75
|
-
|
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
|
-
|
79
|
-
|
80
|
-
|
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
|
-
|
102
|
+
FE
|
95
103
|
|
96
104
|
Finished in 0.00
|
97
105
|
|
98
|
-
1)
|
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
|
-
|
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
|
-
|
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
|
@@ -582,8 +619,6 @@ class TestMinitestRunner < MetaMetaMetaTestCase
|
|
582
619
|
end
|
583
620
|
|
584
621
|
def test_run_parallel
|
585
|
-
skip "I don't have ParallelEach debugged yet" if maglev?
|
586
|
-
|
587
622
|
test_count = 2
|
588
623
|
test_latch = Latch.new test_count
|
589
624
|
wait_latch = Latch.new test_count
|
@@ -625,6 +660,8 @@ class TestMinitestRunner < MetaMetaMetaTestCase
|
|
625
660
|
2 runs, 2 assertions, 0 failures, 0 errors, 0 skips
|
626
661
|
EOM
|
627
662
|
|
663
|
+
skip if Minitest.parallel_executor.size < 2 # locks up test runner if 1 CPU
|
664
|
+
|
628
665
|
assert_report(expected) do |reporter|
|
629
666
|
reporter.extend(Module.new {
|
630
667
|
define_method("record") do |result|
|
@@ -749,6 +786,13 @@ class TestMinitestUnitOrder < MetaMetaMetaTestCase
|
|
749
786
|
end
|
750
787
|
end
|
751
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
|
+
|
752
796
|
class TestMinitestRunnable < Minitest::Test
|
753
797
|
def setup_marshal klass
|
754
798
|
tc = klass.new "whatever"
|
@@ -801,6 +845,146 @@ class TestMinitestRunnable < Minitest::Test
|
|
801
845
|
assert_equal @tc.failures, over_the_wire.failures
|
802
846
|
assert_equal @tc.klass, over_the_wire.klass
|
803
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
|
804
988
|
end
|
805
989
|
|
806
990
|
class TestMinitestTest < TestMinitestRunnable
|
@@ -846,24 +1030,25 @@ class TestMinitestUnitTestCase < Minitest::Test
|
|
846
1030
|
$VERBOSE = orig_verbose
|
847
1031
|
end
|
848
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
|
849
1043
|
def test_runnable_methods_random
|
850
1044
|
@assertion_count = 0
|
851
1045
|
|
852
|
-
|
853
|
-
|
854
|
-
|
855
|
-
def test_test2; assert "does not matter" end
|
856
|
-
def test_test3; assert "does not matter" end
|
857
|
-
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
|
858
1049
|
|
859
|
-
|
860
|
-
|
861
|
-
when maglev? then
|
862
|
-
%w[test_test2 test_test3 test_test1]
|
863
|
-
else
|
864
|
-
%w[test_test2 test_test1 test_test3]
|
865
|
-
end
|
866
|
-
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
|
867
1052
|
end
|
868
1053
|
|
869
1054
|
def test_runnable_methods_sorted
|
@@ -901,6 +1086,30 @@ class TestMinitestUnitTestCase < Minitest::Test
|
|
901
1086
|
shitty_test_case.i_suck_and_my_tests_are_order_dependent!
|
902
1087
|
end
|
903
1088
|
end
|
1089
|
+
|
1090
|
+
def test_autorun_does_not_affect_fork_success_status
|
1091
|
+
@assertion_count = 0
|
1092
|
+
skip "windows doesn't have fork" unless Process.respond_to?(:fork)
|
1093
|
+
Process.waitpid(fork {})
|
1094
|
+
assert_equal true, $?.success?
|
1095
|
+
end
|
1096
|
+
|
1097
|
+
def test_autorun_does_not_affect_fork_exit_status
|
1098
|
+
@assertion_count = 0
|
1099
|
+
skip "windows doesn't have fork" unless Process.respond_to?(:fork)
|
1100
|
+
Process.waitpid(fork { exit 42 })
|
1101
|
+
assert_equal 42, $?.exitstatus
|
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
|
904
1113
|
end
|
905
1114
|
|
906
1115
|
class TestMinitestGuard < Minitest::Test
|
@@ -917,8 +1126,26 @@ class TestMinitestGuard < Minitest::Test
|
|
917
1126
|
end
|
918
1127
|
|
919
1128
|
def test_rubinius_eh
|
920
|
-
|
921
|
-
|
1129
|
+
assert_output "", /DEPRECATED/ do
|
1130
|
+
assert self.class.rubinius? "rbx"
|
1131
|
+
end
|
1132
|
+
assert_output "", /DEPRECATED/ do
|
1133
|
+
assert self.rubinius? "rbx"
|
1134
|
+
end
|
1135
|
+
end
|
1136
|
+
|
1137
|
+
def test_maglev_eh
|
1138
|
+
assert_output "", /DEPRECATED/ do
|
1139
|
+
assert self.class.maglev? "maglev"
|
1140
|
+
end
|
1141
|
+
assert_output "", /DEPRECATED/ do
|
1142
|
+
assert self.maglev? "maglev"
|
1143
|
+
end
|
1144
|
+
end
|
1145
|
+
|
1146
|
+
def test_osx_eh
|
1147
|
+
assert self.class.osx? "darwin"
|
1148
|
+
assert self.osx? "darwin"
|
922
1149
|
end
|
923
1150
|
|
924
1151
|
def test_windows_eh
|
@@ -1053,3 +1280,96 @@ class TestMinitestUnitRecording < MetaMetaMetaTestCase
|
|
1053
1280
|
end
|
1054
1281
|
end
|
1055
1282
|
end
|
1283
|
+
|
1284
|
+
class TestUnexpectedError < Minitest::Test
|
1285
|
+
def assert_compress exp, input
|
1286
|
+
e = Minitest::UnexpectedError.new RuntimeError.new
|
1287
|
+
|
1288
|
+
exp = exp.lines.map(&:chomp) if String === exp
|
1289
|
+
act = e.compress input
|
1290
|
+
|
1291
|
+
assert_equal exp, act
|
1292
|
+
end
|
1293
|
+
|
1294
|
+
ACT1 = %w[ a b c b c b c b c d ]
|
1295
|
+
|
1296
|
+
def test_normal
|
1297
|
+
assert_compress <<~EXP, %w[ a b c b c b c b c d ]
|
1298
|
+
a
|
1299
|
+
+->> 4 cycles of 2 lines:
|
1300
|
+
| b
|
1301
|
+
| c
|
1302
|
+
+-<<
|
1303
|
+
d
|
1304
|
+
EXP
|
1305
|
+
end
|
1306
|
+
|
1307
|
+
def test_normal2
|
1308
|
+
assert_compress <<~EXP, %w[ a b c b c b c b c ]
|
1309
|
+
a
|
1310
|
+
+->> 4 cycles of 2 lines:
|
1311
|
+
| b
|
1312
|
+
| c
|
1313
|
+
+-<<
|
1314
|
+
EXP
|
1315
|
+
end
|
1316
|
+
|
1317
|
+
def test_longer_c_than_b
|
1318
|
+
# the extra c in the front makes the overall length longer sorting it first
|
1319
|
+
assert_compress <<~EXP, %w[ c a b c b c b c b c b d ]
|
1320
|
+
c
|
1321
|
+
a
|
1322
|
+
b
|
1323
|
+
+->> 4 cycles of 2 lines:
|
1324
|
+
| c
|
1325
|
+
| b
|
1326
|
+
+-<<
|
1327
|
+
d
|
1328
|
+
EXP
|
1329
|
+
end
|
1330
|
+
|
1331
|
+
def test_1_line_cycles
|
1332
|
+
assert_compress <<~EXP, %w[ c a b c b c b c b c b b b d ]
|
1333
|
+
c
|
1334
|
+
a
|
1335
|
+
+->> 4 cycles of 2 lines:
|
1336
|
+
| b
|
1337
|
+
| c
|
1338
|
+
+-<<
|
1339
|
+
+->> 3 cycles of 1 lines:
|
1340
|
+
| b
|
1341
|
+
+-<<
|
1342
|
+
d
|
1343
|
+
EXP
|
1344
|
+
end
|
1345
|
+
|
1346
|
+
def test_sanity3
|
1347
|
+
pre = ("aa".."am").to_a
|
1348
|
+
mid = ("a".."z").to_a * 67
|
1349
|
+
post = ("aa".."am").to_a
|
1350
|
+
ary = pre + mid + post
|
1351
|
+
|
1352
|
+
exp = pre +
|
1353
|
+
[" +->> 67 cycles of 26 lines:"] +
|
1354
|
+
("a".."z").map { |s| " | #{s}" } +
|
1355
|
+
[" +-<<"] +
|
1356
|
+
post
|
1357
|
+
|
1358
|
+
assert_compress exp, ary
|
1359
|
+
end
|
1360
|
+
|
1361
|
+
def test_absurd_patterns
|
1362
|
+
assert_compress <<~EXP, %w[ a b c b c a b c b c a b c ]
|
1363
|
+
+->> 2 cycles of 5 lines:
|
1364
|
+
| a
|
1365
|
+
| +->> 2 cycles of 2 lines:
|
1366
|
+
| | b
|
1367
|
+
| | c
|
1368
|
+
| +-<<
|
1369
|
+
+-<<
|
1370
|
+
a
|
1371
|
+
b
|
1372
|
+
c
|
1373
|
+
EXP
|
1374
|
+
end
|
1375
|
+
end
|
@@ -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
@@ -1,2 +1,2 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
�TO���J���0�MN�i�W^�<~-C������Vi{�,{���V��=蝠�
|
2
|
+
�J�V�������j-G81�o��iB���T���\��
|
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.
|
4
|
+
version: 5.22.2
|
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
|
-
|
13
|
+
MIIDPjCCAiagAwIBAgIBCDANBgkqhkiG9w0BAQsFADBFMRMwEQYDVQQDDApyeWFu
|
14
14
|
ZC1ydWJ5MRkwFwYKCZImiZPyLGQBGRYJemVuc3BpZGVyMRMwEQYKCZImiZPyLGQB
|
15
|
-
|
15
|
+
GRYDY29tMB4XDTI0MDEwMjIxMjEyM1oXDTI1MDEwMTIxMjEyM1owRTETMBEGA1UE
|
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
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
25
|
+
AQCygvpmncmkiSs9r/Kceo4bBPDszhTv6iBi4LwMReqnFrpNLMOWJw7xi8x+3eL2
|
26
|
+
XS09ZPNOt2zm70KmFouBMgOysnDY4k2dE8uF6B8JbZOO8QfalW+CoNBliefOTcn2
|
27
|
+
bg5IOP7UoGM5lC174/cbDJrJnRG9bzig5FAP0mvsgA8zgTRXQzIUAZEo92D5K7p4
|
28
|
+
B4/O998ho6BSOgYBI9Yk1ttdCtti6Y+8N9+fZESsjtWMykA+WXWeGUScHqiU+gH8
|
29
|
+
S7043fq9EbQdBr2AXdj92+CDwuTfHI6/Hj5FVBDULufrJaan4xUgL70Hvc6pTTeW
|
30
|
+
deKfBjgVAq7EYHu1AczzlUly
|
31
31
|
-----END CERTIFICATE-----
|
32
|
-
date:
|
32
|
+
date: 2024-02-07 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: '
|
60
|
+
version: '4.2'
|
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: '
|
67
|
+
version: '4.2'
|
68
68
|
description: |-
|
69
69
|
minitest provides a complete suite of testing facilities supporting
|
70
70
|
TDD, BDD, mocking, and benchmarking.
|
@@ -139,6 +139,7 @@ files:
|
|
139
139
|
- lib/minitest/assertions.rb
|
140
140
|
- lib/minitest/autorun.rb
|
141
141
|
- lib/minitest/benchmark.rb
|
142
|
+
- lib/minitest/compress.rb
|
142
143
|
- lib/minitest/expectations.rb
|
143
144
|
- lib/minitest/hell.rb
|
144
145
|
- lib/minitest/mock.rb
|
@@ -147,6 +148,7 @@ files:
|
|
147
148
|
- lib/minitest/pride_plugin.rb
|
148
149
|
- lib/minitest/spec.rb
|
149
150
|
- lib/minitest/test.rb
|
151
|
+
- lib/minitest/test_task.rb
|
150
152
|
- lib/minitest/unit.rb
|
151
153
|
- test/minitest/metametameta.rb
|
152
154
|
- test/minitest/test_minitest_assertions.rb
|
@@ -155,11 +157,15 @@ files:
|
|
155
157
|
- test/minitest/test_minitest_reporter.rb
|
156
158
|
- test/minitest/test_minitest_spec.rb
|
157
159
|
- test/minitest/test_minitest_test.rb
|
158
|
-
|
160
|
+
- test/minitest/test_minitest_test_task.rb
|
161
|
+
homepage: https://github.com/minitest/minitest
|
159
162
|
licenses:
|
160
163
|
- MIT
|
161
|
-
metadata:
|
162
|
-
|
164
|
+
metadata:
|
165
|
+
homepage_uri: https://github.com/minitest/minitest
|
166
|
+
bug_tracker_uri: https://github.com/minitest/minitest/issues
|
167
|
+
changelog_uri: https://github.com/minitest/minitest/blob/master/History.rdoc
|
168
|
+
post_install_message:
|
163
169
|
rdoc_options:
|
164
170
|
- "--main"
|
165
171
|
- README.rdoc
|
@@ -169,15 +175,18 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
169
175
|
requirements:
|
170
176
|
- - ">="
|
171
177
|
- !ruby/object:Gem::Version
|
172
|
-
version: '
|
178
|
+
version: '2.6'
|
179
|
+
- - "<"
|
180
|
+
- !ruby/object:Gem::Version
|
181
|
+
version: '4.0'
|
173
182
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
174
183
|
requirements:
|
175
184
|
- - ">="
|
176
185
|
- !ruby/object:Gem::Version
|
177
186
|
version: '0'
|
178
187
|
requirements: []
|
179
|
-
rubygems_version: 3.
|
180
|
-
signing_key:
|
188
|
+
rubygems_version: 3.5.3
|
189
|
+
signing_key:
|
181
190
|
specification_version: 4
|
182
191
|
summary: minitest provides a complete suite of testing facilities supporting TDD,
|
183
192
|
BDD, mocking, and benchmarking
|