minitest 5.11.3 → 5.12.2

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: b2641be64df14346ec6637e9fa14064f8f52935d4f3c67acf11bc4e2d3b95986
4
+ data.tar.gz: 9c9c1be3371b73c68ebfda92173d5c468d584e0cd4e405329453027397a651f7
5
5
  SHA512:
6
- metadata.gz: 3621855d2763f225b2b99061c9eed994040debd9b1b032ebb3318adc42413493458b5c47569b7305954fc7575e870ad97441ce8bec7ddadb92afdd126f1f4bda
7
- data.tar.gz: 19e04c6feff4f3d0cda89fadf4bd3f28415301d8adb2e5650a064cb74df57d8ee9885175738ac967d7a839496ac1c0f1c690627e8a2ca83f71edd6b0edb5b811
6
+ metadata.gz: e04d9e566ec0d8175bb18cee72a44bee41f363fa4dea11d8b14e6373ae4ef489d3ee01fd8308cb9ba7b710d75e25d13650cd452a61017e151ce7616bebb6bd93
7
+ data.tar.gz: 3d324b4e1c1fc3ba294fd6806a3069df391a950b1594b27110accc0d0afe069d1b9555760555372bb597f0f6e99afbe9cc71bd2a049d1a74f7e9f385f4bc7322
Binary file
data.tar.gz.sig CHANGED
Binary file
@@ -1,3 +1,40 @@
1
+ === 5.12.2 / 2019-09-28
2
+
3
+ * 1 bug fix:
4
+
5
+ * After chatting w/ @y-yagi and others, decided to lower support to include ruby 2.2.
6
+
7
+ === 5.12.1 / 2019-09-28
8
+
9
+ * 1 minor enhancement:
10
+
11
+ * Added documentation for Reporter classes. (sshaw)
12
+
13
+ * 3 bug fixes:
14
+
15
+ * Avoid using 'match?' to support older ruby versions. (y-yagi)
16
+ * Fixed broken link to reference on goodness-of-fit testing. (havenwood)
17
+ * Update requirements in readme and Rakefile/hoe spec.
18
+
19
+ === 5.12.0 / 2019-09-22
20
+
21
+ * 8 minor enhancements:
22
+
23
+ * Added a descriptive error if assert_output or assert_raises called without a block. (okuramasafumi)
24
+ * Changed mu_pp_for_diff to make having both \n and \\n easier to debug.
25
+ * Deprecated $N for specifying number of parallel test runners. Use MT_CPU.
26
+ * Deprecated use of global expectations. To be removed from MT6.
27
+ * Extended Assertions#mu_pp to encoding validity output for strings to improve diffs.
28
+ * Extended Assertions#mu_pp to output encoding and validity if invalid to improve diffs.
29
+ * Extended Assertions#mu_pp_for_diff to make escaped newlines more obvious in diffs.
30
+ * Fail gracefully when expectation used outside of `it`.
31
+
32
+ * 3 bug fixes:
33
+
34
+ * Check `option[:filter]` klass before match. Fixes 2.6 warning. (y-yagi)
35
+ * Fixed Assertions#diff from recalculating if set to nil
36
+ * Fixed spec section of readme to not use deprecated global expectations. (CheezItMan)
37
+
1
38
  === 5.11.3 / 2018-01-26
2
39
 
3
40
  * 1 bug fix:
@@ -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
@@ -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
@@ -379,7 +391,7 @@ The following implementation and test:
379
391
  end
380
392
 
381
393
  it "must respond to work" do
382
- @worker.must_respond_to :work
394
+ _(@worker).must_respond_to :work
383
395
  end
384
396
  end
385
397
 
@@ -469,6 +481,8 @@ able to require minitest and run your tests.
469
481
 
470
482
  == Developing Minitest:
471
483
 
