single_test 0.3.7 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile CHANGED
@@ -1,5 +1,7 @@
1
- source 'http://rubygems.org'
1
+ source :rubygems
2
2
 
3
- gem 'rake'
4
- gem 'jeweler'
5
- gem 'rspec'
3
+ group :dev do
4
+ gem 'rake'
5
+ gem 'jeweler'
6
+ gem 'rspec', '~>2'
7
+ end
data/Gemfile.lock CHANGED
@@ -1,18 +1,21 @@
1
1
  GEM
2
2
  remote: http://rubygems.org/
3
3
  specs:
4
- gemcutter (0.5.0)
5
- json_pure
4
+ diff-lcs (1.1.2)
6
5
  git (1.2.5)
7
- jeweler (1.4.0)
8
- gemcutter (>= 0.1.0)
6
+ jeweler (1.5.2)
7
+ bundler (~> 1.0.0)
9
8
  git (>= 1.2.5)
10
- rubyforge (>= 2.0.0)
11
- json_pure (1.4.3)
9
+ rake
12
10
  rake (0.8.7)
13
- rspec (1.3.0)
14
- rubyforge (2.0.4)
15
- json_pure (>= 1.1.7)
11
+ rspec (2.4.0)
12
+ rspec-core (~> 2.4.0)
13
+ rspec-expectations (~> 2.4.0)
14
+ rspec-mocks (~> 2.4.0)
15
+ rspec-core (2.4.0)
16
+ rspec-expectations (2.4.0)
17
+ diff-lcs (~> 1.1.2)
18
+ rspec-mocks (2.4.0)
16
19
 
17
20
  PLATFORMS
18
21
  ruby
@@ -20,4 +23,4 @@ PLATFORMS
20
23
  DEPENDENCIES
21
24
  jeweler
22
25
  rake
23
- rspec
26
+ rspec (~> 2)
data/Rakefile CHANGED
@@ -1,7 +1,7 @@
1
1
  task :default do
2
2
  options = "--colour"
3
3
  files = FileList['spec/**/*_spec.rb'].map{|f| f.sub(%r{^spec/},'') }
4
- exit system("cd spec && spec #{options} #{files}") ? 0 : 1
4
+ exec "cd spec && rspec #{options} #{files}"
5
5
  end
6
6
 
7
7
  begin
@@ -18,4 +18,4 @@ begin
18
18
  Jeweler::GemcutterTasks.new
19
19
  rescue LoadError
20
20
  puts "Jeweler, or one of its dependencies, is not available. Install it with: sudo gem install jeweler"
21
- end
21
+ end
data/Readme.md CHANGED
@@ -14,10 +14,12 @@ As Gem:
14
14
 
15
15
 
16
16
  ###Single test/spec
17
- rake spec:user #run spec/model/user_spec.rb (searches for user*_spec.rb)
17
+ Searchs for test-files matching the given name.
18
+
19
+ rake spec:user #run spec/model/user_spec.rb
18
20
  rake test:users_c #run test/functional/users_controller_test.rb
19
21
  rake spec:admin/users_c #run spec/controllers/admin/users_controller_spec.rb
20
- rake test:u*hel #run test/helpers/user_helper_test.rb (searches for u*hel*_test.rb)
22
+ rake test:u*hel #run test/helpers/user_helper_test.rb
21
23
 
22
24
  ###Single test-case/example
23
25
  rake spec:user:token #run the first spec in user_spec.rb that matches /token/
@@ -45,6 +47,6 @@ TODO
45
47
 
46
48
  AUTHOR
47
49
  ======
