m 1.3.3 → 1.3.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/.travis.yml +8 -4
- data/Gemfile +1 -0
- data/README.md +11 -6
- data/Rakefile +10 -1
- data/benchmarks/20150430-benchmark.log +26 -0
- data/gemfiles/minitest4.gemfile +1 -1
- data/gemfiles/minitest4.gemfile.lock +30 -18
- data/gemfiles/minitest5.gemfile +1 -1
- data/gemfiles/minitest5.gemfile.lock +29 -17
- data/lib/m.rb +1 -271
- data/lib/m/executor.rb +101 -0
- data/lib/m/frameworks.rb +34 -0
- data/lib/m/parser.rb +74 -0
- data/lib/m/runner.rb +20 -0
- data/lib/m/runners/base.rb +17 -0
- data/lib/m/runners/minitest_4.rb +13 -0
- data/lib/m/runners/minitest_5.rb +17 -0
- data/lib/m/runners/test_unit.rb +13 -0
- data/lib/m/runners/unsupported_framework.rb +21 -0
- data/lib/m/testable.rb +15 -0
- data/lib/version.rb +1 -1
- data/m.gemspec +1 -1
- data/test/active_support_test.rb +17 -17
- data/test/bench.rb +25 -8
- data/test/empty_test.rb +1 -1
- data/test/everything_test.rb +11 -6
- data/test/examples/active_support_example_test.rb +0 -1
- data/test/examples/active_support_unescaped_example_test.rb +0 -1
- data/test/examples/empty_example_test.rb +2 -2
- data/test/examples/minitest_4_example_test.rb +4 -6
- data/test/examples/minitest_5_example_test.rb +4 -5
- data/test/examples/multiple_example_test.rb +0 -1
- data/test/examples/subdir/a_test.rb +2 -2
- data/test/examples/subdir/b_test.rb +2 -2
- data/test/examples/subdir/c_test.rb +2 -2
- data/test/examples/subdir_with_failures/a_test.rb +7 -0
- data/test/examples/test_unit_example_test.rb +12 -12
- data/test/minitest_4_test.rb +13 -13
- data/test/minitest_5_test.rb +6 -6
- data/test/multiple_test.rb +3 -3
- data/test/options_test.rb +6 -6
- data/test/test_helper.rb +13 -12
- data/test/test_unit_test.rb +29 -27
- metadata +13 -16
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: bd1ad8313ab5bd9e236d70fe871ba3e29d871221
|
4
|
+
data.tar.gz: 0e6b5521243cf531c2c45509aaf9d27c438696d5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 33c1b791fe1b6c24152547b4629a9b48a7be747b80d946d7180083835265cf5c98d46d5cdeacb6c1382722871c37dc04a37c55851ecd76841277b4a1a67513f3
|
7
|
+
data.tar.gz: 79c1d8f2ab1417c58807cd69275de576fd94ca746dc5d48dc043d2372bc8a5b55eaddd26d4e662a49583f884e3c1373f36f3417888702d17f09f9988bbbf5324
|
data/.gitignore
CHANGED
data/.travis.yml
CHANGED
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -50,7 +50,7 @@ Gem::Specification.new do |gem|
|
|
50
50
|
end
|
51
51
|
```
|
52
52
|
|
53
|
-
m works on Ruby
|
53
|
+
m works on Ruby 2.0+ only.
|
54
54
|
|
55
55
|
|
56
56
|
USAGE
|
@@ -128,16 +128,21 @@ SUPPORT
|
|
128
128
|
CONTRIBUTING
|
129
129
|
============
|
130
130
|
|
131
|
-
You can run the tests
|
131
|
+
You can run all the tests with:
|
132
132
|
|
133
|
-
rake
|
133
|
+
bundle exec rake tests
|
134
|
+
|
135
|
+
You can also run tests selectively. For minitest 4 run:
|
136
|
+
|
137
|
+
appraisal minitest4 rake test
|
134
138
|
|
135
139
|
and the ones for minitest 5 with:
|
136
140
|
|
137
|
-
|
141
|
+
appraisal minitest5 rake test TEST=test/minitest_5_test.rb
|
138
142
|
|
139
|
-
In the case of minitest 5
|
140
|
-
with ruby (at least until
|
143
|
+
In the case of minitest 5, we have to specify the test to run, because running
|
144
|
+
the whole suite will fail due to incompatibilities with ruby (at least until
|
145
|
+
2.1.1).
|
141
146
|
|
142
147
|
|
143
148
|
LICENSE
|
data/Rakefile
CHANGED
@@ -2,6 +2,7 @@
|
|
2
2
|
require 'rubygems'
|
3
3
|
require 'bundler/setup'
|
4
4
|
require 'appraisal'
|
5
|
+
require 'coveralls'
|
5
6
|
require "bundler/gem_tasks"
|
6
7
|
require 'rake/clean'
|
7
8
|
require "rake/testtask"
|
@@ -10,12 +11,20 @@ task :default => [:test]
|
|
10
11
|
|
11
12
|
Rake::TestTask.new do |t|
|
12
13
|
t.libs << 'test'
|
14
|
+
t.libs << 'lib'
|
13
15
|
t.pattern = 'test/*_test.rb'
|
14
16
|
end
|
15
17
|
|
18
|
+
desc 'Run all tests and get merged test coverage'
|
19
|
+
task :tests do
|
20
|
+
system "appraisal minitest4 rake test"
|
21
|
+
system "appraisal minitest5 rake test TEST=test/minitest_5_test.rb"
|
22
|
+
Coveralls.push!
|
23
|
+
end
|
24
|
+
|
16
25
|
desc 'Run simple benchmarks'
|
17
26
|
task :bench do
|
18
|
-
exec "ruby test/bench.rb"
|
27
|
+
exec "ruby test/bench.rb > benchmarks/#{Time.now.strftime('%Y%m%d')}-benchmark.log"
|
19
28
|
end
|
20
29
|
|
21
30
|
# ROCCO ===============================================================
|
@@ -0,0 +1,26 @@
|
|
1
|
+
Calculating -------------------------------------
|
2
|
+
running m on a file that doesn't exist
|
3
|
+
1.000 i/100ms
|
4
|
+
running m on an empty file
|
5
|
+
1.000 i/100ms
|
6
|
+
running m on an entire file with minitest5
|
7
|
+
1.000 i/100ms
|
8
|
+
running m on an entire file with minitest4
|
9
|
+
1.000 i/100ms
|
10
|
+
running m on a specific test with minitest4
|
11
|
+
1.000 i/100ms
|
12
|
+
running m on a specific test with minitest5
|
13
|
+
1.000 i/100ms
|
14
|
+
-------------------------------------------------
|
15
|
+
running m on a file that doesn't exist
|
16
|
+
3.097 (± 0.0%) i/s - 16.000
|
17
|
+
running m on an empty file
|
18
|
+
1.821 (± 0.0%) i/s - 10.000 in 5.496098s
|
19
|
+
running m on an entire file with minitest5
|
20
|
+
0.711 (± 0.0%) i/s - 4.000 in 5.630911s
|
21
|
+
running m on an entire file with minitest4
|
22
|
+
0.746 (± 0.0%) i/s - 4.000 in 5.362587s
|
23
|
+
running m on a specific test with minitest4
|
24
|
+
0.748 (± 0.0%) i/s - 4.000 in 5.345471s
|
25
|
+
running m on a specific test with minitest5
|
26
|
+
0.746 (± 0.0%) i/s - 4.000 in 5.363017s
|
data/gemfiles/minitest4.gemfile
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: ../
|
3
3
|
specs:
|
4
|
-
m (1.3.
|
4
|
+
m (1.3.3)
|
5
5
|
method_source (>= 0.6.7)
|
6
6
|
rake (>= 0.9.2.2)
|
7
7
|
|
@@ -18,38 +18,50 @@ GEM
|
|
18
18
|
bundler
|
19
19
|
rake
|
20
20
|
atomic (1.1.14)
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
21
|
+
coveralls (0.8.1)
|
22
|
+
json (~> 1.8)
|
23
|
+
rest-client (>= 1.6.8, < 2)
|
24
|
+
simplecov (~> 0.10.0)
|
25
|
+
term-ansicolor (~> 1.3)
|
26
|
+
thor (~> 0.19.1)
|
27
|
+
docile (1.1.5)
|
28
|
+
domain_name (0.5.24)
|
29
|
+
unf (>= 0.0.5, < 1.0.0)
|
30
|
+
http-cookie (1.0.2)
|
31
|
+
domain_name (~> 0.5)
|
29
32
|
i18n (0.6.9)
|
30
|
-
json (1.8.
|
33
|
+
json (1.8.2)
|
31
34
|
method_source (0.8.2)
|
32
|
-
mime-types (2.
|
35
|
+
mime-types (2.5)
|
33
36
|
minitest (4.7.5)
|
34
37
|
multi_json (1.8.4)
|
35
38
|
mustache (0.99.4)
|
39
|
+
netrc (0.10.3)
|
36
40
|
rake (10.1.1)
|
37
41
|
rdiscount (1.6.8)
|
38
42
|
redcarpet (3.0.0)
|
39
|
-
rest-client (1.
|
40
|
-
|
43
|
+
rest-client (1.8.0)
|
44
|
+
http-cookie (>= 1.0.2, < 2.0)
|
45
|
+
mime-types (>= 1.16, < 3.0)
|
46
|
+
netrc (~> 0.7)
|
41
47
|
rocco (0.8.2)
|
42
48
|
mustache
|
43
49
|
redcarpet
|
44
|
-
simplecov (0.
|
50
|
+
simplecov (0.10.0)
|
45
51
|
docile (~> 1.1.0)
|
46
|
-
|
47
|
-
simplecov-html (~> 0.
|
48
|
-
simplecov-html (0.
|
49
|
-
|
52
|
+
json (~> 1.8)
|
53
|
+
simplecov-html (~> 0.10.0)
|
54
|
+
simplecov-html (0.10.0)
|
55
|
+
term-ansicolor (1.3.0)
|
56
|
+
tins (~> 1.0)
|
57
|
+
thor (0.19.1)
|
50
58
|
thread_safe (0.1.3)
|
51
59
|
atomic
|
60
|
+
tins (1.5.1)
|
52
61
|
tzinfo (0.3.38)
|
62
|
+
unf (0.1.4)
|
63
|
+
unf_ext
|
64
|
+
unf_ext (0.0.7.1)
|
53
65
|
|
54
66
|
PLATFORMS
|
55
67
|
ruby
|
data/gemfiles/minitest5.gemfile
CHANGED
@@ -14,35 +14,47 @@ GEM
|
|
14
14
|
appraisal (0.5.2)
|
15
15
|
bundler
|
16
16
|
rake
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
17
|
+
coveralls (0.8.1)
|
18
|
+
json (~> 1.8)
|
19
|
+
rest-client (>= 1.6.8, < 2)
|
20
|
+
simplecov (~> 0.10.0)
|
21
|
+
term-ansicolor (~> 1.3)
|
22
|
+
thor (~> 0.19.1)
|
23
|
+
docile (1.1.5)
|
24
|
+
domain_name (0.5.24)
|
25
|
+
unf (>= 0.0.5, < 1.0.0)
|
26
|
+
http-cookie (1.0.2)
|
27
|
+
domain_name (~> 0.5)
|
25
28
|
i18n (0.6.9)
|
26
|
-
json (1.8.
|
29
|
+
json (1.8.2)
|
27
30
|
method_source (0.8.2)
|
28
|
-
mime-types (2.
|
31
|
+
mime-types (2.5)
|
29
32
|
minitest (5.3.1)
|
30
33
|
multi_json (1.8.4)
|
31
34
|
mustache (0.99.4)
|
35
|
+
netrc (0.10.3)
|
32
36
|
rake (10.1.1)
|
33
37
|
rdiscount (1.6.8)
|
34
38
|
redcarpet (3.0.0)
|
35
|
-
rest-client (1.
|
36
|
-
|
39
|
+
rest-client (1.8.0)
|
40
|
+
http-cookie (>= 1.0.2, < 2.0)
|
41
|
+
mime-types (>= 1.16, < 3.0)
|
42
|
+
netrc (~> 0.7)
|
37
43
|
rocco (0.8.2)
|
38
44
|
mustache
|
39
45
|
redcarpet
|
40
|
-
simplecov (0.
|
46
|
+
simplecov (0.10.0)
|
41
47
|
docile (~> 1.1.0)
|
42
|
-
|
43
|
-
simplecov-html (~> 0.
|
44
|
-
simplecov-html (0.
|
45
|
-
|
48
|
+
json (~> 1.8)
|
49
|
+
simplecov-html (~> 0.10.0)
|
50
|
+
simplecov-html (0.10.0)
|
51
|
+
term-ansicolor (1.3.0)
|
52
|
+
tins (~> 1.0)
|
53
|
+
thor (0.19.1)
|
54
|
+
tins (1.5.1)
|
55
|
+
unf (0.1.4)
|
56
|
+
unf_ext
|
57
|
+
unf_ext (0.0.7.1)
|
46
58
|
|
47
59
|
PLATFORMS
|
48
60
|
ruby
|
data/lib/m.rb
CHANGED
@@ -1,102 +1,8 @@
|
|
1
|
-
#`m` stands for metal, which is a better test/unit test runner that can run
|
2
|
-
#tests by line number.
|
3
|
-
#
|
4
|
-
#[![m ci](https://secure.travis-ci.org/qrush/m.png)](http://travis-ci.org/qrush/m)
|
5
|
-
#
|
6
|
-
#![Rush is a heavy metal band. Look it up on Wikipedia.](https://raw.github.com/qrush/m/master/rush.jpg)
|
7
|
-
#
|
8
|
-
#<sub>[Rush at the Bristol Colston Hall May 1979](http://www.flickr.com/photos/8507625@N02/3468299995/)</sub>
|
9
|
-
### Install
|
10
|
-
#
|
11
|
-
#Install via:
|
12
|
-
#
|
13
|
-
# gem install m
|
14
|
-
#
|
15
|
-
#If you're using Bundler, you'll need to include it in your Gemfile. Toss it into the `test` group:
|
16
|
-
#
|
17
|
-
# group :test do
|
18
|
-
# gem 'm', '~> 1.3.1'
|
19
|
-
# end
|
20
|
-
#
|
21
|
-
#Developing a RubyGem? Add `m` as a development dependency.
|
22
|
-
#
|
23
|
-
# Gem::Specification.new do |gem|
|
24
|
-
# # ...
|
25
|
-
# gem.add_development_dependency "m", "~> 1.3.1"
|
26
|
-
# end
|
27
|
-
#
|
28
|
-
#`m` works on Ruby 1.9+ only.
|
29
|
-
#
|
30
|
-
### Usage
|
31
|
-
#
|
32
|
-
#Basically, I was sick of using the `-n` flag to grab one test to run. Instead, I
|
33
|
-
#prefer how RSpec's test runner allows tests to be run by line number.
|
34
|
-
#
|
35
|
-
#Given this file:
|
36
|
-
#
|
37
|
-
# $ cat -n test/example_test.rb
|
38
|
-
# 1 require 'test/unit'
|
39
|
-
# 2
|
40
|
-
# 3 class ExampleTest < Test::Unit::TestCase
|
41
|
-
# 4 def test_apple
|
42
|
-
# 5 assert_equal 1, 1
|
43
|
-
# 6 end
|
44
|
-
# 7
|
45
|
-
# 8 def test_banana
|
46
|
-
# 9 assert_equal 1, 1
|
47
|
-
# 10 end
|
48
|
-
# 11 end
|
49
|
-
#
|
50
|
-
#You can run a test by line number, using format `m TEST_FILE:LINE_NUMBER_OF_TEST`:
|
51
|
-
#
|
52
|
-
# $ m test/example_test.rb:4
|
53
|
-
# Run options: -n /test_apple/
|
54
|
-
#
|
55
|
-
# # Running tests:
|
56
|
-
#
|
57
|
-
# .
|
58
|
-
#
|
59
|
-
# Finished tests in 0.000525s, 1904.7619 tests/s, 1904.7619 assertions/s.
|
60
|
-
#
|
61
|
-
# 1 tests, 1 assertions, 0 failures, 0 errors, 0 skips
|
62
|
-
#
|
63
|
-
#Hit the wrong line number? No problem, `m` helps you out:
|
64
|
-
#
|
65
|
-
# $ m test/example_test.rb:2
|
66
|
-
# No tests found on line 2. Valid tests to run:
|
67
|
-
#
|
68
|
-
# test_apple: m test/examples/test_unit_example_test.rb:4
|
69
|
-
# test_banana: m test/examples/test_unit_example_test.rb:8
|
70
|
-
#
|
71
|
-
#Want to run the whole test? Just leave off the line number.
|
72
|
-
#
|
73
|
-
# $ m test/example_test.rb
|
74
|
-
# Run options:
|
75
|
-
#
|
76
|
-
# # Running tests:
|
77
|
-
#
|
78
|
-
# ..
|
79
|
-
#
|
80
|
-
# Finished tests in 0.001293s, 1546.7904 tests/s, 3093.5808 assertions/s.
|
81
|
-
#
|
82
|
-
# 1 tests, 2 assertions, 0 failures, 0 errors, 0 skips
|
83
|
-
#
|
84
|
-
#### Supports
|
85
|
-
#
|
86
|
-
#`m` works with a few Ruby test frameworks:
|
87
|
-
#
|
88
|
-
#* `Test::Unit`
|
89
|
-
#* `ActiveSupport::TestCase`
|
90
|
-
#* `MiniTest::Unit::TestCase`
|
91
|
-
#
|
92
|
-
### License
|
93
|
-
#
|
94
|
-
#This gem is MIT licensed, please see `LICENSE` for more information.
|
95
|
-
|
96
1
|
### M, your metal test runner
|
97
2
|
# Maybe this gem should have a longer name? Metal?
|
98
3
|
require_relative 'version'
|
99
4
|
require_relative 'm/frameworks'
|
5
|
+
require_relative 'm/runner'
|
100
6
|
|
101
7
|
module M
|
102
8
|
# Accept arguments coming from bin/m and run tests, then bail out immediately.
|
@@ -106,180 +12,4 @@ module M
|
|
106
12
|
$stderr.sync = true
|
107
13
|
exit! Runner.new(argv).run
|
108
14
|
end
|
109
|
-
|
110
|
-
### Runner is in charge of running your tests.
|
111
|
-
# Instead of slamming all of this junk in an `M` class, it's here instead.
|
112
|
-
class Runner
|
113
|
-
def initialize(argv)
|
114
|
-
@argv = argv
|
115
|
-
end
|
116
|
-
|
117
|
-
# There's two steps to running our tests:
|
118
|
-
# 1. Parsing the given input for the tests we need to find (or groups of tests)
|
119
|
-
# 2. Run those tests we found that match what you wanted
|
120
|
-
def run
|
121
|
-
parse
|
122
|
-
execute
|
123
|
-
end
|
124
|
-
|
125
|
-
private
|
126
|
-
|
127
|
-
def parse
|
128
|
-
# With no arguments,
|
129
|
-
if @argv.empty?
|
130
|
-
# Just shell out to `rake test`.
|
131
|
-
exec "rake test"
|
132
|
-
else
|
133
|
-
parse_options! @argv
|
134
|
-
|
135
|
-
# Parse out ARGV, it should be coming in in a format like `test/test_file.rb:9`
|
136
|
-
@file, line = @argv.first.split(':')
|
137
|
-
@line ||= line.to_i
|
138
|
-
|
139
|
-
# If this file is a directory, not a file, run the tests inside of this directory
|
140
|
-
if Dir.exist?(@file)
|
141
|
-
# Make a new rake test task with a hopefully unique name, and run every test looking file in it
|
142
|
-
require "rake/testtask"
|
143
|
-
Rake::TestTask.new(:m_custom) do |t|
|
144
|
-
t.libs << 'test'
|
145
|
-
t.libs << 'spec'
|
146
|
-
t.test_files = FileList["#{@file}/*test*.rb", "#{@file}/*spec*.rb"]
|
147
|
-
end
|
148
|
-
# Invoke the rake task and exit, hopefully it'll work!
|
149
|
-
Rake::Task['m_custom'].invoke
|
150
|
-
exit
|
151
|
-
end
|
152
|
-
end
|
153
|
-
end
|
154
|
-
|
155
|
-
def parse_options!(argv)
|
156
|
-
require 'optparse'
|
157
|
-
|
158
|
-
OptionParser.new do |opts|
|
159
|
-
opts.banner = 'Options:'
|
160
|
-
opts.version = M::VERSION
|
161
|
-
|
162
|
-
opts.on '-h', '--help', 'Display this help.' do
|
163
|
-
puts "Usage: m [OPTIONS] [FILES]\n\n", opts
|
164
|
-
exit
|
165
|
-
end
|
166
|
-
|
167
|
-
opts.on '--version', 'Display the version.' do
|
168
|
-
puts "m #{M::VERSION}"
|
169
|
-
exit
|
170
|
-
end
|
171
|
-
|
172
|
-
opts.on '-l', '--line LINE', Integer, 'Line number for file.' do |line|
|
173
|
-
@line = line
|
174
|
-
end
|
175
|
-
|
176
|
-
opts.parse! argv
|
177
|
-
end
|
178
|
-
end
|
179
|
-
|
180
|
-
def execute
|
181
|
-
# Locate tests to run that may be inside of this line. There could be more than one!
|
182
|
-
tests_to_run = tests.within(@line)
|
183
|
-
|
184
|
-
# If we found any tests,
|
185
|
-
if tests_to_run.size > 0
|
186
|
-
# assemble the regexp to run these tests,
|
187
|
-
test_names = tests_to_run.map { |test| Regexp.escape(test.name) }.join('|')
|
188
|
-
|
189
|
-
# set up the args needed for the runner
|
190
|
-
test_arguments = ["-n", "/^(#{test_names})$/"]
|
191
|
-
|
192
|
-
# directly run the tests from here and exit with the status of the tests passing or failing
|
193
|
-
if Frameworks.minitest5?
|
194
|
-
Minitest.run test_arguments
|
195
|
-
elsif Frameworks.minitest4?
|
196
|
-
MiniTest::Unit.runner.run test_arguments
|
197
|
-
elsif defined?(Test)
|
198
|
-
Test::Unit::AutoRunner.run(false, nil, test_arguments)
|
199
|
-
else
|
200
|
-
not_supported
|
201
|
-
end
|
202
|
-
elsif tests.size > 0
|
203
|
-
# Otherwise we found no tests on this line, so you need to pick one.
|
204
|
-
message = "No tests found on line #{@line}. Valid tests to run:\n\n"
|
205
|
-
|
206
|
-
# For every test ordered by line number,
|
207
|
-
# spit out the test name and line number where it starts,
|
208
|
-
tests.by_line_number do |test|
|
209
|
-
message << "#{sprintf("%0#{tests.column_size}s", test.name)}: m #{@file}:#{test.start_line}\n"
|
210
|
-
end
|
211
|
-
|
212
|
-
# Spit out helpful message and bail
|
213
|
-
STDERR.puts message
|
214
|
-
false
|
215
|
-
else
|
216
|
-
# There were no tests at all
|
217
|
-
message = "There were no tests found.\n\n"
|
218
|
-
STDERR.puts message
|
219
|
-
false
|
220
|
-
end
|
221
|
-
end
|
222
|
-
|
223
|
-
# Finds all test suites in this test file, with test methods included.
|
224
|
-
def suites
|
225
|
-
# Since we're not using `ruby -Itest -Ilib` to run the tests, we need to add this directory to the `LOAD_PATH`
|
226
|
-
$:.unshift "./test", "./spec", "./lib"
|
227
|
-
|
228
|
-
begin
|
229
|
-
# Fire up this Ruby file. Let's hope it actually has tests.
|
230
|
-
load @file
|
231
|
-
rescue LoadError => e
|
232
|
-
# Fail with a happier error message instead of spitting out a backtrace from this gem
|
233
|
-
STDERR.puts "Failed loading test file:\n#{e.message}"
|
234
|
-
return []
|
235
|
-
end
|
236
|
-
|
237
|
-
# Figure out what test framework we're using
|
238
|
-
if Frameworks.minitest5?
|
239
|
-
suites = Minitest::Runnable.runnables
|
240
|
-
elsif Frameworks.minitest4?
|
241
|
-
suites = MiniTest::Unit::TestCase.test_suites
|
242
|
-
elsif defined?(Test)
|
243
|
-
suites = Test::Unit::TestCase.test_suites
|
244
|
-
else
|
245
|
-
suites = []
|
246
|
-
not_supported
|
247
|
-
end
|
248
|
-
|
249
|
-
# Use some janky internal APIs to group test methods by test suite.
|
250
|
-
suites.inject({}) do |suites, suite_class|
|
251
|
-
# End up with a hash of suite class name to an array of test methods, so we can later find them and ignore empty test suites
|
252
|
-
if Frameworks.minitest5?
|
253
|
-
suites[suite_class] = suite_class.runnable_methods if suite_class.runnable_methods.size > 0
|
254
|
-
else
|
255
|
-
suites[suite_class] = suite_class.test_methods if suite_class.test_methods.size > 0
|
256
|
-
end
|
257
|
-
suites
|
258
|
-
end
|
259
|
-
end
|
260
|
-
|
261
|
-
# Shoves tests together in our custom container and collection classes.
|
262
|
-
# Memoize it since it's unnecessary to do this more than one for a given file.
|
263
|
-
def tests
|
264
|
-
@tests ||= begin
|
265
|
-
require "m/test_collection"
|
266
|
-
require "m/test_method"
|
267
|
-
# With each suite and array of tests,
|
268
|
-
# and with each test method present in this test file,
|
269
|
-
# shove a new test method into this collection.
|
270
|
-
suites.inject(TestCollection.new) do |collection, (suite_class, test_methods)|
|
271
|
-
test_methods.each do |test_method|
|
272
|
-
collection << TestMethod.create(suite_class, test_method)
|
273
|
-
end
|
274
|
-
collection
|
275
|
-
end
|
276
|
-
end
|
277
|
-
end
|
278
|
-
|
279
|
-
# Fail loudly if this isn't supported
|
280
|
-
def not_supported
|
281
|
-
STDERR.puts "This test framework is not supported! Please open up an issue at https://github.com/qrush/m !"
|
282
|
-
false
|
283
|
-
end
|
284
|
-
end
|
285
15
|
end
|