minitest 5.11.3 → 5.17.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -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
- fu = Minitest.filter_backtrace(bt)
51
+ Minitest::Test.io_lock.synchronize do # try not to trounce in parallel
52
+ fu = Minitest.filter_backtrace(bt)
57
53
 
58
- assert_equal ex, fu
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
- fu = Minitest.filter_backtrace bt
80
- assert_equal ex, fu
76
+ Minitest::Test.io_lock.synchronize do # try not to trounce in parallel
77
+ fu = Minitest.filter_backtrace bt
78
+ assert_equal ex, fu
79
+ end
81
80
  end
82
81
 
83
- # def test_default_runner_is_minitest_unit
84
- # assert_instance_of Minitest::Unit, Minitest::Unit.runner
85
- # end
82
+ def test_filter_backtrace__empty
83
+ with_empty_backtrace_filter do
84
+ bt = %w[first second third]
85
+ fu = Minitest.filter_backtrace bt.dup
86
+ assert_equal bt, fu
87
+ end
88
+ end
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
- EF
102
+ FE
100
103
 
101
104
  Finished in 0.00
102
105
 
103
- 1) Error:
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
- assert_report expected
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
- if RUBY_VERSION >= "1.9.0" then
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
- class TestMinitestTest < TestMinitestRunnable
812
- def test_dup
813
- setup_marshal Minitest::Test do |tc|
814
- tc.time = 3.14
815
- end
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
- assert_marshal %w[@NAME @assertions @failures @klass @source_location @time] do |new_tc|
818
- assert_in_epsilon 3.14, new_tc.time
819
- end
820
- end
821
- end
856
+ rm = klass.runnable_methods.first
822
857
 
823
- class TestMinitestUnitTestCase < Minitest::Test
824
- # do not call parallelize_me! - teardown accesses @tc._assertions
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
- RUBY18 = !defined? Encoding
861
+ assert_kind_of Minitest::Result, @tc
862
+ assert_instance_of Minitest::UnexpectedError, @tc.failure
829
863
 
830
- def setup
831
- super
864
+ msg = @tc.failure.error.message
865
+ assert_includes msg, "Neutered Exception #<Class:"
866
+ assert_includes msg, "this is bad!"
832
867
 
833
- Minitest::Test.reset
868
+ # Pass it over the wire
869
+ over_the_wire = Marshal.load Marshal.dump @tc
834
870
 
835
- @tc = Minitest::Test.new "fake tc"
836
- @zomg = "zomg ponies!"
837
- @assertion_count = 1
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 teardown
841
- assert_equal(@assertion_count, @tc.assertions,
842
- "expected #{@assertion_count} assertions to be fired during the test, not #{@tc.assertions}") if @tc.passed?
843
- end
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
- def non_verbose
846
- orig_verbose = $VERBOSE
847
- $VERBOSE = false
885
+ rm = klass.runnable_methods.first
848
886
 
849
- yield
850
- ensure
851
- $VERBOSE = orig_verbose
852
- end
887
+ # Run the test
888
+ @tc = klass.new(rm).run
853
889
 
854
- def test_assert
855
- @assertion_count = 2
890
+ assert_kind_of Minitest::Result, @tc
891
+ assert_instance_of Minitest::UnexpectedError, @tc.failure
856
892
 
857
- @tc.assert_equal true, @tc.assert(true), "returns true on success"
858
- end
893
+ msg = @tc.failure.error.message
894
+ assert_includes msg, "uninitialized constant TestMinitestRunnable::NOPE"
859
895
 
860
- def test_assert__triggered
861
- assert_triggered "Expected false to be truthy." do
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
- def test_assert__triggered_message
867
- assert_triggered @zomg do
868
- @tc.assert false, @zomg
869
- end
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 test_assert_empty
873
- @assertion_count = 2
874
-
875
- @tc.assert_empty []
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 test_assert_empty_triggered
879
- @assertion_count = 2
880
-
881
- assert_triggered "Expected [1] to be empty." do
882
- @tc.assert_empty [1]
883
- end
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
- def test_assert_equal
887
- @tc.assert_equal 1, 1
888
- end
923
+ rm = klass.runnable_methods.first
889
924
 
890
- def test_assert_equal_different_collection_array_hex_invisible
891
- object1 = Object.new
892
- object2 = Object.new
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
- def test_assert_equal_different_collection_hash_hex_invisible
902
- h1, h2 = {}, {}
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
- def test_assert_equal_string_encodings
915
- msg = <<-EOM.gsub(/^ {10}/, "")
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
- assert_triggered msg do
924
- x = "bad-utf8-\xF1.txt"
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
- def test_assert_equal_different_diff_deactivated
948
- skip "https://github.com/MagLev/maglev/issues/209" if maglev?
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
- without_diff do
951
- assert_triggered util_msg("haha" * 10, "blah" * 10) do
952
- o1 = "haha" * 10
953
- o2 = "blah" * 10
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
- @tc.assert_equal o1, o2
951
+ super(record.first)
956
952
  end
957
953
  end
958
- end
959
954
 
960
- def test_assert_equal_different_hex
961
- c = Class.new do
962
- def initialize s; @name = s; end
963
- end
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
- o1 = c.new "a"
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
- def test_assert_equal_different_hex_invisible
980
- o1 = Object.new
981
- o2 = Object.new
969
+ # Run the test
970
+ @tc = klass.new(rm).run
982
971
 
983
- msg = "No visible difference in the Object#inspect output.
984
- You should look at the implementation of #== on Object or its members.
985
- #<Object:0xXXXXXX>".gsub(/^ +/, "")
972
+ assert_kind_of Minitest::Result, @tc
973
+ assert_instance_of Minitest::UnexpectedError, @tc.failure
986
974
 
987
- assert_triggered msg do
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
- def test_assert_equal_different_long
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
- assert_triggered msg do
1001
- o1 = "haha" * 10
1002
- o2 = "blah" * 10
979
+ # Pass it over the wire
980
+ over_the_wire = Marshal.load Marshal.dump @tc
1003
981
 
1004
- @tc.assert_equal o1, o2
1005
- end
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
- def test_assert_equal_different_long_invisible
1009
- msg = "No visible difference in the String#inspect output.
1010
- You should look at the implementation of #== on String or its members.
1011
- \"blahblahblahblahblahblahblahblahblahblah\"".gsub(/^ +/, "")
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
- assert_triggered msg do
1014
- o1 = "blah" * 10
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
- def test_assert_equal_different_long_msg
1024
- msg = "message.
1025
- --- expected
1026
- +++ actual
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
- assert_triggered msg do
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 test_assert_equal_different_short
1040
- assert_triggered util_msg(1, 2) do
1041
- @tc.assert_equal 1, 2
1042
- end
1043
- end
1009
+ def setup
1010
+ super
1044
1011
 
1045
- def test_assert_equal_different_short_msg
1046
- assert_triggered util_msg(1, 2, "message") do
1047
- @tc.assert_equal 1, 2, "message"
1048
- end
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 test_assert_equal_different_short_multiline
1052
- msg = "--- expected\n+++ actual\n@@ -1,2 +1,2 @@\n \"a\n-b\"\n+c\"\n"
1053
- assert_triggered msg do
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 test_assert_equal_does_not_allow_lhs_nil
1059
- if Minitest::VERSION =~ /^6/ then
1060
- warn "Time to strip the MT5 test"
1024
+ def non_verbose
1025
+ orig_verbose = $VERBOSE
1026
+ $VERBOSE = false
1061
1027
 
