minitest 5.26.0 → 6.0.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.
Files changed (45) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data/History.rdoc +95 -0
  4. data/Manifest.txt +13 -4
  5. data/README.rdoc +18 -98
  6. data/Rakefile +7 -1
  7. data/bin/minitest +5 -0
  8. data/design_rationale.rb +21 -19
  9. data/lib/hoe/minitest.rb +2 -1
  10. data/lib/minitest/assertions.rb +34 -66
  11. data/lib/minitest/autorun.rb +3 -4
  12. data/lib/minitest/benchmark.rb +2 -2
  13. data/lib/minitest/bisect.rb +306 -0
  14. data/lib/minitest/complete.rb +56 -0
  15. data/lib/minitest/find_minimal_combination.rb +127 -0
  16. data/lib/minitest/hell.rb +1 -1
  17. data/lib/minitest/manual_plugins.rb +4 -16
  18. data/lib/minitest/parallel.rb +5 -3
  19. data/lib/minitest/path_expander.rb +418 -0
  20. data/lib/minitest/pride.rb +2 -2
  21. data/lib/minitest/pride_plugin.rb +1 -1
  22. data/lib/minitest/server.rb +45 -0
  23. data/lib/minitest/server_plugin.rb +84 -0
  24. data/lib/minitest/spec.rb +5 -33
  25. data/lib/minitest/sprint.rb +104 -0
  26. data/lib/minitest/sprint_plugin.rb +39 -0
  27. data/lib/minitest/test.rb +7 -13
  28. data/lib/minitest/test_task.rb +6 -13
  29. data/lib/minitest.rb +86 -101
  30. data/test/minitest/metametameta.rb +1 -1
  31. data/test/minitest/test_bisect.rb +235 -0
  32. data/test/minitest/test_find_minimal_combination.rb +138 -0
  33. data/test/minitest/test_minitest_assertions.rb +48 -105
  34. data/test/minitest/test_minitest_reporter.rb +6 -5
  35. data/test/minitest/test_minitest_spec.rb +52 -118
  36. data/test/minitest/test_minitest_test.rb +21 -100
  37. data/test/minitest/test_path_expander.rb +229 -0
  38. data/test/minitest/test_server.rb +149 -0
  39. data.tar.gz.sig +1 -2
  40. metadata +50 -17
  41. metadata.gz.sig +2 -2
  42. data/.autotest +0 -34
  43. data/lib/minitest/mock.rb +0 -347
  44. data/lib/minitest/unit.rb +0 -42
  45. data/test/minitest/test_minitest_mock.rb +0 -1218
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ecf3d390663e8f655908e6feef0796c5666930f979a0010e27d5adf4956b0bfc
4
- data.tar.gz: be16818cbc164296bdacde79856532e5695bd6e45dec7d28e624e75bbccbf465
3
+ metadata.gz: a97087937196a27ad6f45b6033d56ff9d222ed878b9916839220e93d65b6f3c4
4
+ data.tar.gz: 4dcf037f192e07d46883351b5f5cd868c2c8cebb1f6715400375d08e9317bd19
5
5
  SHA512:
