minitest 5.11.3 → 5.14.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 2c82c1408c60d4743cf06566256146090f22ab11bc5f024cbf4026fd967d7eb6
4
- data.tar.gz: 93e140e22554c00911e381fa0584c52add681e5adb34bc3e575ee79459d7df6e
3
+ metadata.gz: 1edfa85bfac65503ab66f88d6ca07571a6e788bfd9eb513399cc60ffeae32e1f
4
+ data.tar.gz: 68a4cc4fcf8b54f8ba97dbda48e7ee4a8f818c67a3c4021920d5c6e4dfe9866c
5
5
  SHA512:
6
- metadata.gz: 3621855d2763f225b2b99061c9eed994040debd9b1b032ebb3318adc42413493458b5c47569b7305954fc7575e870ad97441ce8bec7ddadb92afdd126f1f4bda
7
- data.tar.gz: 19e04c6feff4f3d0cda89fadf4bd3f28415301d8adb2e5650a064cb74df57d8ee9885175738ac967d7a839496ac1c0f1c690627e8a2ca83f71edd6b0edb5b811
6
+ metadata.gz: 7f808ea45c7d6755da784bc6d70356f6beb7b794bd4df3cf509ce08d762f125c1bcafd92c406c73ea6a13809d836c75812fed83605f18b1d82e6f16b98e97004
7
+ data.tar.gz: d75f3b41034e4a70b8f372a79af5971eb2a589f87a4a80bfc20f23ebf1e5ac50235bfa5c300a25bba99f55746a8148cddde804cc9181d941ad62c71626482e06
checksums.yaml.gz.sig CHANGED
Binary file
data/History.rdoc CHANGED
@@ -1,3 +1,103 @@
1
+ === 5.14.4 / 2021-02-23
2
+
3
+ * 1 bug fix:
4
+
5
+ * Fixed deprecation warning using stub with methods using keyword arguments. (Nakilon)
6
+
7
+ === 5.14.3 / 2021-01-05
8
+
9
+ * 1 bug fix:
10
+
11
+ * Bumped require_ruby_version to < 4 (trunk = 3.1).
12
+
13
+ === 5.14.2 / 2020-08-31
14
+
15
+ * 1 bug fix:
16
+
17
+ * Bumped ruby version to include 3.0 (trunk).
18
+
19
+ === 5.14.1 / 2020-05-15
20
+
21
+ * 3 minor enhancements:
22
+
23
+ * Minitest.filter_backtrace returns original backtrace if filter comes back empty.
24
+ * Minitest::BacktraceFilter now returns entire backtrace if $MT_DEBUG set in env.
25
+ * Return true on a successful refute. (jusleg)
26
+
27
+ * 1 bug fix:
28
+
29
+ * Fixed expectation doco to not use global expectations.
30
+
31
+ === 5.14.0 / 2020-01-11
32
+
33
+ * 2 minor enhancements:
34
+
35
+ * Block-assertions (eg assert_output) now error if raised inside the block. (casperisfine)
36
+ * Changed assert_raises to only catch Assertion since that covers Skip and friends.
37
+
38
+ * 3 bug fixes:
39
+
40
+ * Added example for value wrapper with block to Expectations module. (stomar)
41
+ * Fixed use of must/wont_be_within_delta on Expectation instance. (stomar)
42
+ * Renamed UnexpectedError#exception to #error to avoid problems with reraising. (casperisfine)
43
+
44
+ === 5.13.0 / 2019-10-29
45
+
46
+ * 9 minor enhancements:
47
+
48
+ * Added Minitest::Guard#osx?
49
+ * Added examples to documentation for assert_raises. (lxxxvi)
50
+ * Added expectations #path_must_exist and #path_wont_exist. Not thrilled with the names.
51
+ * Added fail_after(year, month, day, msg) to allow time-bombing after a deadline.
52
+ * Added skip_until(year, month, day, msg) to allow deferring until a deadline.
53
+ * Deprecated Minitest::Guard#maglev?
54
+ * Deprecated Minitest::Guard#rubinius?
55
+ * Finally added assert_path_exists and refute_path_exists. (deivid-rodriguez)
56
+ * Refactored and pulled Assertions#things_to_diff out of #diff. (BurdetteLamar)
57
+
58
+ * 3 bug fixes:
59
+
60
+ * Fix autorun bug that affects fork exit status in tests. (dylanahsmith/jhawthorn)
61
+ * Improved documentation for _/value/expect, especially for blocks. (svoop)
62
+ * Support new Proc#to_s format. (ko1)
63
+
64
+ === 5.12.2 / 2019-09-28
65
+
66
+ * 1 bug fix:
67
+
68
+ * After chatting w/ @y-yagi and others, decided to lower support to include ruby 2.2.
69
+
70
+ === 5.12.1 / 2019-09-28
71
+
72
+ * 1 minor enhancement:
73
+
74
+ * Added documentation for Reporter classes. (sshaw)
75
+
76
+ * 3 bug fixes:
77
+
78
+ * Avoid using 'match?' to support older ruby versions. (y-yagi)
79
+ * Fixed broken link to reference on goodness-of-fit testing. (havenwood)
80
+ * Update requirements in readme and Rakefile/hoe spec.
81
+
82
+ === 5.12.0 / 2019-09-22
83
+
84
+ * 8 minor enhancements:
85
+
86
+ * Added a descriptive error if assert_output or assert_raises called without a block. (okuramasafumi)
87
+ * Changed mu_pp_for_diff to make having both \n and \\n easier to debug.
88
+ * Deprecated $N for specifying number of parallel test runners. Use MT_CPU.
89
+ * Deprecated use of global expectations. To be removed from MT6.
90
+ * Extended Assertions#mu_pp to encoding validity output for strings to improve diffs.
91
+ * Extended Assertions#mu_pp to output encoding and validity if invalid to improve diffs.
92
+ * Extended Assertions#mu_pp_for_diff to make escaped newlines more obvious in diffs.
93
+ * Fail gracefully when expectation used outside of `it`.
94
+
95
+ * 3 bug fixes:
96
+
97
+ * Check `option[:filter]` klass before match. Fixes 2.6 warning. (y-yagi)
98
+ * Fixed Assertions#diff from recalculating if set to nil
99
+ * Fixed spec section of readme to not use deprecated global expectations. (CheezItMan)
100
+
1
101
  === 5.11.3 / 2018-01-26
