m 1.1.0 → 1.2.0

Sign up to get free protection for your applications and to get access to all the features.
data/lib/m.rb CHANGED
@@ -15,14 +15,14 @@
15
15
  #If you're using Bundler, you'll need to include it in your Gemfile. Toss it into the `test` group:
16
16
  #
17
17
  # group :test do
18
- # gem 'm', '~> 1.1'
18
+ # gem 'm', '~> 1.2'
19
19
  # end
20
20
  #
21
21
  #Developing a RubyGem? Add `m` as a development dependency.
22
22
  #
23
23
  # Gem::Specification.new do |gem|
24
24
  # # ...
25
- # gem.add_development_dependency "m", "~> 1.1"
25
+ # gem.add_development_dependency "m", "~> 1.2"
26
26
  # end
27
27
  #
28
28
  #`m` is Ruby 1.9+ only. Sorry, but `method_source`, `sourcify`, and `ruby_parser`
@@ -38,12 +38,12 @@
38
38
  #
39
39
  # $ cat -n test/example_test.rb
40
40
  # 1 require 'test/unit'
41
- # 2
41
+ # 2
42
42
  # 3 class ExampleTest < Test::Unit::TestCase
43
43
  # 4 def test_apple
44
44
  # 5 assert_equal 1, 1
45
45
  # 6 end
46
- # 7
46
+ # 7
47
47
  # 8 def test_banana
48
48
  # 9 assert_equal 1, 1
49
49
  # 10 end
@@ -73,7 +73,7 @@
73
73
  #Want to run the whole test? Just leave off the line number.
74
74
  #
75
75
  # $ m test/example_test.rb
76
- # Run options:
76
+ # Run options:
77
77
  #
78
78
  # # Running tests:
79
79
  #
@@ -98,7 +98,7 @@
98
98
  ### M, your metal test runner
99
99
  # Maybe this gem should have a longer name? Metal?
100
100
  module M
101
- VERSION = "1.1.0"
101
+ VERSION = "1.2.0" unless defined?(VERSION)
102
102
 
103
103
  # Accept arguments coming from bin/m and run tests.
104
104
  def self.run(argv)
@@ -128,9 +128,11 @@ module M
128
128
  # Just shell out to `rake test`.
129
129
  exec "rake test"
130
130
  else
131
+ parse_options! @argv
132
+
131
133
  # Parse out ARGV, it should be coming in in a format like `test/test_file.rb:9`
132
134
  @file, line = @argv.first.split(':')
133
- @line = line.to_i
135
+ @line ||= line.to_i
134
136
 
135
137
  # If this file is a directory, not a file, run the tests inside of this directory
136
138
  if Dir.exist?(@file)
@@ -147,6 +149,31 @@ module M
147
149
  end
148
150
  end
149
151
 
152
+ def parse_options!(argv)
153
+ require 'optparse'
154
+
155
+ OptionParser.new do |opts|
156
+ opts.banner = 'Options:'
157
+ opts.version = M::VERSION
158
+
159
+ opts.on '-h', '--help', 'Display this help.' do
160
+ puts "Usage: m [OPTIONS] [FILES]\n\n", opts
161
+ exit
162
+ end
163
+
164
+ opts.on '--version', 'Display the version.' do
165
+ puts "m #{M::VERSION}"
166
+ exit
167
+ end
168
+
169
+ opts.on '-l', '--line LINE', Integer, 'Line number for file.' do |line|
170
+ @line = line
171
+ end
172
+
173
+ opts.parse! argv
174
+ end
175
+ end
176
+
150
177
  def execute
151
178
  # Locate tests to run that may be inside of this line. There could be more than one!
152
179
  tests_to_run = tests.within(@line)
@@ -196,10 +223,10 @@ module M
196
223
  end
197
224
 
198
225
  # Figure out what test framework we're using
199
- if defined?(Test)
200
- suites = Test::Unit::TestCase.test_suites
201
- elsif defined?(MiniTest)
226
+ if defined?(MiniTest)
202
227
  suites = MiniTest::Unit::TestCase.test_suites
228
+ elsif defined?(Test)
229
+ suites = Test::Unit::TestCase.test_suites
203
230
  else
204
231
  not_supported
205
232
  end
@@ -1,5 +1,3 @@
1
- require "ostruct"
2
-
3
1
  module M
4
2
  ### Simple data structure for what a test method contains.
5
3
  #
data/m.gemspec CHANGED
@@ -12,14 +12,14 @@ Gem::Specification.new do |gem|
12
12
  gem.require_paths = ["lib"]
13
13
  gem.version = M::VERSION
14
14
 
15
- gem.add_runtime_dependency "method_source", "~> 0.6.7"
15
+ gem.add_runtime_dependency "method_source", ">= 0.6.7"
16
16
  gem.add_runtime_dependency "rake", ">= 0.9.2.2", "< 1.0.0"
17
17
  gem.add_development_dependency "activesupport"
18
18
  gem.add_development_dependency "rdiscount"
19
19
  gem.add_development_dependency "rocco"
20
20
  gem.add_development_dependency "minitest"
21
21
 
22
- gem.required_ruby_version = "~> 1.9"
22
+ gem.required_ruby_version = ">= 1.9"
23
23
 
24
24
  gem.summary = description = %q{Run test/unit tests by line number. Metal!}
25
25
  end