6
- metadata.gz: 4690ff166d9757befd4365ca3ca77443e4252c32132e91933093548b179ae051cade595e1a085e373e9f6a32b4677d38073cfc1b6e386a00bf77edc8cffad487
7
- data.tar.gz: 923c90aaff33957818b8fcb053bf9fb28c01953ec910d42114cd3ba09204a0166e85824fb7188bc944f12a7855c47c0e6f63a39d2f45fcb37f25b8176416cd18
6
+ metadata.gz: a7eabc337afee3e6326cc8362c0cbd93dd3aafbb6543f735473e81956c09f4fbfb602492bcca88609409a5cb092f3131154c2db3cf21b060e2065fa79a19f4be
7
+ data.tar.gz: 87843ecc0b80e55bf4e56bee0283e985667f8b9e71b3bd27a21cf76dea64397c33c2e53accdcf11448ae7318a8e7615ebdd6aa57461b1a4ff2c4ddcb2f597d1a
checksums.yaml.gz.sig CHANGED
Binary file
data/History.rdoc CHANGED
@@ -1,3 +1,98 @@
1
+ === 6.0.0 / 2025-12-17
2
+
3
+ This is a major release. Read this.
4
+
5
+ Please give feedback here: https://github.com/minitest/minitest/issues/1040
6
+
7
+ Oh god... here we go... (again)
8
+
9
+ * 8 deaths in the family(!!):
10
+
11
+ * Deleted MiniTest and MiniTest::Unit::TestCase compatibility namespaces.
12
+ * Deleted all use of Marshal for serialization.
13
+ * Deleted maglev? and rubinius? guard methods. LOL.
14
+ * Deleted all minitest/spec expectations from Object. Use _/value/expect.
15
+ * Dropped minitest/mock.rb. This has been extracted to the minitest-mock gem.
16
+ * assert_equal(nil, value) no longer allowed. Use assert_nil to be explicit.
17
+ * Removed assert_send. Use assert_predicate or assert_operator.
18
+ * Removed Minitest::Test#class_name.
19
+
20
+ * 7 major (oft incompatible) changes:
21
+
22
+ * Big: Major refactored MT6's run path!
23
+ * Minitest.__run -> Minitest.run_all_suites
24
+ * Runnable.run -> Runnable.run_suite & Runnable.filter_runnable_methods
25
+ * Runnable.run_one_method -> Runnable.run
26
+ * Removed Minitest.run_one_method (might bring it back to raise?)
27
+ * Removed deprecated ENV["N"] to specify number of parallel tests. Use MT_CPU.
28
+ * Renamed options[:filter] to options[:include], added --include cmdline option.
29
+ * --name is still handled, but that will be removed in the future.
30
+ * Renamed Minitest::Runnable#test_order to #run_order.
31
+ * If #message is passed a proc then that proc overrides all other output.
32
+ * They are no longer chained!
33
+ * And it does less for formatting of your output.
34
+ * Removed reporter arg from with_info_handler as it has never(?) been used. (HACK?)
35
+ * Plugin loading is now opt-in!
36
+ * Require the plugin in your test_helper.
37
+ * Or use Minitest.load :x
38
+ * Or call Minitest.load_plugins for the old autoloading behavior.
39
+
40
+ * 5 additions:
41
+
42
+ * Added minitest-sprint's minitest cmdline, now with line support!
43
+ * Added minitest-bisect. Run with minitest --bisect or -b.
44
+ * Added minitest-server.
45
+ * Added minitest/complete to help with shell's tab-completion of tests.
46
+ * Vendored latest version of path_expander.
47
+
48
+ * 5 other:
49
+
50
+ * Bumped to ruby 3.2+.
51
+ * Removed obsolete conditional for CompositeReporter#prerecord.
52
+ * Removed obsolete version guards around Minitest::Result in reporters.
53
+ * assert_operator and assert_predicate both call assert_respond_to first.
54
+ * Assertions reuse themselves a lot more. Bumps assertion count in some places.
55
+
56
+ === 5.27.0 / 2025-12-11
57
+
58
+ * 1 major enhancement:
59
+
60
+ * Adding post install message announcing the EOL for minitest 5!
61
+
62
+ * 2 minor enhancements:
63
+
64
+ * Removed TestTask::Work#initialize since Queue can now initialize with an Enumerable! AMAZING!
65
+ * Use Kernel#warn uplevel argument for nicer warnings. (byroot)
66
+
67
+ * 5 bug fixes:
68
+
69
+ * Cleaned up option aliasing a tad.
70
+ * Removed obsolete conditional for prerecord
71
+ * Removed obsolete guards around Warning.
72
+ * Removed obsolete version guards for pattern matching assertions.
73
+ * Switched all internal requires to require_relative.
74
+
75
+ === 5.26.2 / 2025-11-17
76
+
77
+ * 5 bug fixes:
78
+
79
+ * Bumped minimum ruby to 3.1.
80
+ * Alias Spec#name to #inspect for cleaner output in repls.
81
+ * Fix pathing for Hoe::Minitest initialization to be more generic.
82
+ * Fixed refute_in_epsilon to use min of abs values. (wtn)
83
+ * Improved options processing and usage output to be more clear.
84
+
85
+ === 5.26.1 / 2025-11-08
86
+
87
+ The Ocean Shores, Slightly Less Tipsy Edition!
88
+
89
+ * 3 bug fixes:
90
+
91
+ * Add links to API doco in README.
92
+ * Add missing require thread.
93
+ * Bumped ruby version to include 4.0 (trunk). (hsbt)
94
+ (see also 5.14.2)
95
+
1
96
  === 5.26.0 / 2025-10-07