48
- [Michael Grosser](http://pragmatig.wordpress.com)
49
- grosser.michael@gmail.com
50
- Hereby placed under public domain, do what you want, just do not hold me accountable...
50
+ [Michael Grosser](http://pragmatig.wordpress.com)
51
+ grosser.michael@gmail.com
52
+ Hereby placed under public domain, do what you want, just do not hold me accountable...
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.3.7
1
+ 0.4.0
data/lib/single_test.rb CHANGED
@@ -3,10 +3,6 @@ require 'rake'
3
3
  module SingleTest
4
4
  extend self
5
5
  CMD_LINE_MATCHER = /^(spec|test)\:.*(\:.*)?$/
6
- SEARCH_ORDER = {
7
- 'test'=> %w(unit functional integration *),
8
- 'spec'=> %w(models controllers views helpers *),
9
- }
10
6
 
11
7
  def load_tasks
12
8
  load File.join(File.dirname(__FILE__), 'tasks', 'single_test.rake')
@@ -42,11 +38,6 @@ module SingleTest
42
38
  file = find_test_file(type,file)
43
39
  return unless file
44
40
 
45
- #when spec, convert test_name regex to actual test_name
46
- if type == 'spec' && test_name
47
- test_name = find_example_in_spec(file, test_name) || test_name
48
- end
49
-
50
41
  #run the file
51
42
  puts "running: #{file}"
52
43
  ENV['RAILS_ENV'] = 'test' #current EVN['RAILS_ENV'] is 'development', and will also exist in all called commands
@@ -64,18 +55,15 @@ module SingleTest
64
55
  ]
65
56
  end
66
57
 
58
+ # find files matching the given name,
59
+ # prefer lower folders and short names, since deep/long names
60
+ # can be found via a more precise search string
67
61
  def find_test_file(type,file_name)
68
- ["","**/"].each do |depth| # find in lower folders first
69
- ['','*'].each do |exactness| # find exact matches first
70
- SEARCH_ORDER[type].each do |folder|
71
- base = "#{type}/#{folder}/#{depth}#{file_name}"
72
- # without wildcard no search is performed -> ?rb
73
- found = FileList["#{base}#{exactness}_#{type}?rb"].first
74
- return found if found
75
- end
76
- end
77
- end
78
- nil
62
+ regex = /#{file_name.gsub('*','.*').gsub('?','.')}/ # support *? syntax for search
63
+ all_tests(type).grep(regex).sort_by do |path|
64
+ parts = path.split('/')
65
+ [parts.size, parts.last.size]
66
+ end.first
79
67
  end
80
68
 
81
69
  def find_example_in_spec(file, test_name)
@@ -89,11 +77,12 @@ module SingleTest
89
77
  case type.to_s
90
78
  when 'test' then sh "ruby -Ilib:test #{file} -n /#{test_name}/"
91
79
  when 'spec' then
80
+ executable = spec_executable
92
81
  options_file = "spec/spec.opts"
93
82
  options_file = (File.exist?(options_file) ? " --options #{options_file}" : "")
94
- command = "export RAILS_ENV=test ; #{spec_executable}#{options_file} #{file}"
95
- command += (test_name ? %Q( -e "#{test_name.sub('"',"\\\"")}") : '') # just one test ?
96
- command += (ENV['X'] ? " -X" : "") # run via drb ?
83
+ command = "export RAILS_ENV=test ; #{executable}#{options_file} #{file}"
84
+ command += test_name_matcher(executable, file, test_name)
85
+ command += " -X" if ENV['X'] # run via drb ?
97
86
  sh command
98
87
  else raise "Unknown: #{type}"
99
88
  end
@@ -118,6 +107,14 @@ module SingleTest
118
107
 
119
108
  private
120
109
 
110
+ def test_name_matcher(executable, file, test_name)
111
+ if test_name and not executable.include?('rspec')
112
+ # rspec 1 only supports full test names -> find a matching test-name
113
+ test_name = find_example_in_spec(file, test_name) || test_name
114
+ end
115
+ test_name ? %Q( -e "#{test_name.sub('"',"\\\"")}") : ''
116
+ end
117
+
121
118
  # copied from http://github.com/carlhuda/bundler Bundler::SharedHelpers#find_gemfile
122
119
  def self.bundler_enabled?
123
120
  return true if Object.const_defined?(:Bundler)
data/single_test.gemspec CHANGED
@@ -1,44 +1,42 @@
1
1
  # Generated by jeweler
2
2
  # DO NOT EDIT THIS FILE DIRECTLY
3
- # Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
4
  # -*- encoding: utf-8 -*-
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{single_test}
8
- s.version = "0.3.7"
8
+ s.version = "0.4.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Michael Grosser"]
12
- s.date = %q{2010-08-21}
12
+ s.date = %q{2011-04-16}
13
13
  s.email = %q{grosser.michael@gmail.com}
14
14
  s.files = [
15
15
  "Gemfile",
16
- "Gemfile.lock",
17
- "Rakefile",
18
- "Readme.md",
19
- "VERSION",
20
- "lib/single_test.rb",
21
- "lib/tasks/single_test.rake",
22
- "single_test.gemspec",
23
- "spec/example_finder_test.txt",
24
- "spec/single_test_spec.rb",
25
- "spec/spec_helper.rb"
16
+ "Gemfile.lock",
17
+ "Rakefile",
18
+ "Readme.md",
19
+ "VERSION",
20
+ "lib/single_test.rb",
21
+ "lib/tasks/single_test.rake",
22
+ "single_test.gemspec",
23
+ "spec/example_finder_test.txt",
24
+ "spec/single_test_spec.rb",
25
+ "spec/spec_helper.rb"
26
26
  ]
27
27
  s.homepage = %q{http://github.com/grosser/single_test}
28
- s.rdoc_options = ["--charset=UTF-8"]
29
28
  s.require_paths = ["lib"]
30
- s.rubygems_version = %q{1.3.6}
29
+ s.rubygems_version = %q{1.4.2}
31
30
  s.summary = %q{Rake tasks to invoke single tests/specs with rakish syntax}
32
31
  s.test_files = [
33
32
  "spec/single_test_spec.rb",
34
- "spec/spec_helper.rb"
33
+ "spec/spec_helper.rb"
35
34
  ]
36
35
 
37
36
  if s.respond_to? :specification_version then
38
- current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
39
37
  s.specification_version = 3
40
38
 
41
- if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
39
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
42
40
  else
43
41
  end
44
42
  else
@@ -60,15 +60,15 @@ describe SingleTest do
60
60
  SingleTest.find_test_file('spec','xxx').should == 'spec/mixins/xxx_spec.rb'
61
61
  end
62
62
 
63
- it "finds models before controllers" do
63
+ it "finds short matches first" do
64
64
  make_file 'spec/models/xxx_spec.rb'
65
65
  make_file 'spec/controllers/xxx_controller_spec.rb'
66
66
  SingleTest.find_test_file('spec','xx').should == 'spec/models/xxx_spec.rb'
67
67
  end
68
68
 
69
- it "finds with paths" do
69
+ it "finds with wildcards" do
70
70
  make_file 'spec/controllers/admin/xxx_controller_spec.rb'
71
- SingleTest.find_test_file('spec','ad*/xx').should == 'spec/controllers/admin/xxx_controller_spec.rb'
71
+ SingleTest.find_test_file('spec','ad*/x?x').should == 'spec/controllers/admin/xxx_controller_spec.rb'
72
72
  end
73
73
  end
74
74
 
@@ -142,18 +142,28 @@ describe SingleTest do
142
142
  SingleTest.run_test('spec','xxx')
143
143
  end
144
144
 
145
- it "runs single specs through -e" do
146
- SingleTest.should_receive(:sh).with('export RAILS_ENV=test ; script/spec xxx -e "yyy"')
145
+ it "runs all matching specs through -e for rspec 2" do
146
+ File.should_receive(:file?).with('script/spec').and_return false
147
+ File.stub!(:readlines).and_return ['it "bla yyy" do']
148
+ SingleTest.should_receive(:sh).with('export RAILS_ENV=test ; bundle exec rspec xxx -e "yyy"')
149
+ SingleTest.run_test('spec','xxx', 'yyy')
150
+ end
151
+
152
+ it "runs full single specs through -e for rspec 1" do
153
+ File.stub!(:readlines).and_return ['it "bla yyy" do']
154
+ SingleTest.should_receive(:sh).with('export RAILS_ENV=test ; script/spec xxx -e "bla yyy"')
147
155
  SingleTest.run_test('spec','xxx', 'yyy')
148
156
  end
149
157
 
150
158
  it "runs single specs through -e with -X" do
159
+ File.stub!(:readlines).and_return []
151
160
  ENV['X']=''
152
161
  SingleTest.should_receive(:sh).with('export RAILS_ENV=test ; script/spec xxx -e "yyy" -X')
153
162
  SingleTest.run_test('spec','xxx', 'yyy')
154
163
  end
155
164
 
156
165
  it "runs quoted specs though -e" do
166
+ File.stub!(:readlines).and_return []
157
167
  SingleTest.should_receive(:sh).with(%Q(export RAILS_ENV=test ; script/spec xxx -e "y\\\"yy"))
158
168
  SingleTest.run_test('spec','xxx', 'y"yy')
159
169
  end
@@ -167,23 +177,24 @@ describe SingleTest do
167
177
  it "runs with bundled spec if script/spec is not found" do
168
178
  File.stub!(:file?).and_return false
169
179
  File.should_receive(:file?).with('script/spec').and_return false
170
- SingleTest.should_receive(:sh).with('export RAILS_ENV=test ; bundle exec spec xxx')
180
+ SingleTest.should_receive(:sh).with('export RAILS_ENV=test ; bundle exec rspec xxx')
171
181
  SingleTest.run_test('spec','xxx')
172
182
  end
173
183
 
174
184
  it "uses bundler if Gemfile is present" do
175
185
  File.stub!(:file?).and_return false
176
186
  SingleTest.should_receive(:bundler_enabled?).and_return true
177
- SingleTest.should_receive(:sh).with('export RAILS_ENV=test ; bundle exec spec xxx')
187
+ SingleTest.should_receive(:sh).with('export RAILS_ENV=test ; bundle exec rspec xxx')
178
188
  SingleTest.run_test('spec','xxx')
179
189
  end
180
190
  end
181
191
 
182
192
  describe :load_tasks do
183
193
  it "can load em" do
184
- (Rake::Task['spec:one_by_one'] rescue nil).should == nil
194
+ result = Rake::Task['spec:one_by_one'] rescue nil
195
+ result.should == nil
185
196
  SingleTest.load_tasks
186
197
  Rake::Task['spec:one_by_one'].should_not == nil
187
198
  end
188
199
  end
189
- end
200
+ end
data/spec/spec_helper.rb CHANGED
@@ -3,7 +3,7 @@ SPEC_ROOT = File.dirname(__FILE__)
3
3
  $LOAD_PATH << File.expand_path("../lib", SPEC_ROOT)
4
4
 
5
5
  # ---- rspec
6
- Spec::Runner.configure do |config|
6
+ RSpec.configure do |config|
7
7
  config.before do
8
8
  `mkdir -p #{SPEC_ROOT}/script`
9
9
  `touch #{SPEC_ROOT}/script/spec`
@@ -13,4 +13,4 @@ Spec::Runner.configure do |config|
13
13
  `rm -rf #{SPEC_ROOT}/app`
14
14
  `rm -rf #{SPEC_ROOT}/spec`
15
15
  end
16
- end
16
+ end
metadata CHANGED
@@ -1,12 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: single_test
3
3
  version: !ruby/object:Gem::Version
4
- prerelease: false
4
+ hash: 15
5
+ prerelease:
5
6
  segments:
6
7
  - 0
7
- - 3
8
- - 7
9
- version: 0.3.7
8
+ - 4
9
+ - 0
10
+ version: 0.4.0
10
11
  platform: ruby
11
12
  authors:
12
13
  - Michael Grosser
@@ -14,7 +15,7 @@ autorequire:
14
15
  bindir: bin
15
16
  cert_chain: []
16
17
 
17
- date: 2010-08-21 00:00:00 +02:00
18
+ date: 2011-04-16 00:00:00 +02:00
18
19
  default_executable:
19
20
  dependencies: []
20
21
 
@@ -43,28 +44,32 @@ homepage: http://github.com/grosser/single_test
43
44
  licenses: []
44
45
 
45
46
  post_install_message:
46
- rdoc_options:
47
- - --charset=UTF-8
47
+ rdoc_options: []
48
+
48
49
  require_paths:
49
50
  - lib
50
51
  required_ruby_version: !ruby/object:Gem::Requirement
52
+ none: false
51
53
  requirements:
52
54
  - - ">="
53
55
  - !ruby/object:Gem::Version
56
+ hash: 3
54
57
  segments:
55
58
  - 0
56
59
  version: "0"
57
60
  required_rubygems_version: !ruby/object:Gem::Requirement
61
+ none: false
58
62
  requirements:
59
63
  - - ">="
60
64
  - !ruby/object:Gem::Version
65
+ hash: 3
61
66
  segments:
62
67
  - 0
63
68
  version: "0"
64
69
  requirements: []
65
70
 
66
71
  rubyforge_project:
67
- rubygems_version: 1.3.6
72
+ rubygems_version: 1.4.2
68
73
  signing_key:
69
74
  specification_version: 3
70
75
  summary: Rake tasks to invoke single tests/specs with rakish syntax