minitest 5.11.0 → 5.12.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- checksums.yaml.gz.sig +0 -0
- data.tar.gz.sig +0 -0
- data/History.rdoc +54 -0
- data/Manifest.txt +1 -0
- data/README.rdoc +24 -7
- data/Rakefile +1 -15
- data/lib/minitest.rb +118 -52
- data/lib/minitest/assertions.rb +48 -15
- data/lib/minitest/benchmark.rb +2 -2
- data/lib/minitest/parallel.rb +1 -1
- data/lib/minitest/spec.rb +4 -0
- data/lib/minitest/test.rb +6 -1
- 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_reporter.rb +3 -3
- data/test/minitest/test_minitest_spec.rb +167 -131
- data/test/minitest/test_minitest_test.rb +13 -1093
- metadata +25 -19
- metadata.gz.sig +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: f45ca8b284609e6c73accd4bd7d71144ecb79433ee5039246e2ed83abc87bafe
|
4
|
+
data.tar.gz: 0f67c6fbd863252ed2421d4c15b018a009d3f53a798c4c882d0135780fda239b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d7d542986e130f4f3288453677aee162e749f94ee26bfec890822d2619908ee983e15990107659c8abfdbb8ec323a318c4d4da8e16d19fb44238db60ded410a7
|
7
|
+
data.tar.gz: 28ec3b0bf85fd91947a19bcfb02c7c09fdb1b2976f139f320c66fc74a04e8316dd1dbb1f75c47206bedb63ad5f0a77da048ef09ff0377c5aca533fd3164ddb14
|
checksums.yaml.gz.sig
CHANGED
Binary file
|
data.tar.gz.sig
CHANGED
Binary file
|
data/History.rdoc
CHANGED
@@ -1,3 +1,57 @@
|
|
1
|
+
=== 5.12.1 / 2019-09-28
|
2
|
+
|
3
|
+
* 1 minor enhancement:
|
4
|
+
|
5
|
+
* Added documentation for Reporter classes. (sshaw)
|
6
|
+
|
7
|
+
* 3 bug fixes:
|
8
|
+
|
9
|
+
* Avoid using 'match?' to support older ruby versions. (y-yagi)
|
10
|
+
* Fixed broken link to reference on goodness-of-fit testing. (havenwood)
|
11
|
+
* Update requirements in readme and Rakefile/hoe spec.
|
12
|
+
|
13
|
+
=== 5.12.0 / 2019-09-22
|
14
|
+
|
15
|
+
* 8 minor enhancements:
|
16
|
+
|
17
|
+
* Added a descriptive error if assert_output or assert_raises called without a block. (okuramasafumi)
|
18
|
+
* Changed mu_pp_for_diff to make having both \n and \\n easier to debug.
|
19
|
+
* Deprecated $N for specifying number of parallel test runners. Use MT_CPU.
|
20
|
+
* Deprecated use of global expectations. To be removed from MT6.
|
21
|
+
* Extended Assertions#mu_pp to encoding validity output for strings to improve diffs.
|
22
|
+
* Extended Assertions#mu_pp to output encoding and validity if invalid to improve diffs.
|
23
|
+
* Extended Assertions#mu_pp_for_diff to make escaped newlines more obvious in diffs.
|
24
|
+
* Fail gracefully when expectation used outside of `it`.
|
25
|
+
|
26
|
+
* 3 bug fixes:
|
27
|
+
|
28
|
+
* Check `option[:filter]` klass before match. Fixes 2.6 warning. (y-yagi)
|
29
|
+
* Fixed Assertions#diff from recalculating if set to nil
|
30
|
+
* Fixed spec section of readme to not use deprecated global expectations. (CheezItMan)
|
31
|
+
|
32
|
+
=== 5.11.3 / 2018-01-26
|
33
|
+
|
34
|
+
* 1 bug fix:
|
35
|
+
|
36
|
+
* Pushed #error? up to Reportable module. (composerinteralia)
|
37
|
+
|
38
|
+
=== 5.11.2 / 2018-01-25
|
39
|
+
|
40
|
+
* 1 minor enhancement:
|
41
|
+
|
42
|
+
* Reversed Test < Result. Back to < Runnable and using Reportable for shared code.
|
43
|
+
|
44
|
+
* 2 bug fixes:
|
45
|
+
|
46
|
+
* Fixed Result#location for instances of Test. (alexisbernard)
|
47
|
+
* Fixed deprecation message for Runnable#marshal_dump. (y-yagi)
|
48
|
+
|
49
|
+
=== 5.11.1 / 2018-01-02
|
50
|
+
|
51
|
+
* 1 bug fix:
|
52
|
+
|
53
|
+
* Fixed Result (a superclass of Test) overriding Runnable's name accessors. (y-yagi, MSP-Greg)
|
54
|
+
|
1
55
|
=== 5.11.0 / 2018-01-01
|
2
56
|
|
3
57
|
* 2 major enhancements:
|
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.3"
|
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.1" # :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}"
|
@@ -381,7 +384,7 @@ module Minitest
|
|
381
384
|
|
382
385
|
def marshal_dump # :nodoc:
|
383
386
|
unless @@marshal_dump_warned then
|
384
|
-
warn ["Minitest::
|
387
|
+
warn ["Minitest::Runnable#marshal_dump is deprecated.",
|
385
388
|
"You might be violating internals. From", caller.first].join " "
|
386
389
|
@@marshal_dump_warned = true
|
387
390
|
end
|
@@ -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"
|
@@ -436,6 +440,56 @@ module Minitest
|
|
436
440
|
end
|
437
441
|
end
|
438
442
|
|
443
|
+
##
|
444
|
+
# Shared code for anything that can get passed to a Reporter. See
|
445
|
+
# Minitest::Test & Minitest::Result.
|
446
|
+
|
447
|
+
module Reportable
|
448
|
+
##
|
449
|
+
# Did this run pass?
|
450
|
+
#
|
451
|
+
# Note: skipped runs are not considered passing, but they don't
|
452
|
+
# cause the process to exit non-zero.
|
453
|
+
|
454
|
+
def passed?
|
455
|
+
not self.failure
|
456
|
+
end
|
457
|
+
|
458
|
+
##
|
459
|
+
# The location identifier of this test. Depends on a method
|
460
|
+
# existing called class_name.
|
461
|
+
|
462
|
+
def location
|
463
|
+
loc = " [#{self.failure.location}]" unless passed? or error?
|
464
|
+
"#{self.class_name}##{self.name}#{loc}"
|
465
|
+
end
|
466
|
+
|
467
|
+
def class_name # :nodoc:
|
468
|
+
raise NotImplementedError, "subclass responsibility"
|
469
|
+
end
|
470
|
+
|
471
|
+
##
|
472
|
+
# Returns ".", "F", or "E" based on the result of the run.
|
473
|
+
|
474
|
+
def result_code
|
475
|
+
self.failure and self.failure.result_code or "."
|
476
|
+
end
|
477
|
+
|
478
|
+
##
|
479
|
+
# Was this run skipped?
|
480
|
+
|
481
|
+
def skipped?
|
482
|
+
self.failure and Skip === self.failure
|
483
|
+
end
|
484
|
+
|
485
|
+
##
|
486
|
+
# Did this run error?
|
487
|
+
|
488
|
+
def error?
|
489
|
+
self.failures.any? { |f| UnexpectedError === f }
|
490
|
+
end
|
491
|
+
end
|
492
|
+
|
439
493
|
##
|
440
494
|
# This represents a test result in a clean way that can be
|
441
495
|
# marshalled over a wire. Tests can do anything they want to the
|
@@ -444,6 +498,8 @@ module Minitest
|
|
444
498
|
# that the test result can be marshalled.
|
445
499
|
|
446
500
|
class Result < Runnable
|
501
|
+
include Minitest::Reportable
|
502
|
+
|
447
503
|
undef_method :marshal_dump
|
448
504
|
undef_method :marshal_load
|
449
505
|
|
@@ -452,11 +508,6 @@ module Minitest
|
|
452
508
|
|
453
509
|
attr_accessor :klass
|
454
510
|
|
455
|
-
##
|
456
|
-
# The test name of the test result.
|
457
|
-
|
458
|
-
attr_accessor :name
|
459
|
-
|
460
511
|
##
|
461
512
|
# The location of the test method.
|
462
513
|
|
@@ -479,43 +530,8 @@ module Minitest
|
|
479
530
|
r
|
480
531
|
end
|
481
532
|
|
482
|
-
|
483
|
-
|
484
|
-
|
485
|
-
def error?
|
486
|
-
self.failures.any? { |f| UnexpectedError === f }
|
487
|
-
end
|
488
|
-
|
489
|
-
##
|
490
|
-
# The location identifier of this test.
|
491
|
-
|
492
|
-
def location
|
493
|
-
loc = " [#{self.failure.location}]" unless passed? or error?
|
494
|
-
"#{self.klass}##{self.name}#{loc}"
|
495
|
-
end
|
496
|
-
|
497
|
-
##
|
498
|
-
# Did this run pass?
|
499
|
-
#
|
500
|
-
# Note: skipped runs are not considered passing, but they don't
|
501
|
-
# cause the process to exit non-zero.
|
502
|
-
|
503
|
-
def passed?
|
504
|
-
not self.failure
|
505
|
-
end
|
506
|
-
|
507
|
-
##
|
508
|
-
# Returns ".", "F", or "E" based on the result of the run.
|
509
|
-
|
510
|
-
def result_code
|
511
|
-
self.failure and self.failure.result_code or "."
|
512
|
-
end
|
513
|
-
|
514
|
-
##
|
515
|
-
# Was this run skipped?
|
516
|
-
|
517
|
-
def skipped?
|
518
|
-
self.failure and Skip === self.failure
|
533
|
+
def class_name # :nodoc:
|
534
|
+
self.klass # for Minitest::Reportable
|
519
535
|
end
|
520
536
|
|
521
537
|
def to_s # :nodoc:
|
@@ -548,8 +564,10 @@ module Minitest
|
|
548
564
|
end
|
549
565
|
|
550
566
|
##
|
551
|
-
#
|
552
|
-
# 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.
|
553
571
|
|
554
572
|
def record result
|
555
573
|
end
|
@@ -616,18 +634,63 @@ module Minitest
|
|
616
634
|
#
|
617
635
|
# If you want to create an entirely different type of output (eg,
|
618
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
|
619
650
|
|
620
651
|
class StatisticsReporter < Reporter
|
621
|
-
|
652
|
+
##
|
653
|
+
# Total number of assertions.
|
654
|
+
|
622
655
|
attr_accessor :assertions
|
656
|
+
|
657
|
+
##
|
658
|
+
# Total number of test cases.
|
659
|
+
|
623
660
|
attr_accessor :count
|
661
|
+
|
662
|
+
##
|
663
|
+
# An +Array+ of test cases that failed or were skipped.
|
664
|
+
|
624
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
|
+
|
625
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
|
+
|
626
678
|
attr_accessor :total_time
|
679
|
+
|
680
|
+
##
|
681
|
+
# Total number of tests that failed.
|
682
|
+
|
627
683
|
attr_accessor :failures
|
684
|
+
|
685
|
+
##
|
686
|
+
# Total number of tests that erred.
|
687
|
+
|
628
688
|
attr_accessor :errors
|
689
|
+
|
690
|
+
##
|
691
|
+
# Total number of tests that where skipped.
|
692
|
+
|
629
693
|
attr_accessor :skips
|
630
|
-
# :startdoc:
|
631
694
|
|
632
695
|
def initialize io = $stdout, options = {} # :nodoc:
|
633
696
|
super
|
@@ -657,7 +720,10 @@ module Minitest
|
|
657
720
|
results << result if not result.passed? or result.skipped?
|
658
721
|
end
|
659
722
|
|
660
|
-
|
723
|
+
##
|
724
|
+
# Report on the tracked statistics.
|
725
|
+
|
726
|
+
def report
|
661
727
|
aggregate = results.group_by { |r| r.failure.class }
|
662
728
|
aggregate.default = [] # dumb. group_by should provide this
|
663
729
|
|