2
97
 
3
98
  The Seattle.rb Nerd Party, Slightly Tipsy Edition!
data/Manifest.txt CHANGED
@@ -1,32 +1,41 @@
1
- .autotest
2
1
  History.rdoc
3
2
  Manifest.txt
4
3
  README.rdoc
5
4
  Rakefile
5
+ bin/minitest
6
6
  design_rationale.rb
7
7
  lib/hoe/minitest.rb
8
8
  lib/minitest.rb
9
9
  lib/minitest/assertions.rb
10
10
  lib/minitest/autorun.rb
11
11
  lib/minitest/benchmark.rb
12
+ lib/minitest/bisect.rb
13
+ lib/minitest/complete.rb
12
14
  lib/minitest/compress.rb
13
15
  lib/minitest/error_on_warning.rb
14
16
  lib/minitest/expectations.rb
17
+ lib/minitest/find_minimal_combination.rb
15
18
  lib/minitest/hell.rb
16
19
  lib/minitest/manual_plugins.rb
17
- lib/minitest/mock.rb
18
20
  lib/minitest/parallel.rb
21
+ lib/minitest/path_expander.rb
19
22
  lib/minitest/pride.rb
20
23
  lib/minitest/pride_plugin.rb
24
+ lib/minitest/server.rb
25
+ lib/minitest/server_plugin.rb
21
26
  lib/minitest/spec.rb
27
+ lib/minitest/sprint.rb
28
+ lib/minitest/sprint_plugin.rb
22
29
  lib/minitest/test.rb
23
30
  lib/minitest/test_task.rb
24
- lib/minitest/unit.rb
25
31
  test/minitest/metametameta.rb
32
+ test/minitest/test_bisect.rb
33
+ test/minitest/test_find_minimal_combination.rb
26
34
  test/minitest/test_minitest_assertions.rb
27
35
  test/minitest/test_minitest_benchmark.rb
28
- test/minitest/test_minitest_mock.rb
29
36
  test/minitest/test_minitest_reporter.rb
30
37
  test/minitest/test_minitest_spec.rb
31
38
  test/minitest/test_minitest_test.rb
32
39
  test/minitest/test_minitest_test_task.rb
40
+ test/minitest/test_server.rb
41
+ test/minitest/test_path_expander.rb
data/README.rdoc CHANGED
@@ -1,16 +1,17 @@
1
- = minitest/{test,spec,mock,benchmark}
1
+ = minitest/{test,spec,benchmark}
2
2
 
3
- home :: https://github.com/minitest/minitest
3
+ home :: https://minite.st/
4
+ code :: https://github.com/minitest/minitest
4
5
  bugs :: https://github.com/minitest/minitest/issues
5
6
  rdoc :: https://docs.seattlerb.org/minitest
6
7
  clog :: https://github.com/minitest/minitest/blob/master/History.rdoc
7
- vim :: https://github.com/sunaku/vim-ruby-minitest
8
8
  emacs:: https://github.com/arthurnn/minitest-emacs
9
+ vim :: https://github.com/vim-test/vim-test
9
10
 
10
11
  == DESCRIPTION:
11
12
 
12
13
  minitest provides a complete suite of testing facilities supporting
13
- TDD, BDD, mocking, and benchmarking.
14
+ TDD, BDD, and benchmarking.
14
15
 
15
16
  "I had a class with Jim Weirich on testing last week and we were
16
17
  allowed to choose our testing frameworks. Kirk Haines and I were
@@ -36,9 +37,6 @@ algorithms in a repeatable manner. Now you can assert that your newb
36
37
  co-worker doesn't replace your linear algorithm with an exponential
37
38
  one!
38
39
 
39
- minitest/mock by Steven Baker, is a beautifully tiny mock (and stub)
40
- object framework.
41
-
42
40
  minitest/pride shows pride in testing and adds coloring to your test
