cucumber_priority 0.2.0 → 0.3.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 +5 -5
- data/.travis.yml +13 -8
- data/Gemfile +1 -0
- data/Gemfile.lock +1 -0
- data/README.md +26 -17
- data/gemfiles/Gemfile.cucumber-1.3 +0 -1
- data/gemfiles/Gemfile.cucumber-1.3.lock +2 -4
- data/gemfiles/Gemfile.cucumber-2.4 +0 -1
- data/gemfiles/Gemfile.cucumber-2.4.lock +6 -19
- data/gemfiles/Gemfile.cucumber-3.0 +1 -2
- data/gemfiles/Gemfile.cucumber-3.0.lock +17 -14
- data/gemfiles/Gemfile.cucumber-3.1 +12 -0
- data/gemfiles/Gemfile.cucumber-3.1.lock +67 -0
- data/lib/cucumber_priority.rb +3 -6
- data/lib/cucumber_priority/require_cucumber.rb +8 -0
- data/lib/cucumber_priority/resolve_ambiguous_error.rb +92 -0
- data/lib/cucumber_priority/step_definition_ext.rb +19 -0
- data/lib/cucumber_priority/version.rb +1 -1
- data/spec/support/cucumber_helper.rb +18 -15
- metadata +10 -5
- data/lib/cucumber_priority/rb_step_definition_ext.rb +0 -21
- data/lib/cucumber_priority/support_code_ext.rb +0 -64
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: '08253bd452fab3691947f47e32a8dd918b40dc1d87984383f11ec07d41662b7f'
|
4
|
+
data.tar.gz: 5fbc94f014fc42891fcad6737aa78297f2f12485f92230615af538d400cdbd06
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 901cc83b57973c9c6b2bdad8590be51bd7092b6ae46d50bec50506c67141b39803d6472991a28d43265c55621b60d6f79ef12460944c99c0fe147f5bc2fc558c
|
7
|
+
data.tar.gz: 8c5a6341e332a6e42c277bcec38242d2ff682059ec23eb837ddcba771cbbeec0293f920cda80a424c6463693b1f00cf5856ed2ed6b0f4dc00ca81540b0f7a546
|
data/.travis.yml
CHANGED
@@ -1,29 +1,34 @@
|
|
1
1
|
rvm:
|
2
2
|
- 1.8.7
|
3
3
|
- 2.1.10
|
4
|
-
- 2.
|
4
|
+
- 2.5.0
|
5
5
|
|
6
6
|
gemfile:
|
7
7
|
- gemfiles/Gemfile.cucumber-1.3
|
8
8
|
- gemfiles/Gemfile.cucumber-2.4
|
9
9
|
- gemfiles/Gemfile.cucumber-3.0
|
10
|
+
- gemfiles/Gemfile.cucumber-3.1
|
10
11
|
|
11
12
|
matrix:
|
12
13
|
exclude:
|
13
|
-
- gemfile: gemfiles/Gemfile.cucumber-3.
|
14
|
-
rvm:
|
14
|
+
- gemfile: gemfiles/Gemfile.cucumber-3.1
|
15
|
+
rvm: 1.8.7
|
16
|
+
- gemfile: gemfiles/Gemfile.cucumber-3.1
|
17
|
+
rvm: 2.1.10 # cucumber 3 wants ruby >= 2.2
|
15
18
|
- gemfile: gemfiles/Gemfile.cucumber-3.0
|
16
19
|
rvm: 1.8.7
|
20
|
+
- gemfile: gemfiles/Gemfile.cucumber-3.0
|
21
|
+
rvm: 2.1.10 # cucumber 3 wants ruby >= 2.2
|
17
22
|
- gemfile: gemfiles/Gemfile.cucumber-2.4
|
18
23
|
rvm: 1.8.7
|
19
24
|
- gemfile: gemfiles/Gemfile.cucumber-1.3
|
20
|
-
rvm: 2.
|
25
|
+
rvm: 2.5.0 # doesn't work with old RSpec
|
21
26
|
|
22
27
|
install:
|
23
|
-
#
|
24
|
-
|
25
|
-
|
26
|
-
- bundle install --jobs=3 --retry=3 --
|
28
|
+
# Replace default Travis CI bundler script with a version that doesn't
|
29
|
+
# explode when lockfile doesn't match recently bumped version
|
30
|
+
- gem update --system
|
31
|
+
- bundle install --no-deployment --jobs=3 --retry=3 --path=${BUNDLE_PATH:-vendor/bundle}
|
27
32
|
|
28
33
|
script: bundle exec rake current_rspec
|
29
34
|
|
data/Gemfile
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
./gemfiles/Gemfile.cucumber-2.4
|
data/Gemfile.lock
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
./gemfiles/Gemfile.cucumber-2.4.lock
|
data/README.md
CHANGED
@@ -16,17 +16,21 @@ Examples
|
|
16
16
|
|
17
17
|
To mark a step definition as overridable, call `#overridable` on the definition object:
|
18
18
|
|
19
|
-
|
20
|
-
|
21
|
-
|
19
|
+
```ruby
|
20
|
+
Given /^there is a movie with a (.*?) tone$/ do
|
21
|
+
...
|
22
|
+
end.overridable
|
22
23
|
|
23
|
-
|
24
|
-
|
25
|
-
|
24
|
+
Given /^there is a movie with a funny tone$/ do
|
25
|
+
...
|
26
|
+
end
|
27
|
+
```
|
26
28
|
|
27
29
|
The following step will now **no longer raise `Cucumber::Ambiguous`**:
|
28
30
|
|
29
|
-
|
31
|
+
```cucumber
|
32
|
+
Given there is a movie with a funny tone
|
33
|
+
```
|
30
34
|
|
31
35
|
If a step matches more than one non-overridable steps, Cucumber will still raise `Cucumber::Ambiguous`.
|
32
36
|
|
@@ -35,13 +39,15 @@ If a step matches more than one non-overridable steps, Cucumber will still raise
|
|
35
39
|
|
36
40
|
You can define priorities for overridable steps by passing an numeric `:priority` option to `#overridable:`
|
37
41
|
|
38
|
-
|
39
|
-
|
40
|
-
|
42
|
+
```ruby
|
43
|
+
Given /^there is a movie with a (.*?) tone$/ do
|
44
|
+
...
|
45
|
+
end.overridable(priority: 1)
|
41
46
|
|
42
|
-
|
43
|
-
|
44
|
-
|
47
|
+
Given /^there is a movie with a (sad|upbeat|disturbing) tone$/ do
|
48
|
+
...
|
49
|
+
end.overridable(priority: 5)
|
50
|
+
```
|
45
51
|
|
46
52
|
A higher priority wins the match.
|
47
53
|
|
@@ -51,7 +57,7 @@ A non-overridable step will always win over an overridable step regardless of it
|
|
51
57
|
Supported Cucumber versions
|
52
58
|
----------------------------
|
53
59
|
|
54
|
-
cucumber_priority is tested against Cucumber 1.3, 2.4 and 3.
|
60
|
+
cucumber_priority is tested against Cucumber 1.3, 2.4, 3.0 and 3.1.
|
55
61
|
|
56
62
|
|
57
63
|
Installation
|
@@ -59,7 +65,9 @@ Installation
|
|
59
65
|
|
60
66
|
In your `Gemfile` say:
|
61
67
|
|
62
|
-
|
68
|
+
```ruby
|
69
|
+
gem 'cucumber_priority'
|
70
|
+
```
|
63
71
|
|
64
72
|
Now run `bundle install` and restart your server.
|
65
73
|
|
@@ -69,7 +77,7 @@ Development
|
|
69
77
|
|
70
78
|
There are tests in `spec`. We only accept PRs with tests. To run tests:
|
71
79
|
|
72
|
-
- Install Ruby 2.
|
80
|
+
- Install Ruby 2.5.0
|
73
81
|
- Install development dependencies using `bundle install`
|
74
82
|
- Run tests using `bundle exec rspec`
|
75
83
|
|
@@ -92,4 +100,5 @@ I'm very eager to keep this gem leightweight and on topic. If you're unsure whet
|
|
92
100
|
Credits
|
93
101
|
-------
|
94
102
|
|
95
|
-
Henning Koch from [makandra](
|
103
|
+
Henning Koch from [makandra](https://makandra.com/)
|
104
|
+
|
@@ -1,13 +1,12 @@
|
|
1
1
|
PATH
|
2
2
|
remote: ..
|
3
3
|
specs:
|
4
|
-
cucumber_priority (0.
|
4
|
+
cucumber_priority (0.2.0)
|
5
5
|
cucumber
|
6
6
|
|
7
7
|
GEM
|
8
8
|
remote: https://rubygems.org/
|
9
9
|
specs:
|
10
|
-
activesupport (2.3.18)
|
11
10
|
builder (3.2.2)
|
12
11
|
cucumber (1.3.20)
|
13
12
|
builder (>= 2.1.2)
|
@@ -28,7 +27,6 @@ PLATFORMS
|
|
28
27
|
ruby
|
29
28
|
|
30
29
|
DEPENDENCIES
|
31
|
-
activesupport (~> 2.3.0)
|
32
30
|
cucumber (~> 1.3.20)
|
33
31
|
cucumber_priority!
|
34
32
|
gemika
|
@@ -36,4 +34,4 @@ DEPENDENCIES
|
|
36
34
|
rspec (~> 1.0)
|
37
35
|
|
38
36
|
BUNDLED WITH
|
39
|
-
1.
|
37
|
+
1.16.1
|
@@ -1,19 +1,13 @@
|
|
1
1
|
PATH
|
2
2
|
remote: ..
|
3
3
|
specs:
|
4
|
-
cucumber_priority (0.
|
4
|
+
cucumber_priority (0.2.0)
|
5
5
|
cucumber
|
6
6
|
|
7
7
|
GEM
|
8
8
|
remote: https://rubygems.org/
|
9
9
|
specs:
|
10
|
-
|
11
|
-
i18n (~> 0.7)
|
12
|
-
json (~> 1.7, >= 1.7.7)
|
13
|
-
minitest (~> 5.1)
|
14
|
-
thread_safe (~> 0.3, >= 0.3.4)
|
15
|
-
tzinfo (~> 1.1)
|
16
|
-
builder (3.2.2)
|
10
|
+
builder (3.2.3)
|
17
11
|
cucumber (2.4.0)
|
18
12
|
builder (>= 2.1.2)
|
19
13
|
cucumber-core (~> 1.5.0)
|
@@ -25,13 +19,10 @@ GEM
|
|
25
19
|
cucumber-core (1.5.0)
|
26
20
|
gherkin (~> 4.0)
|
27
21
|
cucumber-wire (0.0.1)
|
28
|
-
diff-lcs (1.
|
22
|
+
diff-lcs (1.3)
|
29
23
|
gemika (0.3.2)
|
30
|
-
gherkin (4.
|
31
|
-
|
32
|
-
json (1.8.3)
|
33
|
-
minitest (5.8.4)
|
34
|
-
multi_json (1.12.1)
|
24
|
+
gherkin (4.1.3)
|
25
|
+
multi_json (1.13.1)
|
35
26
|
multi_test (0.1.2)
|
36
27
|
rake (10.1.0)
|
37
28
|
rspec (3.4.0)
|
@@ -47,15 +38,11 @@ GEM
|
|
47
38
|
diff-lcs (>= 1.2.0, < 2.0)
|
48
39
|
rspec-support (~> 3.4.0)
|
49
40
|
rspec-support (3.4.1)
|
50
|
-
thread_safe (0.3.5)
|
51
|
-
tzinfo (1.2.2)
|
52
|
-
thread_safe (~> 0.1)
|
53
41
|
|
54
42
|
PLATFORMS
|
55
43
|
ruby
|
56
44
|
|
57
45
|
DEPENDENCIES
|
58
|
-
activesupport (~> 4.2.0)
|
59
46
|
cucumber (~> 2.4.0)
|
60
47
|
cucumber_priority!
|
61
48
|
gemika
|
@@ -63,4 +50,4 @@ DEPENDENCIES
|
|
63
50
|
rspec (~> 3.0)
|
64
51
|
|
65
52
|
BUNDLED WITH
|
66
|
-
1.
|
53
|
+
1.16.1
|
@@ -6,30 +6,34 @@ GEM
|
|
6
6
|
i18n (~> 0.7)
|
7
7
|
minitest (~> 5.1)
|
8
8
|
tzinfo (~> 1.1)
|
9
|
-
backports (3.
|
10
|
-
builder (3.2.
|
9
|
+
backports (3.11.1)
|
10
|
+
builder (3.2.3)
|
11
11
|
concurrent-ruby (1.0.3)
|
12
|
-
cucumber (3.0.
|
12
|
+
cucumber (3.0.2)
|
13
13
|
builder (>= 2.1.2)
|
14
|
-
cucumber-core (~>
|
14
|
+
cucumber-core (~> 3.0.0)
|
15
|
+
cucumber-expressions (~> 4.0.3)
|
15
16
|
cucumber-wire (~> 0.0.1)
|
16
|
-
diff-lcs (
|
17
|
+
diff-lcs (~> 1.3)
|
17
18
|
gherkin (~> 4.0)
|
18
19
|
multi_json (>= 1.7.5, < 2.0)
|
19
20
|
multi_test (>= 0.1.2)
|
20
|
-
cucumber-core (
|
21
|
-
backports (
|
22
|
-
|
21
|
+
cucumber-core (3.0.0)
|
22
|
+
backports (>= 3.8.0)
|
23
|
+
cucumber-tag_expressions (>= 1.0.1)
|
24
|
+
gherkin (>= 4.1.3)
|
25
|
+
cucumber-expressions (4.0.4)
|
26
|
+
cucumber-tag_expressions (1.1.1)
|
23
27
|
cucumber-wire (0.0.1)
|
24
28
|
cucumber_priority (0.1.2)
|
25
29
|
activesupport
|
26
30
|
cucumber
|
27
|
-
diff-lcs (1.
|
31
|
+
diff-lcs (1.3)
|
28
32
|
gemika (0.3.2)
|
29
|
-
gherkin (4.
|
33
|
+
gherkin (4.1.3)
|
30
34
|
i18n (0.7.0)
|
31
35
|
minitest (5.10.1)
|
32
|
-
multi_json (1.
|
36
|
+
multi_json (1.13.1)
|
33
37
|
multi_test (0.1.2)
|
34
38
|
rake (10.4.2)
|
35
39
|
rspec (3.5.0)
|
@@ -53,12 +57,11 @@ PLATFORMS
|
|
53
57
|
ruby
|
54
58
|
|
55
59
|
DEPENDENCIES
|
56
|
-
|
57
|
-
cucumber (~> 3.0.0.pre.1)
|
60
|
+
cucumber (~> 3.0.0)
|
58
61
|
cucumber_priority
|
59
62
|
gemika
|
60
63
|
rake
|
61
64
|
rspec (~> 3.0)
|
62
65
|
|
63
66
|
BUNDLED WITH
|
64
|
-
1.
|
67
|
+
1.16.1
|
@@ -0,0 +1,67 @@
|
|
1
|
+
GEM
|
2
|
+
remote: https://rubygems.org/
|
3
|
+
specs:
|
4
|
+
activesupport (5.0.1)
|
5
|
+
concurrent-ruby (~> 1.0, >= 1.0.2)
|
6
|
+
i18n (~> 0.7)
|
7
|
+
minitest (~> 5.1)
|
8
|
+
tzinfo (~> 1.1)
|
9
|
+
backports (3.11.1)
|
10
|
+
builder (3.2.3)
|
11
|
+
concurrent-ruby (1.0.3)
|
12
|
+
cucumber (3.1.0)
|
13
|
+
builder (>= 2.1.2)
|
14
|
+
cucumber-core (~> 3.1.0)
|
15
|
+
cucumber-expressions (~> 5.0.4)
|
16
|
+
cucumber-wire (~> 0.0.1)
|
17
|
+
diff-lcs (~> 1.3)
|
18
|
+
gherkin (~> 5.0)
|
19
|
+
multi_json (>= 1.7.5, < 2.0)
|
20
|
+
multi_test (>= 0.1.2)
|
21
|
+
cucumber-core (3.1.0)
|
22
|
+
backports (>= 3.8.0)
|
23
|
+
cucumber-tag_expressions (~> 1.1.0)
|
24
|
+
gherkin (>= 5.0.0)
|
25
|
+
cucumber-expressions (5.0.13)
|
26
|
+
cucumber-tag_expressions (1.1.1)
|
27
|
+
cucumber-wire (0.0.1)
|
28
|
+
cucumber_priority (0.1.2)
|
29
|
+
activesupport
|
30
|
+
cucumber
|
31
|
+
diff-lcs (1.3)
|
32
|
+
gemika (0.3.2)
|
33
|
+
gherkin (5.0.0)
|
34
|
+
i18n (0.7.0)
|
35
|
+
minitest (5.10.1)
|
36
|
+
multi_json (1.13.1)
|
37
|
+
multi_test (0.1.2)
|
38
|
+
rake (10.4.2)
|
39
|
+
rspec (3.5.0)
|
40
|
+
rspec-core (~> 3.5.0)
|
41
|
+
rspec-expectations (~> 3.5.0)
|
42
|
+
rspec-mocks (~> 3.5.0)
|
43
|
+
rspec-core (3.5.4)
|
44
|
+
rspec-support (~> 3.5.0)
|
45
|
+
rspec-expectations (3.5.0)
|
46
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
47
|
+
rspec-support (~> 3.5.0)
|
48
|
+
rspec-mocks (3.5.0)
|
49
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
50
|
+
rspec-support (~> 3.5.0)
|
51
|
+
rspec-support (3.5.0)
|
52
|
+
thread_safe (0.3.5)
|
53
|
+
tzinfo (1.2.2)
|
54
|
+
thread_safe (~> 0.1)
|
55
|
+
|
56
|
+
PLATFORMS
|
57
|
+
ruby
|
58
|
+
|
59
|
+
DEPENDENCIES
|
60
|
+
cucumber (~> 3.1.0)
|
61
|
+
cucumber_priority
|
62
|
+
gemika
|
63
|
+
rake
|
64
|
+
rspec (~> 3.0)
|
65
|
+
|
66
|
+
BUNDLED WITH
|
67
|
+
1.16.1
|
data/lib/cucumber_priority.rb
CHANGED
@@ -1,8 +1,5 @@
|
|
1
|
-
require '
|
2
|
-
require 'cucumber/rb_support/rb_language'
|
3
|
-
|
1
|
+
require 'cucumber_priority/require_cucumber'
|
4
2
|
require 'cucumber_priority/util'
|
5
3
|
require 'cucumber_priority/ambiguous_error_ext'
|
6
|
-
require 'cucumber_priority/
|
7
|
-
require 'cucumber_priority/
|
8
|
-
|
4
|
+
require 'cucumber_priority/step_definition_ext'
|
5
|
+
require 'cucumber_priority/resolve_ambiguous_error'
|
@@ -0,0 +1,92 @@
|
|
1
|
+
module CucumberPriority
|
2
|
+
class Resolver
|
3
|
+
|
4
|
+
def self.resolve_ambiguity_through_priority(e)
|
5
|
+
overridable, overriding = e.matches.partition { |match|
|
6
|
+
match.step_definition.overridable?
|
7
|
+
}
|
8
|
+
if overriding.size > 1
|
9
|
+
# If we have more than one overriding step definitions,
|
10
|
+
# this is an ambiguity error
|
11
|
+
raise e
|
12
|
+
elsif overriding.size == 1
|
13
|
+
# If our ambiguity is due to another overridable step,
|
14
|
+
# we can use the overriding step
|
15
|
+
overriding
|
16
|
+
elsif overriding.size == 0
|
17
|
+
# If we have multiple overridable steps, we use the one
|
18
|
+
# with the highest priority.
|
19
|
+
overridable.sort_by { |match|
|
20
|
+
- match.step_definition.priority
|
21
|
+
}
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
if Cucumber::VERSION >= '3'
|
29
|
+
|
30
|
+
module Cucumber
|
31
|
+
module StepMatchSearch
|
32
|
+
class AssertUnambiguousMatch
|
33
|
+
|
34
|
+
def call_with_priority(*args)
|
35
|
+
call_without_priority(*args)
|
36
|
+
rescue Ambiguous => e
|
37
|
+
CucumberPriority::Resolver.resolve_ambiguity_through_priority(e)
|
38
|
+
end
|
39
|
+
|
40
|
+
CucumberPriority::Util.alias_chain self, :call, :priority
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
elsif Cucumber::VERSION >= '2.3'
|
46
|
+
|
47
|
+
module Cucumber
|
48
|
+
class Runtime
|
49
|
+
class SupportCode
|
50
|
+
|
51
|
+
# Cucumber 2.3 or higher has a single method #step_matches which returns an
|
52
|
+
# array of Cucumber::StepMatch objects.
|
53
|
+
# This method raises Cucumber::Ambiguous if the array has more than one element.
|
54
|
+
def step_matches_with_priority(*args)
|
55
|
+
step_matches_without_priority(*args)
|
56
|
+
rescue Ambiguous => e
|
57
|
+
CucumberPriority::Resolver.resolve_ambiguity_through_priority(e)
|
58
|
+
end
|
59
|
+
|
60
|
+
CucumberPriority::Util.alias_chain self, :step_matches, :priority
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
else
|
66
|
+
|
67
|
+
module Cucumber
|
68
|
+
class Runtime
|
69
|
+
class SupportCode
|
70
|
+
|
71
|
+
# Cucumber 2.1 or lower has a single method #step_match which returns a
|
72
|
+
# single Cucumber::StepMatch.
|
73
|
+
# This method raises Cucumber::Ambigiuous if there are two or more matches.
|
74
|
+
def step_match_with_priority(*args)
|
75
|
+
step_match_without_priority(*args)
|
76
|
+
rescue Ambiguous => e
|
77
|
+
CucumberPriority::Resolver.resolve_ambiguity_through_priority(e).first
|
78
|
+
end
|
79
|
+
|
80
|
+
CucumberPriority::Util.alias_chain self, :step_match, :priority
|
81
|
+
|
82
|
+
# This method doesn't exist in old Cucumbers.
|
83
|
+
# We define it so our specs have a unified API to match steps.
|
84
|
+
def step_matches(*args)
|
85
|
+
[step_match(*args)]
|
86
|
+
end
|
87
|
+
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
step_definition_class = Cucumber::VERSION >= '3' ? Cucumber::Glue::StepDefinition : Cucumber::RbSupport::RbStepDefinition
|
2
|
+
|
3
|
+
step_definition_class.class_eval do
|
4
|
+
|
5
|
+
def overridable(options = {})
|
6
|
+
@overridable = true
|
7
|
+
@priority = options[:priority]
|
8
|
+
self
|
9
|
+
end
|
10
|
+
|
11
|
+
def overridable?
|
12
|
+
!!@overridable
|
13
|
+
end
|
14
|
+
|
15
|
+
def priority
|
16
|
+
@priority ||= 0
|
17
|
+
end
|
18
|
+
|
19
|
+
end
|
@@ -1,22 +1,25 @@
|
|
1
1
|
def prepare_cucumber_example
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
2
|
+
if Cucumber::VERSION >= '3'
|
3
|
+
@runtime = Cucumber::Runtime.new
|
4
|
+
scenario = double('scenario', :language => 'en', :accept_hook? => true)
|
5
|
+
@runtime.send(:begin_scenario, scenario)
|
6
|
+
@main = Object.new
|
7
|
+
@main.extend(Cucumber::Glue::Dsl)
|
8
|
+
else
|
9
|
+
@runtime = Cucumber::Runtime.new
|
10
|
+
language = support_code.ruby if support_code.respond_to?(:ruby)
|
11
|
+
language ||= support_code.load_programming_language('rb')
|
12
|
+
language
|
13
|
+
scenario = double('scenario', :language => 'en', :accept_hook? => true)
|
14
|
+
language.send(:begin_scenario, scenario)
|
15
|
+
@world = language.current_world
|
16
|
+
@main = Object.new
|
17
|
+
@main.extend(Cucumber::RbSupport::RbDsl)
|
18
|
+
end
|
16
19
|
end
|
17
20
|
|
18
21
|
def invoke_cucumber_step(step)
|
19
|
-
|
22
|
+
first_step_match(step).invoke(nil) # nil means no multiline args
|
20
23
|
end
|
21
24
|
|
22
25
|
def support_code
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cucumber_priority
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Henning Koch
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2018-02-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: cucumber
|
@@ -36,6 +36,8 @@ files:
|
|
36
36
|
- ".rspec"
|
37
37
|
- ".ruby-version"
|
38
38
|
- ".travis.yml"
|
39
|
+
- Gemfile
|
40
|
+
- Gemfile.lock
|
39
41
|
- LICENSE
|
40
42
|
- README.md
|
41
43
|
- Rakefile
|
@@ -46,10 +48,13 @@ files:
|
|
46
48
|
- gemfiles/Gemfile.cucumber-2.4.lock
|
47
49
|
- gemfiles/Gemfile.cucumber-3.0
|
48
50
|
- gemfiles/Gemfile.cucumber-3.0.lock
|
51
|
+
- gemfiles/Gemfile.cucumber-3.1
|
52
|
+
- gemfiles/Gemfile.cucumber-3.1.lock
|
49
53
|
- lib/cucumber_priority.rb
|
50
54
|
- lib/cucumber_priority/ambiguous_error_ext.rb
|
51
|
-
- lib/cucumber_priority/
|
52
|
-
- lib/cucumber_priority/
|
55
|
+
- lib/cucumber_priority/require_cucumber.rb
|
56
|
+
- lib/cucumber_priority/resolve_ambiguous_error.rb
|
57
|
+
- lib/cucumber_priority/step_definition_ext.rb
|
53
58
|
- lib/cucumber_priority/util.rb
|
54
59
|
- lib/cucumber_priority/version.rb
|
55
60
|
- spec/cucumber_priority/support_code_ext_spec.rb
|
@@ -76,7 +81,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
76
81
|
version: '0'
|
77
82
|
requirements: []
|
78
83
|
rubyforge_project:
|
79
|
-
rubygems_version: 2.
|
84
|
+
rubygems_version: 2.7.3
|
80
85
|
signing_key:
|
81
86
|
specification_version: 4
|
82
87
|
summary: Overridable step definitions for Cucumber
|
@@ -1,21 +0,0 @@
|
|
1
|
-
module Cucumber
|
2
|
-
module RbSupport
|
3
|
-
class RbStepDefinition
|
4
|
-
|
5
|
-
def overridable(options = {})
|
6
|
-
@overridable = true
|
7
|
-
@priority = options[:priority]
|
8
|
-
self
|
9
|
-
end
|
10
|
-
|
11
|
-
def overridable?
|
12
|
-
!!@overridable
|
13
|
-
end
|
14
|
-
|
15
|
-
def priority
|
16
|
-
@priority ||= 0
|
17
|
-
end
|
18
|
-
|
19
|
-
end
|
20
|
-
end
|
21
|
-
end
|
@@ -1,64 +0,0 @@
|
|
1
|
-
module Cucumber
|
2
|
-
class Runtime
|
3
|
-
class SupportCode
|
4
|
-
|
5
|
-
if method_defined?(:step_matches) || private_method_defined?(:step_matches)
|
6
|
-
# Cucumber 2.3 or higher has a single method #step_matches which returns an
|
7
|
-
# array of Cucumber::StepMatch objects.
|
8
|
-
# This method raises Cucumber::Ambiguous if the array has more than one element.
|
9
|
-
|
10
|
-
def step_matches_with_priority(*args)
|
11
|
-
step_matches_without_priority(*args)
|
12
|
-
rescue Ambiguous => e
|
13
|
-
resolve_ambiguity_through_priority(e)
|
14
|
-
end
|
15
|
-
|
16
|
-
CucumberPriority::Util.alias_chain self, :step_matches, :priority
|
17
|
-
|
18
|
-
else
|
19
|
-
# Cucumber 2.1 or lower has a single method #step_match which returns a
|
20
|
-
# single Cucumber::StepMatch.
|
21
|
-
# This method raises Cucumber::Ambigiuous if there are two or more matches.
|
22
|
-
|
23
|
-
def step_match_with_priority(*args)
|
24
|
-
step_match_without_priority(*args)
|
25
|
-
rescue Ambiguous => e
|
26
|
-
resolve_ambiguity_through_priority(e).first
|
27
|
-
end
|
28
|
-
|
29
|
-
CucumberPriority::Util.alias_chain self, :step_match, :priority
|
30
|
-
|
31
|
-
# This method doesn't exist in old Cucumbers.
|
32
|
-
# We define it so our specs have a unified API to match steps.
|
33
|
-
def step_matches(*args)
|
34
|
-
[step_match(*args)]
|
35
|
-
end
|
36
|
-
|
37
|
-
end
|
38
|
-
|
39
|
-
private
|
40
|
-
|
41
|
-
def resolve_ambiguity_through_priority(e)
|
42
|
-
overridable, overriding = e.matches.partition { |match|
|
43
|
-
match.step_definition.overridable?
|
44
|
-
}
|
45
|
-
if overriding.size > 1
|
46
|
-
# If we have more than one overriding step definitions,
|
47
|
-
# this is an ambiguity error
|
48
|
-
raise e
|
49
|
-
elsif overriding.size == 1
|
50
|
-
# If our ambiguity is due to another overridable step,
|
51
|
-
# we can use the overriding step
|
52
|
-
overriding
|
53
|
-
elsif overriding.size == 0
|
54
|
-
# If we have multiple overridable steps, we use the one
|
55
|
-
# with the highest priority.
|
56
|
-
overridable.sort_by { |match|
|
57
|
-
- match.step_definition.priority
|
58
|
-
}
|
59
|
-
end
|
60
|
-
end
|
61
|
-
|
62
|
-
end
|
63
|
-
end
|
64
|
-
end
|