spec 5.0.19 → 5.3.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/History.txt +106 -0
- data/Manifest.txt +1 -1
- data/README.txt +83 -37
- data/Rakefile +3 -56
- data/lib/minitest.rb +58 -156
- data/lib/minitest/assertions.rb +13 -1
- data/lib/minitest/benchmark.rb +3 -3
- data/lib/minitest/hell.rb +1 -1
- data/lib/minitest/mock.rb +2 -2
- data/lib/minitest/parallel.rb +40 -0
- data/lib/minitest/pride_plugin.rb +1 -2
- data/lib/minitest/spec.rb +23 -22
- data/lib/minitest/test.rb +19 -8
- data/lib/spec.rb +156 -2
- data/readme.md +1 -1
- data/spec.gemspec +2 -2
- data/test/manual/simple.rb +10 -15
- data/test/minitest/metametameta.rb +4 -2
- data/test/minitest/test_minitest_benchmark.rb +7 -1
- data/test/minitest/test_minitest_mock.rb +12 -2
- data/test/minitest/test_minitest_reporter.rb +0 -1
- data/test/minitest/test_minitest_spec.rb +41 -4
- data/test/minitest/test_minitest_unit.rb +38 -20
- metadata +15 -37
- data/lib/minitest/parallel_each.rb +0 -120
- data/release_notes.md +0 -80
- data/test/manual/after_run.rb +0 -17
- data/test/manual/appium.rb +0 -14
- data/test/manual/appium_after_last.rb +0 -24
- data/test/manual/appium_before_first.rb +0 -23
- data/test/manual/assert.rb +0 -61
- data/test/manual/before_first_0.rb +0 -27
- data/test/manual/before_first_1.rb +0 -29
- data/test/manual/ctrl_c.rb +0 -11
- data/test/manual/debug.rb +0 -37
- data/test/manual/do_end.rb +0 -31
- data/test/manual/raise.rb +0 -61
- data/test/manual/run2.rb +0 -74
- data/test/manual/run3.rb +0 -91
- data/test/manual/setup.rb +0 -13
- data/test/manual/simple2.rb +0 -20
- data/test/manual/skip.rb +0 -15
- data/test/manual/t.rb +0 -11
- data/test/manual/trace.rb +0 -19
- data/test/manual/trace2.rb +0 -15
- data/test/minitest/test_helper.rb +0 -20
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1862a5647d9edb8c300deb03b6bf21cb4d8d85e1
|
4
|
+
data.tar.gz: 8184a4a78143f820d7132ea83f9d0186e332030f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6563324e7b8f500574e347eb5e8abb9a61a08d80d5b986435848af1a3792cd63344d503c6c63ad591433f1d3d478e9be6ca53514199b13b36a3022697677d3e3
|
7
|
+
data.tar.gz: 2389dde6619ec0fd846ba0fe8e17e0f905e7d4be40b6f4f5198e06187b766f613727375aff3839a12472077b9524adf8fad708afd0a24a2a971f07966b396562
|
data/History.txt
CHANGED
@@ -1,3 +1,87 @@
|
|
1
|
+
=== 5.3.3 / 2014-04-14
|
2
|
+
|
3
|
+
* 1 bug fix:
|
4
|
+
|
5
|
+
* Fixed using expectations w/ DSL in Test class w/o describe. (blowmage+others)
|
6
|
+
|
7
|
+
=== 5.3.2 / 2014-04-02
|
8
|
+
|
9
|
+
* 1 bug fix:
|
10
|
+
|
11
|
+
* Fixed doco on Assertions.assertions. (xaviershay)
|
12
|
+
|
13
|
+
=== 5.3.1 / 2014-03-14
|
14
|
+
|
15
|
+
* 1 minor enhancement:
|
16
|
+
|
17
|
+
* Modified verbage on bad 'let' names to be more helpful. (Archytaus)
|
18
|
+
|
19
|
+
* 1 bug fix:
|
20
|
+
|
21
|
+
* Fixed 2 cases still using MiniTest. (mikesea)
|
22
|
+
|
23
|
+
=== 5.3.0 / 2014-02-25
|
24
|
+
|
25
|
+
* 1 minor enhancement:
|
26
|
+
|
27
|
+
* Mocked methods can take a block to verify state. Seattle.rb 12 bday present from ernie! Thanks!!
|
28
|
+
|
29
|
+
=== 5.2.3 / 2014-02-10
|
30
|
+
|
31
|
+
* 1 bug fix:
|
32
|
+
|
33
|
+
* Fixed Spec#let check to allow overriding of other lets. (mvz)
|
34
|
+
|
35
|
+
=== 5.2.2 / 2014-01-22
|
36
|
+
|
37
|
+
* 1 minor enhancement:
|
38
|
+
|
39
|
+
* Spec#let raises ArgumentError if you override _any_ instance method (except subject). (rynr)
|
40
|
+
|
41
|
+
* 1 bug fix:
|
42
|
+
|
43
|
+
* Fixed up benchmark spec doco and added a test to demonstrate. (bhenderson)
|
44
|
+
|
45
|
+
=== 5.2.1 / 2014-01-07
|
46
|
+
|
47
|
+
* 1 bug fix:
|
48
|
+
|
49
|
+
* Properly deal with horrible mix of runtime load errors + other at_exit handlers. (dougo/chqr)
|
50
|
+
|
51
|
+
=== 5.2.0 / 2013-12-13
|
52
|
+
|
53
|
+
* 1 minor enhancement:
|
54
|
+
|
55
|
+
* Change expectations to allow calling most on procs (but not calling the proc). (bhenderson+others)
|
56
|
+
|
57
|
+
=== 5.1.0 / 2013-12-05
|
58
|
+
|
59
|
+
* 1 minor enhancement:
|
60
|
+
|
61
|
+
* Use a Queue for scheduling parallel tests. (tenderlove)
|
62
|
+
|
63
|
+
* 1 bug fix:
|
64
|
+
|
65
|
+
* Fixed misspelling in doco. (amatsuda)
|
66
|
+
|
67
|
+
=== 5.0.8 / 2013-09-20
|
68
|
+
|
69
|
+
* 1 bug fix:
|
70
|
+
|
71
|
+
* Fixed siginfo handler by rearranging reporters and fixing to_s. (tenderlove)
|
72
|
+
|
73
|
+
=== 5.0.7 / 2013-09-05
|
74
|
+
|
75
|
+
* 2 minor enhancements:
|
76
|
+
|
77
|
+
* Added clarification about the use of thread local variables in expectations. (jemc)
|
78
|
+
* Added extra message about skipped tests, if any. Disable globally with $MT_NO_SKIP_MSG.
|
79
|
+
|
80
|
+
* 2 bug fixes:
|
81
|
+
|
82
|
+
* Only require minitest, not minitest/autorun in pride_plugin. (judofyr)
|
83
|
+
* Require rubygems in load_plugins in case you're not using minitest/autorun.
|
84
|
+
|
1
85
|
=== 5.0.6 / 2013-06-28
|
2
86
|
|
3
87
|
* 3 minor enhancements:
|
@@ -10,6 +94,13 @@
|
|
10
94
|
|
11
95
|
* Fixed missing require in minitest/test. (erikh)
|
12
96
|
|
97
|
+
=== 4.7.5 / 2013-06-21
|
98
|
+
|
99
|
+
* 2 bug fixes:
|
100
|
+
|
101
|
+
* Fix Spec#describe_stack to be thread local.
|
102
|
+
* Fix multithreaded test failures by defining Time local to mock test namespace
|
103
|
+
|
13
104
|
=== 5.0.5 / 2013-06-20
|
14
105
|
|
15
106
|
* 6 bug fixes:
|
@@ -128,6 +219,21 @@ Minitest 5:
|
|
128
219
|
* Removed Minitest::Test.synchronize (phiggins)
|
129
220
|
* Upon loading minitest/parallel_each, record, capture_io and capture_subprocess_io are doped with synchronization code. (phiggins)
|
130
221
|
|
222
|
+
=== 4.7.4 / 2013-05-01
|
223
|
+
|
224
|
+
This is probably the last release of the 4.x series. It will be merged
|
225
|
+
to ruby and will be put into maintenance mode there.
|
226
|
+
|
227
|
+
I'm not set in stone on this, but at this point further development of
|
228
|
+
minitest (5+) will be gem-only. It is just too hard to work w/in
|
229
|
+
ruby-core w/ test-unit compatibility holding minitest development
|
230
|
+
back.
|
231
|
+
|
232
|
+
* 2 minor enhancements:
|
233
|
+
|
234
|
+
* Added count/size to ParallelEach to fix use w/in stdlib's test/unit. :( (btaitelb)
|
235
|
+
* Allow disabling of info_signal handler in runner. (erikh)
|
236
|
+
|
131
237
|
=== 4.7.3 / 2013-04-20
|
132
238
|
|
133
239
|
* 1 bug fix:
|
data/Manifest.txt
CHANGED
data/README.txt
CHANGED
@@ -3,6 +3,7 @@
|
|
3
3
|
home :: https://github.com/seattlerb/minitest
|
4
4
|
rdoc :: http://docs.seattlerb.org/minitest
|
5
5
|
vim :: https://github.com/sunaku/vim-ruby-minitest
|
6
|
+
emacs:: https://github.com/arthurnn/minitest-emacs
|
6
7
|
|
7
8
|
== DESCRIPTION:
|
8
9
|
|
@@ -90,6 +91,8 @@ Given that you'd like to test the following class:
|
|
90
91
|
|
91
92
|
=== Unit tests
|
92
93
|
|
94
|
+
Define your tests as methods beginning with `test_`.
|
95
|
+
|
93
96
|
require "minitest/autorun"
|
94
97
|
|
95
98
|
class TestMeme < Minitest::Test
|
@@ -366,62 +369,105 @@ you want to extend your test using setup/teardown via a module, just
|
|
366
369
|
make sure you ALWAYS call super. before/after automatically call super
|
367
370
|
for you, so make sure you don't do it twice.
|
368
371
|
|
372
|
+
== Prominent Projects using Minitest:
|
373
|
+
|
374
|
+
* arel
|
375
|
+
* journey
|
376
|
+
* mime-types
|
377
|
+
* nokogiri
|
378
|
+
* rails (active_support et al)
|
379
|
+
* rake
|
380
|
+
* rdoc
|
381
|
+
* ...and of course, everything from seattle.rb...
|
382
|
+
|
369
383
|
== Known Extensions:
|
370
384
|
|
371
|
-
capybara_minitest_spec :: Bridge between Capybara RSpec matchers and
|
385
|
+
capybara_minitest_spec :: Bridge between Capybara RSpec matchers and
|
386
|
+
Minitest::Spec expectations (e.g.
|
387
|
+
page.must_have_content("Title")).
|
372
388
|
minispec-metadata :: Metadata for describe/it blocks
|
373
389
|
(e.g. `it "requires JS driver", js: true do`)
|
374
390
|
minitest-ansi :: Colorize minitest output with ANSI colors.
|
375
|
-
minitest-around :: Around block for minitest. An alternative to
|
376
|
-
|
377
|
-
minitest-
|
391
|
+
minitest-around :: Around block for minitest. An alternative to
|
392
|
+
setup/teardown dance.
|
393
|
+
minitest-capistrano :: Assertions and expectations for testing
|
394
|
+
Capistrano recipes.
|
395
|
+
minitest-capybara :: Capybara matchers support for minitest unit and
|
396
|
+
spec.
|
378
397
|
minitest-chef-handler :: Run Minitest suites as Chef report handlers
|
379
|
-
minitest-ci :: CI reporter plugin for
|
380
|
-
minitest-colorize :: Colorize
|
381
|
-
|
398
|
+
minitest-ci :: CI reporter plugin for Minitest.
|
399
|
+
minitest-colorize :: Colorize Minitest output and show failing tests
|
400
|
+
instantly.
|
401
|
+
minitest-context :: Defines contexts for code reuse in Minitest
|
382
402
|
specs that share common expectations.
|
383
403
|
minitest-debugger :: Wraps assert so failed assertions drop into
|
384
404
|
the ruby debugger.
|
385
|
-
minitest-display :: Patches
|
386
|
-
|
387
|
-
minitest-
|
405
|
+
minitest-display :: Patches Minitest to allow for an easily
|
406
|
+
configurable output.
|
407
|
+
minitest-documentation :: Minimal documentation format inspired by rspec's.
|
408
|
+
minitest-doc_reporter :: Detailed output inspired by rspec's documentation
|
409
|
+
format.
|
410
|
+
minitest-emoji :: Print out emoji for your test passes, fails, and
|
411
|
+
skips.
|
412
|
+
minitest-english :: Semantically symmetric aliases for assertions and
|
413
|
+
expectations.
|
388
414
|
minitest-excludes :: Clean API for excluding certain tests you
|
389
415
|
don't want to run under certain conditions.
|
390
|
-
minitest-filesystem :: Adds assertion and expectation to help testing
|
391
|
-
|
392
|
-
minitest-
|
416
|
+
minitest-filesystem :: Adds assertion and expectation to help testing
|
417
|
+
filesystem contents.
|
418
|
+
minitest-firemock :: Makes your Minitest mocks more resilient.
|
419
|
+
minitest-great_expectations :: Generally useful additions to minitest's
|
420
|
+
assertions and expectations.
|
393
421
|
minitest-growl :: Test notifier for minitest via growl.
|
394
422
|
minitest-implicit-subject :: Implicit declaration of the test subject.
|
395
423
|
minitest-instrument :: Instrument ActiveSupport::Notifications when
|
396
|
-
test method is executed
|
397
|
-
minitest-instrument-db :: Store information about speed of test
|
398
|
-
|
424
|
+
test method is executed.
|
425
|
+
minitest-instrument-db :: Store information about speed of test execution
|
426
|
+
provided by minitest-instrument in database.
|
399
427
|
minitest-libnotify :: Test notifier for minitest via libnotify.
|
400
|
-
minitest-line :: Run test at line number
|
401
|
-
minitest-macruby :: Provides extensions to minitest for macruby UI
|
402
|
-
|
428
|
+
minitest-line :: Run test at line number.
|
429
|
+
minitest-macruby :: Provides extensions to minitest for macruby UI
|
430
|
+
testing.
|
431
|
+
minitest-matchers :: Adds support for RSpec-style matchers to
|
432
|
+
minitest.
|
403
433
|
minitest-metadata :: Annotate tests with metadata (key-value).
|
404
|
-
minitest-mongoid :: Mongoid assertion matchers for
|
405
|
-
minitest-must_not :: Provides must_not as an alias for wont in
|
406
|
-
|
407
|
-
minitest-
|
408
|
-
|
409
|
-
minitest-
|
410
|
-
minitest-
|
411
|
-
minitest-
|
412
|
-
minitest-
|
413
|
-
minitest-
|
414
|
-
minitest-
|
415
|
-
minitest-
|
416
|
-
|
417
|
-
minitest-
|
418
|
-
|
434
|
+
minitest-mongoid :: Mongoid assertion matchers for Minitest.
|
435
|
+
minitest-must_not :: Provides must_not as an alias for wont in
|
436
|
+
Minitest.
|
437
|
+
minitest-nc :: Test notifier for minitest via Mountain Lion's
|
438
|
+
Notification Center.
|
439
|
+
minitest-predicates :: Adds support for .predicate? methods.
|
440
|
+
minitest-rails :: Minitest integration for Rails 3.x.
|
441
|
+
minitest-rails-capybara :: Capybara integration for Minitest::Rails.
|
442
|
+
minitest-reporters :: Create customizable Minitest output formats.
|
443
|
+
minitest-rg :: Colored red/green output for Minitest.
|
444
|
+
minitest-rspec_mocks :: Use RSpec Mocks with Minitest.
|
445
|
+
minitest-should_syntax :: RSpec-style +x.should == y+ assertions for
|
446
|
+
Minitest.
|
447
|
+
minitest-shouldify :: Adding all manner of shoulds to Minitest (bad
|
448
|
+
idea)
|
449
|
+
minitest-spec-context :: Provides rspec-ish context method to
|
450
|
+
Minitest::Spec.
|
451
|
+
minitest-spec-expect :: Expect syntax for Minitest::Spec (e.g.
|
452
|
+
expect(sequences).to_include :celery_man).
|
453
|
+
minitest-spec-magic :: Minitest::Spec extensions for Rails and beyond.
|
454
|
+
minitest-spec-rails :: Drop in Minitest::Spec superclass for
|
455
|
+
ActiveSupport::TestCase.
|
456
|
+
minitest-stub_any_instance :: Stub any instance of a method on the given class
|
457
|
+
for the duration of a block.
|
458
|
+
minitest-stub-const :: Stub constants for the duration of a block.
|
459
|
+
minitest-tags :: Add tags for minitest.
|
460
|
+
minitest-vcr :: Automatic cassette managment with Minitest::Spec
|
461
|
+
and VCR.
|
419
462
|
minitest-wscolor :: Yet another test colorizer.
|
420
463
|
minitest_owrapper :: Get tests results as a TestResult object.
|
421
464
|
minitest_should :: Shoulda style syntax for minitest test::unit.
|
422
|
-
minitest_tu_shim ::
|
423
|
-
mongoid-minitest ::
|
424
|
-
pry-rescue :: A pry plugin w/ minitest support. See
|
465
|
+
minitest_tu_shim :: Bridges between test/unit and minitest.
|
466
|
+
mongoid-minitest :: Minitest matchers for Mongoid.
|
467
|
+
pry-rescue :: A pry plugin w/ minitest support. See
|
468
|
+
pry-rescue/minitest.rb.
|
469
|
+
rspec2minitest :: Easily translate any RSpec matchers to Minitest
|
470
|
+
assertions and expectations.
|
425
471
|
|
426
472
|
== Unknown Extensions:
|
427
473
|
|
data/Rakefile
CHANGED
@@ -1,5 +1,3 @@
|
|
1
|
-
# -*- ruby -*-
|
2
|
-
|
3
1
|
require 'rubygems'
|
4
2
|
require 'hoe'
|
5
3
|
|
@@ -8,63 +6,11 @@ Hoe.plugin :seattlerb
|
|
8
6
|
Hoe.spec 'minitest' do
|
9
7
|
developer 'Ryan Davis', 'ryand-ruby@zenspider.com'
|
10
8
|
|
11
|
-
|
12
|
-
self.testlib = :minitest
|
13
|
-
self.licenses = [ 'MIT' ]
|
14
|
-
end
|
9
|
+
license "MIT"
|
15
10
|
|
16
|
-
|
17
|
-
task :specs do
|
18
|
-
$:.unshift "lib"
|
19
|
-
require "minitest/unit"
|
20
|
-
require "minitest/spec"
|
21
|
-
|
22
|
-
pos_prefix, neg_prefix = "must", "wont"
|
23
|
-
skip_re = /^(must|wont)$|wont_(throw)|must_(block|not?_|nothing|raise$)/x
|
24
|
-
dont_flip_re = /(must|wont)_(include|respond_to)/
|
25
|
-
|
26
|
-
map = {
|
27
|
-
/(must_throw)s/ => '\1',
|
28
|
-
/(?!not)_same/ => '_be_same_as',
|
29
|
-
/_in_/ => '_be_within_',
|
30
|
-
/_operator/ => '_be',
|
31
|
-
/_includes/ => '_include',
|
32
|
-
/(must|wont)_(.*_of|nil|silent|empty)/ => '\1_be_\2',
|
33
|
-
/must_raises/ => 'must_raise',
|
34
|
-
}
|
35
|
-
|
36
|
-
expectations = Minitest::Expectations.public_instance_methods.map(&:to_s)
|
37
|
-
assertions = Minitest::Assertions.public_instance_methods.map(&:to_s)
|
38
|
-
|
39
|
-
assertions.sort.each do |assertion|
|
40
|
-
expectation = case assertion
|
41
|
-
when /^assert/ then
|
42
|
-
assertion.sub(/^assert/, pos_prefix.to_s)
|
43
|
-
when /^refute/ then
|
44
|
-
assertion.sub(/^refute/, neg_prefix.to_s)
|
45
|
-
end
|
46
|
-
|
47
|
-
next unless expectation
|
48
|
-
next if expectation =~ skip_re
|
49
|
-
|
50
|
-
regexp, replacement = map.find { |re, _| expectation =~ re }
|
51
|
-
expectation.sub! regexp, replacement if replacement
|
52
|
-
|
53
|
-
next if expectations.include? expectation
|
54
|
-
|
55
|
-
args = [assertion, expectation].map(&:to_sym).map(&:inspect)
|
56
|
-
args << :reverse if expectation =~ dont_flip_re
|
57
|
-
|
58
|
-
puts
|
59
|
-
puts "##"
|
60
|
-
puts "# :method: #{expectation}"
|
61
|
-
puts "# See Minitest::Assertions##{assertion}"
|
62
|
-
puts
|
63
|
-
puts "infect_an_assertion #{args.join ", "}"
|
64
|
-
end
|
11
|
+
self.testlib = :minitest
|
65
12
|
end
|
66
13
|
|
67
|
-
# vim: syntax=Ruby
|
68
14
|
|
69
15
|
# from https://github.com/bootstraponline/gem_template
|
70
16
|
# todo: publish gem_template as a gem
|
@@ -73,6 +19,7 @@ end
|
|
73
19
|
require 'rubygems'
|
74
20
|
require 'rake'
|
75
21
|
require 'date'
|
22
|
+
require_relative 'lib/minitest'
|
76
23
|
|
77
24
|
# Defines gem name.
|
78
25
|
def repo_name; 'spec' end # rubygems.org name
|
data/lib/minitest.rb
CHANGED
@@ -1,12 +1,14 @@
|
|
1
1
|
require "optparse"
|
2
|
-
require
|
2
|
+
require "thread"
|
3
|
+
require "mutex_m"
|
4
|
+
require "minitest/parallel"
|
3
5
|
|
4
6
|
##
|
5
7
|
# :include: README.txt
|
6
8
|
|
7
9
|
module Minitest
|
8
|
-
VERSION = '5.
|
9
|
-
DATE = '
|
10
|
+
VERSION = '5.3.3' # :nodoc:
|
11
|
+
DATE = '2014-04-21' # :nodoc:
|
10
12
|
|
11
13
|
@@installed_at_exit ||= false
|
12
14
|
@@after_run = []
|
@@ -14,6 +16,12 @@ module Minitest
|
|
14
16
|
|
15
17
|
mc = (class << self; self; end)
|
16
18
|
|
19
|
+
##
|
20
|
+
# Parallel test executor
|
21
|
+
|
22
|
+
mc.send :attr_accessor, :parallel_executor
|
23
|
+
self.parallel_executor = Parallel::Executor.new((ENV['N'] || 2).to_i)
|
24
|
+
|
17
25
|
##
|
18
26
|
# Filter object for backtraces.
|
19
27
|
|
@@ -36,7 +44,7 @@ module Minitest
|
|
36
44
|
|
37
45
|
def self.autorun
|
38
46
|
at_exit {
|
39
|
-
next if $! and not $!.kind_of? SystemExit
|
47
|
+
next if $! and not ($!.kind_of? SystemExit and $!.success?)
|
40
48
|
|
41
49
|
exit_code = nil
|
42
50
|
|
@@ -72,6 +80,8 @@ module Minitest
|
|
72
80
|
|
73
81
|
seen = {}
|
74
82
|
|
83
|
+
require "rubygems" unless defined? Gem
|
84
|
+
|
75
85
|
Gem.find_files("minitest/*_plugin.rb").each do |plugin_path|
|
76
86
|
name = File.basename plugin_path, "_plugin.rb"
|
77
87
|
|
@@ -92,11 +102,13 @@ module Minitest
|
|
92
102
|
#
|
93
103
|
# Minitest.autorun
|
94
104
|
# Minitest.run(args)
|
95
|
-
# __run(reporter, options)
|
105
|
+
# Minitest.__run(reporter, options)
|
96
106
|
# Runnable.runnables.each
|
97
107
|
# runnable.run(reporter, options)
|
98
108
|
# self.runnable_methods.each
|
99
|
-
# self.
|
109
|
+
# self.run_one_method(self, runnable_method, reporter)
|
110
|
+
# Minitest.run_one_method(klass, runnable_method, reporter)
|
111
|
+
# klass.new(runnable_method).run
|
100
112
|
|
101
113
|
def self.run args = []
|
102
114
|
self.load_plugins
|
@@ -104,8 +116,8 @@ module Minitest
|
|
104
116
|
options = process_args args
|
105
117
|
|
106
118
|
reporter = CompositeReporter.new
|
107
|
-
reporter << ProgressReporter.new(options[:io], options)
|
108
119
|
reporter << SummaryReporter.new(options[:io], options)
|
120
|
+
reporter << ProgressReporter.new(options[:io], options)
|
109
121
|
|
110
122
|
self.reporter = reporter # this makes it available to plugins
|
111
123
|
self.init_plugins options
|
@@ -113,6 +125,7 @@ module Minitest
|
|
113
125
|
|
114
126
|
reporter.start
|
115
127
|
__run reporter, options
|
128
|
+
self.parallel_executor.shutdown
|
116
129
|
reporter.report
|
117
130
|
|
118
131
|
reporter.passed?
|
@@ -126,88 +139,22 @@ module Minitest
|
|
126
139
|
# loaded if a Runnable calls parallelize_me!.
|
127
140
|
|
128
141
|
def self.__run reporter, options
|
129
|
-
Runnable.runnables
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
# @param :trace [Array<String>] the files to trace
|
140
|
-
# @param :io [IO] io to print to
|
141
|
-
def self.trace_specs spec_opts
|
142
|
-
targets = []
|
143
|
-
files = {}
|
144
|
-
last_file = ''
|
145
|
-
last_line = -1
|
146
|
-
|
147
|
-
files_to_trace = spec_opts.fetch(:trace, []);
|
148
|
-
io = spec_opts.fetch(:io, $stdout)
|
149
|
-
color = spec_opts.fetch(:color, "\e[32m") # ANSI.green default
|
150
|
-
# target only existing readable files
|
151
|
-
files_to_trace.each do |f|
|
152
|
-
targets.push(File.expand_path(f)) if File.exists?(f) && File.readable?(f)
|
153
|
-
end
|
154
|
-
return if targets.empty?
|
155
|
-
|
156
|
-
set_trace_func(lambda do |event, file, line, id, binding, classname|
|
157
|
-
return unless targets.include? file
|
158
|
-
|
159
|
-
# never repeat a line
|
160
|
-
return if file == last_file && line == last_line
|
161
|
-
|
162
|
-
file_sym = file.intern
|
163
|
-
files[file_sym] = IO.readlines(file) if files[file_sym].nil?
|
164
|
-
lines = files[file_sym]
|
165
|
-
|
166
|
-
# arrays are 0 indexed and line numbers start at one.
|
167
|
-
io.print color if color # ANSI code
|
168
|
-
io.puts lines[ line - 1]
|
169
|
-
io.print "\e[0m" if color # ANSI.clear
|
170
|
-
|
171
|
-
last_file = file
|
172
|
-
last_line = line
|
173
|
-
|
174
|
-
end)
|
175
|
-
end
|
176
|
-
|
177
|
-
def self.on_exit exit_code
|
178
|
-
@@after_run.reverse_each(&:call)
|
179
|
-
exit exit_code || false
|
180
|
-
end
|
181
|
-
|
182
|
-
##
|
183
|
-
# Run specs. Does not print dots (ProgressReporter)
|
184
|
-
#
|
185
|
-
# spec_opts
|
186
|
-
# @param :io [Array<String>] defaults to $stdout
|
187
|
-
# @param :trace [Array<String>] files to trace
|
188
|
-
|
189
|
-
def self.run_specs spec_opts={}
|
190
|
-
options = { :io => spec_opts.fetch(:io, $stdout) }
|
191
|
-
reporter = Minitest::CompositeReporter.new
|
192
|
-
reporter << Minitest::SummaryReporter.new(options[:io], options)
|
193
|
-
reporter.start
|
194
|
-
|
195
|
-
at_exit { on_exit reporter.passed? }
|
196
|
-
# exit on ctrl+c to trigger at_exit
|
197
|
-
trap('SIGINT') { exit }
|
198
|
-
|
199
|
-
trace_specs spec_opts
|
200
|
-
|
201
|
-
begin
|
202
|
-
Minitest.__run reporter, options
|
203
|
-
reporter.reporters.each { |r| r.report }
|
204
|
-
rescue Minitest::Runnable::ExitAfterFirstFail
|
205
|
-
# Minitest calls .report on exception
|
206
|
-
end
|
142
|
+
suites = Runnable.runnables
|
143
|
+
parallel, serial = suites.partition { |s| s.test_order == :parallel }
|
144
|
+
|
145
|
+
# If we run the parallel tests before the serial tests, the parallel tests
|
146
|
+
# could run in parallel with the serial tests. This would be bad because
|
147
|
+
# the serial tests won't lock around Reporter#record. Run the serial tests
|
148
|
+
# first, so that after they complete, the parallel tests will lock when
|
149
|
+
# recording results.
|
150
|
+
serial.map { |suite| suite.run reporter, options } +
|
151
|
+
parallel.map { |suite| suite.run reporter, options }
|
207
152
|
end
|
208
153
|
|
209
154
|
def self.process_args args = [] # :nodoc:
|
210
|
-
options = {
|
155
|
+
options = {
|
156
|
+
:io => $stdout,
|
157
|
+
}
|
211
158
|
orig_args = args.dup
|
212
159
|
|
213
160
|
OptionParser.new do |opts|
|
@@ -323,27 +270,12 @@ module Minitest
|
|
323
270
|
|
324
271
|
reset
|
325
272
|
|
326
|
-
class ExitAfterFirstFail < RuntimeError; end
|
327
|
-
|
328
|
-
def self.check_failures result, reporter
|
329
|
-
# skip is not a failure.
|
330
|
-
true_fails = result.failures.reject { |obj| obj.class == Minitest::Skip }
|
331
|
-
if !true_fails.empty?
|
332
|
-
begin
|
333
|
-
reporter.reporters.each { |r| r.report }
|
334
|
-
ensure
|
335
|
-
raise ExitAfterFirstFail
|
336
|
-
end
|
337
|
-
end
|
338
|
-
end
|
339
|
-
|
340
273
|
##
|
341
274
|
# Responsible for running all runnable methods in a given class,
|
342
275
|
# each in its own instance. Each instance is passed to the
|
343
276
|
# reporter to record.
|
344
277
|
|
345
278
|
def self.run reporter, options = {}
|
346
|
-
io = options.fetch :io, $stdout
|
347
279
|
filter = options[:filter] || '/./'
|
348
280
|
filter = Regexp.new $1 if filter =~ /\/(.*)\//
|
349
281
|
|
@@ -351,64 +283,16 @@ module Minitest
|
|
351
283
|
filter === m || filter === "#{self}##{m}"
|
352
284
|
}
|
353
285
|
|
354
|
-
|
355
|
-
|
356
|
-
|
357
|
-
# run method and capture exceptions.
|
358
|
-
method1.capture_exceptions do
|
359
|
-
method1.before_first_method
|
360
|
-
end
|
361
|
-
# save exceptions to reporter and check for failures
|
362
|
-
with_info_handler reporter do
|
363
|
-
# only record if failures not empty, otherwise
|
364
|
-
# the count (runs) are messed up. each call to .record
|
365
|
-
# increases count by one.
|
366
|
-
if !method1.failures.empty?
|
367
|
-
reporter.record method1
|
368
|
-
check_failures method1, reporter
|
369
|
-
end
|
370
|
-
|
371
|
-
# run the other methods
|
372
|
-
filtered_methods.each do |method_name|
|
373
|
-
method = self.new(method_name)
|
374
|
-
matched_name = method_name.match /test_(\d+)_/
|
375
|
-
if matched_name
|
376
|
-
test_number = matched_name[1].to_i
|
377
|
-
test_name = method_name.split(/_\d+_/).last
|
378
|
-
file_path, line_number = method.method(method_name).source_location
|
379
|
-
# /5/4/3/2/1/test.rb => 2/1/test.rb
|
380
|
-
file_path = file_path.split(File::SEPARATOR).reject(&:empty?)
|
381
|
-
file_path = (file_path.length >= 3 ? file_path[-3..-1] :
|
382
|
-
file_path).join(File::SEPARATOR)
|
383
|
-
# 36 = cyan, 0 = clear
|
384
|
-
test_output_title = "\e[36m#{test_name} | #{test_number} |" +
|
385
|
-
"#{file_path}:#{line_number}\e[0m"
|
386
|
-
io.puts test_output_title
|
387
|
-
end
|
388
|
-
result = method.run
|
389
|
-
raise "#{self}#run _must_ return self" unless self === result
|
390
|
-
reporter.record result
|
391
|
-
check_failures result, reporter
|
392
|
-
end
|
393
|
-
end
|
394
|
-
ensure # ensure after last runs
|
395
|
-
# after_last
|
396
|
-
# init method1 again
|
397
|
-
method1 = self.new(filtered_methods.first)
|
398
|
-
method1.capture_exceptions do
|
399
|
-
method1.after_last_method
|
400
|
-
end
|
401
|
-
with_info_handler reporter do
|
402
|
-
if !method1.failures.empty?
|
403
|
-
reporter.record method1
|
404
|
-
check_failures method1, reporter
|
405
|
-
end
|
286
|
+
with_info_handler reporter do
|
287
|
+
filtered_methods.each do |method_name|
|
288
|
+
run_one_method self, method_name, reporter
|
406
289
|
end
|
407
290
|
end
|
408
291
|
end
|
409
292
|
|
410
|
-
def
|
411
|
-
|
293
|
+
def self.run_one_method klass, method_name, reporter
|
294
|
+
reporter.record Minitest.run_one_method(klass, method_name)
|
295
|
+
end
|
412
296
|
|
413
297
|
def self.with_info_handler reporter, &block # :nodoc:
|
414
298
|
handler = lambda do
|
@@ -507,6 +391,8 @@ module Minitest
|
|
507
391
|
# you want. Go nuts.
|
508
392
|
|
509
393
|
class AbstractReporter
|
394
|
+
include Mutex_m
|
395
|
+
|
510
396
|
##
|
511
397
|
# Starts reporting on the run.
|
512
398
|
|
@@ -546,6 +432,7 @@ module Minitest
|
|
546
432
|
attr_accessor :options
|
547
433
|
|
548
434
|
def initialize io = $stdout, options = {} # :nodoc:
|
435
|
+
super()
|
549
436
|
self.io = io
|
550
437
|
self.options = options
|
551
438
|
end
|
@@ -645,6 +532,11 @@ module Minitest
|
|
645
532
|
def start # :nodoc:
|
646
533
|
super
|
647
534
|
|
535
|
+
io.puts "Run options: #{options[:args]}"
|
536
|
+
io.puts
|
537
|
+
io.puts "# Running:"
|
538
|
+
io.puts
|
539
|
+
|
648
540
|
self.sync = io.respond_to? :"sync=" # stupid emacs
|
649
541
|
self.old_sync, io.sync = io.sync, true if self.sync
|
650
542
|
end
|
@@ -662,7 +554,8 @@ module Minitest
|
|
662
554
|
end
|
663
555
|
|
664
556
|
def statistics # :nodoc:
|
665
|
-
"Finished in
|
557
|
+
"Finished in %.6fs, %.4f runs/s, %.4f assertions/s." %
|
558
|
+
[total_time, count / total_time, assertions / total_time]
|
666
559
|
end
|
667
560
|
|
668
561
|
def aggregated_results # :nodoc:
|
@@ -674,6 +567,8 @@ module Minitest
|
|
674
567
|
end.join("\n") + "\n"
|
675
568
|
end
|
676
569
|
|
570
|
+
alias to_s aggregated_results
|
571
|
+
|
677
572
|
def summary # :nodoc:
|
678
573
|
extra = ""
|
679
574
|
|
@@ -695,6 +590,7 @@ module Minitest
|
|
695
590
|
attr_accessor :reporters
|
696
591
|
|
697
592
|
def initialize *reporters # :nodoc:
|
593
|
+
super()
|
698
594
|
self.reporters = reporters
|
699
595
|
end
|
700
596
|
|
@@ -859,6 +755,12 @@ module Minitest
|
|
859
755
|
end
|
860
756
|
|
861
757
|
self.backtrace_filter = BacktraceFilter.new
|
758
|
+
|
759
|
+
def self.run_one_method klass, method_name # :nodoc:
|
760
|
+
result = klass.new(method_name).run
|
761
|
+
raise "#{klass}#run _must_ return self" unless klass === result
|
762
|
+
result
|
763
|
+
end
|
862
764
|
end
|
863
765
|
|
864
766
|
require "minitest/test"
|