43
41
  output. I guess it is an example of how to write IO pipes too. :P
44
42
 
@@ -68,7 +66,6 @@ extract-method refactorings still apply.
68
66
  * minitest/autorun - the easy and explicit way to run all your tests.
69
67
  * minitest/test - a very fast, simple, and clean test system.
70
68
  * minitest/spec - a very fast, simple, and clean spec system.
71
- * minitest/mock - a simple and clean mock/stub system.
72
69
  * minitest/benchmark - an awesome way to assert your algorithm's performance.
73
70
  * minitest/pride - show your pride in testing!
74
71
  * minitest/test_task - a full-featured and clean rake task generator.
@@ -95,7 +92,9 @@ Given that you'd like to test the following class:
95
92
 
96
93
  === Unit tests
97
94
 
98
- Define your tests as methods beginning with +test_+.
95
+ Define your tests as methods beginning with +test_+. Use
96
+ {assertions}[/minitest/Minitest/Assertions.html] to test for results
97
+ or state.
99
98
 
100
99
  require "minitest/autorun"
101
100
 
@@ -119,6 +118,9 @@ Define your tests as methods beginning with +test_+.
119
118
 
120
119
  === Specs
121
120
 
121
+ Use {expectations}[/minitest/Minitest/Expectations.html] to check
122
+ results or state. They must be wrapped in a value call (eg +_+).
123
+
122
124
  require "minitest/autorun"
123
125
 
124
126
  describe Meme do
@@ -146,7 +148,7 @@ For matchers support check out:
146
148
 
147
149
  === Benchmarks
148
150
 
149
- Add benchmarks to your tests.
151
+ Add {benchmarks}[/minitest/Minitest/Benchmark.html] to your tests.
150
152
 
151
153
  # optionally run benchmarks, good for CI-only work!
152
154
  require "minitest/benchmark" if ENV["BENCH"]
@@ -185,85 +187,6 @@ outputs something like:
185
187
 
186
188
  Output is tab-delimited to make it easy to paste into a spreadsheet.
187
189
 
188
- === Mocks
189
-
190
- Mocks and stubs defined using terminology by Fowler & Meszaros at
191
- https://www.martinfowler.com/bliki/TestDouble.html:
192
-
193
- "Mocks are pre-programmed with expectations which form a specification
194
- of the calls they are expected to receive. They can throw an exception
195
- if they receive a call they don't expect and are checked during
196
- verification to ensure they got all the calls they were expecting."
197
-
198
- class MemeAsker
199
- def initialize(meme)
200
- @meme = meme
201
- end
202
-
203
- def ask(question)
204
- method = question.tr(" ", "_") + "?"
205
- @meme.__send__(method)
206
- end
207
- end
208
-
209
- require "minitest/autorun"
210
-
211
- describe MemeAsker, :ask do
212
- describe "when passed an unpunctuated question" do
213
- it "should invoke the appropriate predicate method on the meme" do
214
- @meme = Minitest::Mock.new
215
- @meme_asker = MemeAsker.new @meme
216
- @meme.expect :will_it_blend?, :return_value
217
-
218
- @meme_asker.ask "will it blend"
219
-
220
- @meme.verify
221
- end
222
- end
223
- end
224
-
225
- ==== Multi-threading and Mocks
226
-
227
- Minitest mocks do not support multi-threading. If it works, fine, if it doesn't
228
- you can use regular ruby patterns and facilities like local variables. Here's
229
- an example of asserting that code inside a thread is run:
230
-
231
- def test_called_inside_thread
232
- called = false
233
- pr = Proc.new { called = true }
234
- thread = Thread.new(&pr)
235
- thread.join
236
- assert called, "proc not called"
237
- end
238
-
239
- === Stubs
240
-
241
- Mocks and stubs are defined using terminology by Fowler & Meszaros at
242
- https://www.martinfowler.com/bliki/TestDouble.html:
243
-
244
- "Stubs provide canned answers to calls made during the test".
245
-
246
- Minitest's stub method overrides a single method for the duration of
247
- the block.
248
-
249
- def test_stale_eh
250
- obj_under_test = Something.new
251
-
252
- refute obj_under_test.stale?
253
-
254
- Time.stub :now, Time.at(0) do # stub goes away once the block is done
255
- assert obj_under_test.stale?
256
- end
257
- end
258
-
259
- A note on stubbing: In order to stub a method, the method must
260
- actually exist prior to stubbing. Use a singleton method to create a
261
- new non-existing method:
262
-
263
- def obj_under_test.fake_method
264
- ...
265
- end
266
-
267
190
  === Running Your Tests
