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 +4 -4
- checksums.yaml.gz.sig +0 -0
- data.tar.gz.sig +0 -0
- data/History.rdoc +37 -0
- data/Manifest.txt +1 -0
- data/README.rdoc +24 -7
- data/Rakefile +1 -15
- data/lib/minitest.rb +63 -9
- data/lib/minitest/assertions.rb +48 -15
- data/lib/minitest/benchmark.rb +2 -2
- data/lib/minitest/spec.rb +4 -0
- data/test/minitest/metametameta.rb +3 -0
- data/test/minitest/test_minitest_assertions.rb +1389 -0
- data/test/minitest/test_minitest_mock.rb +2 -2
- data/test/minitest/test_minitest_spec.rb +164 -130
- data/test/minitest/test_minitest_test.rb +0 -1087
- metadata +25 -19
- metadata.gz.sig +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b2641be64df14346ec6637e9fa14064f8f52935d4f3c67acf11bc4e2d3b95986
|
4
|
+
data.tar.gz: 9c9c1be3371b73c68ebfda92173d5c468d584e0cd4e405329453027397a651f7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e04d9e566ec0d8175bb18cee72a44bee41f363fa4dea11d8b14e6373ae4ef489d3ee01fd8308cb9ba7b710d75e25d13650cd452a61017e151ce7616bebb6bd93
|
7
|
+
data.tar.gz: 3d324b4e1c1fc3ba294fd6806a3069df391a950b1594b27110accc0d0afe069d1b9555760555372bb597f0f6e99afbe9cc71bd2a049d1a74f7e9f385f4bc7322
|
checksums.yaml.gz.sig
CHANGED
Binary file
|
data.tar.gz.sig
CHANGED
Binary file
|
data/History.rdoc
CHANGED
@@ -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:
|
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
|
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
|
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
|
-
|
223
|
+
==== Multi-threading and Mocks
|
224
224
|
|
225
|
-
Minitest mocks do not support multi-threading
|
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
|
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
|
-
|
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"
|
data/lib/minitest.rb
CHANGED
@@ -8,7 +8,7 @@ require "stringio"
|
|
8
8
|
# :include: README.rdoc
|
9
9
|
|
10
10
|
module Minitest
|
11
|
-
VERSION = "5.
|
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
|
-
|
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.
|
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
|
-
#
|
564
|
-
# result
|
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
|
-
|
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
|
-
|
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
|
|
data/lib/minitest/assertions.rb
CHANGED
@@ -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
|
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
|
-
(
|
66
|
-
|
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 #
|
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
|
114
|
-
|
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+.
|
123
|
-
# differs from the regular mu_pp because it expands escaped
|
124
|
-
# newlines and makes hex-values
|
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
|
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
|
|
data/lib/minitest/benchmark.rb
CHANGED
@@ -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
|
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
|
#
|