minitest 5.11.3 → 5.14.4

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: 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
  #