268
191
 
269
192
  Ideally, you'll use a rake task to run your tests (see below), either
@@ -422,13 +345,10 @@ Current versions of rails: (https://endoflife.date/rails)
422
345
 
423
346
  | rails | min ruby | minitest | status | EOL Date |
424
347
  |-------+----------+----------+----------+------------|
348
+ | 8.1 | >= 3.2 | >= 5.1 | Current | 2027-10-07 |
425
349
  | 8.0 | >= 3.2 | >= 5.1 | Current | 2026-11-07 |
426
- | 7.2 | >= 3.1 | >= 5.1 | Current | 2026-08-09 |
427
- | 7.1 | >= 2.7 | >= 5.1 | Security | 2025-10-01 |
428
- | 7.0 | >= 2.7 | >= 5.1 | Security | 2025-04-01 |
429
- | 6.1 | >= 2.5 | >= 5.1 | EOL | 2024-10-01 |
430
- | 6.0 | >= 2.5 | >= 5.1 | EOL | 2023-06-01 |
431
- | 5.2 | >= 2.2.2 | ~> 5.1 | EOL | 2022-06-01 |
350
+ | 7.2 | >= 3.1 | >= 5.1 | Security | 2026-08-09 |
351
+ | 7.1 | >= 2.7 | >= 5.1 | EOL | 2025-10-01 |
432
352
 
433
353
  If you want to look at the requirements for a specific version, run:
434
354
 
@@ -762,8 +682,8 @@ rematch :: Declutter your test files from large hardcoded da
762
682
  and update them automatically when your code changes.
763
683
  rspec2minitest :: Easily translate any RSpec matchers to Minitest
764
684
  assertions and expectations.
765
- stubberry :: Multiple stubbing 'berries', sweet and useful
766
- stub helpers and assertions. ( stub_must,
685
+ stubberry :: Multiple stubbing 'berries', sweet and useful
686
+ stub helpers and assertions. ( stub_must,
767
687
  assert_method_called, stubbing ORM objects by id )
768
688
 
769
689
  == Unknown Extensions:
@@ -794,7 +714,7 @@ Authors... Please send me a pull request with a description of your minitest ext
794
714
 
795
715
  == REQUIREMENTS:
796
716
 
797
- * Ruby 2.3+. No magic is involved. I hope.
717
+ * Ruby 3.2+. No magic is involved. I hope.
798
718
 
799
719
  == INSTALL:
800
720
 
data/Rakefile CHANGED
@@ -4,14 +4,20 @@ require "hoe"
4
4
  $:.unshift "lib" # to pick up lib/minitest/test_task.rb when minitest not installed
5
5
 
6
6
  Hoe.plugin :seattlerb
7
+ Hoe.plugin :isolate
7
8
  Hoe.plugin :rdoc
9
+ Hoe.plugin :cov
8
10
 
9
11
  Hoe.spec "minitest" do
10
12
  developer "Ryan Davis", "ryand-ruby@zenspider.com"
11
13
 
12
14
  license "MIT"
13
15
 
14
- require_ruby_version [">= 2.7", "< 4.0"]
16
+ require_ruby_version ">= 3.2"
17
+
18
+ dependency "prism", "~> 1.5"
19
+
20
+ self.cov_filter = %w[ tmp ]
15
21
  end
16
22
 
17
23
  desc "Find missing expectations"
data/bin/minitest ADDED
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env -S ruby
2
+
3
+ require_relative "../lib/minitest/sprint"
4
+
5
+ Minitest::Sprint.run
data/design_rationale.rb CHANGED
@@ -2,25 +2,27 @@
2
2
  ###############################################################################
3
3
  describe Thingy do # class TestThingy < Minitest::Test
4
4
  before do # def setup
5
- do_some_setup # super
6
- end # do_some_setup
7
- # end
8
- it "should do the first thing" do #
9
- 1.must_equal 1 # def test_first_thing
10
- end # assert_equal 1, 1
11
- # end
12
- describe SubThingy do # end
13
- before do #
14
- do_more_setup # class TestSubThingy < TestThingy
15
- end # def setup
16
5
  # super
17
- it "should do the second thing" do # do_more_setup
18
- 2.must_equal 2 # end
19
- end #
20
- end # def test_second_thing
21
- end # assert_equal 2, 2
22
- # end
6
+ do_some_setup # do_some_setup
7
+ end # end
8
+ #
9
+ it "should do the first thing" do # def test_first_thing
10
+ _(1).must_equal 1 # assert_equal 1, 1
11
+ end # end
23
12
  # end
13
+ #
14
+ describe SubThingy do # class TestSubThingy < TestThingy
15
+ before do # def setup
16
+ # super
17
+ do_more_setup # do_more_setup
18
+ end # end
19
+ #
20
+ it "should do the second thing" do # def test_second_thing
21
+ _(2).must_equal 2 # assert_equal 2, 2
22
+ end # end
23
+ end # end
24
+ end #
25
+ #
24
26
  ###############################################################################
25
27
  # runs 2 specs # runs 3 tests
26
28
  ###############################################################################
@@ -33,7 +35,7 @@ class ThingySpec < Minitest::Spec
33
35
  end
34
36
 
35
37
  def test_should_do_the_first_thing
36
- assert_equal 1, 1
38
+ _(1).must_equal 1
37
39
  end
38
40
  end
39
41
 
@@ -47,6 +49,6 @@ class SubThingySpec < ThingySpec
47
49
  remove_method :test_should_do_the_first_thing
48
50
 
49
51
  def test_should_do_the_second_thing
50
- assert_equal 2, 2
52
+ _(2).must_equal 2
51
53
  end
52
54
  end
data/lib/hoe/minitest.rb CHANGED
@@ -11,7 +11,8 @@ module Hoe::Minitest
11
11
 
12
12
  def initialize_minitest
13
13
  unless minitest? then
14
- dir = "../../minitest/dev/lib"
14
+ dir = File.expand_path "../..", __FILE__
15
+
15
16
  Hoe.add_include_dirs dir if File.directory? dir
16
17
  end
17
18
 
@@ -186,9 +186,8 @@ module Minitest
186
186
  # Fails unless +obj+ is empty.
187
187
 
188
188
  def assert_empty obj, msg = nil
189
- msg = message(msg) { "Expected #{mu_pp obj} to be empty" }
190
- assert_respond_to obj, :empty?
191
- assert obj.empty?, msg
189
+ msg = message(msg) { "Expected #{mu_pp(obj)} to be empty" }
190
+ assert_predicate obj, :empty?, msg
192
191
  end
193
192
 
194
193
  def _where # :nodoc:
@@ -196,8 +195,6 @@ module Minitest
196
195
  .split(":in ", 2).first # clean up noise
197
196
  end
198
197
 
199
- E = "" # :nodoc:
200
-
201
198
  ##
202
199
  # Fails unless <tt>exp == act</tt> printing the difference between
203
200
  # the two, if possible.
@@ -212,18 +209,11 @@ module Minitest
212
209
  # See also: Minitest::Assertions.diff
213
210
 
214
211
  def assert_equal exp, act, msg = nil
215
- msg = message(msg, E) { diff exp, act }
216
- result = assert exp == act, msg
212
+ msg = message(msg, nil) { diff exp, act }
217
213
 
218
- if nil == exp then
219
- if Minitest::VERSION >= "6" then
220
- refute_nil exp, "Use assert_nil if expecting nil."
221
- else
222
- warn "DEPRECATED: Use assert_nil if expecting nil from #{_where}. This will fail in Minitest 6."
223
- end
224
- end
214
+ refute_nil exp, message { "Use assert_nil if expecting nil" } if exp.nil? # don't count
225
215
 
226
- result
216
+ assert exp == act, msg
227
217
  end
228
218
 
229
219
  ##
@@ -255,8 +245,7 @@ module Minitest
255
245
  msg = message(msg) {
256
246
  "Expected #{mu_pp collection} to include #{mu_pp obj}"
257
247
  }
258
- assert_respond_to collection, :include?
259
- assert collection.include?(obj), msg
248
+ assert_operator collection, :include?, obj, msg
260
249
  end
261
250
 
262
251
  ##
@@ -308,6 +297,7 @@ module Minitest
308
297
 
309
298
  def assert_operator o1, op, o2 = UNDEFINED, msg = nil
310
299
  return assert_predicate o1, op, msg if UNDEFINED == o2
300
+ assert_respond_to o1, op
311
301
  msg = message(msg) { "Expected #{mu_pp o1} to be #{op} #{mu_pp o2}" }
312
302
  assert o1.__send__(op, o2), msg
313
303
  end
@@ -368,15 +358,12 @@ module Minitest
368
358
  # error.
369
359
 
370
360
  def assert_pattern
371
- raise NotImplementedError, "only available in Ruby 3.0+" unless RUBY_VERSION >= "3.0"
372
361
  flunk "assert_pattern requires a block to capture errors." unless block_given?
373
362
 
374
- begin # TODO: remove after ruby 2.6 dropped
375
- yield
376
- pass
377
- rescue NoMatchingPatternError => e
378
- flunk e.message
379
- end
363
+ yield
364
+ pass
365
+ rescue NoMatchingPatternError => e
366
+ flunk e.message
380
367
  end
381
368
 
382
369
  ##
@@ -389,6 +376,7 @@ module Minitest
389
376
  # str.must_be :empty?
390
377
 
391
378
  def assert_predicate o1, op, msg = nil
379
+ assert_respond_to o1, op, include_all:true
392
380
  msg = message(msg) { "Expected #{mu_pp o1} to be #{op}" }
393
381
  assert o1.__send__(op), msg
394
382
  end
@@ -448,9 +436,7 @@ module Minitest
448
436
  # include_all defaults to false to match Object#respond_to?
449
437
 
450
438
  def assert_respond_to obj, meth, msg = nil, include_all: false
451
- msg = message(msg) {
452
- "Expected #{mu_pp obj} (#{obj.class}) to respond to ##{meth}"
453
- }
439
+ msg = message(msg) { "Expected #{mu_pp obj} (#{obj.class}) to respond to ##{meth}" }
454
440
  assert obj.respond_to?(meth, include_all), msg
455
441
  end
456
442
 
@@ -465,21 +451,6 @@ module Minitest
465
451
  assert exp.equal?(act), msg
466
452
  end
467
453
 
468
- ##
469
- # +send_ary+ is a receiver, message and arguments.
470
- #
471
- # Fails unless the call returns a true value
472
-
473
- def assert_send send_ary, m = nil
474
- warn "DEPRECATED: assert_send. From #{_where}"
475
-
476
- recv, msg, *args = send_ary
477
- m = message(m) {
478
- "Expected #{mu_pp recv}.#{msg}(*#{mu_pp args}) to return true"
479
- }
480
- assert recv.__send__(msg, *args), m
481
- end
482
-
483
454
  ##
484
455
  # Fails if the block outputs anything to stderr or stdout.
485
456
  #
@@ -624,13 +595,16 @@ module Minitest
624
595
  end
625
596
 
626
597
  ##
627
- # Returns a proc that will output +msg+ along with the default message.
598
+ # Returns a proc that delays generation of an output message. If
599
+ # +msg+ is a proc (eg, from another +message+ call) return +msg+
600
+ # as-is. Otherwise, return a proc that will output +msg+ along
601
+ # with the value of the result of the block passed to +message+.
628
602
 
629
- def message msg = nil, ending = nil, &default
603
+ def message msg = nil, ending = ".", &default
604
+ return msg if Proc === msg
630
605
  proc {
631
- msg = msg.call.chomp(".") if Proc === msg
632
606
  custom_message = "#{msg}.\n" unless msg.nil? or msg.to_s.empty?
633
- "#{custom_message}#{default.call}#{ending || "."}"
607
+ "#{custom_message}#{default.call}#{ending}"
634
608
  }
635
609
  end
636
610
 
@@ -654,8 +628,7 @@ module Minitest
654
628
 
655
629
  def refute_empty obj, msg = nil
656
630
  msg = message(msg) { "Expected #{mu_pp obj} to not be empty" }
657
- assert_respond_to obj, :empty?
658
- refute obj.empty?, msg
631
+ refute_predicate obj, :empty?, msg
659
632
  end
660
633
 
661
634
  ##
@@ -687,19 +660,16 @@ module Minitest
687
660
  # For comparing Floats. Fails if +exp+ and +act+ have a relative error
688
661
  # less than +epsilon+.
689
662
 
690
- def refute_in_epsilon a, b, epsilon = 0.001, msg = nil
691
- refute_in_delta a, b, a * epsilon, msg
663
+ def refute_in_epsilon exp, act, epsilon = 0.001, msg = nil
664
+ refute_in_delta exp, act, [exp.abs, act.abs].min * epsilon, msg
692
665
  end
693
666
 
694
667
  ##
695
- # Fails if +collection+ includes +obj+.
668
+ # Fails if +obj+ includes +sub+.
696
669
 
697
- def refute_includes collection, obj, msg = nil
698
- msg = message(msg) {
699
- "Expected #{mu_pp collection} to not include #{mu_pp obj}"
700
- }
701
- assert_respond_to collection, :include?
702
- refute collection.include?(obj), msg
670
+ def refute_includes obj, sub, msg = nil
671
+ msg = message(msg) { "Expected #{mu_pp obj} to not include #{mu_pp sub}" }
672
+ refute_operator obj, :include?, sub, msg
703
673
  end
704
674
 
705
675
  ##
@@ -725,9 +695,8 @@ module Minitest
725
695
 
726
696
  def refute_match matcher, obj, msg = nil
727
697
  msg = message(msg) { "Expected #{mu_pp matcher} to not match #{mu_pp obj}" }
728
- assert_respond_to matcher, :=~
729
698
  matcher = Regexp.new Regexp.escape matcher if String === matcher
730
- refute matcher =~ obj, msg
699
+ refute_operator matcher, :=~, obj, msg
731
700
  end
732
701
 
733
702
  ##
@@ -751,15 +720,12 @@ module Minitest
751
720
  # other exceptions will be raised as normal and generate a test error.
752
721
 
753
722
  def refute_pattern
754
- raise NotImplementedError, "only available in Ruby 3.0+" unless RUBY_VERSION >= "3.0"
755
723
  flunk "refute_pattern requires a block to capture errors." unless block_given?
756
724
 
757
- begin
758
- yield
759
- flunk "NoMatchingPatternError expected, but nothing was raised."
760
- rescue NoMatchingPatternError
761
- pass
762
- end
725
+ yield
726
+ flunk "NoMatchingPatternError expected, but nothing was raised."
727
+ rescue NoMatchingPatternError
728
+ pass
763
729
  end
764
730
 
765
731
  ##
@@ -770,6 +736,7 @@ module Minitest
770
736
 
771
737
  def refute_operator o1, op, o2 = UNDEFINED, msg = nil
772
738
  return refute_predicate o1, op, msg if UNDEFINED == o2
739
+ assert_respond_to o1, op
773
740
  msg = message(msg) { "Expected #{mu_pp o1} to not be #{op} #{mu_pp o2}" }
774
741
  refute o1.__send__(op, o2), msg
775
742
  end
@@ -792,6 +759,7 @@ module Minitest
792
759
  # str.wont_be :empty?
793
760
 
794
761
  def refute_predicate o1, op, msg = nil
762
+ assert_respond_to o1, op
795
763
  msg = message(msg) { "Expected #{mu_pp o1} to not be #{op}" }
796
764
  refute o1.__send__(op), msg
797
765
  end
@@ -1,6 +1,5 @@
1
- require "minitest"
2
- require "minitest/spec"
3
- require "minitest/mock"
4
- require "minitest/hell" if ENV["MT_HELL"]
1
+ require_relative "../minitest"
2
+ require_relative "spec"
3
+ require_relative "hell" if ENV["MT_HELL"]
5
4
 
6
5
  Minitest.autorun