minitest 5.11.3 → 5.12.2

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