respec 0.0.1 → 0.0.2
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/CHANGELOG +5 -0
- data/lib/respec/app.rb +19 -5
- data/lib/respec/version.rb +1 -1
- data/respec.gemspec +2 -0
- data/spec/integration_spec.rb +18 -14
- data/spec/respec/app_spec.rb +78 -27
- data/spec/spec_helper.rb +2 -2
- metadata +48 -6
data/CHANGELOG
CHANGED
data/lib/respec/app.rb
CHANGED
@@ -9,16 +9,25 @@ module Respec
|
|
9
9
|
@raw_args = []
|
10
10
|
end
|
11
11
|
@formatter = 'progress'
|
12
|
-
@
|
12
|
+
@selected_failures = false
|
13
|
+
@update_failures = true
|
13
14
|
process_args
|
14
15
|
end
|
15
16
|
|
16
17
|
def command
|
17
|
-
@command ||= ['rspec'] + formatter_args + generated_args + raw_args
|
18
|
+
@command ||= bundler_args + ['rspec'] + formatter_args + generated_args + raw_args
|
19
|
+
end
|
20
|
+
|
21
|
+
def bundler_args
|
22
|
+
if File.exist?(ENV['BUNDLE_GEMFILE'] || 'Gemfile')
|
23
|
+
['bundle', 'exec']
|
24
|
+
else
|
25
|
+
[]
|
26
|
+
end
|
18
27
|
end
|
19
28
|
|
20
29
|
def formatter_args
|
21
|
-
if @
|
30
|
+
if @update_failures
|
22
31
|
formatter_path = File.expand_path('formatter.rb', File.dirname(__FILE__))
|
23
32
|
['--require', formatter_path, '--format', 'Respec::Formatter', '--out', failures_path, '--format', @formatter]
|
24
33
|
else
|
@@ -78,6 +87,7 @@ module Respec
|
|
78
87
|
failures.each do |line|
|
79
88
|
args << line.strip
|
80
89
|
end
|
90
|
+
@selected_failures = true
|
81
91
|
end
|
82
92
|
else
|
83
93
|
warn "no fail file - ignoring 'f' argument"
|
@@ -90,7 +100,8 @@ module Respec
|
|
90
100
|
i = Integer(arg)
|
91
101
|
if (failure = failures[i - 1])
|
92
102
|
args << failure
|
93
|
-
@
|
103
|
+
@selected_failures = true
|
104
|
+
@update_failures = false
|
94
105
|
else
|
95
106
|
warn "invalid failure: #{i} for (1..#{failures.size})"
|
96
107
|
end
|
@@ -98,7 +109,10 @@ module Respec
|
|
98
109
|
args << '--example' << arg.gsub(/[$]/, '\\\\\\0')
|
99
110
|
end
|
100
111
|
end
|
101
|
-
|
112
|
+
# If we selected individual failures to rerun, don't give the
|
113
|
+
# files to rspec, as those files will be run in entirety.
|
114
|
+
@generated_args = args
|
115
|
+
@generated_args.concat(files) unless @selected_failures
|
102
116
|
end
|
103
117
|
|
104
118
|
def failures_path
|
data/lib/respec/version.rb
CHANGED
data/respec.gemspec
CHANGED
@@ -13,5 +13,7 @@ Gem::Specification.new do |gem|
|
|
13
13
|
gem.files = `git ls-files`.split("\n")
|
14
14
|
gem.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
15
15
|
|
16
|
+
gem.add_runtime_dependency 'rspec', '>= 2.0.0'
|
16
17
|
gem.add_development_dependency 'ritual', '~> 0.4.0'
|
18
|
+
gem.add_development_dependency 'temporaries', '~> 0.0.3'
|
17
19
|
end
|
data/spec/integration_spec.rb
CHANGED
@@ -2,6 +2,8 @@ require_relative 'spec_helper'
|
|
2
2
|
require 'rbconfig'
|
3
3
|
|
4
4
|
describe Respec do
|
5
|
+
use_temporary_directory TMP
|
6
|
+
|
5
7
|
CONFIG = (Object.const_defined?(:RbConfig) ? RbConfig : Config)::CONFIG
|
6
8
|
def respec(args)
|
7
9
|
ruby = File.join(CONFIG['bindir'], CONFIG['ruby_install_name'])
|
@@ -31,19 +33,21 @@ describe Respec do
|
|
31
33
|
end
|
32
34
|
|
33
35
|
it "should let you rerun failing specs until they all pass" do
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
36
|
+
Dir.chdir tmp do
|
37
|
+
make_spec(num_failures: 2)
|
38
|
+
status, output = respec(spec_path)
|
39
|
+
status.should_not be_success
|
40
|
+
output.should include('2 examples, 2 failures')
|
41
|
+
|
42
|
+
make_spec(num_failures: 1)
|
43
|
+
status, output = respec("#{spec_path} f")
|
44
|
+
status.should_not be_success
|
45
|
+
output.should include('2 examples, 1 failure')
|
46
|
+
|
47
|
+
make_spec(num_failures: 0)
|
48
|
+
status, output = respec("#{spec_path} f")
|
49
|
+
status.should be_success
|
50
|
+
output.should include('1 example, 0 failures')
|
51
|
+
end
|
48
52
|
end
|
49
53
|
end
|
data/spec/respec/app_spec.rb
CHANGED
@@ -3,6 +3,8 @@ require_relative '../spec_helper'
|
|
3
3
|
require 'fileutils'
|
4
4
|
|
5
5
|
describe Respec::App do
|
6
|
+
use_temporary_directory TMP
|
7
|
+
|
6
8
|
FORMATTER_PATH = File.expand_path("#{ROOT}/lib/respec/formatter.rb", File.dirname(__FILE__))
|
7
9
|
FAIL_PATH = "#{TMP}/failures.txt"
|
8
10
|
|
@@ -16,34 +18,34 @@ describe Respec::App do
|
|
16
18
|
end
|
17
19
|
end
|
18
20
|
|
19
|
-
describe "#
|
20
|
-
it "should run
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
make_failures_file 'a.rb:1', 'b.rb:2'
|
27
|
-
app = Respec::App.new('f')
|
28
|
-
app.generated_args.should == ['a.rb:1', 'b.rb:2']
|
29
|
-
end
|
30
|
-
|
31
|
-
it "should run the n-th failure if a numeric argument 'n' is given" do
|
32
|
-
make_failures_file 'a.rb:1', 'b.rb:2'
|
33
|
-
app = Respec::App.new('2')
|
34
|
-
app.generated_args.should == ['b.rb:2']
|
21
|
+
describe "#bundler_args" do
|
22
|
+
it "should run through bundler if a Gemfile is present" do
|
23
|
+
FileUtils.touch "#{tmp}/Gemfile"
|
24
|
+
Dir.chdir tmp do
|
25
|
+
app = Respec::App.new
|
26
|
+
app.bundler_args.should == ['bundle', 'exec']
|
27
|
+
end
|
35
28
|
end
|
36
29
|
|
37
|
-
it "should
|
38
|
-
|
39
|
-
|
40
|
-
|
30
|
+
it "should check the BUNDLE_GEMFILE environment variable if set" do
|
31
|
+
original_bundle_gemfile = ENV['BUNDLE_GEMFILE']
|
32
|
+
ENV['BUNDLE_GEMFILE'] = "#{tmp}/custom_gemfile"
|
33
|
+
begin
|
34
|
+
FileUtils.touch "#{tmp}/custom_gemfile"
|
35
|
+
Dir.chdir tmp do
|
36
|
+
app = Respec::App.new
|
37
|
+
app.bundler_args.should == ['bundle', 'exec']
|
38
|
+
end
|
39
|
+
ensure
|
40
|
+
ENV['BUNDLE_GEMFILE'] = original_bundle_gemfile
|
41
|
+
end
|
41
42
|
end
|
42
43
|
|
43
|
-
it "should
|
44
|
-
|
45
|
-
|
46
|
-
|
44
|
+
it "should not run through bundler if no Gemfile is present" do
|
45
|
+
Dir.chdir tmp do
|
46
|
+
app = Respec::App.new
|
47
|
+
app.bundler_args.should == []
|
48
|
+
end
|
47
49
|
end
|
48
50
|
end
|
49
51
|
|
@@ -64,16 +66,63 @@ describe Respec::App do
|
|
64
66
|
end
|
65
67
|
|
66
68
|
it "should update the stored failures if 'f' is used" do
|
69
|
+
make_failures_file 'a.rb:1'
|
67
70
|
app = Respec::App.new('f')
|
68
71
|
app.formatter_args.should == ['--require', FORMATTER_PATH, '--format', 'Respec::Formatter', '--out', FAIL_PATH, '--format', 'progress']
|
69
72
|
end
|
70
73
|
|
71
74
|
it "should not update the stored failures if a numeric argument is given" do
|
75
|
+
make_failures_file 'a.rb:1'
|
72
76
|
app = Respec::App.new('1')
|
73
77
|
app.formatter_args.should == []
|
74
78
|
end
|
75
79
|
end
|
76
80
|
|
81
|
+
describe "#generated_args" do
|
82
|
+
it "should run with --context if 'c' is given" do
|
83
|
+
app = Respec::App.new('c')
|
84
|
+
app.generated_args.should == ['--diff', 'context']
|
85
|
+
end
|
86
|
+
|
87
|
+
it "should run all failures if 'f' is given" do
|
88
|
+
make_failures_file 'a.rb:1', 'b.rb:2'
|
89
|
+
app = Respec::App.new('f')
|
90
|
+
app.generated_args.should == ['a.rb:1', 'b.rb:2']
|
91
|
+
end
|
92
|
+
|
93
|
+
it "should run the n-th failure if a numeric argument 'n' is given" do
|
94
|
+
make_failures_file 'a.rb:1', 'b.rb:2'
|
95
|
+
app = Respec::App.new('2')
|
96
|
+
app.generated_args.should == ['b.rb:2']
|
97
|
+
end
|
98
|
+
|
99
|
+
it "should interpret existing file names as file name arguments" do
|
100
|
+
FileUtils.touch "#{tmp}/existing.rb"
|
101
|
+
app = Respec::App.new("#{tmp}/existing.rb")
|
102
|
+
app.generated_args.should == ["#{tmp}/existing.rb"]
|
103
|
+
end
|
104
|
+
|
105
|
+
it "should treat other arguments as example names" do
|
106
|
+
FileUtils.touch "#{tmp}/FILE"
|
107
|
+
app = Respec::App.new("#{tmp}/FILE")
|
108
|
+
app.generated_args.should == ["#{tmp}/FILE"]
|
109
|
+
end
|
110
|
+
|
111
|
+
it "should not include named files if a numeric argument is given" do
|
112
|
+
FileUtils.touch "#{tmp}/FILE"
|
113
|
+
make_failures_file 'a.rb:1'
|
114
|
+
app = Respec::App.new("#{tmp}/FILE", '1')
|
115
|
+
app.generated_args.should == ['a.rb:1']
|
116
|
+
end
|
117
|
+
|
118
|
+
it "should not include named files if an 'f' argument is given" do
|
119
|
+
FileUtils.touch "#{tmp}/FILE"
|
120
|
+
make_failures_file 'a.rb:1'
|
121
|
+
app = Respec::App.new("#{tmp}/FILE", 'f')
|
122
|
+
app.generated_args.should == ['a.rb:1']
|
123
|
+
end
|
124
|
+
end
|
125
|
+
|
77
126
|
describe "#raw_args" do
|
78
127
|
it "should pass arguments after '--' directly to rspec" do
|
79
128
|
app = Respec::App.new('--', '--blah')
|
@@ -83,9 +132,11 @@ describe Respec::App do
|
|
83
132
|
|
84
133
|
describe "#command" do
|
85
134
|
it "should combine all the args" do
|
86
|
-
|
87
|
-
|
88
|
-
|
135
|
+
Dir.chdir tmp do
|
136
|
+
FileUtils.touch 'Gemfile'
|
137
|
+
app = Respec::App.new('c', '--', '-t', 'TAG')
|
138
|
+
app.command.should == ['bundle', 'exec', 'rspec', '--require', FORMATTER_PATH, '--format', 'Respec::Formatter', '--out', FAIL_PATH, '--format', 'progress', '--diff', 'context', '-t', 'TAG']
|
139
|
+
end
|
89
140
|
end
|
90
141
|
end
|
91
142
|
end
|
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: respec
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,19 +9,56 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-05-
|
12
|
+
date: 2012-05-23 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: rspec
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: 2.0.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: 2.0.0
|
14
30
|
- !ruby/object:Gem::Dependency
|
15
31
|
name: ritual
|
16
|
-
requirement:
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
34
|
+
requirements:
|
35
|
+
- - ~>
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: 0.4.0
|
38
|
+
type: :development
|
39
|
+
prerelease: false
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
17
41
|
none: false
|
18
42
|
requirements:
|
19
43
|
- - ~>
|
20
44
|
- !ruby/object:Gem::Version
|
21
45
|
version: 0.4.0
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
name: temporaries
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
50
|
+
requirements:
|
51
|
+
- - ~>
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: 0.0.3
|
22
54
|
type: :development
|
23
55
|
prerelease: false
|
24
|
-
version_requirements:
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ~>
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: 0.0.3
|
25
62
|
description:
|
26
63
|
email:
|
27
64
|
- george.ogata@gmail.com
|
@@ -57,15 +94,21 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
57
94
|
- - ! '>='
|
58
95
|
- !ruby/object:Gem::Version
|
59
96
|
version: '0'
|
97
|
+
segments:
|
98
|
+
- 0
|
99
|
+
hash: -3838848027574177683
|
60
100
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
61
101
|
none: false
|
62
102
|
requirements:
|
63
103
|
- - ! '>='
|
64
104
|
- !ruby/object:Gem::Version
|
65
105
|
version: '0'
|
106
|
+
segments:
|
107
|
+
- 0
|
108
|
+
hash: -3838848027574177683
|
66
109
|
requirements: []
|
67
110
|
rubyforge_project:
|
68
|
-
rubygems_version: 1.8.
|
111
|
+
rubygems_version: 1.8.24
|
69
112
|
signing_key:
|
70
113
|
specification_version: 3
|
71
114
|
summary: Rerun failing RSpec examples easily.
|
@@ -73,4 +116,3 @@ test_files:
|
|
73
116
|
- spec/integration_spec.rb
|
74
117
|
- spec/respec/app_spec.rb
|
75
118
|
- spec/spec_helper.rb
|
76
|
-
has_rdoc:
|