484
+ Minitest requires {Hoe}[https://rubygems.org/gems/hoe].
485
+
472
486
  === Minitest's own tests require UTF-8 external encoding.
473
487
 
474
488
  This is a common problem in Windows, where the default external Encoding is
@@ -547,6 +561,7 @@ minispec-metadata :: Metadata for describe/it blocks & CLI tag filter.
547
561
  E.g. <tt>it "requires JS driver", js: true do</tt> &
548
562
  <tt>ruby test.rb --tag js</tt> runs tests tagged :js.
549
563
  minispec-rails :: Minimal support to use Spec style in Rails 5+.
564
+ mini-apivore :: for swagger based automated API testing.
550
565
  minitest-around :: Around block for minitest. An alternative to
551
566
  setup/teardown dance.
552
567
  minitest-assert_errors :: Adds Minitest assertions to test for errors raised
@@ -589,6 +604,7 @@ minitest-firemock :: Makes your Minitest mocks more resilient.
589
604
  minitest-focus :: Focus on one test at a time.
590
605
  minitest-gcstats :: A minitest plugin that adds a report of the top
591
606
  tests by number of objects allocated.
607
+ minitest-global_expectations:: Support minitest expectation methods for all objects
592
608
  minitest-great_expectations :: Generally useful additions to minitest's
593
609
  assertions and expectations.
594
610
  minitest-growl :: Test notifier for minitest via growl.
@@ -615,6 +631,7 @@ minitest-matchers :: Adds support for RSpec-style matchers to
615
631
  minitest-matchers_vaccine :: Adds assertions that adhere to the matcher spec,
616
632
  but without any expectation infections.
617
633
  minitest-metadata :: Annotate tests with metadata (key-value).
634
+ minitest-mock_expectations :: Provides method call assertions for minitest.
618
635
  minitest-mongoid :: Mongoid assertion matchers for Minitest.
619
636
  minitest-must_not :: Provides must_not as an alias for wont in
620
637
  Minitest.
@@ -664,6 +681,7 @@ minitest_owrapper :: Get tests results as a TestResult object.
664
681
  minitest_should :: Shoulda style syntax for minitest test::unit.
665
682
  minitest_tu_shim :: Bridges between test/unit and minitest.
666
683
  mongoid-minitest :: Minitest matchers for Mongoid.
684
+ mutant-minitest :: Minitest integration for mutant.
667
685
  pry-rescue :: A pry plugin w/ minitest support. See
668
686
  pry-rescue/minitest.rb.
669
687
  rspec2minitest :: Easily translate any RSpec matchers to Minitest
@@ -697,8 +715,7 @@ Authors... Please send me a pull request with a description of your minitest ext
697
715
 
698
716
  == REQUIREMENTS:
699
717
 
700
- * Ruby 1.8.7+. No magic is involved. I hope.
701
- * NOTE: 1.8 and 1.9 will be dropped in minitest 6+.
718
+ * Ruby 2.3+. No magic is involved. I hope.
702
719
 
703
720
  == INSTALL:
704
721
 
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"
29
15
  end
30
16
 
31
17
  desc "Find missing expectations"
@@ -8,7 +8,7 @@ require "stringio"
8
8
  # :include: README.rdoc
9
9
 
10
10
  module Minitest
11
- VERSION = "5.11.3" # :nodoc:
11
+ VERSION = "5.12.2" # :nodoc:
12
12
  ENCS = "".respond_to? :encoding # :nodoc:
13
13
 
14
14
  @@installed_at_exit ||= false
@@ -21,7 +21,10 @@ module Minitest
21
21
  # Parallel test executor
22
22
 
23
23
  mc.send :attr_accessor, :parallel_executor
24
- self.parallel_executor = Parallel::Executor.new((ENV["N"] || 2).to_i)
24
+
25
+ warn "DEPRECATED: use MT_CPU instead of N for parallel test runs" if ENV["N"]
26
+ n_threads = (ENV["MT_CPU"] || ENV["N"] || 2).to_i
27
+ self.parallel_executor = Parallel::Executor.new n_threads
25
28
 
26
29
  ##
27
30
  # Filter object for backtraces.
@@ -301,7 +304,7 @@ module Minitest
301
304
 
302
305
  def self.run reporter, options = {}
303
306
  filter = options[:filter] || "/./"
304
- filter = Regexp.new $1 if filter =~ %r%/(.*)/%
307
+ filter = Regexp.new $1 if filter.is_a?(String) && filter =~ %r%/(.*)/%
305
308
 
306
309
  filtered_methods = self.runnable_methods.find_all { |m|
307
310
  filter === m || filter === "#{self}##{m}"
@@ -422,7 +425,8 @@ module Minitest
422
425
 
423
426
  ##
424
427
  # Returns a single character string to print based on the result
425
- # of the run. Eg ".", "F", or "E".
428
+ # of the run. One of <tt>"."</tt>, <tt>"F"</tt>,
429
+ # <tt>"E"</tt> or <tt>"S"</tt>.
426
430
 
427
431
  def result_code
428
432
  raise NotImplementedError, "subclass responsibility"
@@ -560,8 +564,10 @@ module Minitest
560
564
  end
561
565
 
562
566
  ##
563
- # Record a result and output the Runnable#result_code. Stores the
564
- # result of the run if the run did not pass.
567
+ # Output and record the result of the test. Call
568
+ # {result#result_code}[rdoc-ref:Runnable#result_code] to get the
569
+ # result character string. Stores the result of the run if the run
570
+ # did not pass.
565
571
 
566
572
  def record result
567
573
  end
@@ -628,18 +634,63 @@ module Minitest
628
634
  #
629
635
  # If you want to create an entirely different type of output (eg,
630
636
  # CI, HTML, etc), this is the place to start.
637
+ #
638
+ # Example:
639
+ #
640
+ # class JenkinsCIReporter < StatisticsReporter
641
+ # def report
642
+ # super # Needed to calculate some statistics
643
+ #
644
+ # print "<testsuite "
645
+ # print "tests='#{count}' "
646
+ # print "failures='#{failures}' "
647
+ # # Remaining XML...
648
+ # end
649
+ # end
631
650
 
632
651
  class StatisticsReporter < Reporter
633
- # :stopdoc:
652
+ ##
653
+ # Total number of assertions.
654
+
634
655
  attr_accessor :assertions
656
+
657
+ ##
658
+ # Total number of test cases.
659
+
635
660
  attr_accessor :count
661
+
662
+ ##
663
+ # An +Array+ of test cases that failed or were skipped.
664
+
636
665
  attr_accessor :results
666
+
667
+ ##
668
+ # Time the test run started. If available, the monotonic clock is
669
+ # used and this is a +Float+, otherwise it's an instance of
670
+ # +Time+.
671
+
637
672
  attr_accessor :start_time
673
+
674
+ ##
675
+ # Test run time. If available, the monotonic clock is used and
676
+ # this is a +Float+, otherwise it's an instance of +Time+.
677
+
638
678
  attr_accessor :total_time
679
+
680
+ ##
681
+ # Total number of tests that failed.
682
+
639
683
  attr_accessor :failures
684
+
685
+ ##
686
+ # Total number of tests that erred.
687
+
640
688
  attr_accessor :errors
689
+
690
+ ##
691
+ # Total number of tests that where skipped.
692
+
641
693
  attr_accessor :skips
642
- # :startdoc:
643
694
 
644
695
  def initialize io = $stdout, options = {} # :nodoc:
645
696
  super
@@ -669,7 +720,10 @@ module Minitest
669
720
  results << result if not result.passed? or result.skipped?
670
721
  end
671
722
 
672
- def report # :nodoc:
723
+ ##
724
+ # Report on the tracked statistics.
725
+
726
+ def report
673
727
  aggregate = results.group_by { |r| r.failure.class }
674
728
  aggregate.default = [] # dumb. group_by should provide this
675
729
 
@@ -27,6 +27,8 @@ 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"
@@ -38,9 +40,7 @@ module Minitest
38
40
  "diff -u"
39
41
  else
40
42
  nil
41
- end unless defined? @diff
42
-
43
- @diff
43
+ end
44
44
  end
45
45
 
46
46
  ##
@@ -61,12 +61,15 @@ module Minitest
61
61
  butwas = mu_pp_for_diff act
62
62
  result = nil
63
63
 
64
+ e1, e2 = expect.include?("\n"), expect.include?("\\n")
65
+ b1, b2 = butwas.include?("\n"), butwas.include?("\\n")
66
+
64
67
  need_to_diff =
65
- (expect.include?("\n") ||
66
- butwas.include?("\n") ||
67
- expect.size > 30 ||
68
- butwas.size > 30 ||
69
- expect == butwas) &&
68
+ (e1 ^ e2 ||
69
+ b1 ^ b2 ||
70
+ expect.size > 30 ||
71
+ butwas.size > 30 ||
72
+ expect == butwas) &&
70
73
  Minitest::Assertions.diff
71
74
 
72
75
  return "Expected: #{mu_pp exp}\n Actual: #{mu_pp act}" unless
@@ -101,8 +104,10 @@ module Minitest
101
104
 
102
105
  ##
103
106
  # This returns a human-readable version of +obj+. By default
104
- # #inspect is called. You can override this to use #pretty_print
107
+ # #inspect is called. You can override this to use #pretty_inspect
105
108
  # if you want.
109
+ #
110
+ # See Minitest::Test.make_my_diffs_pretty!
106
111
 
107
112
  def mu_pp obj
108
113
  s = obj.inspect
@@ -110,8 +115,11 @@ module Minitest
110
115
  if defined? Encoding then
111
116
  s = s.encode Encoding.default_external
112
117
 
113
- if String === obj && obj.encoding != Encoding.default_external then
114
- s = "# encoding: #{obj.encoding}\n#{s}"
118
+ if String === obj && (obj.encoding != Encoding.default_external ||
119
+ !obj.valid_encoding?) then
120
+ enc = "# encoding: #{obj.encoding}"
121
+ val = "# valid: #{obj.valid_encoding?}"
122
+ s = "#{enc}\n#{val}\n#{s}"
115
123
  end
116
124
  end
117
125
 
@@ -119,13 +127,32 @@ module Minitest
119
127
  end
120
128
 
121
129
  ##
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
130
+ # This returns a diff-able more human-readable version of +obj+.
131
+ # This differs from the regular mu_pp because it expands escaped
132
+ # newlines and makes hex-values (like object_ids) generic. This
125
133
  # uses mu_pp to do the first pass and then cleans it up.
126
134
 
127
135
  def mu_pp_for_diff obj
128
- mu_pp(obj).gsub(/\\n/, "\n").gsub(/:0x[a-fA-F0-9]{4,}/m, ":0xXXXXXX")
136
+ str = mu_pp obj
137
+
138
+ # both '\n' & '\\n' (_after_ mu_pp (aka inspect))
139
+ single = !!str.match(/(?<!\\|^)\\n/)
140
+ double = !!str.match(/(?<=\\|^)\\n/)
141
+
142
+ process =
143
+ if single ^ double then
144
+ if single then
145
+ lambda { |s| s == "\\n" ? "\n" : s } # unescape
146
+ else
147
+ lambda { |s| s == "\\\\n" ? "\\n\n" : s } # unescape a bit, add nls
148
+ end
149
+ else
150
+ :itself # leave it alone
151
+ end
152
+
153
+ str.
154
+ gsub(/\\?\\n/, &process).
155
+ gsub(/:0x[a-fA-F0-9]{4,}/m, ":0xXXXXXX") # anonymize hex values
129
156
  end
130
157
 
131
158
  ##
@@ -283,6 +310,9 @@ module Minitest
283
310
  # See also: #assert_silent
284
311
 
285
312
  def assert_output stdout = nil, stderr = nil
313
+ flunk "assert_output requires a block to capture output." unless
314
+ block_given?
315
+
286
316
  out, err = capture_io do
287
317
  yield
288
318
  end
@@ -319,6 +349,9 @@ module Minitest
319
349
  # passed.
320
350
 
321
351
  def assert_raises *exp
352
+ flunk "assert_raises requires a block to capture errors." unless
353
+ block_given?
354
+
322
355
  msg = "#{exp.pop}.\n" if String === exp.last
323
356
  exp << StandardError if exp.empty?
324
357
 
@@ -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
  #