cucumber-core 1.1.0 → 1.1.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/HISTORY.md +17 -3
- data/lib/cucumber/core/ast/step.rb +14 -2
- data/lib/cucumber/core/test/case.rb +9 -2
- data/lib/cucumber/core/version.rb +1 -1
- data/spec/cucumber/core/ast/step_spec.rb +48 -0
- data/spec/cucumber/core/test/case_spec.rb +12 -10
- data/spec/cucumber/core_spec.rb +5 -5
- metadata +4 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5e74d19b9afa811f9bb89519680da05fb54e4f21
|
4
|
+
data.tar.gz: 51423664d262bb30d820712a52ff8c5dcbd2b43e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 11c262271fe0041e39e9e0c6a400ea3d5de63c702ff528edae821dfba99fa7408c26a61ae6c4093be79ec596805465fbd2d9c31a9b7bc8eef1a8b2a9cad64a58
|
7
|
+
data.tar.gz: ea0a43a32a8566e51cae8d90c8831ca3af9e42fd48da76d12c586754973ede208a33df577e39b0afa98afedc3ad1dbe3aebc443669540a7132af09e1ce8e2fc2
|
data/HISTORY.md
CHANGED
@@ -1,8 +1,22 @@
|
|
1
|
-
## [In Git](https://github.com/cucumber/cucumber-ruby-core/compare/v1.1.
|
1
|
+
## [In Git](https://github.com/cucumber/cucumber-ruby-core/compare/v1.1.1...master)
|
2
2
|
|
3
|
-
|
3
|
+
* Your change here?
|
4
4
|
|
5
|
-
|
5
|
+
##
|
6
|
+
[v1.1.1](https://github.com/cucumber/cucumber-ruby-core/compare/v1.1.1...v1.1.1)
|
7
|
+
|
8
|
+
|
9
|
+
### New Features
|
10
|
+
|
11
|
+
* Calculate actual keyword for snippets (@brasmusson)
|
12
|
+
|
13
|
+
### Bugfixes
|
14
|
+
|
15
|
+
* Remove keyword from `Test::Case#name` [82](https://github.com/cucumber/cucumber-ruby-core/pull/82) (@richarda)
|
16
|
+
|
17
|
+
## [v1.1.0](https://github.com/cucumber/cucumber-ruby-core/compare/v1.0.0...v1.1.0)
|
18
|
+
|
19
|
+
### New features
|
6
20
|
|
7
21
|
* LocationsFilter now sorts test cases as well as filtering them (@mattwynne)
|
8
22
|
|
@@ -11,7 +11,7 @@ module Cucumber
|
|
11
11
|
attr_reader :keyword, :name, :language, :exception, :multiline_arg, :gherkin_statement
|
12
12
|
|
13
13
|
def initialize(gherkin_statement, language, location, keyword, name, multiline_arg)
|
14
|
-
@gherkin_statement, @location, @keyword, @name, @multiline_arg = gherkin_statement, location, keyword, name, multiline_arg
|
14
|
+
@gherkin_statement, @language, @location, @keyword, @name, @multiline_arg = gherkin_statement, language, location, keyword, name, multiline_arg
|
15
15
|
end
|
16
16
|
|
17
17
|
def to_sexp
|
@@ -22,6 +22,18 @@ module Cucumber
|
|
22
22
|
"#{location}:in `#{keyword}#{name}'"
|
23
23
|
end
|
24
24
|
|
25
|
+
def actual_keyword(previous_step_keyword = nil)
|
26
|
+
if [language.keywords('and'), language.keywords('but')].flatten.uniq.include? keyword
|
27
|
+
if previous_step_keyword.nil?
|
28
|
+
language.keywords('given').reject{|kw| kw == '* '}[0]
|
29
|
+
else
|
30
|
+
previous_step_keyword
|
31
|
+
end
|
32
|
+
else
|
33
|
+
keyword
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
25
37
|
private
|
26
38
|
|
27
39
|
def children
|
@@ -36,7 +48,7 @@ module Cucumber
|
|
36
48
|
class ExpandedOutlineStep < Step
|
37
49
|
|
38
50
|
def initialize(outline_step, gherkin_statement, language, location, keyword, name, multiline_arg)
|
39
|
-
@outline_step, @gherkin_statement, @location, @keyword, @name, @multiline_arg = outline_step, gherkin_statement, location, keyword, name, multiline_arg
|
51
|
+
@outline_step, @gherkin_statement, @language, @location, @keyword, @name, @multiline_arg = outline_step, gherkin_statement, language, location, keyword, name, multiline_arg
|
40
52
|
end
|
41
53
|
|
42
54
|
alias :self_match_locations? :match_locations?
|
@@ -47,6 +47,10 @@ module Cucumber
|
|
47
47
|
def name
|
48
48
|
@name ||= NameBuilder.new(self).result
|
49
49
|
end
|
50
|
+
|
51
|
+
def keyword
|
52
|
+
@keyword ||= NameBuilder.new(self).keyword
|
53
|
+
end
|
50
54
|
|
51
55
|
def tags
|
52
56
|
@tags ||= TagCollector.new(self).result
|
@@ -92,6 +96,7 @@ module Cucumber
|
|
92
96
|
|
93
97
|
class NameBuilder
|
94
98
|
attr_reader :result
|
99
|
+
attr_reader :keyword
|
95
100
|
|
96
101
|
def initialize(test_case)
|
97
102
|
test_case.describe_source_to self
|
@@ -102,12 +107,14 @@ module Cucumber
|
|
102
107
|
end
|
103
108
|
|
104
109
|
def scenario(scenario)
|
105
|
-
@result =
|
110
|
+
@result = scenario.name
|
111
|
+
@keyword = scenario.keyword
|
106
112
|
self
|
107
113
|
end
|
108
114
|
|
109
115
|
def scenario_outline(outline)
|
110
|
-
@result =
|
116
|
+
@result = outline.name + @result
|
117
|
+
@keyword = outline.keyword
|
111
118
|
self
|
112
119
|
end
|
113
120
|
|
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'cucumber/core/ast/step'
|
2
|
+
require 'gherkin/i18n'
|
2
3
|
|
3
4
|
module Cucumber
|
4
5
|
module Core
|
@@ -47,6 +48,53 @@ module Cucumber
|
|
47
48
|
|
48
49
|
end
|
49
50
|
|
51
|
+
describe "actual keyword" do
|
52
|
+
let(:language) { ::Gherkin::I18n.get('en') }
|
53
|
+
|
54
|
+
context "for keywords 'given', 'when' and 'then'" do
|
55
|
+
let(:given_step) { Step.new(double, language, double, "Given ", double, double) }
|
56
|
+
let(:when_step) { Step.new(double, language, double, "When ", double, double) }
|
57
|
+
let(:then_step) { Step.new(double, language, double, "Then ", double, double) }
|
58
|
+
|
59
|
+
it "returns the keyword itself" do
|
60
|
+
expect( given_step.actual_keyword(nil) ).to eq("Given ")
|
61
|
+
expect( when_step.actual_keyword(nil) ).to eq("When ")
|
62
|
+
expect( then_step.actual_keyword(nil) ).to eq("Then ")
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
context "for keyword 'and', 'but', and '*'" do
|
67
|
+
let(:and_step) { Step.new(double, language, double, "And ", double, double) }
|
68
|
+
let(:but_step) { Step.new(double, language, double, "But ", double, double) }
|
69
|
+
let(:asterisk_step) { Step.new(double, language, double, "* ", double, double) }
|
70
|
+
|
71
|
+
context "when the previous step keyword exist" do
|
72
|
+
it "returns the previous step keyword" do
|
73
|
+
expect( and_step.actual_keyword("Then ") ).to eq("Then ")
|
74
|
+
expect( but_step.actual_keyword("Then ") ).to eq("Then ")
|
75
|
+
expect( asterisk_step.actual_keyword("Then ") ).to eq("Then ")
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
context "when the previous step keyword does not exist" do
|
80
|
+
it "returns the 'given' keyword" do
|
81
|
+
expect( and_step.actual_keyword(nil) ).to eq("Given ")
|
82
|
+
expect( but_step.actual_keyword(nil) ).to eq("Given ")
|
83
|
+
expect( asterisk_step.actual_keyword(nil) ).to eq("Given ")
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
end
|
88
|
+
|
89
|
+
context "for i18n languages" do
|
90
|
+
let(:language) { ::Gherkin::I18n.get('en-lol') }
|
91
|
+
let(:and_step) { Step.new(double, language, double, "AN ", double, double) }
|
92
|
+
|
93
|
+
it "returns the keyword in the correct language" do
|
94
|
+
expect( and_step.actual_keyword(nil) ).to eq("I CAN HAZ ")
|
95
|
+
end
|
96
|
+
end
|
97
|
+
end
|
50
98
|
end
|
51
99
|
|
52
100
|
describe ExpandedOutlineStep do
|
@@ -68,7 +68,8 @@ module Cucumber
|
|
68
68
|
receiver = double.as_null_object
|
69
69
|
|
70
70
|
expect( receiver ).to receive(:test_case) do |test_case|
|
71
|
-
expect( test_case.name ).to eq 'Scenario
|
71
|
+
expect( test_case.name ).to eq 'Scenario name'
|
72
|
+
expect( test_case.keyword ).to eq 'Scenario'
|
72
73
|
end
|
73
74
|
compile([gherkin], receiver)
|
74
75
|
end
|
@@ -96,13 +97,14 @@ module Cucumber
|
|
96
97
|
end
|
97
98
|
receiver = double.as_null_object
|
98
99
|
expect( receiver ).to receive(:test_case) do |test_case|
|
99
|
-
expect( test_case.name ).to eq '
|
100
|
+
expect( test_case.name ).to eq 'outline name, examples name (row 1)'
|
101
|
+
expect( test_case.keyword ).to eq 'Scenario Outline'
|
100
102
|
end.once.ordered
|
101
103
|
expect( receiver ).to receive(:test_case) do |test_case|
|
102
|
-
expect( test_case.name ).to eq '
|
104
|
+
expect( test_case.name ).to eq 'outline name, examples name (row 2)'
|
103
105
|
end.once.ordered
|
104
106
|
expect( receiver ).to receive(:test_case) do |test_case|
|
105
|
-
expect( test_case.name ).to eq '
|
107
|
+
expect( test_case.name ).to eq 'outline name, Examples (row 1)'
|
106
108
|
end.once.ordered
|
107
109
|
compile [gherkin], receiver
|
108
110
|
end
|
@@ -273,7 +275,7 @@ module Cucumber
|
|
273
275
|
end
|
274
276
|
|
275
277
|
let(:test_case) do
|
276
|
-
test_cases.find { |c| c.name == '
|
278
|
+
test_cases.find { |c| c.name == 'two' }
|
277
279
|
end
|
278
280
|
|
279
281
|
it 'matches the precise location of the scenario' do
|
@@ -282,7 +284,7 @@ module Cucumber
|
|
282
284
|
end
|
283
285
|
|
284
286
|
it 'matches the precise location of an empty scenario' do
|
285
|
-
empty_scenario_test_case = test_cases.find { |c| c.name == '
|
287
|
+
empty_scenario_test_case = test_cases.find { |c| c.name == 'empty' }
|
286
288
|
location = Ast::Location.new(file, 26)
|
287
289
|
expect( empty_scenario_test_case.match_locations?([location]) ).to be_truthy
|
288
290
|
end
|
@@ -320,7 +322,7 @@ module Cucumber
|
|
320
322
|
|
321
323
|
context "with a docstring" do
|
322
324
|
let(:test_case) do
|
323
|
-
test_cases.find { |c| c.name == '
|
325
|
+
test_cases.find { |c| c.name == 'with docstring' }
|
324
326
|
end
|
325
327
|
|
326
328
|
it "matches a location at the start the docstring" do
|
@@ -336,7 +338,7 @@ module Cucumber
|
|
336
338
|
|
337
339
|
context "with a table" do
|
338
340
|
let(:test_case) do
|
339
|
-
test_cases.find { |c| c.name == '
|
341
|
+
test_cases.find { |c| c.name == 'with a table' }
|
340
342
|
end
|
341
343
|
|
342
344
|
it "matches a location on the first table row" do
|
@@ -349,7 +351,7 @@ module Cucumber
|
|
349
351
|
context "for a scenario outline" do
|
350
352
|
let(:source) do
|
351
353
|
Gherkin::Document.new(file, <<-END.unindent)
|
352
|
-
Feature:
|
354
|
+
Feature:
|
353
355
|
|
354
356
|
Scenario: one
|
355
357
|
Given one a
|
@@ -376,7 +378,7 @@ module Cucumber
|
|
376
378
|
end
|
377
379
|
|
378
380
|
let(:test_case) do
|
379
|
-
test_cases.find { |c| c.name == "
|
381
|
+
test_cases.find { |c| c.name == "two, x1 (row 1)" }
|
380
382
|
end
|
381
383
|
|
382
384
|
it 'matches the precise location of the scenario outline examples table row' do
|
data/spec/cucumber/core_spec.rb
CHANGED
@@ -48,7 +48,7 @@ module Cucumber
|
|
48
48
|
it "filters out test cases based on a tag expression" do
|
49
49
|
visitor = double.as_null_object
|
50
50
|
expect( visitor ).to receive(:test_case) do |test_case|
|
51
|
-
expect( test_case.name ).to eq '
|
51
|
+
expect( test_case.name ).to eq 'foo, bar (row 1)'
|
52
52
|
end.exactly(1).times
|
53
53
|
|
54
54
|
gherkin = gherkin do
|
@@ -283,10 +283,10 @@ module Cucumber
|
|
283
283
|
expect( report.test_cases.total_passed ).to eq 1
|
284
284
|
expect( report.test_cases.total_failed ).to eq 0
|
285
285
|
expect( logger ).to eq [
|
286
|
-
:before_all,
|
287
|
-
:step,
|
288
|
-
:middle,
|
289
|
-
:step,
|
286
|
+
:before_all,
|
287
|
+
:step,
|
288
|
+
:middle,
|
289
|
+
:step,
|
290
290
|
:after_all
|
291
291
|
]
|
292
292
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cucumber-core
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.1.
|
4
|
+
version: 1.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Aslak Hellesøy
|
@@ -12,7 +12,7 @@ authors:
|
|
12
12
|
autorequire:
|
13
13
|
bindir: bin
|
14
14
|
cert_chain: []
|
15
|
-
date: 2015-02-
|
15
|
+
date: 2015-02-13 00:00:00.000000000 Z
|
16
16
|
dependencies:
|
17
17
|
- !ruby/object:Gem::Dependency
|
18
18
|
name: gherkin
|
@@ -213,10 +213,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
213
213
|
version: '0'
|
214
214
|
requirements: []
|
215
215
|
rubyforge_project:
|
216
|
-
rubygems_version: 2.
|
216
|
+
rubygems_version: 2.2.2
|
217
217
|
signing_key:
|
218
218
|
specification_version: 4
|
219
|
-
summary: cucumber-core-1.1.
|
219
|
+
summary: cucumber-core-1.1.1
|
220
220
|
test_files:
|
221
221
|
- spec/capture_warnings.rb
|
222
222
|
- spec/coverage.rb
|
@@ -241,4 +241,3 @@ test_files:
|
|
241
241
|
- spec/cucumber/core_spec.rb
|
242
242
|
- spec/readme_spec.rb
|
243
243
|
- spec/report_api_spy.rb
|
244
|
-
has_rdoc:
|