minitest 5.12.0 → 5.22.2
Sign up to get free protection for your applications and to get access to all the features.
- 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
|