gherkin 1.0.30-i386-mswin32 → 2.0.0-i386-mswin32
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/.rspec +1 -0
- data/History.txt +19 -0
- data/Rakefile +4 -4
- data/VERSION.yml +2 -2
- data/features/feature_parser.feature +11 -0
- data/features/json_formatter.feature +238 -0
- data/features/pretty_formatter.feature +9 -0
- data/features/step_definitions/gherkin_steps.rb +1 -1
- data/features/step_definitions/json_formatter_steps.rb +32 -0
- data/features/step_definitions/pretty_formatter_steps.rb +24 -23
- data/features/support/env.rb +3 -3
- data/lib/gherkin/formatter/json_formatter.rb +82 -0
- data/lib/gherkin/formatter/pretty_formatter.rb +73 -78
- data/lib/gherkin/i18n.rb +22 -18
- data/lib/gherkin/i18n.yml +9 -9
- data/lib/gherkin/i18n_lexer.rb +2 -2
- data/lib/gherkin/parser/event.rb +6 -6
- data/lib/gherkin/parser/filter_listener.rb +5 -1
- data/lib/gherkin/parser/formatter_listener.rb +113 -0
- data/lib/gherkin/parser/json_parser.rb +102 -0
- data/lib/gherkin/parser/parser.rb +10 -2
- data/lib/gherkin/parser/row.rb +15 -0
- data/lib/gherkin/rubify.rb +2 -0
- data/lib/gherkin/tools/files.rb +1 -1
- data/lib/gherkin/tools/reformat.rb +1 -2
- data/lib/gherkin/tools/stats.rb +1 -1
- data/lib/gherkin/tools/stats_listener.rb +5 -5
- data/ragel/lexer.c.rl.erb +41 -12
- data/ragel/lexer.java.rl.erb +26 -17
- data/ragel/lexer.rb.rl.erb +10 -5
- data/ragel/lexer_common.rl.erb +6 -6
- data/spec/gherkin/c_lexer_spec.rb +2 -2
- data/spec/gherkin/fixtures/complex.js +105 -0
- data/spec/gherkin/formatter/argument_spec.rb +3 -3
- data/spec/gherkin/formatter/colors_spec.rb +3 -4
- data/spec/gherkin/formatter/pretty_formatter_spec.rb +21 -50
- data/spec/gherkin/i18n_lexer_spec.rb +6 -6
- data/spec/gherkin/i18n_spec.rb +16 -9
- data/spec/gherkin/java_lexer_spec.rb +1 -2
- data/spec/gherkin/output_stream_string_io.rb +24 -0
- data/spec/gherkin/parser/filter_listener_spec.rb +16 -9
- data/spec/gherkin/parser/formatter_listener_spec.rb +134 -0
- data/spec/gherkin/parser/json_parser_spec.rb +129 -0
- data/spec/gherkin/parser/parser_spec.rb +9 -9
- data/spec/gherkin/parser/tag_expression_spec.rb +8 -8
- data/spec/gherkin/rb_lexer_spec.rb +1 -1
- data/spec/gherkin/sexp_recorder.rb +21 -1
- data/spec/gherkin/shared/{lexer_spec.rb → lexer_group.rb} +172 -102
- data/spec/gherkin/shared/{py_string_spec.rb → py_string_group.rb} +21 -17
- data/spec/gherkin/shared/{row_spec.rb → row_group.rb} +36 -19
- data/spec/gherkin/shared/{tags_spec.rb → tags_group.rb} +13 -9
- data/spec/spec_helper.rb +18 -38
- data/tasks/bench.rake +3 -3
- data/tasks/compile.rake +13 -14
- data/tasks/rspec.rake +6 -11
- metadata +42 -28
- data/features/pretty_printer.feature +0 -14
- data/spec/gherkin/csharp_lexer_spec.rb +0 -20
data/ragel/lexer.java.rl.erb
CHANGED
@@ -34,36 +34,36 @@ public class <%= @i18n.underscored_iso_code.upcase %> implements Lexer {
|
|
34
34
|
}
|
35
35
|
|
36
36
|
action store_feature_content {
|
37
|
-
String
|
38
|
-
listener.feature(keyword,
|
37
|
+
String[] nameDescription = nameAndDescriptionWithPlatformNewlinesIntact(keywordContent(data, p, eof, nextKeywordStart, contentStart));
|
38
|
+
listener.feature(keyword, nameDescription[0], nameDescription[1], currentLine);
|
39
39
|
if(nextKeywordStart != -1) p = nextKeywordStart - 1;
|
40
40
|
nextKeywordStart = -1;
|
41
41
|
}
|
42
42
|
|
43
43
|
action store_background_content {
|
44
|
-
String
|
45
|
-
listener.background(keyword,
|
44
|
+
String[] nameDescription = nameAndDescriptionWithPlatformNewlinesIntact(keywordContent(data, p, eof, nextKeywordStart, contentStart));
|
45
|
+
listener.background(keyword, nameDescription[0], nameDescription[1], currentLine);
|
46
46
|
if(nextKeywordStart != -1) p = nextKeywordStart - 1;
|
47
47
|
nextKeywordStart = -1;
|
48
48
|
}
|
49
49
|
|
50
50
|
action store_scenario_content {
|
51
|
-
String
|
52
|
-
listener.scenario(keyword,
|
51
|
+
String[] nameDescription = nameAndDescriptionWithPlatformNewlinesIntact(keywordContent(data, p, eof, nextKeywordStart, contentStart));
|
52
|
+
listener.scenario(keyword, nameDescription[0], nameDescription[1], currentLine);
|
53
53
|
if(nextKeywordStart != -1) p = nextKeywordStart - 1;
|
54
54
|
nextKeywordStart = -1;
|
55
55
|
}
|
56
56
|
|
57
57
|
action store_scenario_outline_content {
|
58
|
-
String
|
59
|
-
listener.scenarioOutline(keyword,
|
58
|
+
String[] nameDescription = nameAndDescriptionWithPlatformNewlinesIntact(keywordContent(data, p, eof, nextKeywordStart, contentStart));
|
59
|
+
listener.scenarioOutline(keyword, nameDescription[0], nameDescription[1], currentLine);
|
60
60
|
if(nextKeywordStart != -1) p = nextKeywordStart - 1;
|
61
61
|
nextKeywordStart = -1;
|
62
62
|
}
|
63
63
|
|
64
64
|
action store_examples_content {
|
65
|
-
String
|
66
|
-
listener.examples(keyword,
|
65
|
+
String[] nameDescription = nameAndDescriptionWithPlatformNewlinesIntact(keywordContent(data, p, eof, nextKeywordStart, contentStart));
|
66
|
+
listener.examples(keyword, nameDescription[0], nameDescription[1], currentLine);
|
67
67
|
if(nextKeywordStart != -1) p = nextKeywordStart - 1;
|
68
68
|
nextKeywordStart = -1;
|
69
69
|
}
|
@@ -125,7 +125,7 @@ public class <%= @i18n.underscored_iso_code.upcase %> implements Lexer {
|
|
125
125
|
action end_feature {
|
126
126
|
if(cs < lexer_first_final) {
|
127
127
|
String content = currentLineContent(data, lastNewline);
|
128
|
-
throw new LexingError("Lexing error on line " + lineNumber + ": '" + content + "'");
|
128
|
+
throw new LexingError("Lexing error on line " + lineNumber + ": '" + content + "'. See http://wiki.github.com/aslakhellesoy/gherkin/lexingerror for more information.");
|
129
129
|
} else {
|
130
130
|
listener.eof();
|
131
131
|
}
|
@@ -142,8 +142,9 @@ public class <%= @i18n.underscored_iso_code.upcase %> implements Lexer {
|
|
142
142
|
|
143
143
|
%% write data noerror;
|
144
144
|
|
145
|
-
public void scan(String inputSequence) {
|
146
|
-
|
145
|
+
public void scan(String inputSequence, String uri, int offset) {
|
146
|
+
listener.location(uri, offset);
|
147
|
+
String input = inputSequence + "\n%_FEATURE_END_%";
|
147
148
|
byte[] data = null;
|
148
149
|
try {
|
149
150
|
data = input.getBytes("UTF-8");
|
@@ -178,16 +179,24 @@ public class <%= @i18n.underscored_iso_code.upcase %> implements Lexer {
|
|
178
179
|
private static final String CRLF = "\r\n";
|
179
180
|
private static final String LF = "\n";
|
180
181
|
|
181
|
-
private String
|
182
|
+
private String[] nameAndDescriptionWithPlatformNewlinesIntact(String text) {
|
182
183
|
int crlfCount = matchCount(CRLF_RE.matcher(text));
|
183
184
|
int lfCount = matchCount(LF_RE.matcher(text));
|
184
185
|
String eol = crlfCount > lfCount ? CRLF : LF;
|
185
186
|
|
186
|
-
|
187
|
+
String name = null;
|
188
|
+
StringBuffer description = new StringBuffer();
|
187
189
|
for(String s : text.split("\r?\n")) {
|
188
|
-
|
190
|
+
if(name == null) {
|
191
|
+
name = s.trim();
|
192
|
+
} else {
|
193
|
+
description.append(s.trim()).append(eol);
|
194
|
+
}
|
195
|
+
}
|
196
|
+
if(name == null) {
|
197
|
+
name = "";
|
189
198
|
}
|
190
|
-
return
|
199
|
+
return new String[]{name, description.toString().trim()};
|
191
200
|
}
|
192
201
|
|
193
202
|
private int matchCount(Matcher m) {
|
data/ragel/lexer.rb.rl.erb
CHANGED
@@ -113,7 +113,7 @@ module Gherkin
|
|
113
113
|
action end_feature {
|
114
114
|
if cs < lexer_first_final
|
115
115
|
content = current_line_content(data, p)
|
116
|
-
raise LexingError.new("Lexing error on line %d: '%s'." % [@line_number, content])
|
116
|
+
raise LexingError.new("Lexing error on line %d: '%s'. See http://wiki.github.com/aslakhellesoy/gherkin/lexingerror for more information." % [@line_number, content])
|
117
117
|
else
|
118
118
|
@listener.eof
|
119
119
|
end
|
@@ -127,7 +127,8 @@ module Gherkin
|
|
127
127
|
%% write data;
|
128
128
|
end
|
129
129
|
|
130
|
-
def scan(data)
|
130
|
+
def scan(data, uri, offset)
|
131
|
+
@listener.location(uri, offset)
|
131
132
|
data = (data + "\n%_FEATURE_END_%").unpack("c*") # Explicit EOF simplifies things considerably
|
132
133
|
eof = pe = data.length
|
133
134
|
|
@@ -153,11 +154,15 @@ module Gherkin
|
|
153
154
|
def unindent(startcol, text)
|
154
155
|
text.gsub(/^[\t ]{0,#{startcol}}/, "")
|
155
156
|
end
|
156
|
-
|
157
|
+
|
157
158
|
def store_keyword_content(event, data, p, eof)
|
158
159
|
end_point = (!@next_keyword_start or (p == eof)) ? p : @next_keyword_start
|
159
|
-
|
160
|
-
|
160
|
+
content = yield utf8_pack(data[@content_start...end_point])
|
161
|
+
content_lines = content.split("\n")
|
162
|
+
name = content_lines.shift || ""
|
163
|
+
name.strip!
|
164
|
+
description = content_lines.join("\n")
|
165
|
+
@listener.__send__(event, @keyword, name, description, @current_line)
|
161
166
|
end
|
162
167
|
|
163
168
|
def current_line_content(data, p)
|
data/ragel/lexer_common.rl.erb
CHANGED
@@ -16,11 +16,11 @@
|
|
16
16
|
PIPE = '|';
|
17
17
|
ESCAPED_PIPE = '\\|';
|
18
18
|
|
19
|
-
FeatureHeadingEnd = EOL+ space* (I18N_Background | I18N_Scenario | I18N_ScenarioOutline | '@' | '#' | EOF) >next_keyword_start;
|
20
|
-
ScenarioHeadingEnd = EOL+ space* ( I18N_Scenario | I18N_ScenarioOutline | I18N_Step | '@' | '#' | EOF ) >next_keyword_start;
|
21
|
-
BackgroundHeadingEnd = EOL+ space* ( I18N_Scenario | I18N_ScenarioOutline | I18N_Step | '@' | '#'| EOF ) >next_keyword_start;
|
22
|
-
ScenarioOutlineHeadingEnd = EOL+ space* ( I18N_Scenario | I18N_Step | '@' | '#' | EOF ) >next_keyword_start;
|
23
|
-
ExamplesHeadingEnd = EOL+ space* '|' >next_keyword_start;
|
19
|
+
FeatureHeadingEnd = EOL+ space* (I18N_Feature | I18N_Background | I18N_Scenario | I18N_ScenarioOutline | I18N_Examples | '@' | '#' | EOF) >next_keyword_start;
|
20
|
+
ScenarioHeadingEnd = EOL+ space* ( I18N_Feature | I18N_Background | I18N_Scenario | I18N_ScenarioOutline | I18N_Step | '@' | '#' | EOF ) >next_keyword_start;
|
21
|
+
BackgroundHeadingEnd = EOL+ space* ( I18N_Feature | I18N_Scenario | I18N_ScenarioOutline | I18N_Step | '@' | '#'| EOF ) >next_keyword_start;
|
22
|
+
ScenarioOutlineHeadingEnd = EOL+ space* ( I18N_Feature | I18N_Scenario | I18N_Step | '@' | '#' | EOF ) >next_keyword_start;
|
23
|
+
ExamplesHeadingEnd = EOL+ space* ( I18N_Feature | '|' ) >next_keyword_start;
|
24
24
|
|
25
25
|
FeatureHeading = space* I18N_Feature %begin_content ^FeatureHeadingEnd* :>> FeatureHeadingEnd @store_feature_content;
|
26
26
|
BackgroundHeading = space* I18N_Background %begin_content ^BackgroundHeadingEnd* :>> BackgroundHeadingEnd @store_background_content;
|
@@ -36,7 +36,7 @@
|
|
36
36
|
|
37
37
|
StartRow = space* PIPE >start_row;
|
38
38
|
EndRow = EOL space* ^PIPE >next_keyword_start;
|
39
|
-
Cell = PIPE (ESCAPED_PIPE | (any - PIPE)+ )* >begin_cell_content %store_cell_content;
|
39
|
+
Cell = PIPE (ESCAPED_PIPE | (any - (PIPE|EOL))+ )* >begin_cell_content %store_cell_content;
|
40
40
|
RowBody = space* Cell** PIPE :>> (space* EOL+ space*) %store_row;
|
41
41
|
Row = StartRow :>> RowBody <: EndRow?;
|
42
42
|
|
@@ -1,6 +1,6 @@
|
|
1
1
|
#encoding: utf-8
|
2
|
-
unless defined?(JRUBY_VERSION)
|
3
|
-
require
|
2
|
+
unless defined?(JRUBY_VERSION) || (defined?(RUBY_ENGINE) && RUBY_ENGINE == "ironruby")
|
3
|
+
require 'spec_helper'
|
4
4
|
require 'gherkin_lexer_en'
|
5
5
|
|
6
6
|
module Gherkin
|
@@ -0,0 +1,105 @@
|
|
1
|
+
{ "name" : "Feature Text\nIn order to test multiline forms",
|
2
|
+
"tags" : [
|
3
|
+
"@tag1",
|
4
|
+
"@tag2"
|
5
|
+
],
|
6
|
+
"background" : {
|
7
|
+
"name" : "",
|
8
|
+
"steps" : [
|
9
|
+
{ "name" : "this is a background step" },
|
10
|
+
{ "name" : "this is another one",
|
11
|
+
"keyword" : "When ",
|
12
|
+
"line" : 412 }
|
13
|
+
]
|
14
|
+
},
|
15
|
+
"elements" : [
|
16
|
+
{ "type" : "Scenario Outline",
|
17
|
+
"name" : "An Scenario Outline",
|
18
|
+
"tags" : [ "@foo" ],
|
19
|
+
"steps" : [
|
20
|
+
{ "name" : "A step with a table",
|
21
|
+
"table" : [
|
22
|
+
{"cells":
|
23
|
+
[ { "text":"a" },
|
24
|
+
{ "text":"row" },
|
25
|
+
{ "text":"for" },
|
26
|
+
{ "text":"a" },
|
27
|
+
{ "text":"step"}
|
28
|
+
]
|
29
|
+
}
|
30
|
+
]
|
31
|
+
}
|
32
|
+
],
|
33
|
+
"examples" : [
|
34
|
+
{ "name" : "Sweet Example",
|
35
|
+
"table" : [
|
36
|
+
{"cells" :
|
37
|
+
[ { "text":"Fill" },
|
38
|
+
{ "text":"In" }]},
|
39
|
+
{"cells" :
|
40
|
+
[ { "text":"The" },
|
41
|
+
{ "text": "Blanks" }]}
|
42
|
+
],
|
43
|
+
"tags" : [ "@exampletag" ]
|
44
|
+
}
|
45
|
+
]
|
46
|
+
},
|
47
|
+
{ "type" : "Scenario",
|
48
|
+
"name" : "Reading a Scenario",
|
49
|
+
"tags" : [
|
50
|
+
"@tag3",
|
51
|
+
"@tag4"
|
52
|
+
],
|
53
|
+
"steps" : [
|
54
|
+
{ "name" : "there is a step" },
|
55
|
+
{ "name" : "not another step" }
|
56
|
+
]
|
57
|
+
},
|
58
|
+
{ "type" : "Scenario",
|
59
|
+
"name" : "Reading a second scenario\nWith two lines of text",
|
60
|
+
"tags" : [ "@tag3" ],
|
61
|
+
"steps" : [
|
62
|
+
{ "name" : "a third step with a table",
|
63
|
+
"table" : [
|
64
|
+
{ "cells" :
|
65
|
+
[ { "text":"a" },
|
66
|
+
{ "text":"b" }]},
|
67
|
+
{ "cells" :
|
68
|
+
[ { "text":"c" },
|
69
|
+
{ "text":"d" }]},
|
70
|
+
{ "cells" :
|
71
|
+
[ { "text":"e" },
|
72
|
+
{ "text":"f" }]}
|
73
|
+
]
|
74
|
+
},
|
75
|
+
{ "name" : "I am still testing things",
|
76
|
+
"table" : [
|
77
|
+
{ "cells" :
|
78
|
+
[ { "text":"g" },
|
79
|
+
{ "text":"h" }]},
|
80
|
+
{ "cells" :
|
81
|
+
[ { "text":"e" },
|
82
|
+
{ "text":"r" }]},
|
83
|
+
{ "cells" :
|
84
|
+
[ { "text":"k" },
|
85
|
+
{ "text":"i" }]},
|
86
|
+
{ "cells" :
|
87
|
+
[ { "text":"n" },
|
88
|
+
{ "text":"" }]}
|
89
|
+
]
|
90
|
+
},
|
91
|
+
{ "name" : "I am done testing these tables" },
|
92
|
+
{ "name" : "I am happy" }
|
93
|
+
]
|
94
|
+
},
|
95
|
+
{ "type" : "Scenario",
|
96
|
+
"name" : "Hammerzeit",
|
97
|
+
"steps" : [
|
98
|
+
{ "name" : "All work and no play",
|
99
|
+
"py_string" : "Makes Homer something something\nAnd something else" },
|
100
|
+
{ "name" : "crazy" }
|
101
|
+
]
|
102
|
+
}
|
103
|
+
]
|
104
|
+
}
|
105
|
+
|
@@ -1,5 +1,5 @@
|
|
1
1
|
# encoding: utf-8
|
2
|
-
require
|
2
|
+
require 'spec_helper'
|
3
3
|
require 'gherkin/formatter/argument'
|
4
4
|
|
5
5
|
module Gherkin
|
@@ -18,8 +18,8 @@ module Gherkin
|
|
18
18
|
|
19
19
|
describe Argument do
|
20
20
|
it "should replace one arg" do
|
21
|
-
argument_class = defined?(JRUBY_VERSION) ? ::Java::GherkinFormatter::Argument : Argument
|
22
|
-
argument_class.format("I have 10 cukes", BracketFormat.new, [Argument.new(7, '10')]).should == "I have [10] cukes"
|
21
|
+
argument_class = defined?(JRUBY_VERSION) ? ::Java::GherkinFormatter::Argument : Gherkin::Formatter::Argument
|
22
|
+
argument_class.format("I have 10 cukes", Gherkin::Formatter::BracketFormat.new, [Gherkin::Formatter::Argument.new(7, '10')]).should == "I have [10] cukes"
|
23
23
|
end
|
24
24
|
|
25
25
|
# TODO: Add this spec: http://github.com/alg/cucumber/commit/33188e9db51f59ced74c4861524d7b2e69454630
|
@@ -1,11 +1,10 @@
|
|
1
|
-
require
|
2
|
-
require 'gherkin/formatter/
|
3
|
-
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'gherkin/formatter/colors'
|
4
3
|
|
5
4
|
module Gherkin
|
6
5
|
module Formatter
|
7
6
|
describe Colors do
|
8
|
-
include Colors
|
7
|
+
include Gherkin::Formatter::Colors
|
9
8
|
|
10
9
|
it "should colour stuff red" do
|
11
10
|
failed("hello").should == "\e[31mhello\e[0m"
|
@@ -1,45 +1,46 @@
|
|
1
1
|
# encoding: utf-8
|
2
|
-
require
|
2
|
+
require 'spec_helper'
|
3
3
|
require 'gherkin/formatter/pretty_formatter'
|
4
4
|
require 'gherkin/formatter/argument'
|
5
|
+
require 'gherkin/parser/formatter_listener'
|
6
|
+
require 'gherkin/parser/row'
|
5
7
|
require 'stringio'
|
6
8
|
|
7
9
|
module Gherkin
|
8
10
|
module Formatter
|
9
11
|
describe PrettyFormatter do
|
10
12
|
def assert_io(s)
|
11
|
-
@io.
|
12
|
-
actual = @io.read
|
13
|
+
actual = @io.string
|
13
14
|
actual.should == s
|
14
15
|
end
|
15
16
|
|
16
17
|
def assert_pretty(input, output=input)
|
17
18
|
[true, false].each do |force_ruby|
|
18
19
|
io = StringIO.new
|
19
|
-
|
20
|
+
pf = Gherkin::Formatter::PrettyFormatter.new(io, true)
|
21
|
+
l = Gherkin::Parser::FormatterListener.new(pf)
|
20
22
|
parser = Gherkin::Parser::Parser.new(l, true, "root")
|
21
23
|
lexer = Gherkin::I18nLexer.new(parser, force_ruby)
|
22
|
-
lexer.scan(input)
|
23
|
-
io.
|
24
|
-
actual = io.read
|
24
|
+
lexer.scan(input, "test.feature", 0)
|
25
|
+
actual = io.string
|
25
26
|
actual.should == output
|
26
27
|
end
|
27
28
|
end
|
28
29
|
|
29
30
|
before do
|
30
31
|
@io = StringIO.new
|
31
|
-
@l = PrettyFormatter.new(@io, true)
|
32
|
+
@l = Gherkin::Formatter::PrettyFormatter.new(@io, true)
|
32
33
|
end
|
33
34
|
|
34
35
|
it "should print comments when scenario is longer" do
|
35
|
-
@l.feature("Feature", "Hello
|
36
|
+
@l.feature([], [], "Feature", "Hello", "World", "features/foo.feature")
|
36
37
|
@l.steps([
|
37
38
|
['Given ', 'some stuff'],
|
38
39
|
['When ', 'foo']
|
39
40
|
])
|
40
|
-
@l.scenario("Scenario", "The scenario",
|
41
|
-
@l.step("Given ", "some stuff", 5, nil, nil, nil, "features/step_definitions/bar.rb:56")
|
42
|
-
@l.step("When ", "foo", 6, nil, nil, nil, "features/step_definitions/bar.rb:96")
|
41
|
+
@l.scenario([], [], "Scenario", "The scenario", "", 4)
|
42
|
+
@l.step([], "Given ", "some stuff", 5, nil, nil, nil, nil, "features/step_definitions/bar.rb:56")
|
43
|
+
@l.step([], "When ", "foo", 6, nil, nil, nil, nil, "features/step_definitions/bar.rb:96")
|
43
44
|
|
44
45
|
assert_io(%{Feature: Hello
|
45
46
|
World
|
@@ -51,12 +52,12 @@ module Gherkin
|
|
51
52
|
end
|
52
53
|
|
53
54
|
it "should print comments when step is longer" do
|
54
|
-
@l.feature("Feature", "Hello
|
55
|
+
@l.feature([], [], "Feature", "Hello", "World", "features/foo.feature")
|
55
56
|
@l.steps([
|
56
57
|
['Given ', 'some stuff that is longer']
|
57
58
|
])
|
58
|
-
@l.scenario("Scenario", "The scenario",
|
59
|
-
@l.step("Given ", "some stuff that is longer", 5, nil, nil, nil, "features/step_definitions/bar.rb:56")
|
59
|
+
@l.scenario([], [], "Scenario", "The scenario", "", 4)
|
60
|
+
@l.step([], "Given ", "some stuff that is longer", 5, nil, nil, nil, nil, "features/step_definitions/bar.rb:56")
|
60
61
|
|
61
62
|
assert_io(%{Feature: Hello
|
62
63
|
World
|
@@ -66,38 +67,9 @@ module Gherkin
|
|
66
67
|
})
|
67
68
|
end
|
68
69
|
|
69
|
-
it "should print ANSI coloured steps" do
|
70
|
-
@l.feature("Feature", "Hello\nWorld", 1)
|
71
|
-
@l.steps([
|
72
|
-
['Given ', 'some stuff that is longer']
|
73
|
-
])
|
74
|
-
@l.scenario("Scenario", "The scenario", 4, "features/foo.feature:4")
|
75
|
-
@l.step("Given ", "some stuff that is longer", 5, nil, nil, nil, "features/step_definitions/bar.rb:56")
|
76
|
-
|
77
|
-
assert_io(%{Feature: Hello
|
78
|
-
World
|
79
|
-
|
80
|
-
Scenario: The scenario # features/foo.feature:4
|
81
|
-
Given some stuff that is longer # features/step_definitions/bar.rb:56
|
82
|
-
})
|
83
|
-
end
|
84
|
-
|
85
|
-
it "should prettify a whole table with padding (typically ANSI)" do
|
86
|
-
@l.row(%w(a bb), 1)
|
87
|
-
@l.row(%w(ccc d), 2)
|
88
|
-
@l.row(%w(ee ffff), 3)
|
89
|
-
@l.flush_table
|
90
|
-
|
91
|
-
assert_io(
|
92
|
-
" | a | bb |\n" +
|
93
|
-
" | ccc | d |\n" +
|
94
|
-
" | ee | ffff |\n"
|
95
|
-
)
|
96
|
-
end
|
97
|
-
|
98
70
|
it "should highlight arguments for regular steps" do
|
99
71
|
passed = defined?(JRUBY_VERSION) ? 'passed' : :passed
|
100
|
-
@l.step("Given ", "I have 999 cukes in my belly", 3, passed, nil, [Gherkin::Formatter::Argument.new(7, '999')], nil)
|
72
|
+
@l.step([], "Given ", "I have 999 cukes in my belly", 3, nil, passed, nil, [Gherkin::Formatter::Argument.new(7, '999')], nil)
|
101
73
|
assert_io(" Given I have 999 cukes in my belly\n")
|
102
74
|
end
|
103
75
|
|
@@ -106,6 +78,7 @@ module Gherkin
|
|
106
78
|
Some preamble
|
107
79
|
|
108
80
|
Scenario: Scenario Description
|
81
|
+
description has multiple lines
|
109
82
|
Given there is a step
|
110
83
|
"""
|
111
84
|
with
|
@@ -151,11 +124,9 @@ Feature: Feature Description
|
|
151
124
|
|
152
125
|
it "should escape backslashes and pipes" do
|
153
126
|
io = StringIO.new
|
154
|
-
l = PrettyFormatter.new(io, true)
|
155
|
-
l.
|
156
|
-
|
157
|
-
io.rewind
|
158
|
-
io.read.should == ' | \\| | \\\\ |' + "\n"
|
127
|
+
l = Gherkin::Formatter::PrettyFormatter.new(io, true)
|
128
|
+
l.__send__(:table, [Gherkin::Parser::Row.new(['|', '\\'], [], nil)])
|
129
|
+
io.string.should == ' | \\| | \\\\ |' + "\n"
|
159
130
|
end
|
160
131
|
end
|
161
132
|
end
|
@@ -1,26 +1,26 @@
|
|
1
1
|
#encoding: utf-8
|
2
|
-
require
|
2
|
+
require 'spec_helper'
|
3
3
|
|
4
4
|
module Gherkin
|
5
5
|
describe I18nLexer do
|
6
6
|
before do
|
7
|
-
@lexer = I18nLexer.new(SexpRecorder.new, false)
|
7
|
+
@lexer = Gherkin::I18nLexer.new(Gherkin::SexpRecorder.new, false)
|
8
8
|
end
|
9
9
|
|
10
10
|
it "should store the i18n language of the last scanned feature" do
|
11
|
-
@lexer.scan("# language: fr\n")
|
11
|
+
@lexer.scan("# language: fr\n", "fr.feature", 0)
|
12
12
|
@lexer.i18n_language.iso_code.should == "fr"
|
13
|
-
@lexer.scan("# language: no\n")
|
13
|
+
@lexer.scan("# language: no\n", "en.feature", 0)
|
14
14
|
@lexer.i18n_language.iso_code.should == "no"
|
15
15
|
end
|
16
16
|
|
17
17
|
it "should use English i18n by default" do
|
18
|
-
@lexer.scan("Feature: foo\n")
|
18
|
+
@lexer.scan("Feature: foo\n", "foo.feature", 0)
|
19
19
|
@lexer.i18n_language.iso_code.should == "en"
|
20
20
|
end
|
21
21
|
|
22
22
|
it "should === its ruby class, even when the impl is Java" do
|
23
|
-
I18nLexer.should === I18nLexer.new(SexpRecorder.new, true)
|
23
|
+
Gherkin::I18nLexer.should === Gherkin::I18nLexer.new(Gherkin::SexpRecorder.new, true)
|
24
24
|
end
|
25
25
|
end
|
26
26
|
end
|