cucumber 0.4.0 → 0.4.1
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/.gitattributes +1 -0
- data/.gitignore +17 -0
- data/History.txt +27 -0
- data/{License.txt → LICENSE} +0 -0
- data/Manifest.txt +0 -487
- data/README.rdoc +26 -0
- data/Rakefile +54 -7
- data/VERSION.yml +4 -0
- data/bin/cucumber +1 -1
- data/cucumber.gemspec +743 -0
- data/cucumber.yml +3 -1
- data/examples/cs/.gitignore +1 -0
- data/examples/i18n/Rakefile +1 -1
- data/examples/i18n/de/.gitignore +1 -0
- data/examples/i18n/en/.gitignore +1 -0
- data/examples/i18n/fi/.gitignore +1 -0
- data/examples/i18n/hu/.gitignore +1 -0
- data/examples/i18n/id/.gitignore +1 -0
- data/examples/i18n/ja/.gitignore +1 -0
- data/examples/i18n/ko/.gitignore +1 -0
- data/examples/i18n/lt/.gitignore +1 -0
- data/examples/i18n/pl/.gitignore +1 -0
- data/examples/i18n/sk/.gitignore +1 -0
- data/examples/i18n/sr-latn/Rakefile +6 -0
- data/examples/i18n/sr-latn/features/sabiranje.feature +18 -0
- data/examples/i18n/sr-latn/features/step_definitons/calculator_steps.rb +24 -0
- data/examples/i18n/sr-latn/lib/calculator.rb +12 -0
- data/examples/i18n/sr/Rakefile +6 -0
- data/examples/i18n/sr/features/sabiranje.feature +18 -0
- data/examples/i18n/sr/features/step_definitons/calculator_steps.rb +24 -0
- data/examples/i18n/sr/lib/calculator.rb +12 -0
- data/examples/i18n/tr/.gitignore +1 -0
- data/examples/i18n/tr/features/{bo/314/210lme.feature → bolme.feature} +0 -0
- data/examples/i18n/tr/features/step_definitons/{hesap_makinesi_ad/304/261mlar/304/261.rb → hesap_makinesi_adimlari.rb} +0 -0
- data/examples/i18n/zh-TW/.gitignore +1 -0
- data/examples/java/.gitignore +1 -0
- data/examples/java/src/.gitignore +1 -0
- data/examples/java/src/cucumber/demo/.gitignore +1 -0
- data/examples/python/lib/.gitignore +1 -0
- data/examples/ruby2python/lib/.gitignore +1 -0
- data/examples/self_test/.gitignore +1 -0
- data/features/background.feature +0 -3
- data/features/bug_464.feature +16 -0
- data/features/cucumber_cli.feature +4 -6
- data/features/cucumber_cli_diff_disabled.feature +0 -2
- data/features/cucumber_cli_outlines.feature +0 -4
- data/features/drb_server_integration.feature +1 -0
- data/features/exception_in_after_block.feature +0 -2
- data/features/exception_in_after_step_block.feature +0 -2
- data/features/exception_in_before_block.feature +0 -2
- data/features/junit_formatter.feature +0 -1
- data/features/language_help.feature +40 -38
- data/features/listener_debugger_formatter.feature +41 -0
- data/features/post_configuration_hook.feature +1 -1
- data/features/report_called_undefined_steps.feature +0 -1
- data/features/step_definitions/simplest_steps.rb +0 -3
- data/features/support/env.rb +5 -1
- data/features/transform.feature +1 -1
- data/features/usage_and_stepdefs_formatter.feature +1 -3
- data/features/work_in_progress.feature +0 -2
- data/gem_tasks/features.rake +6 -1
- data/gem_tasks/rspec.rake +5 -35
- data/gem_tasks/sdoc.rake +10 -5
- data/lib/autotest/cucumber_mixin.rb +6 -0
- data/lib/cucumber.rb +0 -1
- data/lib/cucumber/ast/step_invocation.rb +3 -0
- data/lib/cucumber/cli/configuration.rb +7 -2
- data/lib/cucumber/cli/options.rb +8 -7
- data/lib/cucumber/core_ext/proc.rb +1 -0
- data/lib/cucumber/formatter/ansicolor.rb +0 -9
- data/lib/cucumber/formatter/console.rb +14 -12
- data/lib/cucumber/formatter/debug.rb +33 -0
- data/lib/cucumber/formatter/pretty.rb +2 -2
- data/lib/cucumber/formatter/rerun.rb +9 -6
- data/lib/cucumber/language_support/language_methods.rb +2 -2
- data/lib/cucumber/languages.yml +37 -1
- data/lib/cucumber/platform.rb +3 -1
- data/lib/cucumber/py_support/py_language.py +1 -1
- data/lib/cucumber/py_support/py_language.rb +2 -2
- data/lib/cucumber/rb_support/rb_language.rb +6 -7
- data/lib/cucumber/rb_support/rb_step_definition.rb +0 -1
- data/lib/cucumber/rb_support/rb_world.rb +1 -2
- data/lib/cucumber/step_match.rb +10 -7
- data/lib/cucumber/step_mother.rb +6 -3
- data/rails_generators/cucumber/cucumber_generator.rb +49 -6
- data/spec/cucumber/cli/options_spec.rb +1 -1
- data/spec/cucumber/formatter/console_spec.rb +20 -0
- data/spec/cucumber/step_match_spec.rb +10 -5
- metadata +258 -43
- data/README.txt +0 -4
- data/config/hoe.rb +0 -84
- data/config/requirements.rb +0 -15
- data/gem_tasks/deployment.rake +0 -11
- data/gem_tasks/gemspec.rake +0 -10
- data/lib/cucumber/language_support/step_definition_methods.rb +0 -23
- data/lib/cucumber/version.rb +0 -10
@@ -0,0 +1,41 @@
|
|
1
|
+
Feature: Listener Debugger
|
2
|
+
In order to easily visualise the listener API
|
3
|
+
As a developer
|
4
|
+
I want a formatter that prints the calls to the listener as a feature is run
|
5
|
+
|
6
|
+
Background:
|
7
|
+
Given a standard Cucumber project directory structure
|
8
|
+
|
9
|
+
Scenario: title
|
10
|
+
Given a file named "features/sample.feature" with:
|
11
|
+
"""
|
12
|
+
Feature: Sample
|
13
|
+
|
14
|
+
Scenario: Sample
|
15
|
+
Given Sample
|
16
|
+
|
17
|
+
"""
|
18
|
+
When I run cucumber -f debug features/sample.feature
|
19
|
+
Then it should pass with
|
20
|
+
"""
|
21
|
+
before_features
|
22
|
+
before_feature
|
23
|
+
before_tags
|
24
|
+
after_tags
|
25
|
+
feature_name
|
26
|
+
before_feature_element
|
27
|
+
before_tags
|
28
|
+
after_tags
|
29
|
+
scenario_name
|
30
|
+
before_steps
|
31
|
+
before_step
|
32
|
+
before_step_result
|
33
|
+
step_name
|
34
|
+
after_step_result
|
35
|
+
after_step
|
36
|
+
after_steps
|
37
|
+
after_feature_element
|
38
|
+
after_feature
|
39
|
+
after_features
|
40
|
+
|
41
|
+
"""
|
@@ -26,7 +26,7 @@ Feature: Post Configuration Hook [#423]
|
|
26
26
|
And a file named "features/support/env.rb" with:
|
27
27
|
"""
|
28
28
|
AfterConfiguration do |config|
|
29
|
-
config.out_stream << "AfterConfiguration hook read feature directories: #{config.feature_dirs}"
|
29
|
+
config.out_stream << "AfterConfiguration hook read feature directories: #{config.feature_dirs.join(', ')}"
|
30
30
|
end
|
31
31
|
"""
|
32
32
|
When I run cucumber features
|
@@ -2,7 +2,6 @@ Feature: Cucumber command line
|
|
2
2
|
In order to find out what step definitions need to be implemented
|
3
3
|
Developers should always see what step definition is missing
|
4
4
|
|
5
|
-
@mri186
|
6
5
|
Scenario: Get info at arbitrary levels of nesting
|
7
6
|
When I run cucumber features/call_undefined_step_from_step_def.feature
|
8
7
|
Then it should pass with
|
data/features/support/env.rb
CHANGED
@@ -39,13 +39,17 @@ class CucumberWorld
|
|
39
39
|
|
40
40
|
# The last standard out, with the duration line taken out (unpredictable)
|
41
41
|
def last_stdout
|
42
|
-
strip_duration(@last_stdout)
|
42
|
+
strip_1_9_paths(strip_duration(@last_stdout))
|
43
43
|
end
|
44
44
|
|
45
45
|
def strip_duration(s)
|
46
46
|
s.gsub(/^\d+m\d+\.\d+s\n/m, "")
|
47
47
|
end
|
48
48
|
|
49
|
+
def strip_1_9_paths(s)
|
50
|
+
s.gsub(/#{Dir.pwd}\/examples\/self_test\/tmp/m, ".").gsub(/#{Dir.pwd}\/examples\/self_test/m, ".")
|
51
|
+
end
|
52
|
+
|
49
53
|
def replace_duration(s, replacement)
|
50
54
|
s.gsub(/\d+m\d+\.\d+s/m, replacement)
|
51
55
|
end
|
data/features/transform.feature
CHANGED
@@ -38,7 +38,7 @@ Feature: transform
|
|
38
38
|
end
|
39
39
|
|
40
40
|
Transform /^'(\d+)' to a Float$/ do |integer_string|
|
41
|
-
|
41
|
+
Transform("'#{integer_string}' to an Integer").to_f
|
42
42
|
end
|
43
43
|
|
44
44
|
Transform(/^('\w+') to Nil$/) {|str| nil }
|
@@ -3,7 +3,6 @@ Feature: Cucumber command line
|
|
3
3
|
steps and step definitions, Cucumber must provide a way to
|
4
4
|
display how they are related.
|
5
5
|
|
6
|
-
@mri186
|
7
6
|
Scenario: List usage of step definitions
|
8
7
|
When I run cucumber features --format usage --dry-run
|
9
8
|
Then STDERR should be empty
|
@@ -137,8 +136,7 @@ Feature: Cucumber command line
|
|
137
136
|
|
138
137
|
"""
|
139
138
|
|
140
|
-
|
141
|
-
Scenario: --format steps
|
139
|
+
Scenario: --format steps
|
142
140
|
When I run cucumber features --format stepdefs --dry-run
|
143
141
|
Then STDERR should be empty
|
144
142
|
And it should pass with
|
@@ -49,7 +49,6 @@ Feature: Cucumber --work-in-progress switch
|
|
49
49
|
end
|
50
50
|
"""
|
51
51
|
|
52
|
-
@mri186
|
53
52
|
Scenario: Pass with Failing Scenarios
|
54
53
|
When I run cucumber -q -w -t @failing features/wip.feature
|
55
54
|
Then STDERR should be empty
|
@@ -91,7 +90,6 @@ Feature: Cucumber --work-in-progress switch
|
|
91
90
|
|
92
91
|
"""
|
93
92
|
|
94
|
-
@mri186
|
95
93
|
Scenario: Pass with Undefined Scenarios
|
96
94
|
When I run cucumber -q -w -t @pending features/wip.feature
|
97
95
|
Then it should pass with
|
data/gem_tasks/features.rake
CHANGED
@@ -1,8 +1,13 @@
|
|
1
1
|
$:.unshift(File.dirname(__FILE__) + '/../lib')
|
2
2
|
require 'cucumber/rake/task'
|
3
|
+
require 'cucumber/platform'
|
3
4
|
|
4
5
|
Cucumber::Rake::Task.new do |t|
|
5
|
-
|
6
|
+
if(Cucumber::JRUBY)
|
7
|
+
t.profile = 'jruby'
|
8
|
+
elsif(Cucumber::WINDOWS_MRI)
|
9
|
+
t.profile = 'windows_mri'
|
10
|
+
end
|
6
11
|
t.rcov = ENV['RCOV']
|
7
12
|
end
|
8
13
|
|
data/gem_tasks/rspec.rake
CHANGED
@@ -1,40 +1,8 @@
|
|
1
|
-
|
2
|
-
STDERR.puts <<-EOS
|
3
|
-
To use rspec for testing you must install rspec gem:
|
4
|
-
gem install rspec
|
5
|
-
|
6
|
-
EOS
|
7
|
-
nil
|
8
|
-
end
|
9
|
-
|
10
|
-
def require_spec
|
1
|
+
begin
|
11
2
|
require 'spec/expectations'
|
12
|
-
|
13
|
-
require_spec_with_rubygems
|
14
|
-
end
|
3
|
+
require 'spec/rake/spectask'
|
15
4
|
|
16
|
-
|
17
|
-
require 'rubygems'
|
18
|
-
require 'spec/expectations'
|
19
|
-
rescue LoadError
|
20
|
-
unable_to_load
|
21
|
-
end
|
22
|
-
|
23
|
-
if require_spec
|
24
|
-
begin
|
25
|
-
require 'spec/rake/spectask'
|
26
|
-
rescue LoadError
|
27
|
-
unable_to_load
|
28
|
-
end
|
29
|
-
|
30
|
-
def undefine_task(*names)
|
31
|
-
app = Rake.application
|
32
|
-
tasks = app.instance_variable_get('@tasks')
|
33
|
-
names.flatten.each { |name| tasks.delete(name) }
|
34
|
-
end
|
35
|
-
undefine_task('spec') # Hoe 1.2.12 is broken - it defines a spec task that we can't tweak.
|
36
|
-
|
37
|
-
desc "Run the Cucumber specs"
|
5
|
+
desc "Run RSpec"
|
38
6
|
Spec::Rake::SpecTask.new do |t|
|
39
7
|
t.spec_opts = ['--options', "spec/spec.opts"]
|
40
8
|
t.spec_files = FileList['spec/**/*_spec.rb']
|
@@ -42,4 +10,6 @@ if require_spec
|
|
42
10
|
t.rcov_opts = %w{--exclude osx\/objc,gems\/,spec\/}
|
43
11
|
t.verbose = true
|
44
12
|
end
|
13
|
+
rescue LoadError
|
14
|
+
task :spec
|
45
15
|
end
|
data/gem_tasks/sdoc.rake
CHANGED
@@ -1,7 +1,12 @@
|
|
1
|
-
|
1
|
+
begin
|
2
|
+
require 'rake/rdoctask'
|
3
|
+
require 'sdoc' # and use your RDoc task the same way you used it before
|
2
4
|
|
3
|
-
Rake::RDocTask.new(:sdoc) do |rdoc|
|
4
|
-
|
5
|
-
|
6
|
-
|
5
|
+
Rake::RDocTask.new(:sdoc) do |rdoc|
|
6
|
+
rdoc.rdoc_dir = 'doc/sdoc'
|
7
|
+
rdoc.title = "Cucumber"
|
8
|
+
rdoc.options += %w{--fmt shtml -N --webcvs=http://github.com/aslakhellesoy/cucumber/blob/v0.3.96/%s --title "Cucumber API" --threads 4 --main README --exclude cucumber/parser lib}
|
9
|
+
rdoc.template = 'direct' # lighter template used on railsapi.com
|
10
|
+
end
|
11
|
+
rescue LoadError => ignore
|
7
12
|
end
|
@@ -118,6 +118,12 @@ module Autotest::CucumberMixin
|
|
118
118
|
# No --color option as some IDEs (Netbeans) don't output them very well ([31m1 failed step[0m)
|
119
119
|
args += %w{--format rerun --out} << dirty_features_filename
|
120
120
|
args << (features_to_run == :all ? "features" : features_to_run)
|
121
|
+
|
122
|
+
# Unless I do this, all the steps turn up undefined during the rerun...
|
123
|
+
unless features_to_run == :all
|
124
|
+
args << 'features/step_definitions' << 'features/support'
|
125
|
+
end
|
126
|
+
|
121
127
|
args = args.join(' ')
|
122
128
|
|
123
129
|
return "#{Cucumber::RUBY_BINARY} #{Cucumber::BINARY} #{args}"
|
data/lib/cucumber.rb
CHANGED
@@ -105,6 +105,9 @@ module Cucumber
|
|
105
105
|
|
106
106
|
def filter_backtrace(e)
|
107
107
|
return e if Cucumber.use_full_backtrace
|
108
|
+
pwd = /#{Dir.pwd}\//m
|
109
|
+
(e.backtrace || []).each{|line| line.gsub!(pwd, "./")}
|
110
|
+
|
108
111
|
filtered = (e.backtrace || []).reject do |line|
|
109
112
|
BACKTRACE_FILTER_PATTERNS.detect { |p| line =~ p }
|
110
113
|
end
|
@@ -135,8 +135,13 @@ module Cucumber
|
|
135
135
|
unless File.directory?(out)
|
136
136
|
out = File.open(out, Cucumber.file_mode('w'))
|
137
137
|
at_exit do
|
138
|
-
|
139
|
-
|
138
|
+
|
139
|
+
# Since Spork "never" actually exits, I want to flush and close earlier...
|
140
|
+
unless out.closed?
|
141
|
+
out.flush
|
142
|
+
out.close
|
143
|
+
end
|
144
|
+
|
140
145
|
end
|
141
146
|
end
|
142
147
|
end
|
data/lib/cucumber/cli/options.rb
CHANGED
@@ -18,9 +18,10 @@ module Cucumber
|
|
18
18
|
"#{' ' * 51}is not shown, and step definitions are sorted by\n" +
|
19
19
|
"#{' ' * 51}filename instead."],
|
20
20
|
'stepdefs' => ['Cucumber::Formatter::Stepdefs', "Prints All step definitions with their locations. Same as\n" +
|
21
|
-
"the usage formatter, except that steps are not printed."],
|
21
|
+
"#{' ' * 51}the usage formatter, except that steps are not printed."],
|
22
22
|
'junit' => ['Cucumber::Formatter::Junit', 'Generates a report similar to Ant+JUnit.'],
|
23
|
-
'tag_cloud' => ['Cucumber::Formatter::TagCloud', 'Prints a tag cloud of tag usage.']
|
23
|
+
'tag_cloud' => ['Cucumber::Formatter::TagCloud', 'Prints a tag cloud of tag usage.'],
|
24
|
+
'debug' => ['Cucumber::Formatter::Debug', 'For developing formatters - prints the calls made to the listeners.']
|
24
25
|
}
|
25
26
|
max = BUILTIN_FORMATS.keys.map{|s| s.length}.max
|
26
27
|
FORMAT_HELP = (BUILTIN_FORMATS.keys.sort.map do |key|
|
@@ -232,12 +233,12 @@ module Cucumber
|
|
232
233
|
@options[:drb_port] = port
|
233
234
|
end
|
234
235
|
opts.on_tail("--version", "Show version.") do
|
235
|
-
@out_stream.puts VERSION
|
236
|
-
Kernel.exit
|
236
|
+
@out_stream.puts Cucumber::VERSION
|
237
|
+
Kernel.exit(0)
|
237
238
|
end
|
238
239
|
opts.on_tail("-h", "--help", "You're looking at it.") do
|
239
240
|
@out_stream.puts opts.help
|
240
|
-
Kernel.exit
|
241
|
+
Kernel.exit(0)
|
241
242
|
end
|
242
243
|
end.parse!
|
243
244
|
|
@@ -359,12 +360,12 @@ module Cucumber
|
|
359
360
|
raise("No language with key #{lang}")
|
360
361
|
end
|
361
362
|
LanguageHelpFormatter.list_keywords(@out_stream, lang)
|
362
|
-
Kernel.exit
|
363
|
+
Kernel.exit(0)
|
363
364
|
end
|
364
365
|
|
365
366
|
def list_languages_and_exit
|
366
367
|
LanguageHelpFormatter.list_languages(@out_stream)
|
367
|
-
Kernel.exit
|
368
|
+
Kernel.exit(0)
|
368
369
|
end
|
369
370
|
|
370
371
|
def print_profile_information
|
@@ -1,4 +1,3 @@
|
|
1
|
-
gem 'term-ansicolor'
|
2
1
|
require 'term/ansicolor'
|
3
2
|
|
4
3
|
if Cucumber::WINDOWS_MRI
|
@@ -9,14 +8,6 @@ if Cucumber::WINDOWS_MRI
|
|
9
8
|
STDERR.puts %{*** WARNING: You must "gem install win32console" (1.2.0 or higher) to get coloured output on MRI/Windows}
|
10
9
|
Term::ANSIColor.coloring = false
|
11
10
|
end
|
12
|
-
elsif Cucumber::WINDOWS && Cucumber::JRUBY
|
13
|
-
begin
|
14
|
-
gem 'aslakhellesoy-ansicolor', '>= 1.0'
|
15
|
-
require 'ansicolor'
|
16
|
-
rescue LoadError
|
17
|
-
STDERR.puts %{*** WARNING: You must "gem install aslakhellesoy-ansicolor --source http://gems.github.com" (1.0 or higher) to get coloured output on JRuby/Windows}
|
18
|
-
Term::ANSIColor.coloring = false
|
19
|
-
end
|
20
11
|
end
|
21
12
|
|
22
13
|
Term::ANSIColor.coloring = false if !STDOUT.tty? and not ENV.has_key?("AUTOTEST")
|
@@ -126,26 +126,28 @@ module Cucumber
|
|
126
126
|
end
|
127
127
|
|
128
128
|
def print_tag_limit_warnings(options)
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
129
|
+
if @tag_occurrences
|
130
|
+
first_tag = true
|
131
|
+
options[:tag_names].each do |tag_name, limit|
|
132
|
+
unless Ast::Tags.exclude_tag?(tag_name)
|
133
|
+
tag_frequency = @tag_occurrences[tag_name].size
|
134
|
+
if limit && tag_frequency > limit
|
135
|
+
@io.puts if first_tag
|
136
|
+
first_tag = false
|
137
|
+
@io.puts format_string("#{tag_name} occurred #{tag_frequency} times, but the limit was set to #{limit}", :failed)
|
138
|
+
@tag_occurrences[tag_name].each {|location| @io.puts format_string(" #{location}", :failed)}
|
139
|
+
@io.flush
|
140
|
+
end
|
139
141
|
end
|
140
142
|
end
|
141
143
|
end
|
142
144
|
end
|
143
145
|
|
144
146
|
def record_tag_occurrences(feature_element, options)
|
145
|
-
@
|
147
|
+
@tag_occurrences ||= Hash.new{|k,v| k[v] = []}
|
146
148
|
options[:tag_names].each do |tag_name, limit|
|
147
149
|
if !Ast::Tags.exclude_tag?(tag_name) && feature_element.tag_count(tag_name) > 0
|
148
|
-
@
|
150
|
+
@tag_occurrences[tag_name] << feature_element.file_colon_line
|
149
151
|
end
|
150
152
|
end
|
151
153
|
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
require 'cucumber/formatter/progress'
|
2
|
+
require 'cucumber/step_definition_light'
|
3
|
+
|
4
|
+
module Cucumber
|
5
|
+
module Formatter
|
6
|
+
class Debug
|
7
|
+
def initialize(step_mother, io, options)
|
8
|
+
@io = io
|
9
|
+
@indent = 0
|
10
|
+
end
|
11
|
+
|
12
|
+
def respond_to?(*args)
|
13
|
+
true
|
14
|
+
end
|
15
|
+
|
16
|
+
def method_missing(name, *args)
|
17
|
+
@indent -= 2 if name.to_s =~ /^after/
|
18
|
+
print(name)
|
19
|
+
@indent += 2 if name.to_s =~ /^before/
|
20
|
+
end
|
21
|
+
|
22
|
+
private
|
23
|
+
|
24
|
+
def print(text)
|
25
|
+
@io.puts "#{indent}#{text}"
|
26
|
+
end
|
27
|
+
|
28
|
+
def indent
|
29
|
+
(' ' * @indent)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -148,8 +148,8 @@ module Cucumber
|
|
148
148
|
def step_name(keyword, step_match, status, source_indent, background)
|
149
149
|
return if @hide_this_step
|
150
150
|
source_indent = nil unless @options[:source]
|
151
|
-
|
152
|
-
@io.puts(
|
151
|
+
name_to_report = format_step(keyword, step_match, status, source_indent)
|
152
|
+
@io.puts(name_to_report.indent(@scenario_indent + 2))
|
153
153
|
end
|
154
154
|
|
155
155
|
def py_string(string)
|
@@ -18,19 +18,22 @@ module Cucumber
|
|
18
18
|
@file_colon_lines = Hash.new{|h,k| h[k] = []}
|
19
19
|
end
|
20
20
|
|
21
|
-
|
22
|
-
|
21
|
+
# features() is never executed at all... ?
|
22
|
+
def after_features(features)
|
23
23
|
files = @file_names.uniq.map do |file|
|
24
24
|
lines = @file_colon_lines[file]
|
25
25
|
"#{file}:#{lines.join(':')}"
|
26
26
|
end
|
27
27
|
@io.puts files.join(' ')
|
28
|
+
|
29
|
+
# Flusing output to rerun tempfile here...
|
30
|
+
@io.flush
|
31
|
+
@io.close
|
28
32
|
end
|
29
33
|
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
if @rerun
|
34
|
+
# feature_element() is never executed at all, either... ?
|
35
|
+
def after_feature_element(feature_element)
|
36
|
+
if feature_element.failed?
|
34
37
|
file, line = *feature_element.file_colon_line.split(':')
|
35
38
|
@file_colon_lines[file] << line
|
36
39
|
@file_names << file
|