2
102
 
3
103
  * 1 bug fix:
@@ -123,7 +223,7 @@
123
223
  * 2 bug fixes:
124
224
 
125
225
  * Re-release to refresh gem certificate signing. ugh.
126
- * Fixed hoe/minitest to not augment load path if we're actually testing minitest.
226
+ * Fixed hoe/minitest to not augment load path if we're actually testing minitest.
127
227
 
128
228
  === 5.9.0 / 2016-05-16
129
229
 
@@ -147,7 +247,7 @@
147
247
  * 2 bug fixes:
148
248
 
149
249
  * Re-release to refresh gem certificate signing. ugh.
150
- * Fixed hoe/minitest to not augment load path if we're actually testing minitest.
250
+ * Fixed hoe/minitest to not augment load path if we're actually testing minitest.
151
251
 
152
252
  === 5.8.4 / 2016-01-21
153
253
 
@@ -1307,4 +1407,3 @@ back.
1307
1407
  * 1 major enhancement
1308
1408
 
1309
1409
  * Birthday!
1310
-
data/Manifest.txt CHANGED
@@ -19,6 +19,7 @@ lib/minitest/spec.rb
19
19
  lib/minitest/test.rb
20
20
  lib/minitest/unit.rb
21
21
  test/minitest/metametameta.rb
22
+ test/minitest/test_minitest_assertions.rb
22
23
  test/minitest/test_minitest_benchmark.rb
23
24
  test/minitest/test_minitest_mock.rb
24
25
  test/minitest/test_minitest_reporter.rb
data/README.rdoc CHANGED
@@ -126,13 +126,13 @@ Define your tests as methods beginning with +test_+.
126
126
 
127
127
  describe "when asked about cheeseburgers" do
128
128
  it "must respond positively" do
129
- @meme.i_can_has_cheezburger?.must_equal "OHAI!"
129
+ _(@meme.i_can_has_cheezburger?).must_equal "OHAI!"
130
130
  end
131
131
  end
132
132
 
133
133
  describe "when asked about blending possibilities" do
134
134
  it "won't say no" do
135
- @meme.will_it_blend?.wont_match /^no/i
135
+ _(@meme.will_it_blend?).wont_match /^no/i
136
136
  end
137
137
  end
138
138
  end
@@ -220,9 +220,9 @@ verification to ensure they got all the calls they were expecting."
220
220
  end
221
221
  end
222
222
 
223
- **Multi-threading and Mocks**
223
+ ==== Multi-threading and Mocks
224
224
 
225
- Minitest mocks do not support multi-threading if it works, fine, if it doesn't
225
+ Minitest mocks do not support multi-threading. If it works, fine, if it doesn't
226
226
  you can use regular ruby patterns and facilities like local variables. Here's
227
227
  an example of asserting that code inside a thread is run:
228
228
 
@@ -294,6 +294,18 @@ 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
+ You can set up a rake task to run all your tests by adding this to your Rakefile:
298
+
299
+ require "rake/testtask"
300
+
301
+ Rake::TestTask.new(:test) do |t|
302
+ t.libs << "test"
303
+ t.libs << "lib"
304
+ t.test_files = FileList["test/**/test_*.rb"]
305
+ end
306
+
307
+ task :default => :test
308
+
297
309
  == Writing Extensions
298
310
 
299
311
  To define a plugin, add a file named minitest/XXX_plugin.rb to your
@@ -364,6 +376,42 @@ Using our example above, here is how we might implement MyCI:
364
376
 
365
377
  == FAQ
366
378
 
