minitest-line 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/lib/minitest/line_plugin.rb +36 -0
- data/test/test_line.rb +52 -0
- metadata +64 -0
@@ -0,0 +1,36 @@
|
|
1
|
+
module Minitest
|
2
|
+
def self.plugin_line_options(opts, options)
|
3
|
+
opts.on '-l', '--line N', Integer, "Run test at line number" do |lineno|
|
4
|
+
options[:line] = lineno
|
5
|
+
end
|
6
|
+
end
|
7
|
+
|
8
|
+
def self.plugin_line_init(options)
|
9
|
+
return unless exp_line = options[:line]
|
10
|
+
|
11
|
+
methods = Runnable.runnables.flat_map do |runnable|
|
12
|
+
runnable.runnable_methods.map do |name|
|
13
|
+
[name, runnable.instance_method(name)]
|
14
|
+
end
|
15
|
+
end.uniq
|
16
|
+
|
17
|
+
current_filename = nil
|
18
|
+
tests = {}
|
19
|
+
|
20
|
+
methods.each do |name, meth|
|
21
|
+
next unless loc = meth.source_location
|
22
|
+
current_filename ||= loc[0]
|
23
|
+
next unless current_filename == loc[0]
|
24
|
+
tests[loc[1]] = name
|
25
|
+
end
|
26
|
+
|
27
|
+
_, main_test = tests.sort_by { |k, v| -k }.detect do |line, name|
|
28
|
+
exp_line >= line
|
29
|
+
end
|
30
|
+
|
31
|
+
raise "Could not find test method after line #{exp_line}" unless main_test
|
32
|
+
|
33
|
+
options[:filter] = main_test
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
data/test/test_line.rb
ADDED
@@ -0,0 +1,52 @@
|
|
1
|
+
$LOAD_PATH << File.expand_path('../../lib', __FILE__)
|
2
|
+
|
3
|
+
require 'stringio'
|
4
|
+
require 'minitest'
|
5
|
+
require 'minitest/autorun'
|
6
|
+
require 'minitest/mock'
|
7
|
+
|
8
|
+
class LineExample < Minitest::Test
|
9
|
+
def test_hello
|
10
|
+
p :hello
|
11
|
+
end
|
12
|
+
|
13
|
+
def test_world
|
14
|
+
p :world
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
Minitest::Runnable.runnables.delete(LineExample)
|
19
|
+
|
20
|
+
class TestLine < Minitest::Test
|
21
|
+
def run_class(klass, args = [])
|
22
|
+
Minitest::Runnable.stub :runnables, [klass] do
|
23
|
+
$stdout = io = StringIO.new
|
24
|
+
Minitest.run(args)
|
25
|
+
$stdout = STDOUT
|
26
|
+
io.string
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
def test_line
|
31
|
+
(9..12).each do |line|
|
32
|
+
output = run_class LineExample, ['--line', line.to_s]
|
33
|
+
assert_match /1 runs/, output
|
34
|
+
assert_match /:hello/, output
|
35
|
+
refute_match /:world/, output
|
36
|
+
end
|
37
|
+
|
38
|
+
(13..45).each do |line|
|
39
|
+
output = run_class LineExample, ['--line', line.to_s]
|
40
|
+
assert_match /1 runs/, output
|
41
|
+
assert_match /:world/, output
|
42
|
+
refute_match /:hello/, output
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
def test_before
|
47
|
+
assert_raises(RuntimeError) do
|
48
|
+
run_class LineExample, ['--line', '8']
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
metadata
ADDED
@@ -0,0 +1,64 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: minitest-line
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.5.0
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Magnus Holm
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2013-05-26 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: minitest
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ~>
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '5.0'
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ~>
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '5.0'
|
30
|
+
description: Focused tests for Minitest
|
31
|
+
email: judofyr@gmail.com
|
32
|
+
executables: []
|
33
|
+
extensions: []
|
34
|
+
extra_rdoc_files: []
|
35
|
+
files:
|
36
|
+
- test/test_line.rb
|
37
|
+
- lib/minitest/line_plugin.rb
|
38
|
+
homepage: https://github.com/judofyr/minitest-line
|
39
|
+
licenses: []
|
40
|
+
post_install_message:
|
41
|
+
rdoc_options: []
|
42
|
+
require_paths:
|
43
|
+
- lib
|
44
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
45
|
+
none: false
|
46
|
+
requirements:
|
47
|
+
- - ! '>='
|
48
|
+
- !ruby/object:Gem::Version
|
49
|
+
version: '0'
|
50
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
51
|
+
none: false
|
52
|
+
requirements:
|
53
|
+
- - ! '>='
|
54
|
+
- !ruby/object:Gem::Version
|
55
|
+
version: '0'
|
56
|
+
requirements: []
|
57
|
+
rubyforge_project:
|
58
|
+
rubygems_version: 1.8.25
|
59
|
+
signing_key:
|
60
|
+
specification_version: 3
|
61
|
+
summary: Focused tests for Minitest
|
62
|
+
test_files:
|
63
|
+
- test/test_line.rb
|
64
|
+
has_rdoc:
|