gherkin 2.3.3 → 2.3.4
Sign up to get free protection for your applications and to get access to all the features.
- data/History.txt +6 -0
- data/VERSION +1 -1
- data/gherkin.gemspec +3 -3
- data/lib/gherkin/formatter/pretty_formatter.rb +58 -49
- data/lib/gherkin/i18n.yml +7 -20
- data/ragel/lexer.c.rl.erb +25 -13
- data/spec/gherkin/formatter/pretty_formatter_spec.rb +13 -24
- data/spec/gherkin/i18n_spec.rb +44 -45
- metadata +8 -56
data/History.txt
CHANGED
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
2.3.
|
1
|
+
2.3.4
|
data/gherkin.gemspec
CHANGED
@@ -51,9 +51,9 @@ Gem::Specification.new do |s|
|
|
51
51
|
s.add_dependency('json', '~> 1.4.6')
|
52
52
|
|
53
53
|
s.add_development_dependency('rake', '~> 0.8.7')
|
54
|
-
s.add_development_dependency('bundler', '~> 1.0.
|
55
|
-
s.add_development_dependency('rspec', '~> 2.
|
56
|
-
s.add_development_dependency('awesome_print', '~> 0.2
|
54
|
+
s.add_development_dependency('bundler', '~> 1.0.10')
|
55
|
+
s.add_development_dependency('rspec', '~> 2.5.0')
|
56
|
+
s.add_development_dependency('awesome_print', '~> 0.3.2')
|
57
57
|
s.add_development_dependency('cucumber', '~> 0.10.0')
|
58
58
|
# Only needed by Cucumber. Remove when Cucumber no longer needs those.
|
59
59
|
s.add_development_dependency('term-ansicolor', '~> 1.0.5')
|
@@ -19,6 +19,9 @@ module Gherkin
|
|
19
19
|
@step_printer = StepPrinter.new
|
20
20
|
@monochrome = monochrome
|
21
21
|
@executing = executing
|
22
|
+
@background = nil
|
23
|
+
@tag_statement = nil
|
24
|
+
@steps = []
|
22
25
|
end
|
23
26
|
|
24
27
|
def uri(uri)
|
@@ -32,26 +35,47 @@ module Gherkin
|
|
32
35
|
print_description(feature.description, ' ', false)
|
33
36
|
end
|
34
37
|
|
35
|
-
def background(
|
36
|
-
|
37
|
-
|
38
|
-
@io.puts " #{statement.keyword}: #{statement.name}#{indented_element_uri!(statement.keyword, statement.name, statement.line)}"
|
39
|
-
print_description(statement.description, ' ')
|
38
|
+
def background(background)
|
39
|
+
replay
|
40
|
+
@statement = background
|
40
41
|
end
|
41
42
|
|
42
|
-
def scenario(
|
43
|
-
|
44
|
-
|
45
|
-
print_tags(statement.tags, ' ')
|
46
|
-
@io.puts " #{statement.keyword}: #{statement.name}#{indented_element_uri!(statement.keyword, statement.name, statement.line)}"
|
47
|
-
print_description(statement.description, ' ')
|
43
|
+
def scenario(scenario)
|
44
|
+
replay
|
45
|
+
@statement = scenario
|
48
46
|
end
|
49
47
|
|
50
48
|
def scenario_outline(scenario_outline)
|
51
|
-
|
49
|
+
replay
|
50
|
+
@statement = scenario_outline
|
51
|
+
end
|
52
|
+
|
53
|
+
def replay
|
54
|
+
print_statement
|
55
|
+
print_steps
|
56
|
+
end
|
57
|
+
|
58
|
+
def print_statement
|
59
|
+
return if @statement.nil?
|
60
|
+
calculate_location_indentations
|
61
|
+
@io.puts
|
62
|
+
print_comments(@statement.comments, ' ')
|
63
|
+
print_tags(@statement.tags, ' ') if @statement.respond_to?(:tags) # Background doesn't
|
64
|
+
@io.write " #{@statement.keyword}: #{@statement.name}"
|
65
|
+
location = @executing ? "#{@uri}:#{@statement.line}" : nil
|
66
|
+
@io.puts indented_location(location, true)
|
67
|
+
print_description(@statement.description, ' ')
|
68
|
+
@statement = nil
|
69
|
+
end
|
70
|
+
|
71
|
+
def print_steps
|
72
|
+
while(@steps.any?)
|
73
|
+
print_step('skipped', [], nil, true)
|
74
|
+
end
|
52
75
|
end
|
53
76
|
|
54
77
|
def examples(examples)
|
78
|
+
replay
|
55
79
|
@io.puts
|
56
80
|
print_comments(examples.comments, ' ')
|
57
81
|
print_tags(examples.tags, ' ')
|
@@ -61,42 +85,36 @@ module Gherkin
|
|
61
85
|
end
|
62
86
|
|
63
87
|
def step(step)
|
64
|
-
@
|
65
|
-
@step_index += 1 if @step_index
|
66
|
-
# TODO: It feels a little funny to have this logic here in the formatter.
|
67
|
-
# We may have to duplicate it across formatters. So maybe we should move
|
68
|
-
# this out to the callers instead.
|
69
|
-
#
|
70
|
-
# Maybe it's a Filter!! ExecuteFilter and PrettyFilter
|
71
|
-
match(Model::Match.new([], nil)) unless @executing
|
88
|
+
@steps << step
|
72
89
|
end
|
73
90
|
|
74
91
|
def match(match)
|
75
92
|
@match = match
|
76
|
-
|
93
|
+
print_statement
|
94
|
+
print_step('executing', @match.arguments, @match.location, false)
|
77
95
|
end
|
78
96
|
|
79
97
|
def result(result)
|
80
98
|
@io.write(up(1))
|
81
|
-
print_step(result.status, @match.arguments, @match.location)
|
99
|
+
print_step(result.status, @match.arguments, @match.location, true)
|
82
100
|
end
|
83
101
|
|
84
|
-
def print_step(status, arguments, location)
|
102
|
+
def print_step(status, arguments, location, proceed)
|
103
|
+
step = proceed ? @steps.shift : @steps[0]
|
104
|
+
|
85
105
|
text_format = format(status)
|
86
106
|
arg_format = arg_format(status)
|
87
107
|
|
88
|
-
print_comments(
|
108
|
+
print_comments(step.comments, ' ')
|
89
109
|
@io.write(' ')
|
90
|
-
@io.write(text_format.text(
|
91
|
-
@step_printer.write_step(@io, text_format, arg_format,
|
92
|
-
|
93
|
-
|
94
|
-
@io.puts
|
95
|
-
case @step.multiline_arg
|
110
|
+
@io.write(text_format.text(step.keyword))
|
111
|
+
@step_printer.write_step(@io, text_format, arg_format, step.name, arguments)
|
112
|
+
@io.puts(indented_location(location, proceed))
|
113
|
+
case step.multiline_arg
|
96
114
|
when Model::PyString
|
97
|
-
py_string(
|
115
|
+
py_string(step.multiline_arg)
|
98
116
|
when Array
|
99
|
-
table(
|
117
|
+
table(step.multiline_arg)
|
100
118
|
end
|
101
119
|
end
|
102
120
|
|
@@ -136,16 +154,10 @@ module Gherkin
|
|
136
154
|
end
|
137
155
|
|
138
156
|
def eof
|
157
|
+
replay
|
139
158
|
# NO-OP
|
140
159
|
end
|
141
160
|
|
142
|
-
# This method can be invoked before a #scenario, to ensure location arguments are aligned
|
143
|
-
def steps(steps)
|
144
|
-
@step_lengths = steps.map {|step| (step.keyword+step.name).unpack("U*").length}
|
145
|
-
@max_step_length = @step_lengths.max
|
146
|
-
@step_index = -1
|
147
|
-
end
|
148
|
-
|
149
161
|
def table(rows)
|
150
162
|
cell_lengths = rows.map do |row|
|
151
163
|
row.cells.map do |cell|
|
@@ -216,18 +228,15 @@ module Gherkin
|
|
216
228
|
end
|
217
229
|
end
|
218
230
|
|
219
|
-
def
|
220
|
-
|
221
|
-
|
222
|
-
@max_step_length = [@max_step_length, l].max
|
223
|
-
indent = @max_step_length - l
|
224
|
-
' ' * indent + ' ' + comments + "# #{@uri}:#{line}" + reset
|
231
|
+
def indented_location(location, proceed)
|
232
|
+
indentation = proceed ? @indentations.shift : @indentations[0]
|
233
|
+
location ? (' ' * indentation + ' ' + comments + "# #{location}" + reset) : ''
|
225
234
|
end
|
226
235
|
|
227
|
-
def
|
228
|
-
|
229
|
-
|
230
|
-
@
|
236
|
+
def calculate_location_indentations
|
237
|
+
line_widths = ([@statement] + @steps).map {|step| (step.keyword+step.name).unpack("U*").length}
|
238
|
+
max_line_width = line_widths.max
|
239
|
+
@indentations = line_widths.map{|w| max_line_width - w}
|
231
240
|
end
|
232
241
|
end
|
233
242
|
end
|
data/lib/gherkin/i18n.yml
CHANGED
@@ -433,28 +433,15 @@
|
|
433
433
|
"ro":
|
434
434
|
name: Romanian
|
435
435
|
native: română
|
436
|
-
background:
|
437
|
-
feature: Functionalitate
|
436
|
+
background: Context
|
437
|
+
feature: Functionalitate|Funcționalitate|Funcţionalitate
|
438
438
|
scenario: Scenariu
|
439
|
-
scenario_outline:
|
440
|
-
examples:
|
441
|
-
given: "*|
|
442
|
-
when: "*|Cand"
|
439
|
+
scenario_outline: Structura scenariu|Structură scenariu
|
440
|
+
examples: Exemple
|
441
|
+
given: "*|Date fiind|Dat fiind|Dati fiind|Dați fiind|Daţi fiind"
|
442
|
+
when: "*|Cand|Când"
|
443
443
|
then: "*|Atunci"
|
444
|
-
and: "*|Si"
|
445
|
-
but: "*|Dar"
|
446
|
-
"ro-RO":
|
447
|
-
name: Romanian (diacritical)
|
448
|
-
native: română (diacritical)
|
449
|
-
background: Condiţii
|
450
|
-
feature: Funcționalitate
|
451
|
-
scenario: Scenariu
|
452
|
-
scenario_outline: Scenariul de şablon
|
453
|
-
examples: Exemplele
|
454
|
-
given: "*|Dacă"
|
455
|
-
when: "*|Când"
|
456
|
-
then: "*|Atunci"
|
457
|
-
and: "*|Și"
|
444
|
+
and: "*|Si|Și|Şi"
|
458
445
|
but: "*|Dar"
|
459
446
|
"ru":
|
460
447
|
name: Russian
|
data/ragel/lexer.c.rl.erb
CHANGED
@@ -175,11 +175,12 @@ static VALUE rb_eGherkinLexingError;
|
|
175
175
|
}
|
176
176
|
|
177
177
|
action store_cell_content {
|
178
|
+
VALUE re_pipe, re_newline, re_backslash;
|
178
179
|
VALUE con = ENCODED_STR_NEW(PTR_TO(content_start), LEN(content_start, p));
|
179
180
|
rb_funcall(con, rb_intern("strip!"), 0);
|
180
|
-
|
181
|
-
|
182
|
-
|
181
|
+
re_pipe = rb_reg_regcomp(rb_str_new2("\\\\\\|"));
|
182
|
+
re_newline = rb_reg_regcomp(rb_str_new2("\\\\n"));
|
183
|
+
re_backslash = rb_reg_regcomp(rb_str_new2("\\\\\\\\"));
|
183
184
|
rb_funcall(con, rb_intern("gsub!"), 2, re_pipe, rb_str_new2("|"));
|
184
185
|
rb_funcall(con, rb_intern("gsub!"), 2, re_newline, rb_str_new2("\n"));
|
185
186
|
rb_funcall(con, rb_intern("gsub!"), 2, re_backslash, rb_str_new2("\\"));
|
@@ -192,6 +193,7 @@ static VALUE rb_eGherkinLexingError;
|
|
192
193
|
}
|
193
194
|
|
194
195
|
action end_feature {
|
196
|
+
int line;
|
195
197
|
if (cs < lexer_first_final) {
|
196
198
|
if (raise_lexer_error != NULL) {
|
197
199
|
size_t count = 0;
|
@@ -212,6 +214,7 @@ static VALUE rb_eGherkinLexingError;
|
|
212
214
|
newstr_val = rb_str_new(buff, len);
|
213
215
|
newstr = RSTRING_PTR(newstr_val);
|
214
216
|
|
217
|
+
|
215
218
|
for (count = 0; count < len; count++) {
|
216
219
|
if(buff[count] == 10) {
|
217
220
|
newstr[newstr_count] = '\0'; // terminate new string at first newline found
|
@@ -227,7 +230,7 @@ static VALUE rb_eGherkinLexingError;
|
|
227
230
|
newstr_count++;
|
228
231
|
}
|
229
232
|
|
230
|
-
|
233
|
+
line = lexer->line_number;
|
231
234
|
lexer_init(lexer); // Re-initialize so we can scan again with the same lexer
|
232
235
|
raise_lexer_error(newstr, line);
|
233
236
|
}
|
@@ -246,10 +249,11 @@ static VALUE rb_eGherkinLexingError;
|
|
246
249
|
static VALUE
|
247
250
|
unindent(VALUE con, int start_col)
|
248
251
|
{
|
252
|
+
VALUE re;
|
249
253
|
// Gherkin will crash gracefully if the string representation of start_col pushes the pattern past 32 characters
|
250
254
|
char pat[32];
|
251
255
|
snprintf(pat, 32, "^[\t ]{0,%d}", start_col);
|
252
|
-
|
256
|
+
re = rb_reg_regcomp(rb_str_new2(pat));
|
253
257
|
rb_funcall(con, rb_intern("gsub!"), 2, re, rb_str_new2(""));
|
254
258
|
|
255
259
|
return Qnil;
|
@@ -275,6 +279,7 @@ store_multiline_kw_con(VALUE listener, const char * event_name,
|
|
275
279
|
const char * at, size_t length,
|
276
280
|
int current_line, int start_col)
|
277
281
|
{
|
282
|
+
VALUE split;
|
278
283
|
VALUE con = Qnil, kw = Qnil, name = Qnil, desc = Qnil;
|
279
284
|
|
280
285
|
kw = ENCODED_STR_NEW(keyword_at, keyword_length);
|
@@ -282,7 +287,7 @@ store_multiline_kw_con(VALUE listener, const char * event_name,
|
|
282
287
|
|
283
288
|
unindent(con, start_col);
|
284
289
|
|
285
|
-
|
290
|
+
split = rb_str_split(con, "\n");
|
286
291
|
|
287
292
|
name = rb_funcall(split, rb_intern("shift"), 0);
|
288
293
|
desc = rb_ary_join(split, rb_str_new2( "\n" ));
|
@@ -315,12 +320,14 @@ store_pystring_content(VALUE listener,
|
|
315
320
|
const char *at, size_t length,
|
316
321
|
int current_line)
|
317
322
|
{
|
323
|
+
VALUE re2;
|
324
|
+
VALUE unescape_escaped_quotes;
|
318
325
|
VALUE con = ENCODED_STR_NEW(at, length);
|
319
326
|
|
320
327
|
unindent(con, start_col);
|
321
328
|
|
322
|
-
|
323
|
-
|
329
|
+
re2 = rb_reg_regcomp(rb_str_new2("\r\\Z"));
|
330
|
+
unescape_escaped_quotes = rb_reg_regcomp(rb_str_new2("\\\\\"\\\\\"\\\\\""));
|
324
331
|
rb_funcall(con, rb_intern("sub!"), 2, re2, rb_str_new2(""));
|
325
332
|
rb_funcall(con, rb_intern("gsub!"), 2, unescape_escaped_quotes, rb_str_new2("\"\"\""));
|
326
333
|
rb_funcall(listener, rb_intern("py_string"), 2, con, INT2FIX(current_line));
|
@@ -359,9 +366,10 @@ static VALUE CLexer_alloc(VALUE klass)
|
|
359
366
|
|
360
367
|
static VALUE CLexer_init(VALUE self, VALUE listener)
|
361
368
|
{
|
369
|
+
lexer_state *lxr;
|
362
370
|
rb_iv_set(self, "@listener", listener);
|
363
371
|
|
364
|
-
|
372
|
+
lxr = NULL;
|
365
373
|
DATA_GET(self, lexer_state, lxr);
|
366
374
|
lexer_init(lxr);
|
367
375
|
|
@@ -370,16 +378,20 @@ static VALUE CLexer_init(VALUE self, VALUE listener)
|
|
370
378
|
|
371
379
|
static VALUE CLexer_scan(VALUE self, VALUE input)
|
372
380
|
{
|
381
|
+
VALUE input_copy;
|
382
|
+
char *data;
|
383
|
+
size_t len;
|
373
384
|
VALUE listener = rb_iv_get(self, "@listener");
|
374
385
|
|
375
|
-
lexer_state *lexer
|
386
|
+
lexer_state *lexer;
|
387
|
+
lexer = NULL;
|
376
388
|
DATA_GET(self, lexer_state, lexer);
|
377
389
|
|
378
|
-
|
390
|
+
input_copy = rb_str_dup(input);
|
379
391
|
|
380
392
|
rb_str_append(input_copy, rb_str_new2("\n%_FEATURE_END_%"));
|
381
|
-
|
382
|
-
|
393
|
+
data = RSTRING_PTR(input_copy);
|
394
|
+
len = RSTRING_LEN(input_copy);
|
383
395
|
|
384
396
|
if (len == 0) {
|
385
397
|
rb_raise(rb_eGherkinLexingError, "No content to lex.");
|
@@ -38,24 +38,15 @@ module Gherkin
|
|
38
38
|
@f.uri("features/foo.feature")
|
39
39
|
@f.feature(Model::Feature.new([], [], "Feature", "Hello", "World", 1))
|
40
40
|
|
41
|
-
step1 = Model::Step.new([], "Given ", "some stuff", 5)
|
42
|
-
match1 = Model::Match.new([], "features/step_definitions/bar.rb:56")
|
43
|
-
result1 = Model::Result.new('passed', 22, nil)
|
44
|
-
|
45
|
-
step2 = Model::Step.new([], "When ", "foo", 6)
|
46
|
-
match2 = Model::Match.new([], "features/step_definitions/bar.rb:96")
|
47
|
-
result2 = Model::Result.new('passed', 33, nil)
|
48
|
-
|
49
|
-
@f.steps([step1, step2])
|
50
41
|
@f.scenario(Model::Scenario.new([], [], "Scenario", "The scenario", "", 4))
|
42
|
+
@f.step(Model::Step.new([], "Given ", "some stuff", 5))
|
43
|
+
@f.step(Model::Step.new([], "When ", "foo", 6))
|
51
44
|
|
52
|
-
@f.
|
53
|
-
@f.
|
54
|
-
@f.result(result1)
|
45
|
+
@f.match(Model::Match.new([], "features/step_definitions/bar.rb:56"))
|
46
|
+
@f.result(Model::Result.new('passed', 22, nil))
|
55
47
|
|
56
|
-
@f.
|
57
|
-
@f.
|
58
|
-
@f.result(result2)
|
48
|
+
@f.match(Model::Match.new([], "features/step_definitions/bar.rb:96"))
|
49
|
+
@f.result(Model::Result.new('passed', 33, nil))
|
59
50
|
|
60
51
|
assert_io(%{Feature: Hello
|
61
52
|
World
|
@@ -75,7 +66,6 @@ module Gherkin
|
|
75
66
|
match = Model::Match.new([], "features/step_definitions/bar.rb:56")
|
76
67
|
result = Model::Result.new('passed', 0, nil)
|
77
68
|
|
78
|
-
@f.steps([step])
|
79
69
|
@f.scenario(Model::Scenario.new([], [], "Scenario", "The scenario", "", 4))
|
80
70
|
@f.step(step)
|
81
71
|
@f.match(match)
|
@@ -91,16 +81,15 @@ module Gherkin
|
|
91
81
|
end
|
92
82
|
|
93
83
|
it "should highlight arguments for regular steps" do
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
@f.
|
99
|
-
@f.step(step)
|
100
|
-
@f.match(match)
|
101
|
-
@f.result(result)
|
84
|
+
@f.uri("foo.feature")
|
85
|
+
@f.scenario(Model::Scenario.new([], [], "Scenario", "Lots of cukes", "", 3))
|
86
|
+
@f.step(Model::Step.new([], "Given ", "I have 999 cukes in my belly", 3))
|
87
|
+
@f.match(Model::Match.new([Gherkin::Formatter::Argument.new(7, '999')], nil))
|
88
|
+
@f.result(Model::Result.new('passed', 6, nil))
|
102
89
|
|
103
90
|
assert_io(
|
91
|
+
"\n" +
|
92
|
+
" Scenario: Lots of cukes \e[90m# foo.feature:3\e[0m\n" +
|
104
93
|
" #{executing}Given #{reset}#{executing}I have #{reset}#{executing_arg}999#{reset}#{executing} cukes in my belly#{reset}\n" +
|
105
94
|
"#{up(1)} #{passed}Given #{reset}#{passed}I have #{reset}#{passed_arg}999#{reset}#{passed} cukes in my belly#{reset}\n"
|
106
95
|
)
|
data/spec/gherkin/i18n_spec.rb
CHANGED
@@ -79,51 +79,50 @@ module Gherkin
|
|
79
79
|
unless defined?(JRUBY_VERSION)
|
80
80
|
it "should print available languages" do
|
81
81
|
("\n" + Gherkin::I18n.language_table).should == %{
|
82
|
-
| ar | Arabic
|
83
|
-
| bg | Bulgarian
|
84
|
-
| ca | Catalan
|
85
|
-
| cs | Czech
|
86
|
-
| cy-GB | Welsh
|
87
|
-
| da | Danish
|
88
|
-
| de | German
|
89
|
-
| en | English
|
90
|
-
| en-Scouse | Scouse
|
91
|
-
| en-au | Australian
|
92
|
-
| en-lol | LOLCAT
|
93
|
-
| en-pirate | Pirate
|
94
|
-
| en-tx | Texan
|
95
|
-
| eo | Esperanto
|
96
|
-
| es | Spanish
|
97
|
-
| et | Estonian
|
98
|
-
| fi | Finnish
|
99
|
-
| fr | French
|
100
|
-
| he | Hebrew
|
101
|
-
| hr | Croatian
|
102
|
-
| hu | Hungarian
|
103
|
-
| id | Indonesian
|
104
|
-
| it | Italian
|
105
|
-
| ja | Japanese
|
106
|
-
| ko | Korean
|
107
|
-
| lt | Lithuanian
|
108
|
-
| lu | Luxemburgish
|
109
|
-
| lv | Latvian
|
110
|
-
| nl | Dutch
|
111
|
-
| no | Norwegian
|
112
|
-
| pl | Polish
|
113
|
-
| pt | Portuguese
|
114
|
-
| ro | Romanian
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
| sr-
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
| zh-
|
126
|
-
| zh-TW | Chinese traditional | 繁體中文 |
|
82
|
+
| ar | Arabic | العربية |
|
83
|
+
| bg | Bulgarian | български |
|
84
|
+
| ca | Catalan | català |
|
85
|
+
| cs | Czech | Česky |
|
86
|
+
| cy-GB | Welsh | Cymraeg |
|
87
|
+
| da | Danish | dansk |
|
88
|
+
| de | German | Deutsch |
|
89
|
+
| en | English | English |
|
90
|
+
| en-Scouse | Scouse | Scouse |
|
91
|
+
| en-au | Australian | Australian |
|
92
|
+
| en-lol | LOLCAT | LOLCAT |
|
93
|
+
| en-pirate | Pirate | Pirate |
|
94
|
+
| en-tx | Texan | Texan |
|
95
|
+
| eo | Esperanto | Esperanto |
|
96
|
+
| es | Spanish | español |
|
97
|
+
| et | Estonian | eesti keel |
|
98
|
+
| fi | Finnish | suomi |
|
99
|
+
| fr | French | français |
|
100
|
+
| he | Hebrew | עברית |
|
101
|
+
| hr | Croatian | hrvatski |
|
102
|
+
| hu | Hungarian | magyar |
|
103
|
+
| id | Indonesian | Bahasa Indonesia |
|
104
|
+
| it | Italian | italiano |
|
105
|
+
| ja | Japanese | 日本語 |
|
106
|
+
| ko | Korean | 한국어 |
|
107
|
+
| lt | Lithuanian | lietuvių kalba |
|
108
|
+
| lu | Luxemburgish | Lëtzebuergesch |
|
109
|
+
| lv | Latvian | latviešu |
|
110
|
+
| nl | Dutch | Nederlands |
|
111
|
+
| no | Norwegian | norsk |
|
112
|
+
| pl | Polish | polski |
|
113
|
+
| pt | Portuguese | português |
|
114
|
+
| ro | Romanian | română |
|
115
|
+
| ru | Russian | русский |
|
116
|
+
| sk | Slovak | Slovensky |
|
117
|
+
| sr-Cyrl | Serbian | Српски |
|
118
|
+
| sr-Latn | Serbian (Latin) | Srpski (Latinica) |
|
119
|
+
| sv | Swedish | Svenska |
|
120
|
+
| tr | Turkish | Türkçe |
|
121
|
+
| uk | Ukrainian | Українська |
|
122
|
+
| uz | Uzbek | Узбекча |
|
123
|
+
| vi | Vietnamese | Tiếng Việt |
|
124
|
+
| zh-CN | Chinese simplified | 简体中文 |
|
125
|
+
| zh-TW | Chinese traditional | 繁體中文 |
|
127
126
|
}
|
128
127
|
end
|
129
128
|
end
|
metadata
CHANGED
@@ -1,12 +1,8 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gherkin
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
prerelease:
|
5
|
-
|
6
|
-
- 2
|
7
|
-
- 3
|
8
|
-
- 3
|
9
|
-
version: 2.3.3
|
4
|
+
prerelease:
|
5
|
+
version: 2.3.4
|
10
6
|
platform: ruby
|
11
7
|
authors:
|
12
8
|
- Mike Sassak
|
@@ -16,7 +12,7 @@ autorequire:
|
|
16
12
|
bindir: bin
|
17
13
|
cert_chain: []
|
18
14
|
|
19
|
-
date:
|
15
|
+
date: 2011-03-10 00:00:00 +00:00
|
20
16
|
default_executable: gherkin
|
21
17
|
dependencies:
|
22
18
|
- !ruby/object:Gem::Dependency
|
@@ -27,10 +23,6 @@ dependencies:
|
|
27
23
|
requirements:
|
28
24
|
- - ~>
|
29
25
|
- !ruby/object:Gem::Version
|
30
|
-
segments:
|
31
|
-
- 0
|
32
|
-
- 7
|
33
|
-
- 5
|
34
26
|
version: 0.7.5
|
35
27
|
type: :development
|
36
28
|
version_requirements: *id001
|
@@ -42,10 +34,6 @@ dependencies:
|
|
42
34
|
requirements:
|
43
35
|
- - ~>
|
44
36
|
- !ruby/object:Gem::Version
|
45
|
-
segments:
|
46
|
-
- 1
|
47
|
-
- 4
|
48
|
-
- 6
|
49
37
|
version: 1.4.6
|
50
38
|
type: :runtime
|
51
39
|
version_requirements: *id002
|
@@ -57,10 +45,6 @@ dependencies:
|
|
57
45
|
requirements:
|
58
46
|
- - ~>
|
59
47
|
- !ruby/object:Gem::Version
|
60
|
-
segments:
|
61
|
-
- 0
|
62
|
-
- 8
|
63
|
-
- 7
|
64
48
|
version: 0.8.7
|
65
49
|
type: :development
|
66
50
|
version_requirements: *id003
|
@@ -72,11 +56,7 @@ dependencies:
|
|
72
56
|
requirements:
|
73
57
|
- - ~>
|
74
58
|
- !ruby/object:Gem::Version
|
75
|
-
|
76
|
-
- 1
|
77
|
-
- 0
|
78
|
-
- 7
|
79
|
-
version: 1.0.7
|
59
|
+
version: 1.0.10
|
80
60
|
type: :development
|
81
61
|
version_requirements: *id004
|
82
62
|
- !ruby/object:Gem::Dependency
|
@@ -87,11 +67,7 @@ dependencies:
|
|
87
67
|
requirements:
|
88
68
|
- - ~>
|
89
69
|
- !ruby/object:Gem::Version
|
90
|
-
|
91
|
-
- 2
|
92
|
-
- 3
|
93
|
-
- 0
|
94
|
-
version: 2.3.0
|
70
|
+
version: 2.5.0
|
95
71
|
type: :development
|
96
72
|
version_requirements: *id005
|
97
73
|
- !ruby/object:Gem::Dependency
|
@@ -102,11 +78,7 @@ dependencies:
|
|
102
78
|
requirements:
|
103
79
|
- - ~>
|
104
80
|
- !ruby/object:Gem::Version
|
105
|
-
|
106
|
-
- 0
|
107
|
-
- 2
|
108
|
-
- 1
|
109
|
-
version: 0.2.1
|
81
|
+
version: 0.3.2
|
110
82
|
type: :development
|
111
83
|
version_requirements: *id006
|
112
84
|
- !ruby/object:Gem::Dependency
|
@@ -117,10 +89,6 @@ dependencies:
|
|
117
89
|
requirements:
|
118
90
|
- - ~>
|
119
91
|
- !ruby/object:Gem::Version
|
120
|
-
segments:
|
121
|
-
- 0
|
122
|
-
- 10
|
123
|
-
- 0
|
124
92
|
version: 0.10.0
|
125
93
|
type: :development
|
126
94
|
version_requirements: *id007
|
@@ -132,10 +100,6 @@ dependencies:
|
|
132
100
|
requirements:
|
133
101
|
- - ~>
|
134
102
|
- !ruby/object:Gem::Version
|
135
|
-
segments:
|
136
|
-
- 1
|
137
|
-
- 0
|
138
|
-
- 5
|
139
103
|
version: 1.0.5
|
140
104
|
type: :development
|
141
105
|
version_requirements: *id008
|
@@ -147,10 +111,6 @@ dependencies:
|
|
147
111
|
requirements:
|
148
112
|
- - ~>
|
149
113
|
- !ruby/object:Gem::Version
|
150
|
-
segments:
|
151
|
-
- 3
|
152
|
-
- 0
|
153
|
-
- 0
|
154
114
|
version: 3.0.0
|
155
115
|
type: :development
|
156
116
|
version_requirements: *id009
|
@@ -192,7 +152,6 @@ extensions:
|
|
192
152
|
- ext/gherkin_lexer_pl/extconf.rb
|
193
153
|
- ext/gherkin_lexer_pt/extconf.rb
|
194
154
|
- ext/gherkin_lexer_ro/extconf.rb
|
195
|
-
- ext/gherkin_lexer_ro_ro/extconf.rb
|
196
155
|
- ext/gherkin_lexer_ru/extconf.rb
|
197
156
|
- ext/gherkin_lexer_sk/extconf.rb
|
198
157
|
- ext/gherkin_lexer_sr_cyrl/extconf.rb
|
@@ -367,7 +326,6 @@ files:
|
|
367
326
|
- lib/gherkin/rb_lexer/pl.rb
|
368
327
|
- lib/gherkin/rb_lexer/pt.rb
|
369
328
|
- lib/gherkin/rb_lexer/ro.rb
|
370
|
-
- lib/gherkin/rb_lexer/ro_ro.rb
|
371
329
|
- lib/gherkin/rb_lexer/ru.rb
|
372
330
|
- lib/gherkin/rb_lexer/sk.rb
|
373
331
|
- lib/gherkin/rb_lexer/sr_cyrl.rb
|
@@ -412,7 +370,6 @@ files:
|
|
412
370
|
- ext/gherkin_lexer_pl/gherkin_lexer_pl.c
|
413
371
|
- ext/gherkin_lexer_pt/gherkin_lexer_pt.c
|
414
372
|
- ext/gherkin_lexer_ro/gherkin_lexer_ro.c
|
415
|
-
- ext/gherkin_lexer_ro_ro/gherkin_lexer_ro_ro.c
|
416
373
|
- ext/gherkin_lexer_ru/gherkin_lexer_ru.c
|
417
374
|
- ext/gherkin_lexer_sk/gherkin_lexer_sk.c
|
418
375
|
- ext/gherkin_lexer_sr_cyrl/gherkin_lexer_sr_cyrl.c
|
@@ -457,7 +414,6 @@ files:
|
|
457
414
|
- ext/gherkin_lexer_pl/extconf.rb
|
458
415
|
- ext/gherkin_lexer_pt/extconf.rb
|
459
416
|
- ext/gherkin_lexer_ro/extconf.rb
|
460
|
-
- ext/gherkin_lexer_ro_ro/extconf.rb
|
461
417
|
- ext/gherkin_lexer_ru/extconf.rb
|
462
418
|
- ext/gherkin_lexer_sk/extconf.rb
|
463
419
|
- ext/gherkin_lexer_sr_cyrl/extconf.rb
|
@@ -483,24 +439,20 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
483
439
|
requirements:
|
484
440
|
- - ">="
|
485
441
|
- !ruby/object:Gem::Version
|
486
|
-
segments:
|
487
|
-
- 0
|
488
442
|
version: "0"
|
489
443
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
490
444
|
none: false
|
491
445
|
requirements:
|
492
446
|
- - ">="
|
493
447
|
- !ruby/object:Gem::Version
|
494
|
-
segments:
|
495
|
-
- 0
|
496
448
|
version: "0"
|
497
449
|
requirements: []
|
498
450
|
|
499
451
|
rubyforge_project:
|
500
|
-
rubygems_version: 1.
|
452
|
+
rubygems_version: 1.6.2
|
501
453
|
signing_key:
|
502
454
|
specification_version: 3
|
503
|
-
summary: gherkin-2.3.
|
455
|
+
summary: gherkin-2.3.4
|
504
456
|
test_files:
|
505
457
|
- features/escaped_pipes.feature
|
506
458
|
- features/feature_parser.feature
|