minitest 5.11.3 → 5.17.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.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data/History.rdoc +187 -4
- data/Manifest.txt +3 -0
- data/README.rdoc +100 -15
- data/Rakefile +4 -16
- data/lib/hoe/minitest.rb +0 -4
- data/lib/minitest/assertions.rb +144 -29
- data/lib/minitest/benchmark.rb +7 -7
- data/lib/minitest/expectations.rb +54 -35
- data/lib/minitest/mock.rb +119 -32
- data/lib/minitest/pride_plugin.rb +1 -1
- data/lib/minitest/spec.rb +27 -9
- data/lib/minitest/test.rb +42 -6
- data/lib/minitest/test_task.rb +305 -0
- data/lib/minitest/unit.rb +5 -8
- data/lib/minitest.rb +133 -42
- data/test/minitest/metametameta.rb +43 -9
- data/test/minitest/test_minitest_assertions.rb +1591 -0
- data/test/minitest/test_minitest_benchmark.rb +2 -2
- data/test/minitest/test_minitest_mock.rb +288 -16
- data/test/minitest/test_minitest_reporter.rb +30 -17
- data/test/minitest/test_minitest_spec.rb +273 -155
- data/test/minitest/test_minitest_test.rb +271 -1141
- data/test/minitest/test_minitest_test_task.rb +46 -0
- data.tar.gz.sig +0 -0
- metadata +35 -22
- metadata.gz.sig +0 -0
@@ -15,11 +15,6 @@ if defined? Encoding then
|
|
15
15
|
end
|
16
16
|
end
|
17
17
|
|
18
|
-
module MyModule; end
|
19
|
-
class AnError < StandardError; include MyModule; end
|
20
|
-
class ImmutableString < String; def inspect; super.freeze; end; end
|
21
|
-
SomeError = Class.new Exception
|
22
|
-
|
23
18
|
class Minitest::Runnable
|
24
19
|
def whatever # faked for testing
|
25
20
|
assert true
|
@@ -53,9 +48,11 @@ class TestMinitestUnit < MetaMetaMetaTestCase
|
|
53
48
|
"test/test_autotest.rb:62:in `test_add_exception'"]
|
54
49
|
ex = util_expand_bt ex
|
55
50
|
|
56
|
-
|
51
|
+
Minitest::Test.io_lock.synchronize do # try not to trounce in parallel
|
52
|
+
fu = Minitest.filter_backtrace(bt)
|
57
53
|
|
58
|
-
|
54
|
+
assert_equal ex, fu
|
55
|
+
end
|
59
56
|
end
|
60
57
|
|
61
58
|
def test_filter_backtrace_all_unit
|
@@ -76,13 +73,19 @@ class TestMinitestUnit < MetaMetaMetaTestCase
|
|
76
73
|
bt = util_expand_bt bt
|
77
74
|
|
78
75
|
ex = ["-e:1"]
|
79
|
-
|
80
|
-
|
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
|
81
80
|
end
|
82
81
|
|
83
|
-
|
84
|
-
|
85
|
-
|
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
|
86
89
|
|
87
90
|
def test_infectious_binary_encoding
|
88
91
|
@tu = Class.new FakeNamedTest do
|
@@ -96,24 +99,26 @@ class TestMinitestUnit < MetaMetaMetaTestCase
|
|
96
99
|
end
|
97
100
|
|
98
101
|
expected = clean <<-EOM
|
99
|
-
|
102
|
+
FE
|
100
103
|
|
101
104
|
Finished in 0.00
|
102
105
|
|
103
|
-
1)
|
104
|
-
FakeNamedTestXX#test_this_is_non_ascii_failure_message:
|
105
|
-
RuntimeError: ЁЁЁ
|
106
|
-
FILE:LINE:in `test_this_is_non_ascii_failure_message'
|
107
|
-
|
108
|
-
2) Failure:
|
106
|
+
1) Failure:
|
109
107
|
FakeNamedTestXX#test_this_is_not_ascii_assertion [FILE:LINE]:
|
110
108
|
Expected: \"ЁЁЁ\"
|
111
109
|
Actual: \"ёёё\"
|
112
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
|
+
|
113
116
|
2 runs, 1 assertions, 1 failures, 1 errors, 0 skips
|
114
117
|
EOM
|
115
118
|
|
116
|
-
|
119
|
+
Minitest::Test.io_lock.synchronize do # try not to trounce in parallel
|
120
|
+
assert_report expected
|
121
|
+
end
|
117
122
|
end
|
118
123
|
|
119
124
|
def test_passed_eh_teardown_good
|
@@ -159,11 +164,7 @@ class TestMinitestUnit < MetaMetaMetaTestCase
|
|
159
164
|
end
|
160
165
|
|
161
166
|
def util_expand_bt bt
|
162
|
-
|
163
|
-
bt.map { |f| (f =~ /^\./) ? File.expand_path(f) : f }
|
164
|
-
else
|
165
|
-
bt
|
166
|
-
end
|
167
|
+
bt.map { |f| (f =~ /^\./) ? File.expand_path(f) : f }
|
167
168
|
end
|
168
169
|
end
|
169
170
|
|
@@ -255,7 +256,7 @@ class TestMinitestRunner < MetaMetaMetaTestCase
|
|
255
256
|
end
|
256
257
|
|
257
258
|
expected = clean <<-EOM
|
258
|
-
E
|
259
|
+
.E
|
259
260
|
|
260
261
|
Finished in 0.00
|
261
262
|
|
@@ -302,7 +303,7 @@ class TestMinitestRunner < MetaMetaMetaTestCase
|
|
302
303
|
setup_basic_tu
|
303
304
|
|
304
305
|
expected = clean <<-EOM
|
305
|
-
F
|
306
|
+
.F
|
306
307
|
|
307
308
|
Finished in 0.00
|
308
309
|
|
@@ -329,6 +330,10 @@ class TestMinitestRunner < MetaMetaMetaTestCase
|
|
329
330
|
end
|
330
331
|
end
|
331
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
|
+
|
332
337
|
def test_run_failing_filtered
|
333
338
|
setup_basic_tu
|
334
339
|
|
@@ -486,7 +491,7 @@ class TestMinitestRunner < MetaMetaMetaTestCase
|
|
486
491
|
end
|
487
492
|
|
488
493
|
expected = clean <<-EOM
|
489
|
-
S
|
494
|
+
.S
|
490
495
|
|
491
496
|
Finished in 0.00
|
492
497
|
|
@@ -513,8 +518,8 @@ class TestMinitestRunner < MetaMetaMetaTestCase
|
|
513
518
|
end
|
514
519
|
|
515
520
|
expected = clean <<-EOM
|
516
|
-
FakeNamedTestXX#test_skip = 0.00 s = S
|
517
521
|
FakeNamedTestXX#test_something = 0.00 s = .
|
522
|
+
FakeNamedTestXX#test_skip = 0.00 s = S
|
518
523
|
|
519
524
|
Finished in 0.00
|
520
525
|
|
@@ -528,6 +533,33 @@ class TestMinitestRunner < MetaMetaMetaTestCase
|
|
528
533
|
assert_report expected, %w[--seed 42 --verbose]
|
529
534
|
end
|
530
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
|
+
|
531
563
|
def test_run_with_other_runner
|
532
564
|
@tu =
|
533
565
|
Class.new FakeNamedTest do
|
@@ -587,8 +619,6 @@ class TestMinitestRunner < MetaMetaMetaTestCase
|
|
587
619
|
end
|
588
620
|
|
589
621
|
def test_run_parallel
|
590
|
-
skip "I don't have ParallelEach debugged yet" if maglev?
|
591
|
-
|
592
622
|
test_count = 2
|
593
623
|
test_latch = Latch.new test_count
|
594
624
|
wait_latch = Latch.new test_count
|
@@ -630,6 +660,8 @@ class TestMinitestRunner < MetaMetaMetaTestCase
|
|
630
660
|
2 runs, 2 assertions, 0 failures, 0 errors, 0 skips
|
631
661
|
EOM
|
632
662
|
|
663
|
+
skip if Minitest.parallel_executor.size < 2 # locks up test runner if 1 CPU
|
664
|
+
|
633
665
|
assert_report(expected) do |reporter|
|
634
666
|
reporter.extend(Module.new {
|
635
667
|
define_method("record") do |result|
|
@@ -754,6 +786,13 @@ class TestMinitestUnitOrder < MetaMetaMetaTestCase
|
|
754
786
|
end
|
755
787
|
end
|
756
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
|
+
|
757
796
|
class TestMinitestRunnable < Minitest::Test
|
758
797
|
def setup_marshal klass
|
759
798
|
tc = klass.new "whatever"
|
@@ -806,1206 +845,297 @@ class TestMinitestRunnable < Minitest::Test
|
|
806
845
|
assert_equal @tc.failures, over_the_wire.failures
|
807
846
|
assert_equal @tc.klass, over_the_wire.klass
|
808
847
|
end
|
809
|
-
end
|
810
848
|
|
811
|
-
|
812
|
-
|
813
|
-
|
814
|
-
|
815
|
-
|
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
|
+
}
|
816
855
|
|
817
|
-
|
818
|
-
assert_in_epsilon 3.14, new_tc.time
|
819
|
-
end
|
820
|
-
end
|
821
|
-
end
|
856
|
+
rm = klass.runnable_methods.first
|
822
857
|
|
823
|
-
|
824
|
-
|
825
|
-
# which is not threadsafe. Nearly every method in here is an
|
826
|
-
# assertion test so it isn't worth splitting it out further.
|
858
|
+
# Run the test
|
859
|
+
@tc = klass.new(rm).run
|
827
860
|
|
828
|
-
|
861
|
+
assert_kind_of Minitest::Result, @tc
|
862
|
+
assert_instance_of Minitest::UnexpectedError, @tc.failure
|
829
863
|
|
830
|
-
|
831
|
-
|
864
|
+
msg = @tc.failure.error.message
|
865
|
+
assert_includes msg, "Neutered Exception #<Class:"
|
866
|
+
assert_includes msg, "this is bad!"
|
832
867
|
|
833
|
-
|
868
|
+
# Pass it over the wire
|
869
|
+
over_the_wire = Marshal.load Marshal.dump @tc
|
834
870
|
|
835
|
-
@tc
|
836
|
-
@
|
837
|
-
@
|
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
|
838
876
|
end
|
839
877
|
|
840
|
-
def
|
841
|
-
|
842
|
-
|
843
|
-
|
878
|
+
def test_spec_marshal_with_exception_nameerror
|
879
|
+
klass = describe("whatever") {
|
880
|
+
it("raises nameerror") {
|
881
|
+
NOPE::does_not_exist
|
882
|
+
}
|
883
|
+
}
|
844
884
|
|
845
|
-
|
846
|
-
orig_verbose = $VERBOSE
|
847
|
-
$VERBOSE = false
|
885
|
+
rm = klass.runnable_methods.first
|
848
886
|
|
849
|
-
|
850
|
-
|
851
|
-
$VERBOSE = orig_verbose
|
852
|
-
end
|
887
|
+
# Run the test
|
888
|
+
@tc = klass.new(rm).run
|
853
889
|
|
854
|
-
|
855
|
-
|
890
|
+
assert_kind_of Minitest::Result, @tc
|
891
|
+
assert_instance_of Minitest::UnexpectedError, @tc.failure
|
856
892
|
|
857
|
-
|
858
|
-
|
893
|
+
msg = @tc.failure.error.message
|
894
|
+
assert_includes msg, "uninitialized constant TestMinitestRunnable::NOPE"
|
859
895
|
|
860
|
-
|
861
|
-
|
862
|
-
@tc.assert false
|
863
|
-
end
|
864
|
-
end
|
896
|
+
# Pass it over the wire
|
897
|
+
over_the_wire = Marshal.load Marshal.dump @tc
|
865
898
|
|
866
|
-
|
867
|
-
|
868
|
-
|
869
|
-
|
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
|
870
904
|
end
|
871
905
|
|
872
|
-
def
|
873
|
-
|
874
|
-
|
875
|
-
|
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
|
876
914
|
end
|
877
915
|
|
878
|
-
def
|
879
|
-
|
880
|
-
|
881
|
-
|
882
|
-
|
883
|
-
|
884
|
-
end
|
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
|
+
}
|
885
922
|
|
886
|
-
|
887
|
-
@tc.assert_equal 1, 1
|
888
|
-
end
|
923
|
+
rm = klass.runnable_methods.first
|
889
924
|
|
890
|
-
|
891
|
-
|
892
|
-
|
893
|
-
msg = "No visible difference in the Array#inspect output.
|
894
|
-
You should look at the implementation of #== on Array or its members.
|
895
|
-
[#<Object:0xXXXXXX>]".gsub(/^ +/, "")
|
896
|
-
assert_triggered msg do
|
897
|
-
@tc.assert_equal [object1], [object2]
|
925
|
+
# Run the test
|
926
|
+
@tc = with_runtime_error BetterError do
|
927
|
+
klass.new(rm).run
|
898
928
|
end
|
899
|
-
end
|
900
929
|
|
901
|
-
|
902
|
-
|
903
|
-
h1[1] = Object.new
|
904
|
-
h2[1] = Object.new
|
905
|
-
msg = "No visible difference in the Hash#inspect output.
|
906
|
-
You should look at the implementation of #== on Hash or its members.
|
907
|
-
{1=>#<Object:0xXXXXXX>}".gsub(/^ +/, "")
|
908
|
-
|
909
|
-
assert_triggered msg do
|
910
|
-
@tc.assert_equal h1, h2
|
911
|
-
end
|
912
|
-
end
|
930
|
+
assert_kind_of Minitest::Result, @tc
|
931
|
+
assert_instance_of Minitest::UnexpectedError, @tc.failure
|
913
932
|
|
914
|
-
|
915
|
-
|
916
|
-
--- expected
|
917
|
-
+++ actual
|
918
|
-
@@ -1 +1,2 @@
|
919
|
-
+# encoding: ASCII-8BIT
|
920
|
-
"bad-utf8-\\xF1.txt"
|
921
|
-
EOM
|
933
|
+
msg = @tc.failure.error.message
|
934
|
+
assert_equal "Neutered Exception BetterError: boom", msg
|
922
935
|
|
923
|
-
|
924
|
-
|
925
|
-
y = x.dup.force_encoding "binary" # TODO: switch to .b when 1.9 dropped
|
926
|
-
@tc.assert_equal x, y
|
927
|
-
end
|
928
|
-
end unless RUBY18
|
929
|
-
|
930
|
-
def test_assert_equal_string_encodings_both_different
|
931
|
-
msg = <<-EOM.gsub(/^ {10}/, "")
|
932
|
-
--- expected
|
933
|
-
+++ actual
|
934
|
-
@@ -1,2 +1,2 @@
|
935
|
-
-# encoding: US-ASCII
|
936
|
-
+# encoding: ASCII-8BIT
|
937
|
-
"bad-utf8-\\xF1.txt"
|
938
|
-
EOM
|
939
|
-
|
940
|
-
assert_triggered msg do
|
941
|
-
x = "bad-utf8-\xF1.txt".force_encoding "ASCII"
|
942
|
-
y = x.dup.force_encoding "binary" # TODO: switch to .b when 1.9 dropped
|
943
|
-
@tc.assert_equal x, y
|
944
|
-
end
|
945
|
-
end unless RUBY18
|
936
|
+
# Pass it over the wire
|
937
|
+
over_the_wire = Marshal.load Marshal.dump @tc
|
946
938
|
|
947
|
-
|
948
|
-
|
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
|
949
945
|
|
950
|
-
|
951
|
-
|
952
|
-
|
953
|
-
|
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)
|
954
950
|
|
955
|
-
|
951
|
+
super(record.first)
|
956
952
|
end
|
957
953
|
end
|
958
|
-
end
|
959
954
|
|
960
|
-
|
961
|
-
|
962
|
-
|
963
|
-
|
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
|
+
}
|
964
966
|
|
965
|
-
|
966
|
-
o2 = c.new "b"
|
967
|
-
msg = "--- expected
|
968
|
-
+++ actual
|
969
|
-
@@ -1 +1 @@
|
970
|
-
-#<#<Class:0xXXXXXX>:0xXXXXXX @name=\"a\">
|
971
|
-
+#<#<Class:0xXXXXXX>:0xXXXXXX @name=\"b\">
|
972
|
-
".gsub(/^ +/, "")
|
973
|
-
|
974
|
-
assert_triggered msg do
|
975
|
-
@tc.assert_equal o1, o2
|
976
|
-
end
|
977
|
-
end
|
967
|
+
rm = klass.runnable_methods.first
|
978
968
|
|
979
|
-
|
980
|
-
|
981
|
-
o2 = Object.new
|
969
|
+
# Run the test
|
970
|
+
@tc = klass.new(rm).run
|
982
971
|
|
983
|
-
|
984
|
-
|
985
|
-
#<Object:0xXXXXXX>".gsub(/^ +/, "")
|
972
|
+
assert_kind_of Minitest::Result, @tc
|
973
|
+
assert_instance_of Minitest::UnexpectedError, @tc.failure
|
986
974
|
|
987
|
-
|
988
|
-
@tc.assert_equal o1, o2
|
989
|
-
end
|
990
|
-
end
|
975
|
+
msg = @tc.failure.error.message.gsub(/0x[A-Fa-f0-9]+/, "0xXXX")
|
991
976
|
|
992
|
-
|
993
|
-
msg = "--- expected
|
994
|
-
+++ actual
|
995
|
-
@@ -1 +1 @@
|
996
|
-
-\"hahahahahahahahahahahahahahahahahahahaha\"
|
997
|
-
+\"blahblahblahblahblahblahblahblahblahblah\"
|
998
|
-
".gsub(/^ +/, "")
|
977
|
+
assert_equal "Neutered Exception #<Class:0xXXX>: boom", msg
|
999
978
|
|
1000
|
-
|
1001
|
-
|
1002
|
-
o2 = "blah" * 10
|
979
|
+
# Pass it over the wire
|
980
|
+
over_the_wire = Marshal.load Marshal.dump @tc
|
1003
981
|
|
1004
|
-
|
1005
|
-
|
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
|
1006
987
|
end
|
988
|
+
end
|
1007
989
|
|
1008
|
-
|
1009
|
-
|
1010
|
-
|
1011
|
-
|
990
|
+
class TestMinitestTest < TestMinitestRunnable
|
991
|
+
def test_dup
|
992
|
+
setup_marshal Minitest::Test do |tc|
|
993
|
+
tc.time = 3.14
|
994
|
+
end
|
1012
995
|
|
1013
|
-
|
1014
|
-
|
1015
|
-
o2 = "blah" * 10
|
1016
|
-
def o1.== _
|
1017
|
-
false
|
1018
|
-
end
|
1019
|
-
@tc.assert_equal o1, o2
|
996
|
+
assert_marshal %w[@NAME @assertions @failures @klass @source_location @time] do |new_tc|
|
997
|
+
assert_in_epsilon 3.14, new_tc.time
|
1020
998
|
end
|
1021
999
|
end
|
1000
|
+
end
|
1022
1001
|
|
1023
|
-
|
1024
|
-
|
1025
|
-
|
1026
|
-
|
1027
|
-
@@ -1 +1 @@
|
1028
|
-
-\"hahahahahahahahahahahahahahahahahahahaha\"
|
1029
|
-
+\"blahblahblahblahblahblahblahblahblahblah\"
|
1030
|
-
".gsub(/^ +/, "")
|
1002
|
+
class TestMinitestUnitTestCase < Minitest::Test
|
1003
|
+
# do not call parallelize_me! - teardown accesses @tc._assertions
|
1004
|
+
# which is not threadsafe. Nearly every method in here is an
|
1005
|
+
# assertion test so it isn't worth splitting it out further.
|
1031
1006
|
|
1032
|
-
|
1033
|
-
o1 = "haha" * 10
|
1034
|
-
o2 = "blah" * 10
|
1035
|
-
@tc.assert_equal o1, o2, "message"
|
1036
|
-
end
|
1037
|
-
end
|
1007
|
+
RUBY18 = !defined? Encoding
|
1038
1008
|
|
1039
|
-
def
|
1040
|
-
|
1041
|
-
@tc.assert_equal 1, 2
|
1042
|
-
end
|
1043
|
-
end
|
1009
|
+
def setup
|
1010
|
+
super
|
1044
1011
|
|
1045
|
-
|
1046
|
-
|
1047
|
-
|
1048
|
-
|
1012
|
+
Minitest::Test.reset
|
1013
|
+
|
1014
|
+
@tc = Minitest::Test.new "fake tc"
|
1015
|
+
@zomg = "zomg ponies!"
|
1016
|
+
@assertion_count = 1
|
1049
1017
|
end
|
1050
1018
|
|
1051
|
-
def
|
1052
|
-
|
1053
|
-
|
1054
|
-
@tc.assert_equal "a\nb", "a\nc"
|
1055
|
-
end
|
1019
|
+
def teardown
|
1020
|
+
assert_equal(@assertion_count, @tc.assertions,
|
1021
|
+
"expected #{@assertion_count} assertions to be fired during the test, not #{@tc.assertions}") if @tc.passed?
|
1056
1022
|
end
|
1057
1023
|
|
1058
|
-
def
|
1059
|
-
|
1060
|
-
|
1024
|
+
def non_verbose
|
1025
|
+
orig_verbose = $VERBOSE
|
1026
|
+
$VERBOSE = false
|
1061
1027
|
|
1062
|
-
|
1063
|
-
|
1064
|
-
|
1065
|
-
|
1066
|
-
else
|
1067
|
-
err_re = /Use assert_nil if expecting nil from .*test_minitest_test.rb/
|
1068
|
-
err_re = "" if $-w.nil?
|
1028
|
+
yield
|
1029
|
+
ensure
|
1030
|
+
$VERBOSE = orig_verbose
|
1031
|
+
end
|
1069
1032
|
|
1070
|
-
|
1071
|
-
|
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 }
|
1072
1038
|
end
|
1073
|
-
end
|
1039
|
+
end.runnable_methods
|
1074
1040
|
end
|
1075
1041
|
|
1076
|
-
|
1077
|
-
|
1078
|
-
|
1079
|
-
end
|
1080
|
-
end
|
1042
|
+
# srand varies with OS
|
1043
|
+
def test_runnable_methods_random
|
1044
|
+
@assertion_count = 0
|
1081
1045
|
|
1082
|
-
|
1083
|
-
|
1084
|
-
|
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
|
1085
1049
|
|
1086
|
-
|
1087
|
-
|
1050
|
+
assert_equal random_tests_1, random_tests_2
|
1051
|
+
assert_equal random_tests_1, random_tests_3
|
1052
|
+
end
|
1088
1053
|
|
1089
|
-
|
1054
|
+
def test_runnable_methods_sorted
|
1055
|
+
@assertion_count = 0
|
1090
1056
|
|
1091
|
-
|
1092
|
-
|
1057
|
+
sample_test_case = Class.new FakeNamedTest do
|
1058
|
+
def self.test_order; :sorted end
|
1059
|
+
def test_test3; assert "does not matter" end
|
1060
|
+
def test_test2; assert "does not matter" end
|
1061
|
+
def test_test1; assert "does not matter" end
|
1093
1062
|
end
|
1094
|
-
end
|
1095
1063
|
|
1096
|
-
|
1097
|
-
|
1098
|
-
assert_triggered "Expected |0.0 - 0.001| (0.001) to be <= #{x}." do
|
1099
|
-
@tc.assert_in_delta 0.0, 1.0 / 1000, 0.000001
|
1100
|
-
end
|
1064
|
+
expected = %w[test_test1 test_test2 test_test3]
|
1065
|
+
assert_equal expected, sample_test_case.runnable_methods
|
1101
1066
|
end
|
1102
1067
|
|
1103
|
-
def
|
1104
|
-
@assertion_count =
|
1068
|
+
def test_i_suck_and_my_tests_are_order_dependent_bang_sets_test_order_alpha
|
1069
|
+
@assertion_count = 0
|
1105
1070
|
|
1106
|
-
|
1107
|
-
@tc.assert_in_epsilon 9991, 10_000
|
1108
|
-
@tc.assert_in_epsilon 1.0, 1.001
|
1109
|
-
@tc.assert_in_epsilon 1.001, 1.0
|
1071
|
+
shitty_test_case = Class.new FakeNamedTest
|
1110
1072
|
|
1111
|
-
|
1112
|
-
@tc.assert_in_epsilon 9999.1, 10_000, 0.0001
|
1113
|
-
@tc.assert_in_epsilon 1.0, 1.0001, 0.0001
|
1114
|
-
@tc.assert_in_epsilon 1.0001, 1.0, 0.0001
|
1073
|
+
shitty_test_case.i_suck_and_my_tests_are_order_dependent!
|
1115
1074
|
|
1116
|
-
|
1117
|
-
@tc.assert_in_epsilon(-10_000, -9991)
|
1075
|
+
assert_equal :alpha, shitty_test_case.test_order
|
1118
1076
|
end
|
1119
1077
|
|
1120
|
-
def
|
1121
|
-
@assertion_count =
|
1078
|
+
def test_i_suck_and_my_tests_are_order_dependent_bang_does_not_warn
|
1079
|
+
@assertion_count = 0
|
1122
1080
|
|
1123
|
-
|
1081
|
+
shitty_test_case = Class.new FakeNamedTest
|
1124
1082
|
|
1125
|
-
|
1126
|
-
assert_triggered msg do
|
1127
|
-
@tc.refute_in_epsilon 1.0, 1.001
|
1128
|
-
end
|
1129
|
-
end
|
1083
|
+
def shitty_test_case.test_order; :lol end
|
1130
1084
|
|
1131
|
-
|
1132
|
-
|
1133
|
-
@tc.assert_in_epsilon 10_000, 9990
|
1085
|
+
assert_silent do
|
1086
|
+
shitty_test_case.i_suck_and_my_tests_are_order_dependent!
|
1134
1087
|
end
|
1135
1088
|
end
|
1136
1089
|
|
1137
|
-
def
|
1138
|
-
|
1139
|
-
|
1140
|
-
|
1141
|
-
|
1142
|
-
end
|
1090
|
+
def test_autorun_does_not_affect_fork_success_status
|
1091
|
+
@assertion_count = 0
|
1092
|
+
skip "windows doesn't have skip" unless Process.respond_to?(:fork)
|
1093
|
+
Process.waitpid(fork {})
|
1094
|
+
assert_equal true, $?.success?
|
1143
1095
|
end
|
1144
1096
|
|
1145
|
-
def
|
1146
|
-
@assertion_count =
|
1147
|
-
|
1148
|
-
|
1097
|
+
def test_autorun_does_not_affect_fork_exit_status
|
1098
|
+
@assertion_count = 0
|
1099
|
+
skip "windows doesn't have skip" unless Process.respond_to?(:fork)
|
1100
|
+
Process.waitpid(fork { exit 42 })
|
1101
|
+
assert_equal 42, $?.exitstatus
|
1149
1102
|
end
|
1103
|
+
end
|
1150
1104
|
|
1151
|
-
|
1152
|
-
|
1153
|
-
|
1154
|
-
e = @tc.assert_raises Minitest::Assertion do
|
1155
|
-
@tc.assert_includes [true], false
|
1156
|
-
end
|
1105
|
+
class TestMinitestGuard < Minitest::Test
|
1106
|
+
parallelize_me!
|
1157
1107
|
|
1158
|
-
|
1159
|
-
|
1108
|
+
def test_mri_eh
|
1109
|
+
assert self.class.mri? "ruby blah"
|
1110
|
+
assert self.mri? "ruby blah"
|
1160
1111
|
end
|
1161
1112
|
|
1162
|
-
def
|
1163
|
-
|
1113
|
+
def test_jruby_eh
|
1114
|
+
assert self.class.jruby? "java"
|
1115
|
+
assert self.jruby? "java"
|
1164
1116
|
end
|
1165
1117
|
|
1166
|
-
def
|
1167
|
-
|
1168
|
-
|
1118
|
+
def test_rubinius_eh
|
1119
|
+
assert_output "", /DEPRECATED/ do
|
1120
|
+
assert self.class.rubinius? "rbx"
|
1169
1121
|
end
|
1170
|
-
|
1171
|
-
|
1172
|
-
def test_assert_kind_of
|
1173
|
-
@tc.assert_kind_of String, "blah"
|
1174
|
-
end
|
1175
|
-
|
1176
|
-
def test_assert_kind_of_triggered
|
1177
|
-
assert_triggered 'Expected "blah" to be a kind of Array, not String.' do
|
1178
|
-
@tc.assert_kind_of Array, "blah"
|
1122
|
+
assert_output "", /DEPRECATED/ do
|
1123
|
+
assert self.rubinius? "rbx"
|
1179
1124
|
end
|
1180
1125
|
end
|
1181
1126
|
|
1182
|
-
def
|
1183
|
-
|
1184
|
-
|
1127
|
+
def test_maglev_eh
|
1128
|
+
assert_output "", /DEPRECATED/ do
|
1129
|
+
assert self.class.maglev? "maglev"
|
1130
|
+
end
|
1131
|
+
assert_output "", /DEPRECATED/ do
|
1132
|
+
assert self.maglev? "maglev"
|
1133
|
+
end
|
1185
1134
|
end
|
1186
1135
|
|
1187
|
-
def
|
1188
|
-
|
1189
|
-
|
1190
|
-
pattern = Object.new
|
1191
|
-
def pattern.=~ _; true end
|
1192
|
-
|
1193
|
-
@tc.assert_match pattern, 5
|
1194
|
-
end
|
1195
|
-
|
1196
|
-
def test_assert_match_matchee_to_str
|
1197
|
-
@assertion_count = 2
|
1198
|
-
|
1199
|
-
obj = Object.new
|
1200
|
-
def obj.to_str; "blah" end
|
1201
|
-
|
1202
|
-
@tc.assert_match "blah", obj
|
1203
|
-
end
|
1204
|
-
|
1205
|
-
def test_assert_match_object_triggered
|
1206
|
-
@assertion_count = 2
|
1207
|
-
|
1208
|
-
pattern = Object.new
|
1209
|
-
def pattern.=~ _; false end
|
1210
|
-
def pattern.inspect; "[Object]" end
|
1211
|
-
|
1212
|
-
assert_triggered "Expected [Object] to match 5." do
|
1213
|
-
@tc.assert_match pattern, 5
|
1214
|
-
end
|
1215
|
-
end
|
1216
|
-
|
1217
|
-
def test_assert_match_triggered
|
1218
|
-
@assertion_count = 2
|
1219
|
-
assert_triggered 'Expected /\d+/ to match "blah blah blah".' do
|
1220
|
-
@tc.assert_match(/\d+/, "blah blah blah")
|
1221
|
-
end
|
1222
|
-
end
|
1223
|
-
|
1224
|
-
def test_assert_nil
|
1225
|
-
@tc.assert_nil nil
|
1226
|
-
end
|
1227
|
-
|
1228
|
-
def test_assert_nil_triggered
|
1229
|
-
assert_triggered "Expected 42 to be nil." do
|
1230
|
-
@tc.assert_nil 42
|
1231
|
-
end
|
1232
|
-
end
|
1233
|
-
|
1234
|
-
def test_assert_operator
|
1235
|
-
@tc.assert_operator 2, :>, 1
|
1236
|
-
end
|
1237
|
-
|
1238
|
-
def test_assert_operator_bad_object
|
1239
|
-
bad = Object.new
|
1240
|
-
def bad.== _; true end
|
1241
|
-
|
1242
|
-
@tc.assert_operator bad, :equal?, bad
|
1243
|
-
end
|
1244
|
-
|
1245
|
-
def test_assert_operator_triggered
|
1246
|
-
assert_triggered "Expected 2 to be < 1." do
|
1247
|
-
@tc.assert_operator 2, :<, 1
|
1248
|
-
end
|
1249
|
-
end
|
1250
|
-
|
1251
|
-
def test_assert_output_both
|
1252
|
-
@assertion_count = 2
|
1253
|
-
|
1254
|
-
@tc.assert_output "yay", "blah" do
|
1255
|
-
print "yay"
|
1256
|
-
$stderr.print "blah"
|
1257
|
-
end
|
1258
|
-
end
|
1259
|
-
|
1260
|
-
def test_assert_output_both_regexps
|
1261
|
-
@assertion_count = 4
|
1262
|
-
|
1263
|
-
@tc.assert_output(/y.y/, /bl.h/) do
|
1264
|
-
print "yay"
|
1265
|
-
$stderr.print "blah"
|
1266
|
-
end
|
1267
|
-
end
|
1268
|
-
|
1269
|
-
def test_assert_output_err
|
1270
|
-
@tc.assert_output nil, "blah" do
|
1271
|
-
$stderr.print "blah"
|
1272
|
-
end
|
1273
|
-
end
|
1274
|
-
|
1275
|
-
def test_assert_output_neither
|
1276
|
-
@assertion_count = 0
|
1277
|
-
|
1278
|
-
@tc.assert_output do
|
1279
|
-
# do nothing
|
1280
|
-
end
|
1281
|
-
end
|
1282
|
-
|
1283
|
-
def test_assert_output_out
|
1284
|
-
@tc.assert_output "blah" do
|
1285
|
-
print "blah"
|
1286
|
-
end
|
1287
|
-
end
|
1288
|
-
|
1289
|
-
def test_assert_output_triggered_both
|
1290
|
-
assert_triggered util_msg("blah", "blah blah", "In stderr") do
|
1291
|
-
@tc.assert_output "yay", "blah" do
|
1292
|
-
print "boo"
|
1293
|
-
$stderr.print "blah blah"
|
1294
|
-
end
|
1295
|
-
end
|
1296
|
-
end
|
1297
|
-
|
1298
|
-
def test_assert_output_triggered_err
|
1299
|
-
assert_triggered util_msg("blah", "blah blah", "In stderr") do
|
1300
|
-
@tc.assert_output nil, "blah" do
|
1301
|
-
$stderr.print "blah blah"
|
1302
|
-
end
|
1303
|
-
end
|
1304
|
-
end
|
1305
|
-
|
1306
|
-
def test_assert_output_triggered_out
|
1307
|
-
assert_triggered util_msg("blah", "blah blah", "In stdout") do
|
1308
|
-
@tc.assert_output "blah" do
|
1309
|
-
print "blah blah"
|
1310
|
-
end
|
1311
|
-
end
|
1312
|
-
end
|
1313
|
-
|
1314
|
-
def test_assert_predicate
|
1315
|
-
@tc.assert_predicate "", :empty?
|
1316
|
-
end
|
1317
|
-
|
1318
|
-
def test_assert_predicate_triggered
|
1319
|
-
assert_triggered 'Expected "blah" to be empty?.' do
|
1320
|
-
@tc.assert_predicate "blah", :empty?
|
1321
|
-
end
|
1322
|
-
end
|
1323
|
-
|
1324
|
-
def test_assert_raises
|
1325
|
-
@tc.assert_raises RuntimeError do
|
1326
|
-
raise "blah"
|
1327
|
-
end
|
1328
|
-
end
|
1329
|
-
|
1330
|
-
def test_assert_raises_default
|
1331
|
-
@tc.assert_raises do
|
1332
|
-
raise StandardError, "blah"
|
1333
|
-
end
|
1334
|
-
end
|
1335
|
-
|
1336
|
-
def test_assert_raises_default_triggered
|
1337
|
-
e = assert_raises Minitest::Assertion do
|
1338
|
-
@tc.assert_raises do
|
1339
|
-
raise SomeError, "blah"
|
1340
|
-
end
|
1341
|
-
end
|
1342
|
-
|
1343
|
-
expected = clean <<-EOM.chomp
|
1344
|
-
[StandardError] exception expected, not
|
1345
|
-
Class: <SomeError>
|
1346
|
-
Message: <\"blah\">
|
1347
|
-
---Backtrace---
|
1348
|
-
FILE:LINE:in \`test_assert_raises_default_triggered\'
|
1349
|
-
---------------
|
1350
|
-
EOM
|
1351
|
-
|
1352
|
-
actual = e.message.gsub(/^.+:\d+/, "FILE:LINE")
|
1353
|
-
actual.gsub!(/block \(\d+ levels\) in /, "") if RUBY_VERSION >= "1.9.0"
|
1354
|
-
|
1355
|
-
assert_equal expected, actual
|
1356
|
-
end
|
1357
|
-
|
1358
|
-
def test_assert_raises_module
|
1359
|
-
@tc.assert_raises MyModule do
|
1360
|
-
raise AnError
|
1361
|
-
end
|
1362
|
-
end
|
1363
|
-
|
1364
|
-
##
|
1365
|
-
# *sigh* This is quite an odd scenario, but it is from real (albeit
|
1366
|
-
# ugly) test code in ruby-core:
|
1367
|
-
#
|
1368
|
-
# http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=29259
|
1369
|
-
|
1370
|
-
def test_assert_raises_skip
|
1371
|
-
@assertion_count = 0
|
1372
|
-
|
1373
|
-
assert_triggered "skipped", Minitest::Skip do
|
1374
|
-
@tc.assert_raises ArgumentError do
|
1375
|
-
begin
|
1376
|
-
raise "blah"
|
1377
|
-
rescue
|
1378
|
-
skip "skipped"
|
1379
|
-
end
|
1380
|
-
end
|
1381
|
-
end
|
1382
|
-
end
|
1383
|
-
|
1384
|
-
def test_assert_raises_triggered_different
|
1385
|
-
e = assert_raises Minitest::Assertion do
|
1386
|
-
@tc.assert_raises RuntimeError do
|
1387
|
-
raise SyntaxError, "icky"
|
1388
|
-
end
|
1389
|
-
end
|
1390
|
-
|
1391
|
-
expected = clean <<-EOM.chomp
|
1392
|
-
[RuntimeError] exception expected, not
|
1393
|
-
Class: <SyntaxError>
|
1394
|
-
Message: <\"icky\">
|
1395
|
-
---Backtrace---
|
1396
|
-
FILE:LINE:in \`test_assert_raises_triggered_different\'
|
1397
|
-
---------------
|
1398
|
-
EOM
|
1399
|
-
|
1400
|
-
actual = e.message.gsub(/^.+:\d+/, "FILE:LINE")
|
1401
|
-
actual.gsub!(/block \(\d+ levels\) in /, "") if RUBY_VERSION >= "1.9.0"
|
1402
|
-
|
1403
|
-
assert_equal expected, actual
|
1404
|
-
end
|
1405
|
-
|
1406
|
-
def test_assert_raises_triggered_different_msg
|
1407
|
-
e = assert_raises Minitest::Assertion do
|
1408
|
-
@tc.assert_raises RuntimeError, "XXX" do
|
1409
|
-
raise SyntaxError, "icky"
|
1410
|
-
end
|
1411
|
-
end
|
1412
|
-
|
1413
|
-
expected = clean <<-EOM
|
1414
|
-
XXX.
|
1415
|
-
[RuntimeError] exception expected, not
|
1416
|
-
Class: <SyntaxError>
|
1417
|
-
Message: <\"icky\">
|
1418
|
-
---Backtrace---
|
1419
|
-
FILE:LINE:in \`test_assert_raises_triggered_different_msg\'
|
1420
|
-
---------------
|
1421
|
-
EOM
|
1422
|
-
|
1423
|
-
actual = e.message.gsub(/^.+:\d+/, "FILE:LINE")
|
1424
|
-
actual.gsub!(/block \(\d+ levels\) in /, "") if RUBY_VERSION >= "1.9.0"
|
1425
|
-
|
1426
|
-
assert_equal expected.chomp, actual
|
1427
|
-
end
|
1428
|
-
|
1429
|
-
def test_assert_raises_triggered_none
|
1430
|
-
e = assert_raises Minitest::Assertion do
|
1431
|
-
@tc.assert_raises Minitest::Assertion do
|
1432
|
-
# do nothing
|
1433
|
-
end
|
1434
|
-
end
|
1435
|
-
|
1436
|
-
expected = "Minitest::Assertion expected but nothing was raised."
|
1437
|
-
|
1438
|
-
assert_equal expected, e.message
|
1439
|
-
end
|
1440
|
-
|
1441
|
-
def test_assert_raises_triggered_none_msg
|
1442
|
-
e = assert_raises Minitest::Assertion do
|
1443
|
-
@tc.assert_raises Minitest::Assertion, "XXX" do
|
1444
|
-
# do nothing
|
1445
|
-
end
|
1446
|
-
end
|
1447
|
-
|
1448
|
-
expected = "XXX.\nMinitest::Assertion expected but nothing was raised."
|
1449
|
-
|
1450
|
-
assert_equal expected, e.message
|
1451
|
-
end
|
1452
|
-
|
1453
|
-
def test_assert_raises_subclass
|
1454
|
-
@tc.assert_raises StandardError do
|
1455
|
-
raise AnError
|
1456
|
-
end
|
1457
|
-
end
|
1458
|
-
|
1459
|
-
def test_assert_raises_subclass_triggered
|
1460
|
-
e = assert_raises Minitest::Assertion do
|
1461
|
-
@tc.assert_raises SomeError do
|
1462
|
-
raise AnError, "some message"
|
1463
|
-
end
|
1464
|
-
end
|
1465
|
-
|
1466
|
-
expected = clean <<-EOM
|
1467
|
-
[SomeError] exception expected, not
|
1468
|
-
Class: <AnError>
|
1469
|
-
Message: <\"some message\">
|
1470
|
-
---Backtrace---
|
1471
|
-
FILE:LINE:in \`test_assert_raises_subclass_triggered\'
|
1472
|
-
---------------
|
1473
|
-
EOM
|
1474
|
-
|
1475
|
-
actual = e.message.gsub(/^.+:\d+/, "FILE:LINE")
|
1476
|
-
actual.gsub!(/block \(\d+ levels\) in /, "") if RUBY_VERSION >= "1.9.0"
|
1477
|
-
|
1478
|
-
assert_equal expected.chomp, actual
|
1479
|
-
end
|
1480
|
-
|
1481
|
-
def test_assert_raises_exit
|
1482
|
-
@tc.assert_raises SystemExit do
|
1483
|
-
exit 1
|
1484
|
-
end
|
1485
|
-
end
|
1486
|
-
|
1487
|
-
def test_assert_raises_signals
|
1488
|
-
@tc.assert_raises SignalException do
|
1489
|
-
raise SignalException, :INT
|
1490
|
-
end
|
1491
|
-
end
|
1492
|
-
|
1493
|
-
def test_assert_respond_to
|
1494
|
-
@tc.assert_respond_to "blah", :empty?
|
1495
|
-
end
|
1496
|
-
|
1497
|
-
def test_assert_respond_to_triggered
|
1498
|
-
assert_triggered 'Expected "blah" (String) to respond to #rawr!.' do
|
1499
|
-
@tc.assert_respond_to "blah", :rawr!
|
1500
|
-
end
|
1501
|
-
end
|
1502
|
-
|
1503
|
-
def test_assert_same
|
1504
|
-
@assertion_count = 3
|
1505
|
-
|
1506
|
-
o = "blah"
|
1507
|
-
@tc.assert_same 1, 1
|
1508
|
-
@tc.assert_same :blah, :blah
|
1509
|
-
@tc.assert_same o, o
|
1510
|
-
end
|
1511
|
-
|
1512
|
-
def test_assert_same_triggered
|
1513
|
-
@assertion_count = 2
|
1514
|
-
|
1515
|
-
assert_triggered "Expected 2 (oid=N) to be the same as 1 (oid=N)." do
|
1516
|
-
@tc.assert_same 1, 2
|
1517
|
-
end
|
1518
|
-
|
1519
|
-
s1 = "blah"
|
1520
|
-
s2 = "blah"
|
1521
|
-
|
1522
|
-
assert_triggered 'Expected "blah" (oid=N) to be the same as "blah" (oid=N).' do
|
1523
|
-
@tc.assert_same s1, s2
|
1524
|
-
end
|
1525
|
-
end
|
1526
|
-
|
1527
|
-
def assert_deprecated name
|
1528
|
-
dep = /DEPRECATED: #{name}. From #{__FILE__}:\d+(?::.*)?/
|
1529
|
-
dep = "" if $-w.nil?
|
1530
|
-
|
1531
|
-
assert_output nil, dep do
|
1532
|
-
yield
|
1533
|
-
end
|
1534
|
-
end
|
1535
|
-
|
1536
|
-
def test_assert_send
|
1537
|
-
assert_deprecated :assert_send do
|
1538
|
-
@tc.assert_send [1, :<, 2]
|
1539
|
-
end
|
1540
|
-
end
|
1541
|
-
|
1542
|
-
def test_assert_send_bad
|
1543
|
-
assert_deprecated :assert_send do
|
1544
|
-
assert_triggered "Expected 1.>(*[2]) to return true." do
|
1545
|
-
@tc.assert_send [1, :>, 2]
|
1546
|
-
end
|
1547
|
-
end
|
1548
|
-
end
|
1549
|
-
|
1550
|
-
def test_assert_silent
|
1551
|
-
@assertion_count = 2
|
1552
|
-
|
1553
|
-
@tc.assert_silent do
|
1554
|
-
# do nothing
|
1555
|
-
end
|
1556
|
-
end
|
1557
|
-
|
1558
|
-
def test_assert_silent_triggered_err
|
1559
|
-
assert_triggered util_msg("", "blah blah", "In stderr") do
|
1560
|
-
@tc.assert_silent do
|
1561
|
-
$stderr.print "blah blah"
|
1562
|
-
end
|
1563
|
-
end
|
1564
|
-
end
|
1565
|
-
|
1566
|
-
def test_assert_silent_triggered_out
|
1567
|
-
@assertion_count = 2
|
1568
|
-
|
1569
|
-
assert_triggered util_msg("", "blah blah", "In stdout") do
|
1570
|
-
@tc.assert_silent do
|
1571
|
-
print "blah blah"
|
1572
|
-
end
|
1573
|
-
end
|
1574
|
-
end
|
1575
|
-
|
1576
|
-
def test_assert_throws
|
1577
|
-
@tc.assert_throws :blah do
|
1578
|
-
throw :blah
|
1579
|
-
end
|
1580
|
-
end
|
1581
|
-
|
1582
|
-
def test_assert_throws_name_error
|
1583
|
-
@tc.assert_raises NameError do
|
1584
|
-
@tc.assert_throws :blah do
|
1585
|
-
raise NameError
|
1586
|
-
end
|
1587
|
-
end
|
1588
|
-
end
|
1589
|
-
|
1590
|
-
def test_assert_throws_argument_exception
|
1591
|
-
@tc.assert_raises ArgumentError do
|
1592
|
-
@tc.assert_throws :blah do
|
1593
|
-
raise ArgumentError
|
1594
|
-
end
|
1595
|
-
end
|
1596
|
-
end
|
1597
|
-
|
1598
|
-
def test_assert_throws_different
|
1599
|
-
assert_triggered "Expected :blah to have been thrown, not :not_blah." do
|
1600
|
-
@tc.assert_throws :blah do
|
1601
|
-
throw :not_blah
|
1602
|
-
end
|
1603
|
-
end
|
1604
|
-
end
|
1605
|
-
|
1606
|
-
def test_assert_throws_unthrown
|
1607
|
-
assert_triggered "Expected :blah to have been thrown." do
|
1608
|
-
@tc.assert_throws :blah do
|
1609
|
-
# do nothing
|
1610
|
-
end
|
1611
|
-
end
|
1612
|
-
end
|
1613
|
-
|
1614
|
-
def test_capture_io
|
1615
|
-
@assertion_count = 0
|
1616
|
-
|
1617
|
-
non_verbose do
|
1618
|
-
out, err = capture_io do
|
1619
|
-
puts "hi"
|
1620
|
-
$stderr.puts "bye!"
|
1621
|
-
end
|
1622
|
-
|
1623
|
-
assert_equal "hi\n", out
|
1624
|
-
assert_equal "bye!\n", err
|
1625
|
-
end
|
1626
|
-
end
|
1627
|
-
|
1628
|
-
def test_capture_subprocess_io
|
1629
|
-
@assertion_count = 0
|
1630
|
-
|
1631
|
-
non_verbose do
|
1632
|
-
out, err = capture_subprocess_io do
|
1633
|
-
system("echo hi")
|
1634
|
-
system("echo bye! 1>&2")
|
1635
|
-
end
|
1636
|
-
|
1637
|
-
assert_equal "hi\n", out
|
1638
|
-
assert_equal "bye!", err.strip
|
1639
|
-
end
|
1640
|
-
end
|
1641
|
-
|
1642
|
-
def test_class_asserts_match_refutes
|
1643
|
-
@assertion_count = 0
|
1644
|
-
|
1645
|
-
methods = Minitest::Assertions.public_instance_methods
|
1646
|
-
methods.map!(&:to_s) if Symbol === methods.first
|
1647
|
-
|
1648
|
-
# These don't have corresponding refutes _on purpose_. They're
|
1649
|
-
# useless and will never be added, so don't bother.
|
1650
|
-
ignores = %w[assert_output assert_raises assert_send
|
1651
|
-
assert_silent assert_throws assert_mock]
|
1652
|
-
|
1653
|
-
# These are test/unit methods. I'm not actually sure why they're still here
|
1654
|
-
ignores += %w[assert_no_match assert_not_equal assert_not_nil
|
1655
|
-
assert_not_same assert_nothing_raised
|
1656
|
-
assert_nothing_thrown assert_raise]
|
1657
|
-
|
1658
|
-
asserts = methods.grep(/^assert/).sort - ignores
|
1659
|
-
refutes = methods.grep(/^refute/).sort - ignores
|
1660
|
-
|
1661
|
-
assert_empty refutes.map { |n| n.sub(/^refute/, "assert") } - asserts
|
1662
|
-
assert_empty asserts.map { |n| n.sub(/^assert/, "refute") } - refutes
|
1663
|
-
end
|
1664
|
-
|
1665
|
-
def test_flunk
|
1666
|
-
assert_triggered "Epic Fail!" do
|
1667
|
-
@tc.flunk
|
1668
|
-
end
|
1669
|
-
end
|
1670
|
-
|
1671
|
-
def test_flunk_message
|
1672
|
-
assert_triggered @zomg do
|
1673
|
-
@tc.flunk @zomg
|
1674
|
-
end
|
1675
|
-
end
|
1676
|
-
|
1677
|
-
def test_message
|
1678
|
-
@assertion_count = 0
|
1679
|
-
|
1680
|
-
assert_equal "blah2.", @tc.message { "blah2" }.call
|
1681
|
-
assert_equal "blah2.", @tc.message("") { "blah2" }.call
|
1682
|
-
assert_equal "blah1.\nblah2.", @tc.message(:blah1) { "blah2" }.call
|
1683
|
-
assert_equal "blah1.\nblah2.", @tc.message("blah1") { "blah2" }.call
|
1684
|
-
|
1685
|
-
message = proc { "blah1" }
|
1686
|
-
assert_equal "blah1.\nblah2.", @tc.message(message) { "blah2" }.call
|
1687
|
-
|
1688
|
-
message = @tc.message { "blah1" }
|
1689
|
-
assert_equal "blah1.\nblah2.", @tc.message(message) { "blah2" }.call
|
1690
|
-
end
|
1691
|
-
|
1692
|
-
def test_message_message
|
1693
|
-
assert_triggered "whoops.\nExpected: 1\n Actual: 2" do
|
1694
|
-
@tc.assert_equal 1, 2, message { "whoops" }
|
1695
|
-
end
|
1696
|
-
end
|
1697
|
-
|
1698
|
-
def test_message_lambda
|
1699
|
-
assert_triggered "whoops.\nExpected: 1\n Actual: 2" do
|
1700
|
-
@tc.assert_equal 1, 2, lambda { "whoops" }
|
1701
|
-
end
|
1702
|
-
end
|
1703
|
-
|
1704
|
-
def test_message_deferred
|
1705
|
-
@assertion_count, var = 0, nil
|
1706
|
-
|
1707
|
-
msg = message { var = "blah" }
|
1708
|
-
|
1709
|
-
assert_nil var
|
1710
|
-
|
1711
|
-
msg.call
|
1712
|
-
|
1713
|
-
assert_equal "blah", var
|
1714
|
-
end
|
1715
|
-
|
1716
|
-
def test_pass
|
1717
|
-
@tc.pass
|
1718
|
-
end
|
1719
|
-
|
1720
|
-
def test_prints
|
1721
|
-
printer = Class.new { extend Minitest::Assertions }
|
1722
|
-
@tc.assert_equal '"test"', printer.mu_pp(ImmutableString.new "test")
|
1723
|
-
end
|
1724
|
-
|
1725
|
-
def test_refute
|
1726
|
-
@assertion_count = 2
|
1727
|
-
|
1728
|
-
@tc.assert_equal false, @tc.refute(false), "returns false on success"
|
1729
|
-
end
|
1730
|
-
|
1731
|
-
def test_refute_empty
|
1732
|
-
@assertion_count = 2
|
1733
|
-
|
1734
|
-
@tc.refute_empty [1]
|
1735
|
-
end
|
1736
|
-
|
1737
|
-
def test_refute_empty_triggered
|
1738
|
-
@assertion_count = 2
|
1739
|
-
|
1740
|
-
assert_triggered "Expected [] to not be empty." do
|
1741
|
-
@tc.refute_empty []
|
1742
|
-
end
|
1743
|
-
end
|
1744
|
-
|
1745
|
-
def test_refute_equal
|
1746
|
-
@tc.refute_equal "blah", "yay"
|
1747
|
-
end
|
1748
|
-
|
1749
|
-
def test_refute_equal_triggered
|
1750
|
-
assert_triggered 'Expected "blah" to not be equal to "blah".' do
|
1751
|
-
@tc.refute_equal "blah", "blah"
|
1752
|
-
end
|
1753
|
-
end
|
1754
|
-
|
1755
|
-
def test_refute_in_delta
|
1756
|
-
@tc.refute_in_delta 0.0, 1.0 / 1000, 0.000001
|
1757
|
-
end
|
1758
|
-
|
1759
|
-
def test_refute_in_delta_triggered
|
1760
|
-
x = maglev? ? "0.100000xxx" : "0.1"
|
1761
|
-
assert_triggered "Expected |0.0 - 0.001| (0.001) to not be <= #{x}." do
|
1762
|
-
@tc.refute_in_delta 0.0, 1.0 / 1000, 0.1
|
1763
|
-
end
|
1764
|
-
end
|
1765
|
-
|
1766
|
-
def test_refute_in_epsilon
|
1767
|
-
@tc.refute_in_epsilon 10_000, 9990-1
|
1768
|
-
end
|
1769
|
-
|
1770
|
-
def test_refute_in_epsilon_triggered
|
1771
|
-
assert_triggered "Expected |10000 - 9990| (10) to not be <= 10.0." do
|
1772
|
-
@tc.refute_in_epsilon 10_000, 9990
|
1773
|
-
flunk
|
1774
|
-
end
|
1775
|
-
end
|
1776
|
-
|
1777
|
-
def test_refute_includes
|
1778
|
-
@assertion_count = 2
|
1779
|
-
|
1780
|
-
@tc.refute_includes [true], false
|
1781
|
-
end
|
1782
|
-
|
1783
|
-
def test_refute_includes_triggered
|
1784
|
-
@assertion_count = 3
|
1785
|
-
|
1786
|
-
e = @tc.assert_raises Minitest::Assertion do
|
1787
|
-
@tc.refute_includes [true], true
|
1788
|
-
end
|
1789
|
-
|
1790
|
-
expected = "Expected [true] to not include true."
|
1791
|
-
assert_equal expected, e.message
|
1792
|
-
end
|
1793
|
-
|
1794
|
-
def test_refute_instance_of
|
1795
|
-
@tc.refute_instance_of Array, "blah"
|
1796
|
-
end
|
1797
|
-
|
1798
|
-
def test_refute_instance_of_triggered
|
1799
|
-
assert_triggered 'Expected "blah" to not be an instance of String.' do
|
1800
|
-
@tc.refute_instance_of String, "blah"
|
1801
|
-
end
|
1802
|
-
end
|
1803
|
-
|
1804
|
-
def test_refute_kind_of
|
1805
|
-
@tc.refute_kind_of Array, "blah"
|
1806
|
-
end
|
1807
|
-
|
1808
|
-
def test_refute_kind_of_triggered
|
1809
|
-
assert_triggered 'Expected "blah" to not be a kind of String.' do
|
1810
|
-
@tc.refute_kind_of String, "blah"
|
1811
|
-
end
|
1812
|
-
end
|
1813
|
-
|
1814
|
-
def test_refute_match
|
1815
|
-
@assertion_count = 2
|
1816
|
-
@tc.refute_match(/\d+/, "blah blah blah")
|
1817
|
-
end
|
1818
|
-
|
1819
|
-
def test_refute_match_matcher_object
|
1820
|
-
@assertion_count = 2
|
1821
|
-
@tc.refute_match Object.new, 5 # default #=~ returns false
|
1822
|
-
end
|
1823
|
-
|
1824
|
-
def test_refute_match_object_triggered
|
1825
|
-
@assertion_count = 2
|
1826
|
-
|
1827
|
-
pattern = Object.new
|
1828
|
-
def pattern.=~ _; true end
|
1829
|
-
def pattern.inspect; "[Object]" end
|
1830
|
-
|
1831
|
-
assert_triggered "Expected [Object] to not match 5." do
|
1832
|
-
@tc.refute_match pattern, 5
|
1833
|
-
end
|
1834
|
-
end
|
1835
|
-
|
1836
|
-
def test_refute_match_triggered
|
1837
|
-
@assertion_count = 2
|
1838
|
-
assert_triggered 'Expected /\w+/ to not match "blah blah blah".' do
|
1839
|
-
@tc.refute_match(/\w+/, "blah blah blah")
|
1840
|
-
end
|
1841
|
-
end
|
1842
|
-
|
1843
|
-
def test_refute_nil
|
1844
|
-
@tc.refute_nil 42
|
1845
|
-
end
|
1846
|
-
|
1847
|
-
def test_refute_nil_triggered
|
1848
|
-
assert_triggered "Expected nil to not be nil." do
|
1849
|
-
@tc.refute_nil nil
|
1850
|
-
end
|
1851
|
-
end
|
1852
|
-
|
1853
|
-
def test_refute_predicate
|
1854
|
-
@tc.refute_predicate "42", :empty?
|
1855
|
-
end
|
1856
|
-
|
1857
|
-
def test_refute_predicate_triggered
|
1858
|
-
assert_triggered 'Expected "" to not be empty?.' do
|
1859
|
-
@tc.refute_predicate "", :empty?
|
1860
|
-
end
|
1861
|
-
end
|
1862
|
-
|
1863
|
-
def test_refute_operator
|
1864
|
-
@tc.refute_operator 2, :<, 1
|
1865
|
-
end
|
1866
|
-
|
1867
|
-
def test_refute_operator_bad_object
|
1868
|
-
bad = Object.new
|
1869
|
-
def bad.== _; true end
|
1870
|
-
|
1871
|
-
@tc.refute_operator true, :equal?, bad
|
1872
|
-
end
|
1873
|
-
|
1874
|
-
def test_refute_operator_triggered
|
1875
|
-
assert_triggered "Expected 2 to not be > 1." do
|
1876
|
-
@tc.refute_operator 2, :>, 1
|
1877
|
-
end
|
1878
|
-
end
|
1879
|
-
|
1880
|
-
def test_refute_respond_to
|
1881
|
-
@tc.refute_respond_to "blah", :rawr!
|
1882
|
-
end
|
1883
|
-
|
1884
|
-
def test_refute_respond_to_triggered
|
1885
|
-
assert_triggered 'Expected "blah" to not respond to empty?.' do
|
1886
|
-
@tc.refute_respond_to "blah", :empty?
|
1887
|
-
end
|
1888
|
-
end
|
1889
|
-
|
1890
|
-
def test_refute_same
|
1891
|
-
@tc.refute_same 1, 2
|
1892
|
-
end
|
1893
|
-
|
1894
|
-
def test_refute_same_triggered
|
1895
|
-
assert_triggered "Expected 1 (oid=N) to not be the same as 1 (oid=N)." do
|
1896
|
-
@tc.refute_same 1, 1
|
1897
|
-
end
|
1898
|
-
end
|
1899
|
-
|
1900
|
-
def test_skip
|
1901
|
-
@assertion_count = 0
|
1902
|
-
|
1903
|
-
assert_triggered "haha!", Minitest::Skip do
|
1904
|
-
@tc.skip "haha!"
|
1905
|
-
end
|
1906
|
-
end
|
1907
|
-
|
1908
|
-
def test_runnable_methods_random
|
1909
|
-
@assertion_count = 0
|
1910
|
-
|
1911
|
-
sample_test_case = Class.new FakeNamedTest do
|
1912
|
-
def self.test_order; :random; end
|
1913
|
-
def test_test1; assert "does not matter" end
|
1914
|
-
def test_test2; assert "does not matter" end
|
1915
|
-
def test_test3; assert "does not matter" end
|
1916
|
-
end
|
1917
|
-
|
1918
|
-
srand 42
|
1919
|
-
expected = case
|
1920
|
-
when maglev? then
|
1921
|
-
%w[test_test2 test_test3 test_test1]
|
1922
|
-
else
|
1923
|
-
%w[test_test2 test_test1 test_test3]
|
1924
|
-
end
|
1925
|
-
assert_equal expected, sample_test_case.runnable_methods
|
1926
|
-
end
|
1927
|
-
|
1928
|
-
def test_runnable_methods_sorted
|
1929
|
-
@assertion_count = 0
|
1930
|
-
|
1931
|
-
sample_test_case = Class.new FakeNamedTest do
|
1932
|
-
def self.test_order; :sorted end
|
1933
|
-
def test_test3; assert "does not matter" end
|
1934
|
-
def test_test2; assert "does not matter" end
|
1935
|
-
def test_test1; assert "does not matter" end
|
1936
|
-
end
|
1937
|
-
|
1938
|
-
expected = %w[test_test1 test_test2 test_test3]
|
1939
|
-
assert_equal expected, sample_test_case.runnable_methods
|
1940
|
-
end
|
1941
|
-
|
1942
|
-
def test_i_suck_and_my_tests_are_order_dependent_bang_sets_test_order_alpha
|
1943
|
-
@assertion_count = 0
|
1944
|
-
|
1945
|
-
shitty_test_case = Class.new FakeNamedTest
|
1946
|
-
|
1947
|
-
shitty_test_case.i_suck_and_my_tests_are_order_dependent!
|
1948
|
-
|
1949
|
-
assert_equal :alpha, shitty_test_case.test_order
|
1950
|
-
end
|
1951
|
-
|
1952
|
-
def test_i_suck_and_my_tests_are_order_dependent_bang_does_not_warn
|
1953
|
-
@assertion_count = 0
|
1954
|
-
|
1955
|
-
shitty_test_case = Class.new FakeNamedTest
|
1956
|
-
|
1957
|
-
def shitty_test_case.test_order; :lol end
|
1958
|
-
|
1959
|
-
assert_silent do
|
1960
|
-
shitty_test_case.i_suck_and_my_tests_are_order_dependent!
|
1961
|
-
end
|
1962
|
-
end
|
1963
|
-
|
1964
|
-
def assert_triggered expected, klass = Minitest::Assertion
|
1965
|
-
e = assert_raises klass do
|
1966
|
-
yield
|
1967
|
-
end
|
1968
|
-
|
1969
|
-
msg = e.message.sub(/(---Backtrace---).*/m, '\1')
|
1970
|
-
msg.gsub!(/\(oid=[-0-9]+\)/, "(oid=N)")
|
1971
|
-
msg.gsub!(/(\d\.\d{6})\d+/, '\1xxx') # normalize: ruby version, impl, platform
|
1972
|
-
|
1973
|
-
assert_msg = Regexp === expected ? :assert_match : :assert_equal
|
1974
|
-
self.send assert_msg, expected, msg
|
1975
|
-
end
|
1976
|
-
|
1977
|
-
def util_msg exp, act, msg = nil
|
1978
|
-
s = "Expected: #{exp.inspect}\n Actual: #{act.inspect}"
|
1979
|
-
s = "#{msg}.\n#{s}" if msg
|
1980
|
-
s
|
1981
|
-
end
|
1982
|
-
|
1983
|
-
def without_diff
|
1984
|
-
old_diff = Minitest::Assertions.diff
|
1985
|
-
Minitest::Assertions.diff = nil
|
1986
|
-
|
1987
|
-
yield
|
1988
|
-
ensure
|
1989
|
-
Minitest::Assertions.diff = old_diff
|
1990
|
-
end
|
1991
|
-
end
|
1992
|
-
|
1993
|
-
class TestMinitestGuard < Minitest::Test
|
1994
|
-
parallelize_me!
|
1995
|
-
|
1996
|
-
def test_mri_eh
|
1997
|
-
assert self.class.mri? "ruby blah"
|
1998
|
-
assert self.mri? "ruby blah"
|
1999
|
-
end
|
2000
|
-
|
2001
|
-
def test_jruby_eh
|
2002
|
-
assert self.class.jruby? "java"
|
2003
|
-
assert self.jruby? "java"
|
2004
|
-
end
|
2005
|
-
|
2006
|
-
def test_rubinius_eh
|
2007
|
-
assert self.class.rubinius? "rbx"
|
2008
|
-
assert self.rubinius? "rbx"
|
1136
|
+
def test_osx_eh
|
1137
|
+
assert self.class.osx? "darwin"
|
1138
|
+
assert self.osx? "darwin"
|
2009
1139
|
end
|
2010
1140
|
|
2011
1141
|
def test_windows_eh
|