cucumber 2.1.0 → 2.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.
- checksums.yaml +4 -4
- data/.travis.yml +10 -0
- data/Gemfile +3 -1
- data/History.md +18 -2
- data/README.md +5 -1
- data/cucumber.gemspec +3 -4
- data/cucumber.yml +2 -2
- data/features/docs/api/run_cli_main_with_existing_runtime.feature +4 -7
- data/features/docs/defining_steps/skip_scenario.feature +6 -2
- data/features/docs/formatters/api_methods.feature +36 -0
- data/features/docs/profiles.feature +2 -2
- data/features/lib/step_definitions/profile_steps.rb +1 -1
- data/lib/cucumber.rb +11 -4
- data/lib/cucumber/cli/configuration.rb +2 -2
- data/lib/cucumber/cli/options.rb +2 -2
- data/lib/cucumber/configuration.rb +25 -3
- data/lib/cucumber/deprecate.rb +29 -0
- data/lib/cucumber/filters/activate_steps.rb +39 -5
- data/lib/cucumber/formatter/console.rb +4 -4
- data/lib/cucumber/formatter/io.rb +1 -1
- data/lib/cucumber/formatter/legacy_api/adapter.rb +30 -30
- data/lib/cucumber/formatter/legacy_api/runtime_facade.rb +4 -9
- data/lib/cucumber/platform.rb +2 -7
- data/lib/cucumber/rb_support/rb_language.rb +72 -26
- data/lib/cucumber/rb_support/rb_step_definition.rb +2 -2
- data/lib/cucumber/rb_support/rb_world.rb +6 -1
- data/lib/cucumber/rb_support/snippet.rb +21 -0
- data/lib/cucumber/running_test_case.rb +5 -1
- data/lib/cucumber/runtime.rb +11 -15
- data/lib/cucumber/runtime/support_code.rb +20 -128
- data/lib/cucumber/step_argument.rb +25 -0
- data/lib/cucumber/step_match.rb +6 -12
- data/lib/cucumber/step_match_search.rb +67 -0
- data/lib/cucumber/version +1 -0
- data/spec/cucumber/configuration_spec.rb +3 -2
- data/spec/cucumber/filters/activate_steps_spec.rb +95 -3
- data/spec/cucumber/formatter/html_spec.rb +1 -1
- data/spec/cucumber/formatter/legacy_api/adapter_spec.rb +55 -28
- data/spec/cucumber/formatter/pretty_spec.rb +2 -2
- data/spec/cucumber/formatter/spec_helper.rb +22 -12
- data/spec/cucumber/rb_support/rb_language_spec.rb +9 -45
- data/spec/cucumber/rb_support/rb_step_definition_spec.rb +2 -2
- data/spec/cucumber/rb_support/rb_world_spec.rb +47 -0
- data/spec/cucumber/runtime/for_programming_languages_spec.rb +1 -1
- data/spec/cucumber/runtime/support_code_spec.rb +4 -111
- data/spec/cucumber/step_argument_spec.rb +18 -0
- data/spec/cucumber/step_match_search_spec.rb +122 -0
- data/spec/cucumber/step_match_spec.rb +8 -2
- data/spec/cucumber/world/pending_spec.rb +2 -1
- data/spec/cucumber_spec.rb +39 -0
- metadata +45 -50
- data/features/docs/wire_protocol/erb_configuration.feature +0 -56
- data/features/docs/wire_protocol/handle_unexpected_response.feature +0 -30
- data/features/docs/wire_protocol/invoke_message.feature +0 -216
- data/features/docs/wire_protocol/readme.md +0 -26
- data/features/docs/wire_protocol/snippets_message.feature +0 -51
- data/features/docs/wire_protocol/step_matches_message.feature +0 -81
- data/features/docs/wire_protocol/table_diffing.feature +0 -126
- data/features/docs/wire_protocol/tags.feature +0 -87
- data/features/docs/wire_protocol/timeouts.feature +0 -64
- data/lib/cucumber/events/bus.rb +0 -86
- data/lib/cucumber/gherkin/formatter/argument.rb +0 -17
- data/lib/cucumber/gherkin/formatter/hashable.rb +0 -27
- data/lib/cucumber/language_support.rb +0 -30
- data/lib/cucumber/language_support/language_methods.rb +0 -72
- data/lib/cucumber/rb_support/regexp_argument_matcher.rb +0 -21
- data/lib/cucumber/wire_support/configuration.rb +0 -38
- data/lib/cucumber/wire_support/connection.rb +0 -61
- data/lib/cucumber/wire_support/request_handler.rb +0 -32
- data/lib/cucumber/wire_support/wire_exception.rb +0 -32
- data/lib/cucumber/wire_support/wire_language.rb +0 -68
- data/lib/cucumber/wire_support/wire_packet.rb +0 -34
- data/lib/cucumber/wire_support/wire_protocol.rb +0 -43
- data/lib/cucumber/wire_support/wire_protocol/requests.rb +0 -133
- data/lib/cucumber/wire_support/wire_step_definition.rb +0 -21
- data/spec/cucumber/events/bus_spec.rb +0 -94
- data/spec/cucumber/rb_support/regexp_argument_matcher_spec.rb +0 -22
- data/spec/cucumber/wire_support/configuration_spec.rb +0 -64
- data/spec/cucumber/wire_support/connection_spec.rb +0 -64
- data/spec/cucumber/wire_support/wire_exception_spec.rb +0 -50
- data/spec/cucumber/wire_support/wire_language_spec.rb +0 -46
- data/spec/cucumber/wire_support/wire_packet_spec.rb +0 -44
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e99af93e987e5bd5b6424cda154b6f9ef1d4a834
|
4
|
+
data.tar.gz: db6cd2d1d62695ef7dd72a6b9505e921bc8b7e84
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 965176d82959413e7551f10890c255ab09dafbb5a43ceb3072a81c89f6eb2775661506b6a8a1d188e596978c4d6ad654dd0859a5aafe058fcdfa707f5bfe6799
|
7
|
+
data.tar.gz: 9a5627119ee9557b23a6cfd5107694af06f5a7f30fb566ce47076519fb0c664b9debba4f3cb609fef2f758c2fc177c16715b8820ae66aef78b64b3da2d436295
|
data/.travis.yml
CHANGED
data/Gemfile
CHANGED
@@ -3,9 +3,11 @@ source "https://rubygems.org"
|
|
3
3
|
gemspec
|
4
4
|
unless ENV['CUCUMBER_USE_RELEASED_CORE']
|
5
5
|
core_path = File.expand_path("../../cucumber-ruby-core", __FILE__)
|
6
|
+
wire_path = File.expand_path("../../cucumber-ruby-wire", __FILE__)
|
6
7
|
if File.exist?(core_path) && !ENV['CUCUMBER_USE_GIT_CORE']
|
7
8
|
gem 'cucumber-core', :path => core_path
|
9
|
+
gem 'cucumber-wire', :path => wire_path
|
8
10
|
else
|
9
|
-
gem 'cucumber-core', :git => "git://github.com/cucumber/cucumber-ruby-core.git"
|
11
|
+
gem 'cucumber-core', :git => "git://github.com/cucumber/cucumber-ruby-core.git"
|
10
12
|
end
|
11
13
|
end
|
data/History.md
CHANGED
@@ -1,4 +1,20 @@
|
|
1
|
-
## [In Git](https://github.com/cucumber/cucumber-ruby/compare/v2.
|
1
|
+
## [In Git](https://github.com/cucumber/cucumber-ruby/compare/v2.1...master)
|
2
|
+
|
3
|
+
### New Features
|
4
|
+
|
5
|
+
### Bugfixes
|
6
|
+
|
7
|
+
* Let the formatters output the value of printed variables at time of the call to `#puts` ([#918](https://github.com/cucumber/cucumber-ruby/pull/918) [#915](https://github.com/cucumber/cucumber-ruby/issues/915) @enkessler @brasmusson)
|
8
|
+
* Fix Configuration.with_options merge direction ([#922](https://github.com/cucumber/cucumber-ruby/pull/922) @limhoff-r7)
|
9
|
+
* Consistent line breaks / truncation in backtraces ([#941](https://github.com/cucumber/cucumber-ruby/pull/941) @tooky)
|
10
|
+
* Fix extra arg passed to ensure_io ([#939](https://github.com/cucumber/cucumber-ruby/pull/939A @benshan)
|
11
|
+
|
12
|
+
### Refactoring
|
13
|
+
|
14
|
+
* Remove wire protocol to plugin ([#878](https://github.com/cucumber/cucumber-ruby/pull/878) @mattwynne @tooky)
|
15
|
+
* Remove event bus to separate gem ([#933](https://github.com/cucumber/cucumber-ruby/pull/933) @dg-ratiodata)
|
16
|
+
|
17
|
+
## [v2.1](https://github.com/cucumber/cucumber-ruby/compare/v2.0.2...v2.1)
|
2
18
|
|
3
19
|
### New Features
|
4
20
|
|
@@ -16,7 +32,7 @@
|
|
16
32
|
* Pass DocString as String ([891](https://github.com/cucumber/cucumber-ruby/pull/891) @aslakhellesoy)
|
17
33
|
* Remove core_ext/proc.rb and use Proc#source_location instead ([888](https://github.com/cucumber/cucumber-ruby/pull/888) @brasmusson)
|
18
34
|
* Move behaviour from `Cucumber::Cli::Configuration` to `Cucumber::Configuration` (@tooky, @mattwynne)
|
19
|
-
* Integrate Gherkin3 parser ([884](https://github.com/cucumber/cucumber-ruby/pull/884) (@
|
35
|
+
* Integrate Gherkin3 parser ([884](https://github.com/cucumber/cucumber-ruby/pull/884) (@brasmusson)
|
20
36
|
|
21
37
|
## [v2.0.2](https://github.com/cucumber/cucumber-ruby/compare/v2.0.1...v2.0.2)
|
22
38
|
|
data/README.md
CHANGED
@@ -1,4 +1,8 @@
|
|
1
|
-
[](https://gitter.im/cucumber/cucumber-ruby?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
|
1
|
+
[](https://gitter.im/cucumber/cucumber-ruby?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
|
2
|
+
[](http://travis-ci.org/cucumber/cucumber-ruby)
|
3
|
+
[](https://codeclimate.com/github/cucumber/cucumber-ruby)
|
4
|
+
[](https://coveralls.io/r/cucumber/cucumber-ruby?branch=master)
|
5
|
+
[](https://gemnasium.com/cucumber/cucumber-ruby)
|
2
6
|
|
3
7
|
# Cucumber
|
4
8
|
|
data/cucumber.gemspec
CHANGED
@@ -1,10 +1,7 @@
|
|
1
1
|
# -*- encoding: utf-8 -*-
|
2
|
-
$LOAD_PATH.unshift File.expand_path("../lib", __FILE__)
|
3
|
-
require "cucumber/platform"
|
4
|
-
|
5
2
|
Gem::Specification.new do |s|
|
6
3
|
s.name = 'cucumber'
|
7
|
-
s.version =
|
4
|
+
s.version = File.read(File.expand_path("../lib/cucumber/version", __FILE__))
|
8
5
|
s.authors = ["Aslak Hellesøy", "Matt Wynne", "Steve Tooke"]
|
9
6
|
s.description = 'Behaviour Driven Development with elegance and joy'
|
10
7
|
s.summary = "cucumber-#{s.version}"
|
@@ -20,6 +17,8 @@ Gem::Specification.new do |s|
|
|
20
17
|
s.add_dependency 'gherkin3', '~> 3.1.0'
|
21
18
|
s.add_dependency 'multi_json', '>= 1.7.5', '< 2.0'
|
22
19
|
s.add_dependency 'multi_test', '>= 0.1.2'
|
20
|
+
s.add_dependency 'cucumber-wire', '~> 0.0.1'
|
21
|
+
s.add_dependency 'event-bus', '~> 0.1.0'
|
23
22
|
|
24
23
|
s.add_development_dependency 'aruba', '~> 0.6.1'
|
25
24
|
s.add_development_dependency 'json', '~> 1.7'
|
data/cucumber.yml
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
cucumber_pro_opts = ENV['ENABLE_CUCUMBER_PRO'] ? "--format Cucumber::Pro --out /dev/null" : ""
|
3
3
|
rerun = File.file?('rerun.txt') ? IO.read('rerun.txt') : ""
|
4
4
|
rerun_opts = rerun.to_s.strip.empty? ? "--format progress features" : "--format pretty #{rerun}"
|
5
|
-
std_opts = "--format progress features --tags ~@wip --
|
5
|
+
std_opts = "--format progress features --tags ~@wip --tags ~@wip-new-core -r features --strict #{cucumber_pro_opts}"
|
6
6
|
std_opts << " --tags ~@wip-jruby" if defined?(JRUBY_VERSION)
|
7
7
|
|
8
8
|
wip_opts = "--color -r features --tags @wip,@wip-new-core"
|
@@ -17,4 +17,4 @@ ruby_2_0: <%= std_opts %> --tags ~@jruby
|
|
17
17
|
ruby_2_1: <%= std_opts %> --tags ~@jruby
|
18
18
|
wip: --wip <%= wip_opts %> features <%= cucumber_pro_opts %>
|
19
19
|
none: --format pretty --format Cucumber::Pro --out /dev/null
|
20
|
-
rerun: <%= rerun_opts %> --format rerun --out rerun.txt --strict --
|
20
|
+
rerun: <%= rerun_opts %> --format rerun --out rerun.txt --strict --tag ~@wip-new-core <%= cucumber_pro_opts %>
|
@@ -1,26 +1,23 @@
|
|
1
1
|
@spawn
|
2
2
|
Feature: Run Cli::Main with existing Runtime
|
3
3
|
|
4
|
-
This is the API that Spork uses. It creates an existing runtime
|
5
|
-
|
6
|
-
When the process forks, Spork them passes the runtime to Cli::Main to
|
4
|
+
This is the API that Spork uses. It creates an existing runtime.
|
5
|
+
When the process forks, Spork them passes the runtime to Cli::Main to
|
7
6
|
run it.
|
8
7
|
|
9
8
|
Scenario: Run a single feature
|
10
9
|
Given the standard step definitions
|
11
10
|
Given a file named "features/success.feature" with:
|
12
11
|
"""
|
13
|
-
Feature:
|
14
|
-
Scenario:
|
12
|
+
Feature:
|
13
|
+
Scenario:
|
15
14
|
Given this step passes
|
16
15
|
"""
|
17
16
|
When I run the following Ruby code:
|
18
17
|
"""
|
19
18
|
require 'cucumber'
|
20
19
|
runtime = Cucumber::Runtime.new
|
21
|
-
runtime.load_programming_language('rb')
|
22
20
|
Cucumber::Cli::Main.new([]).execute!(runtime)
|
23
|
-
|
24
21
|
"""
|
25
22
|
Then it should pass
|
26
23
|
And the output should contain:
|
@@ -29,7 +29,8 @@ Feature: Skip Scenario
|
|
29
29
|
|
30
30
|
"""
|
31
31
|
|
32
|
-
|
32
|
+
@spawn
|
33
|
+
Scenario: Use (deprecated) legacy API
|
33
34
|
Given a file named "features/test.feature" with:
|
34
35
|
"""
|
35
36
|
Feature: test
|
@@ -57,4 +58,7 @@ Feature: Skip Scenario
|
|
57
58
|
2 steps (2 skipped)
|
58
59
|
|
59
60
|
"""
|
60
|
-
|
61
|
+
And the stderr should contain:
|
62
|
+
"""
|
63
|
+
WARNING: skip_invoke! is deprecated
|
64
|
+
"""
|
@@ -0,0 +1,36 @@
|
|
1
|
+
Feature: Formatter API methods
|
2
|
+
|
3
|
+
Some utility methods are provided to make it easier to write your own formatters.
|
4
|
+
|
5
|
+
Here are some examples.
|
6
|
+
|
7
|
+
Scenario: A formatter that uses `Cucumber::Formatter::Io#ensure_file`
|
8
|
+
|
9
|
+
The ensure_file method is a little helper function that some formatters use,
|
10
|
+
normally when given a CLI argument with `--out` to check that the file passed
|
11
|
+
by the user actually exists.
|
12
|
+
|
13
|
+
The second argument is the name of the formatter, used to print a useful
|
14
|
+
error message if the file can't be created for some reason.
|
15
|
+
|
16
|
+
Given a file named "features/f.feature" with:
|
17
|
+
"""
|
18
|
+
Feature: Test
|
19
|
+
Scenario: Test
|
20
|
+
"""
|
21
|
+
And a file named "features/support/custom_formatter.rb" with:
|
22
|
+
"""
|
23
|
+
require 'cucumber/formatter/io'
|
24
|
+
module Cucumber
|
25
|
+
module Formatter
|
26
|
+
class Test
|
27
|
+
include Io
|
28
|
+
def initialize(runtime, path_or_io, options)
|
29
|
+
ensure_file("my/special/output.file", "custom formatter")
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
"""
|
35
|
+
When I run `cucumber features/f.feature --format Cucumber::Formatter::Test`
|
36
|
+
Then it should pass
|
@@ -84,10 +84,10 @@ Feature: Profiles
|
|
84
84
|
Scenario: Overriding the profile's features to run
|
85
85
|
Given a file named "features/another.feature" with:
|
86
86
|
"""
|
87
|
-
Feature: Just this one should be
|
87
|
+
Feature: Just this one should be run
|
88
88
|
"""
|
89
89
|
When I run `cucumber -p default features/another.feature`
|
90
|
-
Then exactly these features should be
|
90
|
+
Then exactly these features should be run: features/another.feature
|
91
91
|
|
92
92
|
Scenario: Overriding the profile's formatter
|
93
93
|
You will most likely want to define a formatter in your default formatter.
|
@@ -10,6 +10,6 @@ Then /^exactly these files should be loaded:\s*(.*)$/ do |files|
|
|
10
10
|
expect(all_stdout.scan(/^ \* (.*\.rb)$/).flatten).to eq files.split(/,\s+/)
|
11
11
|
end
|
12
12
|
|
13
|
-
Then /^exactly these features should be
|
13
|
+
Then /^exactly these features should be run:\s*(.*)$/ do |files|
|
14
14
|
expect(all_stdout.scan(/^ \* (.*\.feature)$/).flatten).to eq files.split(/,\s+/)
|
15
15
|
end
|
data/lib/cucumber.rb
CHANGED
@@ -21,10 +21,17 @@ module Cucumber
|
|
21
21
|
@log = logger
|
22
22
|
end
|
23
23
|
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
24
|
+
if Cucumber::RUBY_1_9
|
25
|
+
# Backported from Ruby 2.0 to 1.9
|
26
|
+
def Hash(other)
|
27
|
+
return {} if other.nil? || other == []
|
28
|
+
raise TypeError, "can't convert #{other.class} into Hash" unless other.respond_to?(:to_hash)
|
29
|
+
other.to_hash
|
30
|
+
end
|
31
|
+
else
|
32
|
+
def Hash(other)
|
33
|
+
Kernel::Hash(other)
|
34
|
+
end
|
28
35
|
end
|
29
36
|
end
|
30
37
|
end
|
@@ -114,7 +114,7 @@ module Cucumber
|
|
114
114
|
end
|
115
115
|
|
116
116
|
def to_hash
|
117
|
-
Hash
|
117
|
+
Cucumber::Hash(@options).merge(out_stream: @out_stream, error_stream: @error_stream)
|
118
118
|
end
|
119
119
|
|
120
120
|
private
|
@@ -139,4 +139,4 @@ module Cucumber
|
|
139
139
|
end
|
140
140
|
end
|
141
141
|
end
|
142
|
-
end
|
142
|
+
end
|
data/lib/cucumber/cli/options.rb
CHANGED
@@ -3,6 +3,9 @@ require 'cucumber/cli/rerun_file'
|
|
3
3
|
require 'cucumber/events'
|
4
4
|
require 'forwardable'
|
5
5
|
require 'cucumber/core/gherkin/tag_expression'
|
6
|
+
require 'cucumber'
|
7
|
+
require 'event/bus'
|
8
|
+
require 'event/name_resolver'
|
6
9
|
|
7
10
|
module Cucumber
|
8
11
|
# The base class for configuring settings for a Cucumber run.
|
@@ -28,11 +31,11 @@ module Cucumber
|
|
28
31
|
def_instance_delegator :event_bus, :notify
|
29
32
|
|
30
33
|
def initialize(user_options = {})
|
31
|
-
@options = default_options.merge(Hash
|
34
|
+
@options = default_options.merge(Cucumber::Hash(user_options))
|
32
35
|
end
|
33
36
|
|
34
37
|
def with_options(new_options)
|
35
|
-
self.class.new(
|
38
|
+
self.class.new(@options.merge(new_options))
|
36
39
|
end
|
37
40
|
|
38
41
|
# TODO: Actually Deprecate???
|
@@ -193,6 +196,25 @@ module Cucumber
|
|
193
196
|
@options
|
194
197
|
end
|
195
198
|
|
199
|
+
# An array of procs that can generate snippets for undefined steps. These procs may be called if a
|
200
|
+
# formatter wants to display snippets to the user.
|
201
|
+
#
|
202
|
+
# Each proc should take the following arguments:
|
203
|
+
#
|
204
|
+
# - keyword
|
205
|
+
# - step text
|
206
|
+
# - multiline argument
|
207
|
+
# - snippet type
|
208
|
+
#
|
209
|
+
def snippet_generators
|
210
|
+
@options[:snippet_generators] ||= []
|
211
|
+
end
|
212
|
+
|
213
|
+
def register_snippet_generator(generator)
|
214
|
+
snippet_generators << generator
|
215
|
+
self
|
216
|
+
end
|
217
|
+
|
196
218
|
private
|
197
219
|
|
198
220
|
def default_options
|
@@ -212,7 +234,7 @@ module Cucumber
|
|
212
234
|
:snippets => true,
|
213
235
|
:source => true,
|
214
236
|
:duration => true,
|
215
|
-
:event_bus =>
|
237
|
+
:event_bus => Event::Bus.new(Event::NameResolver.new(Cucumber::Events))
|
216
238
|
}
|
217
239
|
end
|
218
240
|
|
@@ -0,0 +1,29 @@
|
|
1
|
+
require 'cucumber/platform'
|
2
|
+
require 'cucumber/gherkin/formatter/ansi_escapes'
|
3
|
+
|
4
|
+
module Cucumber
|
5
|
+
module Deprecate
|
6
|
+
module ForUsers
|
7
|
+
AnsiEscapes = Cucumber::Gherkin::Formatter::AnsiEscapes
|
8
|
+
|
9
|
+
def self.call(message, method, remove_after_version)
|
10
|
+
STDERR.puts AnsiEscapes.failed + "WARNING: #{method} is deprecated and will be removed after version #{remove_after_version}. #{message}" + AnsiEscapes.reset
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
module ForDevelopers
|
15
|
+
def self.call(message, method, remove_after_version)
|
16
|
+
if Cucumber::VERSION > remove_after_version
|
17
|
+
raise "This method is due for removal after version #{remove_after_version}"
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
Strategy = $0.match(/rspec$/) ? ForDevelopers : ForUsers
|
23
|
+
end
|
24
|
+
|
25
|
+
def self.deprecate(*args)
|
26
|
+
Deprecate::Strategy.call(*args)
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
@@ -1,17 +1,21 @@
|
|
1
1
|
require 'cucumber/core/filter'
|
2
|
+
require 'cucumber/step_match'
|
3
|
+
require 'cucumber/events'
|
4
|
+
require 'cucumber/errors'
|
2
5
|
|
3
6
|
module Cucumber
|
4
7
|
module Filters
|
5
|
-
class ActivateSteps < Core::Filter.new(:
|
8
|
+
class ActivateSteps < Core::Filter.new(:step_match_search, :configuration)
|
6
9
|
|
7
10
|
def test_case(test_case)
|
8
|
-
CaseFilter.new(test_case,
|
11
|
+
CaseFilter.new(test_case, step_match_search, configuration).test_case.describe_to receiver
|
9
12
|
end
|
10
13
|
|
11
14
|
class CaseFilter
|
12
|
-
def initialize(test_case,
|
15
|
+
def initialize(test_case, step_match_search, configuration)
|
13
16
|
@original_test_case = test_case
|
14
|
-
@
|
17
|
+
@step_match_search = step_match_search
|
18
|
+
@configuration = configuration
|
15
19
|
end
|
16
20
|
|
17
21
|
def test_case
|
@@ -25,7 +29,37 @@ module Cucumber
|
|
25
29
|
end
|
26
30
|
|
27
31
|
def attempt_to_activate(test_step)
|
28
|
-
|
32
|
+
find_match(test_step).activate(test_step)
|
33
|
+
end
|
34
|
+
|
35
|
+
def find_match(test_step)
|
36
|
+
FindMatch.new(@step_match_search, @configuration, test_step).result
|
37
|
+
end
|
38
|
+
|
39
|
+
class FindMatch
|
40
|
+
def initialize(step_match_search, configuration, test_step)
|
41
|
+
@step_match_search, @configuration, @test_step = step_match_search, configuration, test_step
|
42
|
+
end
|
43
|
+
|
44
|
+
def result
|
45
|
+
return NoStepMatch.new(test_step.source.last, test_step.name) unless matches.any?
|
46
|
+
configuration.notify Events::StepMatch.new(test_step, match)
|
47
|
+
return SkippingStepMatch.new if configuration.dry_run?
|
48
|
+
match
|
49
|
+
end
|
50
|
+
|
51
|
+
private
|
52
|
+
|
53
|
+
attr_reader :step_match_search, :configuration, :test_step
|
54
|
+
private :step_match_search, :configuration, :test_step
|
55
|
+
|
56
|
+
def match
|
57
|
+
matches.first
|
58
|
+
end
|
59
|
+
|
60
|
+
def matches
|
61
|
+
step_match_search.call(test_step.name)
|
62
|
+
end
|
29
63
|
end
|
30
64
|
end
|
31
65
|
end
|
@@ -69,7 +69,8 @@ module Cucumber
|
|
69
69
|
if status == :failed
|
70
70
|
print_exception(element.exception, status, 0)
|
71
71
|
else
|
72
|
-
|
72
|
+
message = linebreaks(element.backtrace_line, ENV['CUCUMBER_TRUNCATE_OUTPUT'].to_i)
|
73
|
+
@io.puts(format_string(message, status))
|
73
74
|
end
|
74
75
|
@io.puts
|
75
76
|
@io.flush
|
@@ -123,9 +124,7 @@ module Cucumber
|
|
123
124
|
|
124
125
|
def print_exception(e, status, indent)
|
125
126
|
message = "#{e.message} (#{e.class})".force_encoding("UTF-8")
|
126
|
-
|
127
|
-
message = linebreaks(message, ENV['CUCUMBER_TRUNCATE_OUTPUT'].to_i)
|
128
|
-
end
|
127
|
+
message = linebreaks(message, ENV['CUCUMBER_TRUNCATE_OUTPUT'].to_i)
|
129
128
|
|
130
129
|
string = "#{message}\n#{e.backtrace.join("\n")}".indent(indent)
|
131
130
|
@io.puts(format_string(string, status))
|
@@ -133,6 +132,7 @@ module Cucumber
|
|
133
132
|
|
134
133
|
# http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-talk/10655
|
135
134
|
def linebreaks(s, max)
|
135
|
+
return s unless max && max > 0
|
136
136
|
s.gsub(/.{1,#{max}}(?:\s|\Z)/){($& + 5.chr).gsub(/\n\005/,"\n").gsub(/\005/,"\n")}.rstrip
|
137
137
|
end
|
138
138
|
|