minitest 5.15.0 → 5.20.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 0d7d16c7decb91ba01a888704bd527d1e5569454b444fe1b4e41a8a3a7db7406
4
- data.tar.gz: 1ee0d2823a94b63b8cd019198fe2ca20a5c3d9d7bf4918148bdfa543fb65945d
3
+ metadata.gz: 667a803a272949e7b05440f91a56155ea3977a5b9d364542801889c5a2fe0ff0
4
+ data.tar.gz: 862bf0ff3d24eea4bbe6c7f435ceef19aaa97748f6a87ec3fa51dc218ca79298
5
5
  SHA512:
6
- metadata.gz: 933a300969aa30dc8f254952dd17f9975cb1f3aad9c10c96260394d088b76900273773374b5ed72731356f2b7f1cfeb131583ae943322250a60401e554e11f45
7
- data.tar.gz: 24a356e1d3c06e28d03860b4dca92d17b88979ebad6316fe97298207c58b29b0ae207657d0044a43ede1bf9a27ac43ca8c779e24fc9ca5ed4c920beca2eaf143
6
+ metadata.gz: 2284c84ae5f98a3454e9a95417e609ca1a8ef9af8ee8b1fad8f2aca2632fde6a309e266ef1d399d9a7d47337cdcba696500a1b36f1fa7d952615eb390a89e329
7
+ data.tar.gz: a76204f74c2caf693a4302065815b871863ae655372d25fc4d41e416b0d4935704c1e1068457b5cda934312e3915ae8a27595ca962c98e544dd45b54cac2aef7
checksums.yaml.gz.sig CHANGED
@@ -1 +1,4 @@
1
- o3�_�"D%%���̮[���4�K�D祆�ߦ�;�&p�8�-�Ԓ�$t�3���4���� �p#�� L+���9�A�r�ӣ�Q��.;��yA.M
1
+ a�>�
2
+ t��f ��΋>+�e�(|��}��{xu�&��f�D��*�J�������[�o:S�/:��B��ؐ�O�֧ ��8���~�#[�g˯�v���0��v�hj ��Pο~�Z�P��@4��0�ӌ�W81&��������
3
+ <�N��䀡IA�/k��_ ��H��'��\8���tR�
4
+ p�TPڜ�p6��^��O ��sR��-R���z@��������^JoP4���d_��� H��x|��
data/History.rdoc CHANGED
@@ -1,3 +1,102 @@
1
+ === 5.20.0 / 2023-09-06
2
+
3
+ * 1 minor enhancement:
4
+
5
+ * Optionally allow autorun exit hook to remain active in forked child. (casperisfine)
6
+
7
+ === 5.19.0 / 2023-07-26
8
+
9
+ * 2 minor enhancements:
10
+
11
+ * Add metadata lazy accessor to Runnable / Result. (matteeyah)
12
+ * Only load minitest/unit (aka ancient MiniTest compatibility layer) if ENV["MT_COMPAT"]
13
+
14
+ * 1 bug fix:
15
+
16
+ * Minitest::TestTask enthusiastically added itself to default. (ParadoxV5)
17
+
18
+ === 5.18.1 / 2023-06-16
19
+
20
+ * 3 bug fixes:
21
+
22
+ * Avoid extra string allocations when filtering tests. (tenderlove)
23
+ * Only mention deprecated ENV['N'] if it is an integer string.
24
+ * Push up test_order to Minitest::Runnable to fix minitest/hell. (koic)
25
+
26
+ === 5.18.0 / 2023-03-04
27
+
28
+ * 2 major enhancements:
29
+
30
+ * Added assert_pattern & refute_pattern for pattern matching. (flavorjones)
31
+ * Added matching must_pattern_match & wont_pattern_match to minitest/spec.
32
+
33
+ * 1 bug fix:
34
+
35
+ * Support the new message format of NameError in Ruby 3.3 (mame)
36
+
37
+ === 5.17.0 / 2022-12-31
38
+
39
+ * 1 minor enhancement:
40
+
41
+ * Refactor setup hooks into a SETUP_METHODS constant. (MSP-Greg)
42
+
43
+ * 3 bug fixes:
44
+
45
+ * Fix kwargs for Mock calls to delegator. (blowmage)
46
+ * Fix kwargs for expectations. (bobmazanec, blowmage)
47
+ * Remove check for .b method. (tenderlove)
48
+
49
+ === 5.16.3 / 2022-08-17
50
+
51
+ * 2 bug fixes:
52
+
53
+ * Fixed exception sanitization by removing TypeError restriction on rescue.
54
+ * Use A instead of deprecated TESTOPTS in rake test:slow. (davidstosik)
55
+
56
+ === 5.16.2 / 2022-07-03
57
+
58
+ * 4 bug fixes:
59
+
60
+ * Added MT_KWARGS_HACK kludge for stub to deal with ruby 2.7 kwargs nastiness. (tsugimoto)
61
+ * In #expect, pop Hash class from args if $MT_KWARGS_HACK. (casperisfine)
62
+ * In above scenario, set expected kwargs (as Objects) based on actual kwargs.
63
+ * Nuke ivars if exception fails to marshal twice (eg better_errors). (irphilli)
64
+
65
+ === 5.16.1 / 2022-06-20
66
+
67
+ * 2 bug fixes:
68
+
69
+ * Apparently adding real kwarg support to mocks/stubs broke some code. Fixed.
70
+ * Use `MT_KWARGS_HACK=1` to activate the kludgy kwargs support w/ caveats.
71
+ * Clarified some doco wrt the block on #stub.
72
+
73
+ === 5.16.0 / 2022-06-14
74
+
75
+ * 2 major enhancements:
76
+
77
+ * Added Minitest::TestTask.
78
+ * Dropping ruby 2.2 - 2.5. 2.6 is DTM soon too.
79
+
80
+ * 11 minor enhancements:
81
+
82
+ * Added --show-skips option to show skips at end of run but not require --verbose. (MSP-Greg)
83
+ * Added Minitest.seed, the random seed used by the run.
84
+ * Calling `srand Minitest.seed` before all shuffles to ensure determinism.
85
+ * Extended #stub to handle kwargs for both block and call args. (SampsonCrowley)
86
+ * Extended Mock#__call to display kwargs.
87
+ * Extended Mock#expect to record kwargs.
88
+ * Extended Mock#method_missing to take kwargs & compare them against expected.
89
+ * Mock#method_missing displays better errors on arity mismatch.
90
+ * Removed minor optimization removing empty suites before run.
91
+ * Simplified test randomization (test order will change even with fixed seed).
92
+ * assert_match now returns the MatchData on success. (Nakilon)
93
+
94
+ * 3 bug fixes:
95
+
96
+ * (Re)Fixed marshalling of exceptions, neutering them in 2 passes.
97
+ * Fixed more problems with rdoc.
98
+ * Had to patch up mock and stub to deal with <=2.7 kwargs oddities
99
+
1
100
  === 5.15.0 / 2021-12-14
2
101
 
3
102
  * 1 major enhancement:
data/Manifest.txt CHANGED
@@ -17,6 +17,7 @@ lib/minitest/pride.rb
17
17
  lib/minitest/pride_plugin.rb
18
18
  lib/minitest/spec.rb
19
19
  lib/minitest/test.rb
20
+ lib/minitest/test_task.rb
20
21
  lib/minitest/unit.rb
21
22
  test/minitest/metametameta.rb
22
23
  test/minitest/test_minitest_assertions.rb
@@ -25,3 +26,4 @@ test/minitest/test_minitest_mock.rb
25
26
  test/minitest/test_minitest_reporter.rb
26
27
  test/minitest/test_minitest_spec.rb
27
28
  test/minitest/test_minitest_test.rb
29
+ test/minitest/test_minitest_test_task.rb
data/README.rdoc CHANGED
@@ -1,8 +1,8 @@
1
1
  = minitest/{test,spec,mock,benchmark}
2
2
 
3
- home :: https://github.com/seattlerb/minitest
4
- bugs :: https://github.com/seattlerb/minitest/issues
5
- rdoc :: http://docs.seattlerb.org/minitest
3
+ home :: https://github.com/minitest/minitest
4
+ bugs :: https://github.com/minitest/minitest/issues
5
+ rdoc :: https://docs.seattlerb.org/minitest
6
6
  vim :: https://github.com/sunaku/vim-ruby-minitest
7
7
  emacs:: https://github.com/arthurnn/minitest-emacs
8
8
 
@@ -70,6 +70,7 @@ extract-method refactorings still apply.
70
70
  * minitest/mock - a simple and clean mock/stub system.
71
71
  * minitest/benchmark - an awesome way to assert your algorithm's performance.
72
72
  * minitest/pride - show your pride in testing!
73
+ * minitest/test_task - a full-featured and clean rake task generator.
73
74
  * Incredibly small and fast runner, but no bells and whistles.
74
75
  * Written by squishy human beings. Software can never be perfect. We will all eventually die.
75
76
 
@@ -186,7 +187,7 @@ Output is tab-delimited to make it easy to paste into a spreadsheet.
186
187
  === Mocks
187
188
 
188
189
  Mocks and stubs defined using terminology by Fowler & Meszaros at
189
- http://www.martinfowler.com/bliki/TestDouble.html:
190
+ https://www.martinfowler.com/bliki/TestDouble.html:
190
191
 
191
192
  "Mocks are pre-programmed with expectations which form a specification
192
193
  of the calls they are expected to receive. They can throw an exception
@@ -237,7 +238,7 @@ an example of asserting that code inside a thread is run:
237
238
  === Stubs
238
239
 
239
240
  Mocks and stubs are defined using terminology by Fowler & Meszaros at
240
- http://www.martinfowler.com/bliki/TestDouble.html:
241
+ https://www.martinfowler.com/bliki/TestDouble.html:
241
242
 
242
243
  "Stubs provide canned answers to calls made during the test".
243
244
 
@@ -264,9 +265,8 @@ new non-existing method:
264
265
 
265
266
  === Running Your Tests
266
267
 
267
- Ideally, you'll use a rake task to run your tests, either piecemeal or
268
- all at once. Both rake and rails ship with rake tasks for running your
269
- tests. BUT! You don't have to:
268
+ Ideally, you'll use a rake task to run your tests (see below), either
269
+ piecemeal or all at once. BUT! You don't have to:
270
270
 
271
271
  % ruby -Ilib:test test/minitest/test_minitest_test.rb
272
272
  Run options: --seed 37685
@@ -294,18 +294,45 @@ provided via plugins. To see them, simply run with +--help+:
294
294
  -p, --pride Pride. Show your testing pride!
295
295
  -a, --autotest Connect to autotest server.
296
296
 
297
+ === Rake Tasks
298
+
297
299
  You can set up a rake task to run all your tests by adding this to your Rakefile:
298
300
 
299
- require "rake/testtask"
301
+ require "minitest/test_task"
302
+
303
+ Minitest::TestTask.create # named test, sensible defaults
304
+
305
+ # or more explicitly:
300
306
 
301
- Rake::TestTask.new(:test) do |t|
307
+ Minitest::TestTask.create(:test) do |t|
302
308
  t.libs << "test"
303
309
  t.libs << "lib"
304
- t.test_files = FileList["test/**/test_*.rb"]
310
+ t.warning = false
311
+ t.test_globs = ["test/**/*_test.rb"]
305
312
  end
306
313
 
307
314
  task :default => :test
308
315
 
316
+ Each of these will generate 4 tasks:
317
+
318
+ rake test :: Run the test suite.
319
+ rake test:cmd :: Print out the test command.
320
+ rake test:isolated :: Show which test files fail when run separately.
321
+ rake test:slow :: Show bottom 25 tests sorted by time.
322
+
323
+ === Rake Task Variables
324
+
325
+ There are a bunch of variables you can supply to rake to modify the run.
326
+
327
+ MT_LIB_EXTRAS :: Extra libs to dynamically override/inject for custom runs.
328
+ N :: -n: Tests to run (string or /regexp/).
329
+ X :: -x: Tests to exclude (string or /regexp/).
330
+ A :: Any extra arguments. Honors shell quoting.
331
+ MT_CPU :: How many threads to use for parallel test runs
332
+ SEED :: -s --seed Sets random seed.
333
+ TESTOPTS :: Deprecated, same as A
334
+ FILTER :: Deprecated, same as A
335
+
309
336
  == Writing Extensions
310
337
 
311
338
  To define a plugin, add a file named minitest/XXX_plugin.rb to your
@@ -380,37 +407,35 @@ Using our example above, here is how we might implement MyCI:
380
407
 
381
408
  Minitest is a dependency of rails, which until fairly recently had an
382
409
  overzealous backwards compatibility policy. As such, I'm stuck
383
- supporting versions of ruby that are long past EOL. Once rails 5.2 is
384
- dropped (hopefully April 2021), I get to drop a bunch of versions of
385
- ruby that I have to currently test against.
410
+ supporting versions of ruby that are long past EOL. Hopefully I'll be
411
+ able to support only current versions of ruby sometime in the near
412
+ future.
386
413
 
387
- (As of 2021-01-31)
414
+ (As of 2023-03-05)
388
415
 
389
416
  Current versions of rails: (https://endoflife.date/rails)
390
417
 
391
- | rails | min ruby | rec ruby | minitest | status |
392
- |-------+----------+----------+----------+----------|
393
- | 7.0 | >= 2.7 | 3.0 | >= 5.1 | Future |
394
- | 6.1 | >= 2.5 | 3.0 | >= 5.1 | Current |
395
- | 6.0 | >= 2.5 | 2.6 | >= 5.1 | Security |
396
- | 5.2 | >= 2.2.2 | 2.5 | ~> 5.1 | Security | EOL @railsconf 2021?
418
+ | rails | min ruby | rec ruby | minitest | status | EOL Date |
419
+ |-------+----------+----------+----------+----------+------------|
420
+ | 7.0 | >= 2.7 | 3.1 | >= 5.1 | Current | 2025-06-01?|
421
+ | 6.1 | >= 2.5 | 3.0 | >= 5.1 | Maint | 2024-06-01?|
422
+ | 6.0 | >= 2.5 | 2.6 | >= 5.1 | Security | 2023-06-01 |
423
+ | 5.2 | >= 2.2.2 | 2.5 | ~> 5.1 | EOL | 2022-06-01 |
424
+
425
+ If you want to look at the requirements for a specific version, run:
426
+
427
+ gem spec -r --ruby rails -v 7.0.0
397
428
 
398
429
  Current versions of ruby: (https://endoflife.date/ruby)
399
430
 
400
431
  | ruby | Status | EOL Date |
401
432
  |------+---------+------------|
402
- | 3.0 | Current | 2024-03-31 |
403
- | 2.7 | Maint | 2023-03-31 |
404
- | 2.6 | Maint* | 2022-03-31 |
433
+ | 3.2 | Current | 2026-03-31 |
434
+ | 3.1 | Maint | 2025-03-31 |
435
+ | 3.0 | Maint | 2024-03-31 |
436
+ | 2.7 | Security| 2023-03-31 |
437
+ | 2.6 | EOL | 2022-03-31 |
405
438
  | 2.5 | EOL | 2021-03-31 |
406
- | 2.4 | EOL | 2020-03-31 |
407
- | 2.3 | EOL | 2019-03-31 |
408
- | 2.2 | EOL | 2018-03-31 |
409
-
410
- See also:
411
-
412
- * https://www.fastruby.io/blog/ruby/rails/versions/compatibility-table.html
413
- * https://jamesjeffersconsulting.com/ruby-rails-version-matrix/
414
439
 
415
440
  === How to test SimpleDelegates?
416
441
 
@@ -614,6 +639,7 @@ minitest-capistrano :: Assertions and expectations for testing
614
639
  Capistrano recipes.
615
640
  minitest-capybara :: Capybara matchers support for minitest unit and
616
641
  spec.
642
+ minitest-cc :: It provides minimal information about code coverage.
617
643
  minitest-chef-handler :: Run Minitest suites as Chef report handlers
618
644
  minitest-ci :: CI reporter plugin for Minitest.
619
645
  minitest-context :: Defines contexts for code reuse in Minitest
@@ -712,7 +738,7 @@ minitest-stub-const :: Stub constants for the duration of a block.
712
738
  minitest-tags :: Add tags for minitest.
713
739
  minitest-unordered :: Adds a new assertion to minitest for checking the
714
740
  contents of a collection, ignoring element order.
715
- minitest-vcr :: Automatic cassette managment with Minitest::Spec
741
+ minitest-vcr :: Automatic cassette management with Minitest::Spec
716
742
  and VCR.
717
743
  minitest_log :: Adds structured logging, data explication, and verdicts.
718
744
  minitest_owrapper :: Get tests results as a TestResult object.
@@ -726,6 +752,9 @@ rematch :: Declutter your test files from large hardcoded da
726
752
  and update them automatically when your code changes.
727
753
  rspec2minitest :: Easily translate any RSpec matchers to Minitest
728
754
  assertions and expectations.
755
+ stubberry :: Multiple stubbing 'berries', sweet and useful
756
+ stub helpers and assertions. ( stub_must,
757
+ assert_method_called, stubbing ORM objects by id )
729
758
 
730
759
  == Unknown Extensions:
731
760
 
@@ -751,7 +780,7 @@ Authors... Please send me a pull request with a description of your minitest ext
751
780
 
752
781
  == Minitest related goods
753
782
 
754
- * minitest/pride fabric: http://www.spoonflower.com/fabric/3928730-again-by-katie_allen
783
+ * minitest/pride fabric: https://www.spoonflower.com/fabric/3928730-again-by-katie_allen
755
784
 
756
785
  == REQUIREMENTS:
757
786
 
data/Rakefile CHANGED
@@ -2,6 +2,7 @@
2
2
 
3
3
  require "rubygems"
4
4
  require "hoe"
5
+ $:.unshift "lib" # to pick up lib/minitest/test_task.rb when minitest not installed
5
6
 
6
7
  Hoe.plugin :seattlerb
7
8
  Hoe.plugin :rdoc
@@ -11,7 +12,7 @@ Hoe.spec "minitest" do
11
12
 
12
13
  license "MIT"
13
14
 
14
- require_ruby_version [">= 2.2", "< 4.0"]
15
+ require_ruby_version [">= 2.6", "< 4.0"]
15
16
  end
16
17
 
17
18
  desc "Find missing expectations"
@@ -293,6 +293,8 @@ module Minitest
293
293
  assert_respond_to matcher, :"=~"
294
294
  matcher = Regexp.new Regexp.escape matcher if String === matcher
295
295
  assert matcher =~ obj, msg
296
+
297
+ Regexp.last_match
296
298
  end
297
299
 
298
300
  ##
@@ -355,6 +357,32 @@ module Minitest
355
357
  assert File.exist?(path), msg
356
358
  end
357
359
 
360
+ ##
361
+ # For testing with pattern matching (only supported with Ruby 3.0 and later)
362
+ #
363
+ # # pass
364
+ # assert_pattern { [1,2,3] => [Integer, Integer, Integer] }
365
+ #
366
+ # # fail "length mismatch (given 3, expected 1)"
367
+ # assert_pattern { [1,2,3] => [Integer] }
368
+ #
369
+ # The bare <tt>=></tt> pattern will raise a NoMatchingPatternError on failure, which would
370
+ # normally be counted as a test error. This assertion rescues NoMatchingPatternError and
371
+ # generates a test failure. Any other exception will be raised as normal and generate a test
372
+ # error.
373
+
374
+ def assert_pattern
375
+ raise NotImplementedError, "only available in Ruby 3.0+" unless RUBY_VERSION >= "3.0"
376
+ flunk "assert_pattern requires a block to capture errors." unless block_given?
377
+
378
+ begin # TODO: remove after ruby 2.6 dropped
379
+ yield
380
+ pass
381
+ rescue NoMatchingPatternError => e
382
+ flunk e.message
383
+ end
384
+ end
385
+
358
386
  ##
359
387
  # For testing with predicates. Eg:
360
388
  #
@@ -719,6 +747,30 @@ module Minitest
719
747
  refute obj.nil?, msg
720
748
  end
721
749
 
750
+ ##
751
+ # For testing with pattern matching (only supported with Ruby 3.0 and later)
752
+ #
753
+ # # pass
754
+ # refute_pattern { [1,2,3] => [String] }
755
+ #
756
+ # # fail "NoMatchingPatternError expected, but nothing was raised."
757
+ # refute_pattern { [1,2,3] => [Integer, Integer, Integer] }
758
+ #
759
+ # This assertion expects a NoMatchingPatternError exception, and will fail if none is raised. Any
760
+ # other exceptions will be raised as normal and generate a test error.
761
+
762
+ def refute_pattern
763
+ raise NotImplementedError, "only available in Ruby 3.0+" unless RUBY_VERSION >= "3.0"
764
+ flunk "refute_pattern requires a block to capture errors." unless block_given?
765
+
766
+ begin
767
+ yield
768
+ flunk("NoMatchingPatternError expected, but nothing was raised.")
769
+ rescue NoMatchingPatternError
770
+ pass
771
+ end
772
+ end
773
+
722
774
  ##
723
775
  # Fails if +o1+ is not +op+ +o2+. Eg:
724
776
  #
@@ -217,7 +217,7 @@ module Minitest
217
217
  ##
218
218
  # Takes an array of x/y pairs and calculates the general R^2 value.
219
219
  #
220
- # See: http://en.wikipedia.org/wiki/Coefficient_of_determination
220
+ # See: https://en.wikipedia.org/wiki/Coefficient_of_determination
221
221
 
222
222
  def fit_error xys
223
223
  y_bar = sigma(xys) { |_, y| y } / xys.size.to_f
@@ -232,7 +232,7 @@ module Minitest
232
232
  #
233
233
  # Takes x and y values and returns [a, b, r^2].
234
234
  #
235
- # See: http://mathworld.wolfram.com/LeastSquaresFittingExponential.html
235
+ # See: https://mathworld.wolfram.com/LeastSquaresFittingExponential.html
236
236
 
237
237
  def fit_exponential xs, ys
238
238
  n = xs.size
@@ -254,7 +254,7 @@ module Minitest
254
254
  #
255
255
  # Takes x and y values and returns [a, b, r^2].
256
256
  #
257
- # See: http://mathworld.wolfram.com/LeastSquaresFittingLogarithmic.html
257
+ # See: https://mathworld.wolfram.com/LeastSquaresFittingLogarithmic.html
258
258
 
259
259
  def fit_logarithmic xs, ys
260
260
  n = xs.size
@@ -276,7 +276,7 @@ module Minitest
276
276
  #
277
277
  # Takes x and y values and returns [a, b, r^2].
278
278
  #
279
- # See: http://mathworld.wolfram.com/LeastSquaresFitting.html
279
+ # See: https://mathworld.wolfram.com/LeastSquaresFitting.html
280
280
 
281
281
  def fit_linear xs, ys
282
282
  n = xs.size
@@ -298,7 +298,7 @@ module Minitest
298
298
  #
299
299
  # Takes x and y values and returns [a, b, r^2].
300
300
  #
301
- # See: http://mathworld.wolfram.com/LeastSquaresFittingPowerLaw.html
301
+ # See: https://mathworld.wolfram.com/LeastSquaresFittingPowerLaw.html
302
302
 
303
303
  def fit_power xs, ys
304
304
  n = xs.size
@@ -124,6 +124,15 @@ module Minitest::Expectations
124
124
 
125
125
  infect_an_assertion :assert_output, :must_output, :block
126
126
 
127
+ ##
128
+ # See Minitest::Assertions#assert_pattern_match
129
+ #
130
+ # _ { ... }.must_pattern_match [...]
131
+ #
132
+ # :method: must_pattern_match
133
+
134
+ infect_an_assertion :assert_pattern, :must_pattern_match, :block
135
+
127
136
  ##
128
137
  # See Minitest::Assertions#assert_raises
129
138
  #
@@ -283,6 +292,15 @@ module Minitest::Expectations
283
292
 
284
293
  infect_an_assertion :refute_operator, :wont_be, :reverse
285
294
 
295
+ ##
296
+ # See Minitest::Assertions#refute_pattern_match
297
+ #
298
+ # _ { ... }.wont_pattern_match [...]
299
+ #
300
+ # :method: wont_pattern_match
301
+
302
+ infect_an_assertion :refute_pattern, :wont_pattern_match, :block
303
+
286
304
  ##
287
305
  # See Minitest::Assertions#refute_respond_to
288
306
  #