@@ -0,0 +1,33 @@
1
+ require 'test_helper'
2
+
3
+ class OptionsTest < MTest
4
+ def test_short_help_option
5
+ output = m('-h')
6
+ assert_output /^Usage: m \[OPTIONS\] \[FILES\]/, output
7
+ end
8
+
9
+ def test_long_help_option
10
+ output = m('--help')
11
+ assert_output /^Usage: m \[OPTIONS\] \[FILES\]/, output
12
+ end
13
+
14
+ def test_verbose_option
15
+ output = m('--version')
16
+ assert_output /^m #{M::VERSION}/, output
17
+ end
18
+
19
+ def test_short_line_option
20
+ output = m('-l19 examples/minitest_example_test.rb')
21
+ assert_output /1 tests, 1 assertions/, output
22
+ end
23
+
24
+ def test_long_line_option
25
+ output = m('--line 19 examples/minitest_example_test.rb')
26
+ assert_output /1 tests, 1 assertions/, output
27
+ end
28
+
29
+ def test_line_option_has_precedence_over_colon_format
30
+ output = m('--line 19 examples/minitest_example_test.rb:2')
31
+ assert_output /1 tests, 1 assertions/, output
32
+ end
33
+ end
@@ -1,3 +1,4 @@
1
+ require './lib/m'
1
2
  require 'test/unit'
2
3
  require 'active_support/test_case'
3
4
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: m
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.0
4
+ version: 1.2.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,22 +9,22 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-04-07 00:00:00.000000000 Z
12
+ date: 2012-07-31 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: method_source
16
- requirement: &70312941477320 !ruby/object:Gem::Requirement
16
+ requirement: &70302923866320 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
- - - ~>
19
+ - - ! '>='
20
20
  - !ruby/object:Gem::Version
21
21
  version: 0.6.7
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70312941477320
24
+ version_requirements: *70302923866320
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: rake
27
- requirement: &70312941476520 !ruby/object:Gem::Requirement
27
+ requirement: &70302923874700 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -35,10 +35,10 @@ dependencies:
35
35
  version: 1.0.0
36
36
  type: :runtime
37
37
  prerelease: false
38
- version_requirements: *70312941476520
38
+ version_requirements: *70302923874700
39
39
  - !ruby/object:Gem::Dependency
40
40
  name: activesupport
41
- requirement: &70312941475560 !ruby/object:Gem::Requirement
41
+ requirement: &70302923893880 !ruby/object:Gem::Requirement
42
42
  none: false
43
43
  requirements:
44
44
  - - ! '>='
@@ -46,10 +46,10 @@ dependencies:
46
46
  version: '0'
47
47
  type: :development
48
48
  prerelease: false
49
- version_requirements: *70312941475560
49
+ version_requirements: *70302923893880
50
50
  - !ruby/object:Gem::Dependency
51
51
  name: rdiscount
52
- requirement: &70312941510320 !ruby/object:Gem::Requirement
52
+ requirement: &70302923912060 !ruby/object:Gem::Requirement
53
53
  none: false
54
54
  requirements:
55
55
  - - ! '>='
@@ -57,10 +57,10 @@ dependencies:
57
57
  version: '0'
58
58
  type: :development
59
59
  prerelease: false
60
- version_requirements: *70312941510320
60
+ version_requirements: *70302923912060
61
61
  - !ruby/object:Gem::Dependency
62
62
  name: rocco
63
- requirement: &70312941509900 !ruby/object:Gem::Requirement
63
+ requirement: &70302923918460 !ruby/object:Gem::Requirement
64
64
  none: false
65
65
  requirements:
66
66
  - - ! '>='
@@ -68,10 +68,10 @@ dependencies:
68
68
  version: '0'
69
69
  type: :development
70
70
  prerelease: false
71
- version_requirements: *70312941509900
71
+ version_requirements: *70302923918460
72
72
  - !ruby/object:Gem::Dependency
73
73
  name: minitest
74
- requirement: &70312941509480 !ruby/object:Gem::Requirement
74
+ requirement: &70302923922180 !ruby/object:Gem::Requirement
75
75
  none: false
76
76
  requirements:
77
77
  - - ! '>='
@@ -79,7 +79,7 @@ dependencies:
79
79
  version: '0'
80
80
  type: :development
81
81
  prerelease: false
82
- version_requirements: *70312941509480
82
+ version_requirements: *70302923922180
83
83
  description:
84
84
  email:
85
85
  - nick@quaran.to
@@ -115,6 +115,7 @@ files:
115
115
  - test/examples/test_unit_example_test.rb
116
116
  - test/minitest_test.rb
117
117
  - test/multiple_test.rb
118
+ - test/options_test.rb
118
119
  - test/test_helper.rb
119
120
  - test/test_unit_test.rb
120
121
  homepage: https://github.com/qrush/m
@@ -126,7 +127,7 @@ require_paths:
126
127
  required_ruby_version: !ruby/object:Gem::Requirement
127
128
  none: false
128
129
  requirements:
129
- - - ~>
130
+ - - ! '>='
130
131
  - !ruby/object:Gem::Version
131
132
  version: '1.9'
132
133
  required_rubygems_version: !ruby/object:Gem::Requirement
@@ -155,6 +156,7 @@ test_files:
155
156
  - test/examples/test_unit_example_test.rb
156
157
  - test/minitest_test.rb
157
158
  - test/multiple_test.rb
159
+ - test/options_test.rb
158
160
  - test/test_helper.rb
159
161
  - test/test_unit_test.rb
160
162
  has_rdoc: