m 1.1.0 → 1.2.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/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: