turnip 3.1.0 → 4.0.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 +12 -4
- data/Gemfile +0 -1
- data/examples/gherkin6_syntax.feature +25 -0
- data/gemfiles/{Gemfile-rspec-3.6.x → Gemfile-rspec-3.8.x} +1 -1
- data/lib/turnip/builder.rb +4 -4
- data/lib/turnip/node/example.rb +2 -2
- data/lib/turnip/node/feature.rb +17 -37
- data/lib/turnip/node/rule.rb +32 -0
- data/lib/turnip/node/scenario_group_definition.rb +39 -0
- data/lib/turnip/node/scenario_outline.rb +5 -7
- data/lib/turnip/node/step.rb +5 -7
- data/lib/turnip/rspec.rb +16 -4
- data/lib/turnip/version.rb +1 -1
- data/spec/integration_spec.rb +1 -1
- data/turnip.gemspec +2 -1
- metadata +23 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8b5136318e39336ec82b97637d41586f2f8eb062b3a8f0b365bf12d69234f3b9
|
4
|
+
data.tar.gz: 5d2519ec243ddf02f790e69adfccb3a3ce768635e6c42f70b91b9f3fd2036a77
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 07f3ddd379dc52a69950e68bebbd11df4b6727d468feb198b17642c6b84980068846f9c4f00a8a87584ccf5dfb6f42c77fa9b494de5b2d971bf8e2443585c85b
|
7
|
+
data.tar.gz: d0ce8fe9c90673a2f3c815cffeb23fa0d37cce0c59726570971b1a9a95e0b615d86aa1d257824829a7f5a6d25099754212d8b568c1d18c0fd2e2b123441e0144
|
data/.travis.yml
CHANGED
@@ -7,13 +7,21 @@ branches:
|
|
7
7
|
only:
|
8
8
|
- master
|
9
9
|
|
10
|
+
#
|
11
|
+
# Ignore JRuby until https://github.com/cucumber/cucumber/pull/486 is merged
|
12
|
+
#
|
13
|
+
matrix:
|
14
|
+
allow_failures:
|
15
|
+
- rvm: jruby
|
16
|
+
- rvm: 2.6.0
|
17
|
+
|
10
18
|
rvm:
|
11
|
-
- 2.2
|
12
19
|
- 2.3.6
|
13
20
|
- 2.4.3
|
14
|
-
- 2.5.
|
15
|
-
-
|
21
|
+
- 2.5.3
|
22
|
+
- 2.6.0
|
23
|
+
- jruby
|
16
24
|
|
17
25
|
gemfile:
|
18
|
-
- gemfiles/Gemfile-rspec-3.6.x
|
19
26
|
- gemfiles/Gemfile-rspec-3.7.x
|
27
|
+
- gemfiles/Gemfile-rspec-3.8.x
|
data/Gemfile
CHANGED
@@ -0,0 +1,25 @@
|
|
1
|
+
Feature: Gherkin 6 syntax
|
2
|
+
|
3
|
+
Background:
|
4
|
+
Given there is a monster with 2 hitpoints
|
5
|
+
|
6
|
+
Scenario: Battle
|
7
|
+
When I attack it
|
8
|
+
Then the monster should be alive
|
9
|
+
When I attack it
|
10
|
+
Then it should die
|
11
|
+
|
12
|
+
Rule: Battle with preemptive attack
|
13
|
+
Background:
|
14
|
+
Given I attack the monster and do 1 points damage
|
15
|
+
|
16
|
+
Example: battle
|
17
|
+
When I attack it
|
18
|
+
Then it should die
|
19
|
+
|
20
|
+
Rule: Battle with preemptive critical attack
|
21
|
+
Background:
|
22
|
+
Given I attack the monster and do 2 points damage
|
23
|
+
|
24
|
+
Example: battle
|
25
|
+
Then it should die
|
data/lib/turnip/builder.rb
CHANGED
@@ -1,13 +1,13 @@
|
|
1
|
-
require "gherkin/
|
1
|
+
require "gherkin/gherkin"
|
2
2
|
require 'turnip/node/feature'
|
3
3
|
|
4
4
|
module Turnip
|
5
5
|
class Builder
|
6
6
|
def self.build(feature_file)
|
7
|
-
|
8
|
-
result =
|
7
|
+
messages = Gherkin::Gherkin.from_paths([feature_file], include_source: false, include_pickles: false)
|
8
|
+
result = messages.first&.gherkinDocument&.to_hash
|
9
9
|
|
10
|
-
return nil
|
10
|
+
return nil if result.nil? || result[:feature].nil?
|
11
11
|
Node::Feature.new(result[:feature])
|
12
12
|
end
|
13
13
|
end
|
data/lib/turnip/node/example.rb
CHANGED
@@ -42,7 +42,7 @@ module Turnip
|
|
42
42
|
# @return [Array]
|
43
43
|
#
|
44
44
|
def header
|
45
|
-
@header ||= @raw[:
|
45
|
+
@header ||= @raw[:table_header][:cells].map { |c| c[:value] }
|
46
46
|
end
|
47
47
|
|
48
48
|
#
|
@@ -56,7 +56,7 @@ module Turnip
|
|
56
56
|
# @return [Array]
|
57
57
|
#
|
58
58
|
def rows
|
59
|
-
@rows ||= @raw[:
|
59
|
+
@rows ||= @raw[:table_body].map do |row|
|
60
60
|
row[:cells].map { |c| c[:value] }
|
61
61
|
end
|
62
62
|
end
|
data/lib/turnip/node/feature.rb
CHANGED
@@ -1,8 +1,7 @@
|
|
1
1
|
require 'turnip/node/base'
|
2
2
|
require 'turnip/node/tag'
|
3
|
-
require 'turnip/node/
|
4
|
-
require 'turnip/node/
|
5
|
-
require 'turnip/node/background'
|
3
|
+
require 'turnip/node/scenario_group_definition'
|
4
|
+
require 'turnip/node/rule'
|
6
5
|
|
7
6
|
module Turnip
|
8
7
|
module Node
|
@@ -20,55 +19,36 @@ module Turnip
|
|
20
19
|
# children: [], # Array of Background, Scenario and Scenario Outline
|
21
20
|
# }
|
22
21
|
#
|
23
|
-
class Feature <
|
22
|
+
class Feature < ScenarioGroupDefinition
|
24
23
|
include HasTags
|
25
24
|
|
26
|
-
def name
|
27
|
-
@raw[:name]
|
28
|
-
end
|
29
|
-
|
30
25
|
def language
|
31
26
|
@raw[:language]
|
32
27
|
end
|
33
28
|
|
34
|
-
def
|
35
|
-
@raw[:
|
36
|
-
|
29
|
+
def children
|
30
|
+
@children ||= @raw[:children].map do |child|
|
31
|
+
unless child[:background].nil?
|
32
|
+
next Background.new(child[:background])
|
33
|
+
end
|
37
34
|
|
38
|
-
|
39
|
-
|
40
|
-
|
35
|
+
unless child[:scenario].nil?
|
36
|
+
klass = child[:scenario][:examples].empty? ? Scenario : ScenarioOutline
|
37
|
+
next klass.new(child[:scenario])
|
38
|
+
end
|
41
39
|
|
42
|
-
|
43
|
-
|
44
|
-
case c[:type]
|
45
|
-
when :Background
|
46
|
-
Background.new(c)
|
47
|
-
when :Scenario
|
48
|
-
Scenario.new(c)
|
49
|
-
when :ScenarioOutline
|
50
|
-
ScenarioOutline.new(c)
|
40
|
+
unless child[:rule].nil?
|
41
|
+
next Rule.new(child[:rule])
|
51
42
|
end
|
52
43
|
end.compact
|
53
44
|
end
|
54
45
|
|
55
|
-
def
|
56
|
-
@
|
57
|
-
c.is_a?(
|
46
|
+
def rules
|
47
|
+
@rules ||= children.select do |c|
|
48
|
+
c.is_a?(Rule)
|
58
49
|
end
|
59
50
|
end
|
60
51
|
|
61
|
-
def scenarios
|
62
|
-
@scenarios ||= children.map do |c|
|
63
|
-
case c
|
64
|
-
when Scenario
|
65
|
-
c
|
66
|
-
when ScenarioOutline
|
67
|
-
c.to_scenarios
|
68
|
-
end
|
69
|
-
end.flatten.compact
|
70
|
-
end
|
71
|
-
|
72
52
|
def metadata_hash
|
73
53
|
super.merge(:type => Turnip.type, :turnip => true)
|
74
54
|
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
require 'turnip/node/scenario_group_definition'
|
2
|
+
|
3
|
+
module Turnip
|
4
|
+
module Node
|
5
|
+
#
|
6
|
+
# @note Rule metadata generated by Gherkin
|
7
|
+
#
|
8
|
+
# {
|
9
|
+
# type: :Rule,
|
10
|
+
# location: { line: 10, column: 3 },
|
11
|
+
# keyword: 'Rule',
|
12
|
+
# name: 'Rule name',
|
13
|
+
# description: 'Rule description',
|
14
|
+
# children: [] # Array of Background, Scenario and Scenario Outline
|
15
|
+
# }
|
16
|
+
#
|
17
|
+
class Rule < ScenarioGroupDefinition
|
18
|
+
def children
|
19
|
+
@children ||= @raw[:children].map do |child|
|
20
|
+
unless child[:background].nil?
|
21
|
+
next Background.new(child[:background])
|
22
|
+
end
|
23
|
+
|
24
|
+
unless child[:scenario].nil?
|
25
|
+
klass = child[:scenario][:examples].empty? ? Scenario : ScenarioOutline
|
26
|
+
next klass.new(child[:scenario])
|
27
|
+
end
|
28
|
+
end.compact
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
require 'turnip/node/base'
|
2
|
+
require 'turnip/node/scenario'
|
3
|
+
require 'turnip/node/scenario_outline'
|
4
|
+
require 'turnip/node/background'
|
5
|
+
|
6
|
+
module Turnip
|
7
|
+
module Node
|
8
|
+
class ScenarioGroupDefinition < Base
|
9
|
+
def name
|
10
|
+
@raw[:name]
|
11
|
+
end
|
12
|
+
|
13
|
+
def keyword
|
14
|
+
@raw[:keyword]
|
15
|
+
end
|
16
|
+
|
17
|
+
def description
|
18
|
+
@raw[:description]
|
19
|
+
end
|
20
|
+
|
21
|
+
def backgrounds
|
22
|
+
@backgrounds ||= children.select do |c|
|
23
|
+
c.is_a?(Background)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
def scenarios
|
28
|
+
@scenarios ||= children.map do |c|
|
29
|
+
case c
|
30
|
+
when Scenario
|
31
|
+
c
|
32
|
+
when ScenarioOutline
|
33
|
+
c.to_scenarios
|
34
|
+
end
|
35
|
+
end.flatten.compact
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -65,13 +65,11 @@ module Turnip
|
|
65
65
|
metadata[:steps].each do |step|
|
66
66
|
step[:text] = substitute(step[:text], header, row)
|
67
67
|
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
when :
|
72
|
-
step[:
|
73
|
-
when :DataTable
|
74
|
-
step[:argument][:rows].map do |table_row|
|
68
|
+
case
|
69
|
+
when step[:doc_string]
|
70
|
+
step[:doc_string][:content] = substitute(step[:doc_string][:content], header, row)
|
71
|
+
when step[:data_table]
|
72
|
+
step[:data_table][:rows].map do |table_row|
|
75
73
|
table_row[:cells].map do |cell|
|
76
74
|
cell[:value] = substitute(cell[:value], header, row)
|
77
75
|
end
|
data/lib/turnip/node/step.rb
CHANGED
@@ -31,13 +31,11 @@ module Turnip
|
|
31
31
|
end
|
32
32
|
|
33
33
|
def argument
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
when :
|
38
|
-
|
39
|
-
when :DataTable
|
40
|
-
data_table(@raw[:argument])
|
34
|
+
@argument ||= case
|
35
|
+
when @raw[:doc_string]
|
36
|
+
doc_string(@raw[:doc_string])
|
37
|
+
when @raw[:data_table]
|
38
|
+
data_table(@raw[:data_table])
|
41
39
|
end
|
42
40
|
end
|
43
41
|
|
data/lib/turnip/rspec.rb
CHANGED
@@ -70,14 +70,19 @@ module Turnip
|
|
70
70
|
|
71
71
|
instance_eval <<-EOS, feature_file, feature.line
|
72
72
|
context = ::RSpec.describe feature.name, feature.metadata_hash
|
73
|
-
|
73
|
+
run_scenario_group(context, feature, feature_file)
|
74
74
|
EOS
|
75
75
|
end
|
76
76
|
|
77
77
|
private
|
78
78
|
|
79
|
-
|
80
|
-
|
79
|
+
#
|
80
|
+
# @param [RSpec::ExampleGroups] context
|
81
|
+
# @param [Turnip::Node::Feature|Turnip::Node::Rule] group
|
82
|
+
# @param [String] filename
|
83
|
+
#
|
84
|
+
def run_scenario_group(context, group, filename)
|
85
|
+
background_steps = group.backgrounds.map(&:steps).flatten
|
81
86
|
|
82
87
|
context.before do
|
83
88
|
background_steps.each do |step|
|
@@ -85,7 +90,7 @@ module Turnip
|
|
85
90
|
end
|
86
91
|
end
|
87
92
|
|
88
|
-
|
93
|
+
group.scenarios.each do |scenario|
|
89
94
|
step_names = (background_steps + scenario.steps).map(&:to_s)
|
90
95
|
description = step_names.join(' -> ')
|
91
96
|
|
@@ -99,6 +104,13 @@ module Turnip
|
|
99
104
|
EOS
|
100
105
|
end
|
101
106
|
end
|
107
|
+
|
108
|
+
if group.is_a?(Turnip::Node::Feature)
|
109
|
+
group.rules.each do |rule|
|
110
|
+
rule_context = context.context(rule.name, { turnip: true })
|
111
|
+
run_scenario_group(rule_context, rule, filename)
|
112
|
+
end
|
113
|
+
end
|
102
114
|
end
|
103
115
|
end
|
104
116
|
end
|
data/lib/turnip/version.rb
CHANGED
data/spec/integration_spec.rb
CHANGED
@@ -12,7 +12,7 @@ describe 'The CLI', :type => :integration do
|
|
12
12
|
end
|
13
13
|
|
14
14
|
it "prints out failures and successes" do
|
15
|
-
@result.should include('
|
15
|
+
@result.should include('42 examples, 4 failures, 5 pending')
|
16
16
|
end
|
17
17
|
|
18
18
|
it "includes features in backtraces" do
|
data/turnip.gemspec
CHANGED
@@ -20,7 +20,8 @@ Gem::Specification.new do |s|
|
|
20
20
|
s.require_paths = ["lib"]
|
21
21
|
|
22
22
|
s.add_runtime_dependency "rspec", [">=3.0", "<4.0"]
|
23
|
-
s.add_runtime_dependency "gherkin", "~>
|
23
|
+
s.add_runtime_dependency "gherkin", "~> 6.0"
|
24
24
|
s.add_development_dependency "rake"
|
25
25
|
s.add_development_dependency "pry"
|
26
|
+
s.add_development_dependency "pry-byebug"
|
26
27
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: turnip
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 4.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jonas Nicklas
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2019-02-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rspec
|
@@ -36,14 +36,14 @@ dependencies:
|
|
36
36
|
requirements:
|
37
37
|
- - "~>"
|
38
38
|
- !ruby/object:Gem::Version
|
39
|
-
version: '
|
39
|
+
version: '6.0'
|
40
40
|
type: :runtime
|
41
41
|
prerelease: false
|
42
42
|
version_requirements: !ruby/object:Gem::Requirement
|
43
43
|
requirements:
|
44
44
|
- - "~>"
|
45
45
|
- !ruby/object:Gem::Version
|
46
|
-
version: '
|
46
|
+
version: '6.0'
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: rake
|
49
49
|
requirement: !ruby/object:Gem::Requirement
|
@@ -72,6 +72,20 @@ dependencies:
|
|
72
72
|
- - ">="
|
73
73
|
- !ruby/object:Gem::Version
|
74
74
|
version: '0'
|
75
|
+
- !ruby/object:Gem::Dependency
|
76
|
+
name: pry-byebug
|
77
|
+
requirement: !ruby/object:Gem::Requirement
|
78
|
+
requirements:
|
79
|
+
- - ">="
|
80
|
+
- !ruby/object:Gem::Version
|
81
|
+
version: '0'
|
82
|
+
type: :development
|
83
|
+
prerelease: false
|
84
|
+
version_requirements: !ruby/object:Gem::Requirement
|
85
|
+
requirements:
|
86
|
+
- - ">="
|
87
|
+
- !ruby/object:Gem::Version
|
88
|
+
version: '0'
|
75
89
|
description: Provides the ability to define steps and run Gherkin files from with
|
76
90
|
RSpec
|
77
91
|
email:
|
@@ -91,6 +105,7 @@ files:
|
|
91
105
|
- examples/backgrounds.feature
|
92
106
|
- examples/blank.feature
|
93
107
|
- examples/errors.feature
|
108
|
+
- examples/gherkin6_syntax.feature
|
94
109
|
- examples/interpolation.feature
|
95
110
|
- examples/multiline_string.feature
|
96
111
|
- examples/pending.feature
|
@@ -114,8 +129,8 @@ files:
|
|
114
129
|
- examples/tags.feature
|
115
130
|
- examples/with_backticks.feature
|
116
131
|
- examples/with_comments.feature
|
117
|
-
- gemfiles/Gemfile-rspec-3.6.x
|
118
132
|
- gemfiles/Gemfile-rspec-3.7.x
|
133
|
+
- gemfiles/Gemfile-rspec-3.8.x
|
119
134
|
- lib/turnip.rb
|
120
135
|
- lib/turnip/builder.rb
|
121
136
|
- lib/turnip/capybara.rb
|
@@ -127,8 +142,10 @@ files:
|
|
127
142
|
- lib/turnip/node/example.rb
|
128
143
|
- lib/turnip/node/feature.rb
|
129
144
|
- lib/turnip/node/location.rb
|
145
|
+
- lib/turnip/node/rule.rb
|
130
146
|
- lib/turnip/node/scenario.rb
|
131
147
|
- lib/turnip/node/scenario_definition.rb
|
148
|
+
- lib/turnip/node/scenario_group_definition.rb
|
132
149
|
- lib/turnip/node/scenario_outline.rb
|
133
150
|
- lib/turnip/node/step.rb
|
134
151
|
- lib/turnip/node/tag.rb
|
@@ -166,7 +183,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
166
183
|
version: '0'
|
167
184
|
requirements: []
|
168
185
|
rubyforge_project: turnip
|
169
|
-
rubygems_version: 2.7.
|
186
|
+
rubygems_version: 2.7.6
|
170
187
|
signing_key:
|
171
188
|
specification_version: 4
|
172
189
|
summary: Gherkin extension for RSpec
|