379
+ === What versions are compatible with what? Or what versions are supported?
380
+
381
+ Minitest is a dependency of rails, which until fairly recently had an
382
+ 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.
386
+
387
+ (As of 2021-01-31)
388
+
389
+ Current versions of rails: (https://endoflife.date/rails)
390
+
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?
397
+
398
+ Current versions of ruby: (https://endoflife.date/ruby)
399
+
400
+ | ruby | Status | EOL Date |
401
+ |------+---------+------------|
402
+ | 3.0 | Current | 2024-03-31 |
403
+ | 2.7 | Maint | 2023-03-31 |
404
+ | 2.6 | Maint | 2022-03-31 |
405
+ | 2.5 | Maint* | 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
+
367
415
  === How to test SimpleDelegates?
368
416
 
369
417
  The following implementation and test:
@@ -379,7 +427,7 @@ The following implementation and test:
379
427
  end
380
428
 
381
429
  it "must respond to work" do
382
- @worker.must_respond_to :work
430
+ _(@worker).must_respond_to :work
383
431
  end
384
432
  end
385
433
 
@@ -469,6 +517,8 @@ able to require minitest and run your tests.
469
517
 
470
518
  == Developing Minitest:
471
519
 
520
+ Minitest requires {Hoe}[https://rubygems.org/gems/hoe].
521
+
472
522
  === Minitest's own tests require UTF-8 external encoding.
473
523
 
474
524
  This is a common problem in Windows, where the default external Encoding is
@@ -547,6 +597,7 @@ minispec-metadata :: Metadata for describe/it blocks & CLI tag filter.
547
597
  E.g. <tt>it "requires JS driver", js: true do</tt> &
548
598
  <tt>ruby test.rb --tag js</tt> runs tests tagged :js.
549
599
  minispec-rails :: Minimal support to use Spec style in Rails 5+.
600
+ mini-apivore :: for swagger based automated API testing.
550
601
  minitest-around :: Around block for minitest. An alternative to
551
602
  setup/teardown dance.
552
603
  minitest-assert_errors :: Adds Minitest assertions to test for errors raised
@@ -589,6 +640,7 @@ minitest-firemock :: Makes your Minitest mocks more resilient.
589
640
  minitest-focus :: Focus on one test at a time.
590
641
  minitest-gcstats :: A minitest plugin that adds a report of the top
591
642
  tests by number of objects allocated.
643
+ minitest-global_expectations:: Support minitest expectation methods for all objects
592
644
  minitest-great_expectations :: Generally useful additions to minitest's
593
645
  assertions and expectations.
594
646
  minitest-growl :: Test notifier for minitest via growl.
@@ -615,6 +667,7 @@ minitest-matchers :: Adds support for RSpec-style matchers to
615
667
  minitest-matchers_vaccine :: Adds assertions that adhere to the matcher spec,
616
668
  but without any expectation infections.
617
669
  minitest-metadata :: Annotate tests with metadata (key-value).
670
+ minitest-mock_expectations :: Provides method call assertions for minitest.
618
671
  minitest-mongoid :: Mongoid assertion matchers for Minitest.
619
672
  minitest-must_not :: Provides must_not as an alias for wont in
620
673
  Minitest.
@@ -660,10 +713,12 @@ minitest-unordered :: Adds a new assertion to minitest for checking the
660
713
  contents of a collection, ignoring element order.
661
714
  minitest-vcr :: Automatic cassette managment with Minitest::Spec
662
715
  and VCR.
716
+ minitest_log :: Adds structured logging, data explication, and verdicts.
663
717
  minitest_owrapper :: Get tests results as a TestResult object.
664
718
  minitest_should :: Shoulda style syntax for minitest test::unit.
665
719
  minitest_tu_shim :: Bridges between test/unit and minitest.
666
720
  mongoid-minitest :: Minitest matchers for Mongoid.
721
+ mutant-minitest :: Minitest integration for mutant.
667
722
  pry-rescue :: A pry plugin w/ minitest support. See
668
723
  pry-rescue/minitest.rb.
669
724
  rspec2minitest :: Easily translate any RSpec matchers to Minitest
@@ -697,8 +752,7 @@ Authors... Please send me a pull request with a description of your minitest ext
697
752
 
698
753
  == REQUIREMENTS:
699
754
 
700
- * Ruby 1.8.7+. No magic is involved. I hope.
701
- * NOTE: 1.8 and 1.9 will be dropped in minitest 6+.
755
+ * Ruby 2.3+. No magic is involved. I hope.
702
756
 
703
757
  == INSTALL:
704
758
 
data/Rakefile CHANGED
@@ -11,21 +11,7 @@ Hoe.spec "minitest" do
11
11
 
12
12
  license "MIT"
13
13
 
14
- ## TODO: uncomment this on the last point release on 5.x
15
- #
16
- # self.post_install_message = <<-"EOM"
17
- # NOTE: minitest 5 will be the last in the minitest family to support
18
- # ruby 1.8 and 1.9 (and maybe 2.0?). If you need to keep using 1.8
19
- # or 1.9, you need to pin your dependency to minitest with
20
- # something like "~> 5.0".
21
- #
22
- # Further, minitest 6 will be dropping the following:
23
- #
24
- # + MiniTest (it's been Minitest for *years*)
25
- # + MiniTest::Unit
26
- # + MiniTest::Unit::TestCase
27
- # + assert_send (unless you argue for it well)
28
- # EOM
14
+ require_ruby_version [">= 2.2", "< 4.0"]
29
15
  end
30
16
 
31
17
  desc "Find missing expectations"
@@ -35,7 +21,7 @@ task :specs do
35
21
  require "minitest/spec"
36
22
 
37
23
  pos_prefix, neg_prefix = "must", "wont"
38
- skip_re = /^(must|wont)$|wont_(throw)|must_(block|not?_|nothing|raise$)/x
24
+ skip_re = /^(must|wont)$|wont_(throw)|must_(block|not?_|nothing|send|raise$)/x
39
25
  dont_flip_re = /(must|wont)_(include|respond_to)/
40
26
 
41
27
  map = {
@@ -46,6 +32,8 @@ task :specs do
46
32
  /_includes/ => "_include",
47
33
  /(must|wont)_(.*_of|nil|silent|empty)/ => '\1_be_\2',
48
34
  /must_raises/ => "must_raise",
35
+ /(must|wont)_predicate/ => '\1_be',
36
+ /(must|wont)_path_exists/ => 'path_\1_exist',
49
37
  }
50
38
 
51
39
  expectations = Minitest::Expectations.public_instance_methods.map(&:to_s)
@@ -27,20 +27,18 @@ module Minitest
27
27
  # figure out what diff to use.
28
28
 
29
29
  def self.diff
30
+ return @diff if defined? @diff
31
+
30
32
  @diff = if (RbConfig::CONFIG["host_os"] =~ /mswin|mingw/ &&
31
33
  system("diff.exe", __FILE__, __FILE__)) then
32
34
  "diff.exe -u"
33
- elsif Minitest::Test.maglev? then
34
- "diff -u"
35
35
  elsif system("gdiff", __FILE__, __FILE__)
36
36
  "gdiff -u" # solaris and kin suck
37
37
  elsif system("diff", __FILE__, __FILE__)
38
38
  "diff -u"
39
39
  else
40
40
  nil
41
- end unless defined? @diff
42
-
43
- @diff
41
+ end
44
42
  end
45
43
 
46
44
  ##
@@ -55,22 +53,16 @@ module Minitest
55
53
  # diff command or if it doesn't make sense to diff the output
56
54
  # (single line, short output), then it simply returns a basic
57
55
  # comparison between the two.
56
+ #
57
+ # See +things_to_diff+ for more info.
58
58
 
59
59
  def diff exp, act
60
- expect = mu_pp_for_diff exp
61
- butwas = mu_pp_for_diff act
62
60
  result = nil
63
61
 
64
- need_to_diff =
65
- (expect.include?("\n") ||
66
- butwas.include?("\n") ||
67
- expect.size > 30 ||
68
- butwas.size > 30 ||
69
- expect == butwas) &&
70
- Minitest::Assertions.diff
62
+ expect, butwas = things_to_diff(exp, act)
71
63
 
72
64
  return "Expected: #{mu_pp exp}\n Actual: #{mu_pp act}" unless
73
- need_to_diff
65
+ expect
74
66
 
75
67
  Tempfile.open("expect") do |a|
76
68
  a.puts expect
@@ -99,10 +91,40 @@ module Minitest
99
91
  result
100
92
  end
101
93
 
94
+ ##
95
+ # Returns things to diff [expect, butwas], or [nil, nil] if nothing to diff.
96
+ #
97
+ # Criterion:
98
+ #
99
+ # 1. Strings include newlines or escaped newlines, but not both.
100
+ # 2. or: String lengths are > 30 characters.
101
+ # 3. or: Strings are equal to each other (but maybe different encodings?).
102
+ # 4. and: we found a diff executable.
103
+
104
+ def things_to_diff exp, act
105
+ expect = mu_pp_for_diff exp
106
+ butwas = mu_pp_for_diff act
107
+
108
+ e1, e2 = expect.include?("\n"), expect.include?("\\n")
109
+ b1, b2 = butwas.include?("\n"), butwas.include?("\\n")
110
+
111
+ need_to_diff =
112
+ (e1 ^ e2 ||
113
+ b1 ^ b2 ||
114
+ expect.size > 30 ||
115
+ butwas.size > 30 ||
116
+ expect == butwas) &&
117
+ Minitest::Assertions.diff
118
+
119
+ need_to_diff && [expect, butwas]
120
+ end
121
+
102
122
  ##
103
123
  # This returns a human-readable version of +obj+. By default
104
- # #inspect is called. You can override this to use #pretty_print
124
+ # #inspect is called. You can override this to use #pretty_inspect
105
125
  # if you want.
126
+ #
127
+ # See Minitest::Test.make_my_diffs_pretty!
106
128
 
107
129
  def mu_pp obj
108
130
  s = obj.inspect
@@ -110,8 +132,11 @@ module Minitest
110
132
  if defined? Encoding then
111
133
  s = s.encode Encoding.default_external
112
134
 
113
- if String === obj && obj.encoding != Encoding.default_external then
114
- s = "# encoding: #{obj.encoding}\n#{s}"
135
+ if String === obj && (obj.encoding != Encoding.default_external ||
136
+ !obj.valid_encoding?) then
137
+ enc = "# encoding: #{obj.encoding}"
138
+ val = "# valid: #{obj.valid_encoding?}"
139
+ s = "#{enc}\n#{val}\n#{s}"
115
140
  end
116
141
  end
117
142
 
@@ -119,13 +144,32 @@ module Minitest
119
144
  end
120
145
 
121
146
  ##
122
- # This returns a diff-able human-readable version of +obj+. This
123
- # differs from the regular mu_pp because it expands escaped
124
- # newlines and makes hex-values generic (like object_ids). This
147
+ # This returns a diff-able more human-readable version of +obj+.
148
+ # This differs from the regular mu_pp because it expands escaped
149
+ # newlines and makes hex-values (like object_ids) generic. This
125
150
  # uses mu_pp to do the first pass and then cleans it up.
126
151
 
127
152
  def mu_pp_for_diff obj
128
- mu_pp(obj).gsub(/\\n/, "\n").gsub(/:0x[a-fA-F0-9]{4,}/m, ":0xXXXXXX")
153
+ str = mu_pp obj
154
+
155
+ # both '\n' & '\\n' (_after_ mu_pp (aka inspect))
156
+ single = !!str.match(/(?<!\\|^)\\n/)
157
+ double = !!str.match(/(?<=\\|^)\\n/)
158
+
159
+ process =
160
+ if single ^ double then
161
+ if single then
162
+ lambda { |s| s == "\\n" ? "\n" : s } # unescape
163
+ else
164
+ lambda { |s| s == "\\\\n" ? "\\n\n" : s } # unescape a bit, add nls
165
+ end
166
+ else
167
+ :itself # leave it alone
168
+ end
169
+
170
+ str.
171
+ gsub(/\\?\\n/, &process).
172
+ gsub(/:0x[a-fA-F0-9]{4,}/m, ":0xXXXXXX") # anonymize hex values
129
173
  end
130
174
 
131
175
  ##
@@ -283,6 +327,9 @@ module Minitest
283
327
  # See also: #assert_silent
284
328
 
285
329
  def assert_output stdout = nil, stderr = nil
330
+ flunk "assert_output requires a block to capture output." unless
331
+ block_given?
332
+
286
333
  out, err = capture_io do
287
334
  yield
288
335
  end
@@ -294,6 +341,18 @@ module Minitest
294
341
  x = send out_msg, stdout, out, "In stdout" if out_msg
295
342
 
296
343
  (!stdout || x) && (!stderr || y)
344
+ rescue Assertion
345
+ raise
346
+ rescue => e
347
+ raise UnexpectedError, e
348
+ end
349
+
350
+ ##
351
+ # Fails unless +path+ exists.
352
+
353
+ def assert_path_exists path, msg = nil
354
+ msg = message(msg) { "Expected path '#{path}' to exist" }
355
+ assert File.exist?(path), msg
297
356
  end
298
357
 
299
358
  ##
@@ -316,9 +375,26 @@ module Minitest
316
375
  #
317
376
  # +exp+ takes an optional message on the end to help explain
318
377
  # failures and defaults to StandardError if no exception class is
319
- # passed.
378
+ # passed. Eg:
379
+ #
380
+ # assert_raises(CustomError) { method_with_custom_error }
381
+ #
382
+ # With custom error message:
383
+ #
384
+ # assert_raises(CustomError, 'This should have raised CustomError') { method_with_custom_error }
385
+ #
386
+ # Using the returned object:
387
+ #
388
+ # error = assert_raises(CustomError) do
389
+ # raise CustomError, 'This is really bad'
390
+ # end
391
+ #
392
+ # assert_equal 'This is really bad', error.message
320
393
 
321
394
  def assert_raises *exp
395
+ flunk "assert_raises requires a block to capture errors." unless
396
+ block_given?
397
+
322
398
  msg = "#{exp.pop}.\n" if String === exp.last
323
399
  exp << StandardError if exp.empty?
324
400
 
@@ -327,7 +403,7 @@ module Minitest
327
403
  rescue *exp => e
328
404
  pass # count assertion
329
405
  return e
330
- rescue Minitest::Skip, Minitest::Assertion
406
+ rescue Minitest::Assertion # incl Skip & UnexpectedError
331
407
  # don't count assertion
332
408
  raise
333
409
  rescue SignalException, SystemExit
@@ -413,6 +489,10 @@ module Minitest
413
489
  end
414
490
 
415
491
  assert caught, message(msg) { default }
492
+ rescue Assertion
493
+ raise
494
+ rescue => e
495
+ raise UnexpectedError, e
416
496
  end
417
497
 
418
498
  ##
@@ -485,6 +565,11 @@ module Minitest
485
565
  captured_stderr.unlink
486
566
  $stdout.reopen orig_stdout
487
567
  $stderr.reopen orig_stderr
568
+
569
+ orig_stdout.close
570
+ orig_stderr.close
571
+ captured_stdout.close
572
+ captured_stderr.close
488
573
  end
489
574
  end
490
575
  end
@@ -504,7 +589,16 @@ module Minitest
504
589
  end
505
590
 
506
591
  ##
507
- # Fails with +msg+
592
+ # Fails after a given date (in the local time zone). This allows
593
+ # you to put time-bombs in your tests if you need to keep
594
+ # something around until a later date lest you forget about it.
595
+
596
+ def fail_after y,m,d,msg
597
+ flunk msg if Time.now > Time.local(y, m, d)
598
+ end
599
+
600
+ ##
601
+ # Fails with +msg+.
508
602
 
509
603
  def flunk msg = nil
510
604
  msg ||= "Epic Fail!"
@@ -534,7 +628,7 @@ module Minitest
534
628
 
535
629
  def refute test, msg = nil
536
630
  msg ||= message { "Expected #{mu_pp(test)} to not be truthy" }
537
- not assert !test, msg
631
+ assert !test, msg
538
632
  end
539
633
 
540
634
  ##
@@ -638,6 +732,14 @@ module Minitest
638
732
  refute o1.__send__(op, o2), msg
639
733
  end
640
734
 
735
+ ##
736
+ # Fails if +path+ exists.
737
+
738
+ def refute_path_exists path, msg = nil
739
+ msg = message(msg) { "Expected path '#{path}' to not exist" }
740
+ refute File.exist?(path), msg
741
+ end
742
+
641
743
  ##
642
744
  # For testing with predicates.
643
745
  #
@@ -683,6 +785,18 @@ module Minitest
683
785
  raise Minitest::Skip, msg, bt
684
786
  end
685
787
 
788
+ ##
789
+ # Skips the current run until a given date (in the local time
790
+ # zone). This allows you to put some fixes on hold until a later
791
+ # date, but still holds you accountable and prevents you from
792
+ # forgetting it.
793
+
794
+ def skip_until y,m,d,msg
795
+ skip msg if Time.now < Time.local(y, m, d)
796
+ where = caller.first.split(/:/, 3).first(2).join ":"
797
+ warn "Stale skip_until %p at %s" % [msg, where]
798
+ end
799
+
686
800
  ##
687
801
  # Was this testcase skipped? Meant for #teardown.
688
802
 
@@ -109,8 +109,8 @@ module Minitest
109
109
  # is applied against the slope itself. As such, you probably want
110
110
  # to tighten it from the default.
111
111
  #
112
- # See http://www.graphpad.com/curvefit/goodness_of_fit.htm for
113
- # more details.
112
+ # See https://www.graphpad.com/guides/prism/8/curve-fitting/reg_intepretingnonlinr2.htm
113
+ # for more details.
114
114
  #
115
115
  # Fit is calculated by #fit_linear.
116
116
  #