gherkin 1.0.9-java → 1.0.10-java
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/History.txt +9 -0
- data/README.rdoc +1 -1
- data/VERSION.yml +1 -1
- data/lib/gherkin/i18n.rb +9 -1
- data/lib/gherkin/i18n.yml +15 -2
- data/lib/gherkin/java_impl.rb +24 -2
- data/lib/gherkin/parser/filter_listener.rb +6 -5
- data/lib/gherkin/parser/tag_expression.rb +5 -2
- data/spec/gherkin/i18n_lexer_spec.rb +4 -0
- data/spec/gherkin/i18n_spec.rb +9 -1
- data/spec/gherkin/parser/filter_listener_spec.rb +0 -2
- data/spec/gherkin/parser/parser_spec.rb +1 -1
- data/spec/gherkin/parser/tag_expression_spec.rb +29 -33
- data/spec/spec_helper.rb +10 -0
- metadata +2 -2
data/History.txt
CHANGED
@@ -1,3 +1,12 @@
|
|
1
|
+
== 1.0.10 (2010-04-16)
|
2
|
+
|
3
|
+
=== New Features
|
4
|
+
* Added Esperanto and added a Russian synonym for Feature. (Antono Vasiljev)
|
5
|
+
* Pure Java implementation of FilterListener and TagExpression (Mike Gaffney, Aslak Hellesøy)
|
6
|
+
|
7
|
+
=== Changed Features
|
8
|
+
* TagExpression takes array args instead of varargs. (Aslak Hellesøy)
|
9
|
+
|
1
10
|
== 1.0.9 (2010-04-12)
|
2
11
|
|
3
12
|
=== Bugfixes
|
data/README.rdoc
CHANGED
@@ -30,7 +30,7 @@ E.g. in Bash, export RL_LANG="en,fr,no". This can be quite helpful when modifyin
|
|
30
30
|
|
31
31
|
* Bump version in the VERSION.yml file and:
|
32
32
|
** java/pom.xml
|
33
|
-
** ikvm/Gherkin/Gherkin
|
33
|
+
** ikvm/Gherkin/Gherkin.csproj
|
34
34
|
* rake release:ALL
|
35
35
|
* Announce on Cucumber list, IRC and Twitter.
|
36
36
|
|
data/VERSION.yml
CHANGED
data/lib/gherkin/i18n.rb
CHANGED
@@ -35,6 +35,14 @@ module Gherkin
|
|
35
35
|
|
36
36
|
unique_keywords.flatten.compact.sort.reverse.uniq.join('|').gsub(/\*/, '\*')
|
37
37
|
end
|
38
|
+
|
39
|
+
def code_keywords
|
40
|
+
all.map{|i18n| i18n.code_keywords}.flatten.uniq.sort
|
41
|
+
end
|
42
|
+
|
43
|
+
def code_keyword_for(gherkin_keyword)
|
44
|
+
gherkin_keyword.gsub(/[\s',]/, '').strip
|
45
|
+
end
|
38
46
|
end
|
39
47
|
|
40
48
|
attr_reader :key
|
@@ -120,7 +128,7 @@ module Gherkin
|
|
120
128
|
|
121
129
|
# Keywords that can be used in code
|
122
130
|
def code_keywords
|
123
|
-
result = gwt_keywords.map{|keyword|
|
131
|
+
result = gwt_keywords.map{|keyword| self.class.code_keyword_for(keyword)}
|
124
132
|
result.delete('*')
|
125
133
|
result
|
126
134
|
end
|
data/lib/gherkin/i18n.yml
CHANGED
@@ -74,7 +74,7 @@
|
|
74
74
|
scenario: Scenario
|
75
75
|
scenario_outline: Scenario Amlinellol
|
76
76
|
examples: Enghreifftiau
|
77
|
-
given: "*|
|
77
|
+
given: "*|Anrhegedig a"
|
78
78
|
when: "*|Pryd"
|
79
79
|
then: "*|Yna"
|
80
80
|
and: "*|A"
|
@@ -170,6 +170,19 @@
|
|
170
170
|
then: "*|Then y'all"
|
171
171
|
and: "*|And y'all"
|
172
172
|
but: "*|But y'all"
|
173
|
+
"eo":
|
174
|
+
name: Esperanto
|
175
|
+
native: Esperanto
|
176
|
+
feature: Trajto
|
177
|
+
background: Fono
|
178
|
+
scenario: Scenaro
|
179
|
+
scenario_outline: Konturo de la scenaro
|
180
|
+
examples: Ekzemploj
|
181
|
+
given: "*|Donitaĵo"
|
182
|
+
when: "*|Se"
|
183
|
+
then: "*|Do"
|
184
|
+
and: "*|Kaj"
|
185
|
+
but: "*|Sed"
|
173
186
|
"es":
|
174
187
|
name: Spanish
|
175
188
|
native: español
|
@@ -420,7 +433,7 @@
|
|
420
433
|
"ru":
|
421
434
|
name: Russian
|
422
435
|
native: русский
|
423
|
-
feature:
|
436
|
+
feature: Функционал|Фича
|
424
437
|
background: Предыстория
|
425
438
|
scenario: Сценарий
|
426
439
|
scenario_outline: Структура сценария
|
data/lib/gherkin/java_impl.rb
CHANGED
@@ -7,13 +7,35 @@ class Class
|
|
7
7
|
if defined?(JRUBY_VERSION)
|
8
8
|
require jar
|
9
9
|
class << self
|
10
|
-
|
10
|
+
def javaify(arg)
|
11
|
+
if Array === arg
|
12
|
+
arg.map{|a| javaify(a)}
|
13
|
+
else
|
14
|
+
case(arg)
|
15
|
+
when Regexp
|
16
|
+
java.util.regex.Pattern.compile(arg.source)
|
17
|
+
else
|
18
|
+
arg
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
def new(*args)
|
24
|
+
java_class.new(*javaify(args))
|
25
|
+
end
|
26
|
+
|
27
|
+
def ===(object)
|
28
|
+
super || object.java_kind_of?(java_class)
|
29
|
+
end
|
30
|
+
|
31
|
+
def java_class
|
11
32
|
names = self.name.split('::')
|
12
33
|
package = Java
|
13
34
|
names[0..-2].each do |module_name|
|
14
35
|
package = package.__send__(module_name.downcase)
|
15
36
|
end
|
16
|
-
|
37
|
+
|
38
|
+
package.__send__(names[-1])
|
17
39
|
end
|
18
40
|
end
|
19
41
|
end
|
@@ -5,6 +5,9 @@ module Gherkin
|
|
5
5
|
module Parser
|
6
6
|
# This class filters events based on filter criteria.
|
7
7
|
class FilterListener
|
8
|
+
require 'gherkin/java_impl'
|
9
|
+
java_impl('gherkin.jar')
|
10
|
+
|
8
11
|
# Creates a new instance that replays events to +listener+, filtered by +filters+,
|
9
12
|
# a Hash that can contain:
|
10
13
|
#
|
@@ -138,7 +141,7 @@ module Gherkin
|
|
138
141
|
when Regexp
|
139
142
|
:name_match?
|
140
143
|
when String
|
141
|
-
TagExpression.new(
|
144
|
+
TagExpression.new(filters)
|
142
145
|
end
|
143
146
|
end
|
144
147
|
|
@@ -147,8 +150,7 @@ module Gherkin
|
|
147
150
|
end
|
148
151
|
|
149
152
|
def header_row_already_buffered?
|
150
|
-
return
|
151
|
-
@examples_buffer[-1].event == :row
|
153
|
+
return @examples_buffer.any? && @examples_buffer[-1].event == :row
|
152
154
|
end
|
153
155
|
|
154
156
|
def filter_match?(*sexps)
|
@@ -157,8 +159,7 @@ module Gherkin
|
|
157
159
|
end
|
158
160
|
|
159
161
|
def tag_match?
|
160
|
-
return
|
161
|
-
@filter_method.eval(*current_tags)
|
162
|
+
return TagExpression === @filter_method && @filter_method.eval(current_tags)
|
162
163
|
end
|
163
164
|
|
164
165
|
def replay_buffers
|
@@ -1,9 +1,12 @@
|
|
1
1
|
module Gherkin
|
2
2
|
module Parser
|
3
3
|
class TagExpression
|
4
|
+
require 'gherkin/java_impl'
|
5
|
+
java_impl('gherkin.jar')
|
6
|
+
|
4
7
|
attr_reader :limits
|
5
8
|
|
6
|
-
def initialize(
|
9
|
+
def initialize(tag_expressions)
|
7
10
|
@ands = []
|
8
11
|
@limits = {}
|
9
12
|
tag_expressions.each do |expr|
|
@@ -15,7 +18,7 @@ module Gherkin
|
|
15
18
|
@ands.empty?
|
16
19
|
end
|
17
20
|
|
18
|
-
def eval(
|
21
|
+
def eval(tags)
|
19
22
|
return true if @ands.flatten.empty?
|
20
23
|
vars = Hash[*tags.map{|tag| [tag, true]}.flatten]
|
21
24
|
!!Kernel.eval(ruby_expression)
|
data/spec/gherkin/i18n_spec.rb
CHANGED
@@ -3,7 +3,7 @@ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
|
|
3
3
|
|
4
4
|
module Gherkin
|
5
5
|
module Lexer
|
6
|
-
describe
|
6
|
+
describe I18n do
|
7
7
|
before do
|
8
8
|
@listener = Gherkin::SexpRecorder.new
|
9
9
|
end
|
@@ -60,6 +60,14 @@ module Gherkin
|
|
60
60
|
[:eof]
|
61
61
|
]
|
62
62
|
end
|
63
|
+
|
64
|
+
describe 'keywords' do
|
65
|
+
it "should have code keywords without space, comma or apostrophe" do
|
66
|
+
['Akkor', 'Etantdonné', 'Lorsque', '假設'].each do |code_keyword|
|
67
|
+
I18n.code_keywords.should include(code_keyword)
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
63
71
|
end
|
64
72
|
end
|
65
73
|
end
|
@@ -31,8 +31,6 @@ module Gherkin
|
|
31
31
|
end
|
32
32
|
|
33
33
|
def scan(listener, filters)
|
34
|
-
tag_expressions = filters.delete(:tag_expressions)
|
35
|
-
filters[:tag_expression] = TagExpression.new(*tag_expressions) if tag_expressions
|
36
34
|
filter_listener = FilterListener.new(listener, filters)
|
37
35
|
parser = Gherkin::Parser::Parser.new(filter_listener, true, "root")
|
38
36
|
lexer = Gherkin::I18nLexer.new(parser, true)
|
@@ -35,7 +35,7 @@ module Gherkin
|
|
35
35
|
it "should be reusable for several feature files (native lexer: #{native})" do
|
36
36
|
listener = mock('listener', :null_object => true)
|
37
37
|
parser = Parser.new(listener, true)
|
38
|
-
lexer = I18nLexer.new(parser, native)
|
38
|
+
lexer = Gherkin::I18nLexer.new(parser, native)
|
39
39
|
feature = <<-EOF
|
40
40
|
Feature: foo
|
41
41
|
Scenario: bar
|
@@ -6,113 +6,109 @@ module Gherkin
|
|
6
6
|
describe TagExpression do
|
7
7
|
context "no tags" do
|
8
8
|
before(:each) do
|
9
|
-
@e = TagExpression.new
|
9
|
+
@e = TagExpression.new([])
|
10
10
|
end
|
11
11
|
|
12
12
|
it "should match @foo" do
|
13
|
-
@e.eval('@foo').should == true
|
13
|
+
@e.eval(['@foo']).should == true
|
14
14
|
end
|
15
15
|
|
16
16
|
it "should match empty tags" do
|
17
|
-
@e.eval().should == true
|
17
|
+
@e.eval([]).should == true
|
18
18
|
end
|
19
19
|
end
|
20
20
|
|
21
21
|
context "@foo" do
|
22
22
|
before(:each) do
|
23
|
-
@e = TagExpression.new('@foo')
|
23
|
+
@e = TagExpression.new(['@foo'])
|
24
24
|
end
|
25
25
|
|
26
26
|
it "should match @foo" do
|
27
|
-
@e.eval('@foo').should == true
|
27
|
+
@e.eval(['@foo']).should == true
|
28
28
|
end
|
29
29
|
|
30
30
|
it "should not match @bar" do
|
31
|
-
@e.eval('@bar').should == false
|
31
|
+
@e.eval(['@bar']).should == false
|
32
|
+
end
|
33
|
+
|
34
|
+
it "should not match no tags" do
|
35
|
+
@e.eval([]).should == false
|
32
36
|
end
|
33
37
|
end
|
34
38
|
|
35
39
|
context "!@foo" do
|
36
40
|
before(:each) do
|
37
|
-
@e = TagExpression.new('~@foo')
|
41
|
+
@e = TagExpression.new(['~@foo'])
|
38
42
|
end
|
39
43
|
|
40
44
|
it "should match @bar" do
|
41
|
-
@e.eval('@bar').should == true
|
45
|
+
@e.eval(['@bar']).should == true
|
42
46
|
end
|
43
47
|
|
44
48
|
it "should not match @foo" do
|
45
|
-
@e.eval('@foo').should == false
|
49
|
+
@e.eval(['@foo']).should == false
|
46
50
|
end
|
47
51
|
end
|
48
52
|
|
49
53
|
context "@foo || @bar" do
|
50
54
|
before(:each) do
|
51
|
-
@e = TagExpression.new('@foo,@bar')
|
55
|
+
@e = TagExpression.new(['@foo,@bar'])
|
52
56
|
end
|
53
57
|
|
54
58
|
it "should match @foo" do
|
55
|
-
@e.eval('@foo').should == true
|
59
|
+
@e.eval(['@foo']).should == true
|
56
60
|
end
|
57
61
|
|
58
62
|
it "should match @bar" do
|
59
|
-
@e.eval('@bar').should == true
|
63
|
+
@e.eval(['@bar']).should == true
|
60
64
|
end
|
61
65
|
|
62
66
|
it "should not match @zap" do
|
63
|
-
@e.eval('@zap').should == false
|
67
|
+
@e.eval(['@zap']).should == false
|
64
68
|
end
|
65
69
|
end
|
66
70
|
|
67
71
|
context "(@foo || @bar) && !@zap" do
|
68
72
|
before(:each) do
|
69
|
-
@e = TagExpression.new('@foo,@bar', '~@zap')
|
73
|
+
@e = TagExpression.new(['@foo,@bar', '~@zap'])
|
70
74
|
end
|
71
75
|
|
72
76
|
it "should match @foo" do
|
73
|
-
@e.eval('@foo').should == true
|
77
|
+
@e.eval(['@foo']).should == true
|
74
78
|
end
|
75
79
|
|
76
80
|
it "should not match @foo @zap" do
|
77
|
-
@e.eval('@foo', '@zap').should == false
|
81
|
+
@e.eval(['@foo', '@zap']).should == false
|
78
82
|
end
|
79
83
|
end
|
80
84
|
|
81
85
|
context "(@foo:3 || !@bar:4) && @zap:5" do
|
82
86
|
before(:each) do
|
83
|
-
@e = TagExpression.new('@foo:3,~@bar','@zap:5')
|
87
|
+
@e = TagExpression.new(['@foo:3,~@bar','@zap:5'])
|
84
88
|
end
|
85
89
|
|
86
90
|
it "should count tags for positive tags" do
|
87
|
-
@e.limits.should == {'@foo' => 3, '@zap' => 5}
|
91
|
+
rubify_hash(@e.limits).should == {'@foo' => 3, '@zap' => 5}
|
88
92
|
end
|
89
93
|
|
90
94
|
it "should match @foo @zap" do
|
91
|
-
@e.eval('@foo', '@zap').should == true
|
95
|
+
@e.eval(['@foo', '@zap']).should == true
|
92
96
|
end
|
93
97
|
end
|
94
98
|
|
95
99
|
context "Parsing '@foo:3,~@bar', '@zap:5'" do
|
96
100
|
before(:each) do
|
97
|
-
@e = TagExpression.new(' @foo:3 , ~@bar ', ' @zap:5 ')
|
101
|
+
@e = TagExpression.new([' @foo:3 , ~@bar ', ' @zap:5 '])
|
98
102
|
end
|
99
103
|
|
100
|
-
|
101
|
-
|
104
|
+
unless defined?(JRUBY_VERSION)
|
105
|
+
it "should split and trim (ruby implementation detail)" do
|
106
|
+
@e.__send__(:ruby_expression).should == "(!vars['@bar']||vars['@foo'])&&(vars['@zap'])"
|
107
|
+
end
|
102
108
|
end
|
103
109
|
|
104
110
|
it "should have limits" do
|
105
|
-
@e.limits.should == {"@zap"=>5, "@foo"=>3}
|
106
|
-
end
|
107
|
-
end
|
108
|
-
|
109
|
-
context "Parsing ''" do
|
110
|
-
before(:each) do
|
111
|
-
@e = TagExpression.new('')
|
112
|
-
end
|
113
|
-
|
114
|
-
it "should ignore empty tags" do
|
115
|
-
@e.eval("@foo").should == true
|
111
|
+
rubify_hash(@e.limits).should == {"@zap"=>5, "@foo"=>3}
|
116
112
|
end
|
117
113
|
end
|
118
114
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -39,6 +39,16 @@ module GherkinSpecHelper
|
|
39
39
|
def scan_file(file)
|
40
40
|
@lexer.scan(File.new(File.dirname(__FILE__) + "/gherkin/fixtures/" + file).read)
|
41
41
|
end
|
42
|
+
|
43
|
+
def rubify_hash(hash)
|
44
|
+
if defined?(JRUBY_VERSION)
|
45
|
+
h = {}
|
46
|
+
hash.keySet.each{|key| h[key] = hash[key]}
|
47
|
+
h
|
48
|
+
else
|
49
|
+
hash
|
50
|
+
end
|
51
|
+
end
|
42
52
|
end
|
43
53
|
|
44
54
|
Spec::Runner.configure do |c|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gherkin
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.10
|
5
5
|
platform: java
|
6
6
|
authors:
|
7
7
|
- Mike Sassak
|
@@ -11,7 +11,7 @@ autorequire:
|
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
13
|
|
14
|
-
date: 2010-04-
|
14
|
+
date: 2010-04-16 00:00:00 +02:00
|
15
15
|
default_executable: gherkin
|
16
16
|
dependencies:
|
17
17
|
- !ruby/object:Gem::Dependency
|