testrbl 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
data/.travis.yml ADDED
@@ -0,0 +1,4 @@
1
+ rvm:
2
+ - ree
3
+ - 1.9.2
4
+ - 1.9.3
data/Gemfile ADDED
@@ -0,0 +1,7 @@
1
+ source :rubygems
2
+ gemspec
3
+
4
+ gem 'test-unit'
5
+ gem 'rake'
6
+ gem 'rspec', '~>2'
7
+ gem 'shoulda'
data/Gemfile.lock ADDED
@@ -0,0 +1,34 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ testrbl (0.1.0)
5
+
6
+ GEM
7
+ remote: http://rubygems.org/
8
+ specs:
9
+ diff-lcs (1.1.3)
10
+ rake (0.9.2)
11
+ rspec (2.6.0)
12
+ rspec-core (~> 2.6.0)
13
+ rspec-expectations (~> 2.6.0)
14
+ rspec-mocks (~> 2.6.0)
15
+ rspec-core (2.6.4)
16
+ rspec-expectations (2.6.0)
17
+ diff-lcs (~> 1.1.2)
18
+ rspec-mocks (2.6.0)
19
+ shoulda (3.0.1)
20
+ shoulda-context (~> 1.0.0)
21
+ shoulda-matchers (~> 1.0.0)
22
+ shoulda-context (1.0.0)
23
+ shoulda-matchers (1.0.0)
24
+ test-unit (2.4.4)
25
+
26
+ PLATFORMS
27
+ ruby
28
+
29
+ DEPENDENCIES
30
+ rake
31
+ rspec (~> 2)
32
+ shoulda
33
+ test-unit
34
+ testrbl!
data/Rakefile ADDED
@@ -0,0 +1,22 @@
1
+ require 'bundler/gem_tasks'
2
+
3
+ task :default do
4
+ sh "rspec spec/"
5
+ end
6
+
7
+ # extracted from https://github.com/grosser/project_template
8
+ rule /^version:bump:.*/ do |t|
9
+ sh "git status | grep 'nothing to commit'" # ensure we are not dirty
10
+ index = ['major', 'minor','patch'].index(t.name.split(':').last)
11
+ file = 'lib/testrbl/version.rb'
12
+
13
+ version_file = File.read(file)
14
+ old_version, *version_parts = version_file.match(/(\d+)\.(\d+)\.(\d+)/).to_a
15
+ version_parts[index] = version_parts[index].to_i + 1
16
+ version_parts[2] = 0 if index < 2 # remove patch for minor
17
+ version_parts[1] = 0 if index < 1 # remove minor for major
18
+ new_version = version_parts * '.'
19
+ File.open(file,'w'){|f| f.write(version_file.sub(old_version, new_version)) }
20
+
21
+ sh "bundle && git add #{file} Gemfile.lock && git commit -m 'bump version to #{new_version}'"
22
+ end
data/Readme.md ADDED
@@ -0,0 +1,24 @@
1
+ Run ruby Test::Unit/Shoulda tests by line-number / folder / the dozen.<br/>
2
+ (everything not matching "file:line" is simply passed to testrb)
3
+
4
+ Install
5
+ =======
6
+ gem install testrbl
7
+
8
+ Usage
9
+ =====
10
+ testrbl test/unit/xxx_test.rb:123 # test by line number
11
+ testrbl test/unit # everything _test.rb in a folder (on 1.8 this would be test/unit/*)
12
+ testrbl xxx_test.rb yyy_test.rb # multiple files
13
+
14
+ TODO
15
+ ====
16
+ - make colors show in 1.9 (without using bundle exec and adding test-runit to gemfile) [stackoverflow](http://stackoverflow.com/questions/10810107/ruby-how-to-get-colors-in-testrb)
17
+ - prepend shoulda contexts to search -n '/OUTER-CONTEXT.*INNER-CONTEXT.*SHOULD/', make sure indentation is decreasing by 1 every step to avoid fetching everything
18
+
19
+ Author
20
+ ======
21
+ [Michael Grosser](http://grosser.it)<br/>
22
+ michael@grosser.it<br/>
23
+ License: MIT<br/>
24
+ [![Build Status](https://secure.travis-ci.org/grosser/testrbl.png)](http://travis-ci.org/grosser/testrbl)
data/bin/testrbl ADDED
@@ -0,0 +1,4 @@
1
+ #!/usr/bin/env ruby
2
+ $LOAD_PATH.unshift File.expand_path("../../lib", __FILE__)
3
+ require "testrbl"
4
+ Testrbl.run_from_cli(ARGV)
@@ -0,0 +1,3 @@
1
+ module Testrbl
2
+ VERSION = '0.1.0'
3
+ end
data/lib/testrbl.rb ADDED
@@ -0,0 +1,37 @@
1
+ require 'testrbl/version'
2
+
3
+ module Testrbl
4
+ PATTERNS = [
5
+ /^\s+(?:should|context)\s+['"](.*)['"]\s+do\s*$/,
6
+ /^\s+def\s+test_([a-z_\d]+)\s*$/
7
+ ]
8
+
9
+ def self.run_from_cli(argv)
10
+ # we only work with 1 file with line-number, everything else gets passed thourgh
11
+ if argv.join(" ") !~ /^\S+:\d+$/
12
+ run "testrb #{argv.map{|a| a.include?(' ') ? "'#{a}'" : a }.join(' ')}"
13
+ end
14
+
15
+ file, line = argv.first.split(':')
16
+ run "testrb #{file} #{pattern_from_file(file, line)}"
17
+ end
18
+
19
+ def self.run(command)
20
+ puts command
21
+ exec command
22
+ end
23
+
24
+ private
25
+
26
+ def self.pattern_from_file(file, line)
27
+ content = File.readlines(file)
28
+ search = content[0..(line.to_i-1)].reverse
29
+ search.each do |line|
30
+ PATTERNS.each do |r|
31
+ return "-n '/#{Regexp.escape($1.gsub('\'',"."))}/'" if line =~ r
32
+ end
33
+ end
34
+
35
+ raise "no test found before line #{line}"
36
+ end
37
+ end
@@ -0,0 +1,2 @@
1
+ $LOAD_PATH.unshift 'lib'
2
+ require 'testrbl'
@@ -0,0 +1,190 @@
1
+ require 'spec_helper'
2
+
3
+ describe Testrbl do
4
+ around do |example|
5
+ run "rm -rf tmp && mkdir tmp"
6
+ Dir.chdir "tmp" do
7
+ example.call
8
+ end
9
+ run "rm -rf tmp"
10
+ end
11
+
12
+ def run(cmd, options={})
13
+ result = `#{cmd} 2>&1`
14
+ raise "FAILED #{cmd} --> #{result}" if $?.success? != !options[:fail]
15
+ result
16
+ end
17
+
18
+ def testrbl(command, options={})
19
+ run "#{File.expand_path("../../bin/testrbl", __FILE__)} #{command}", options
20
+ end
21
+
22
+ def write(file, content)
23
+ folder = File.dirname(file)
24
+ run "mkdir -p #{folder}" unless File.exist?(folder)
25
+ File.open(file, 'w'){|f| f.write content }
26
+ end
27
+
28
+ it "has a VERSION" do
29
+ Testrbl::VERSION.should =~ /^[\.\da-z]+$/
30
+ end
31
+
32
+ context "with a simple setup" do
33
+ before do
34
+ write "a_test.rb", <<-RUBY
35
+ require 'test/unit'
36
+
37
+ class Xxx < Test::Unit::TestCase
38
+ def test_xxx
39
+ puts 'ABC'
40
+ end
41
+
42
+ def test_yyy
43
+ puts 'BCD'
44
+ end
45
+ end
46
+ RUBY
47
+ end
48
+
49
+ it "runs by exact line" do
50
+ result = testrbl "a_test.rb:4"
51
+ result.should include "ABC\n"
52
+ result.should_not include "BCD"
53
+ end
54
+
55
+ it "runs by above a line" do
56
+ result = testrbl "a_test.rb:5"
57
+ result.should include "ABC\n"
58
+ result.should_not include "BCD"
59
+ end
60
+
61
+ it "does not run when line is before test" do
62
+ result = testrbl "a_test.rb:3", :fail => true
63
+ result.should include "no test found before line 3"
64
+ result.should_not include "ABC"
65
+ end
66
+
67
+ it "runs whole file without number" do
68
+ result = testrbl "a_test.rb"
69
+ result.should include "ABC\n"
70
+ result.should include "BCD"
71
+ end
72
+
73
+ it "runs with options" do
74
+ result = testrbl "a_test.rb -n '/xxx/'"
75
+ result.should include "ABC"
76
+ result.should_not include "BCD"
77
+ end
78
+ end
79
+
80
+ context "shoulda" do
81
+ before do
82
+ write "a_test.rb", <<-RUBY
83
+ require 'test/unit'
84
+ require 'shoulda'
85
+
86
+ class Xxx < Test::Unit::TestCase
87
+ should "a" do
88
+ puts 'ABC'
89
+ end
90
+
91
+ should "b" do
92
+ puts 'BCD'
93
+ end
94
+
95
+ context "c" do
96
+ should "d" do
97
+ puts 'CDE'
98
+ end
99
+
100
+ should "e" do
101
+ puts 'DEF'
102
+ end
103
+ end
104
+ end
105
+ RUBY
106
+ end
107
+
108
+ it "runs should" do
109
+ result = testrbl "a_test.rb:9"
110
+ result.should_not include "ABC\n"
111
+ result.should include "BCD\n"
112
+ result.should_not include "CDE\n"
113
+ end
114
+
115
+ it "runs context" do
116
+ result = testrbl "a_test.rb:13"
117
+ result.should_not include "ABC\n"
118
+ result.should_not include "BCD\n"
119
+ result.should include "CDE\n"
120
+ result.should include "DEF\n"
121
+ end
122
+ end
123
+
124
+ context "multiple files / folders" do
125
+ before do
126
+ write "a_test.rb", <<-RUBY
127
+ require 'test/unit'
128
+
129
+ class Xxx1 < Test::Unit::TestCase
130
+ def test_xxx
131
+ puts 'ABC'
132
+ end
133
+ end
134
+ RUBY
135
+
136
+ write "a/a_test.rb", <<-RUBY
137
+ require 'test/unit'
138
+
139
+ class Xxx2 < Test::Unit::TestCase
140
+ def test_xxx
141
+ puts 'BCD'
142
+ end
143
+ end
144
+ RUBY
145
+
146
+ write "a/b/c_test.rb", <<-RUBY
147
+ require 'test/unit'
148
+
149
+ class Xxx3 < Test::Unit::TestCase
150
+ def test_xxx
151
+ puts 'CDE'
152
+ end
153
+ end
154
+ RUBY
155
+
156
+ write "a/c/c_test.rb", <<-RUBY
157
+ require 'test/unit'
158
+
159
+ class Xxx4 < Test::Unit::TestCase
160
+ def test_xxx
161
+ puts 'DEF'
162
+ end
163
+ end
164
+ RUBY
165
+ end
166
+
167
+ it "runs a folder with subfolders" do
168
+ result = testrbl "a"
169
+ result.should_not include "ABC\n"
170
+ result.should include "BCD\n"
171
+ result.should include "CDE\n"
172
+ end
173
+
174
+ it "runs files and folders" do
175
+ result = testrbl "a/b a/c/c_test.rb"
176
+ result.should_not include "ABC\n"
177
+ result.should_not include "BCD\n"
178
+ result.should include "CDE\n"
179
+ result.should include "DEF\n"
180
+ end
181
+
182
+ it "runs multiple files" do
183
+ result = testrbl "a/b/c_test.rb a/c/c_test.rb"
184
+ result.should_not include "ABC\n"
185
+ result.should_not include "BCD\n"
186
+ result.should include "CDE\n"
187
+ result.should include "DEF\n"
188
+ end
189
+ end
190
+ end
data/testrbl.gemspec ADDED
@@ -0,0 +1,13 @@
1
+ $LOAD_PATH.unshift File.expand_path('../lib', __FILE__)
2
+ name = "testrbl"
3
+ require "#{name}/version"
4
+
5
+ Gem::Specification.new name, Testrbl::VERSION do |s|
6
+ s.summary = "Run ruby Test::Unit/Shoulda tests by line-number / folder / the dozen"
7
+ s.authors = ["Michael Grosser"]
8
+ s.email = "michael@grosser.it"
9
+ s.homepage = "http://github.com/grosser/#{name}"
10
+ s.files = `git ls-files`.split("\n")
11
+ s.executables = ["testrbl"]
12
+ s.license = 'MIT'
13
+ end
metadata ADDED
@@ -0,0 +1,63 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: testrbl
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Michael Grosser
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-05-30 00:00:00.000000000 Z
13
+ dependencies: []
14
+ description:
15
+ email: michael@grosser.it
16
+ executables:
17
+ - testrbl
18
+ extensions: []
19
+ extra_rdoc_files: []
20
+ files:
21
+ - .travis.yml
22
+ - Gemfile
23
+ - Gemfile.lock
24
+ - Rakefile
25
+ - Readme.md
26
+ - bin/testrbl
27
+ - lib/testrbl.rb
28
+ - lib/testrbl/version.rb
29
+ - spec/spec_helper.rb
30
+ - spec/testrbl_spec.rb
31
+ - testrbl.gemspec
32
+ homepage: http://github.com/grosser/testrbl
33
+ licenses:
34
+ - MIT
35
+ post_install_message:
36
+ rdoc_options: []
37
+ require_paths:
38
+ - lib
39
+ required_ruby_version: !ruby/object:Gem::Requirement
40
+ none: false
41
+ requirements:
42
+ - - ! '>='
43
+ - !ruby/object:Gem::Version
44
+ version: '0'
45
+ segments:
46
+ - 0
47
+ hash: -2640591623303812180
48
+ required_rubygems_version: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ! '>='
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ segments:
55
+ - 0
56
+ hash: -2640591623303812180
57
+ requirements: []
58
+ rubyforge_project:
59
+ rubygems_version: 1.8.24
60
+ signing_key:
61
+ specification_version: 3
62
+ summary: Run ruby Test::Unit/Shoulda tests by line-number / folder / the dozen
63
+ test_files: []