1062
- @assertion_count += 1
1063
- assert_triggered(/Use assert_nil if expecting nil/) do
1064
- @tc.assert_equal nil, nil
1065
- end
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
- assert_output "", err_re do
1071
- @tc.assert_equal nil, nil
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
- def test_assert_equal_does_not_allow_lhs_nil_triggered
1077
- assert_triggered "Expected: nil\n Actual: false" do
1078
- @tc.assert_equal nil, false
1079
- end
1080
- end
1042
+ # srand varies with OS
1043
+ def test_runnable_methods_random
1044
+ @assertion_count = 0
1081
1045
 
1082
- def test_assert_in_delta
1083
- @tc.assert_in_delta 0.0, 1.0 / 1000, 0.1
1084
- 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
1085
1049
 
1086
- def test_delta_consistency
1087
- @assertion_count = 2
1050
+ assert_equal random_tests_1, random_tests_2
1051
+ assert_equal random_tests_1, random_tests_3
1052
+ end
1088
1053
 
1089
- @tc.assert_in_delta 0, 1, 1
1054
+ def test_runnable_methods_sorted
1055
+ @assertion_count = 0
1090
1056
 
1091
- assert_triggered "Expected |0 - 1| (1) to not be <= 1." do
1092
- @tc.refute_in_delta 0, 1, 1
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
- def test_assert_in_delta_triggered
1097
- x = maglev? ? "9.999999xxxe-07" : "1.0e-06"
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 test_assert_in_epsilon
1104
- @assertion_count = 10
1068
+ def test_i_suck_and_my_tests_are_order_dependent_bang_sets_test_order_alpha
1069
+ @assertion_count = 0
1105
1070
 
1106
- @tc.assert_in_epsilon 10_000, 9991
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
- @tc.assert_in_epsilon 10_000, 9999.1, 0.0001
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
- @tc.assert_in_epsilon(-1, -1)
1117
- @tc.assert_in_epsilon(-10_000, -9991)
1075
+ assert_equal :alpha, shitty_test_case.test_order
1118
1076
  end
1119
1077
 
1120
- def test_epsilon_consistency
1121
- @assertion_count = 2
1078
+ def test_i_suck_and_my_tests_are_order_dependent_bang_does_not_warn
1079
+ @assertion_count = 0
1122
1080
 
1123
- @tc.assert_in_epsilon 1.0, 1.001
1081
+ shitty_test_case = Class.new FakeNamedTest
1124
1082
 
1125
- msg = "Expected |1.0 - 1.001| (0.000999xxx) to not be <= 0.001."
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
- def test_assert_in_epsilon_triggered
1132
- assert_triggered "Expected |10000 - 9990| (10) to be <= 9.99." do
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 test_assert_in_epsilon_triggered_negative_case
1138
- x = (RUBY18 and not maglev?) ? "0.1" : "0.100000xxx"
1139
- y = maglev? ? "0.100000xxx" : "0.1"
1140
- assert_triggered "Expected |-1.1 - -1| (#{x}) to be <= #{y}." do
1141
- @tc.assert_in_epsilon(-1.1, -1, 0.1)
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 test_assert_includes
1146
- @assertion_count = 2
1147
-
1148
- @tc.assert_includes [true], true
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
- def test_assert_includes_triggered
1152
- @assertion_count = 3
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
- expected = "Expected [true] to include false."
1159
- assert_equal expected, e.message
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 test_assert_instance_of
1163
- @tc.assert_instance_of String, "blah"
1113
+ def test_jruby_eh
1114
+ assert self.class.jruby? "java"
1115
+ assert self.jruby? "java"
1164
1116
  end
1165
1117
 
1166
- def test_assert_instance_of_triggered
1167
- assert_triggered 'Expected "blah" to be an instance of Array, not String.' do
1168
- @tc.assert_instance_of Array, "blah"
1118
+ def test_rubinius_eh
1119
+ assert_output "", /DEPRECATED/ do
1120
+ assert self.class.rubinius? "rbx"
1169
1121
  end
1170
- end
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 test_assert_match
1183
- @assertion_count = 2
1184
- @tc.assert_match(/\w+/, "blah blah blah")
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 test_assert_match_matcher_object
1188
- @assertion_count = 2
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