gherkin 1.0.30-universal-dotnet → 2.0.0-universal-dotnet

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.
Files changed (58) hide show
  1. data/.rspec +1 -0
  2. data/History.txt +19 -0
  3. data/Rakefile +4 -4
  4. data/VERSION.yml +2 -2
  5. data/features/feature_parser.feature +11 -0
  6. data/features/json_formatter.feature +238 -0
  7. data/features/pretty_formatter.feature +9 -0
  8. data/features/step_definitions/gherkin_steps.rb +1 -1
  9. data/features/step_definitions/json_formatter_steps.rb +32 -0
  10. data/features/step_definitions/pretty_formatter_steps.rb +24 -23
  11. data/features/support/env.rb +3 -3
  12. data/lib/gherkin/formatter/json_formatter.rb +82 -0
  13. data/lib/gherkin/formatter/pretty_formatter.rb +73 -78
  14. data/lib/gherkin/i18n.rb +22 -18
  15. data/lib/gherkin/i18n.yml +9 -9
  16. data/lib/gherkin/i18n_lexer.rb +2 -2
  17. data/lib/gherkin/parser/event.rb +6 -6
  18. data/lib/gherkin/parser/filter_listener.rb +5 -1
  19. data/lib/gherkin/parser/formatter_listener.rb +113 -0
  20. data/lib/gherkin/parser/json_parser.rb +102 -0
  21. data/lib/gherkin/parser/parser.rb +10 -2
  22. data/lib/gherkin/parser/row.rb +15 -0
  23. data/lib/gherkin/rubify.rb +2 -0
  24. data/lib/gherkin/tools/files.rb +1 -1
  25. data/lib/gherkin/tools/reformat.rb +1 -2
  26. data/lib/gherkin/tools/stats.rb +1 -1
  27. data/lib/gherkin/tools/stats_listener.rb +5 -5
  28. data/ragel/lexer.c.rl.erb +41 -12
  29. data/ragel/lexer.java.rl.erb +26 -17
  30. data/ragel/lexer.rb.rl.erb +10 -5
  31. data/ragel/lexer_common.rl.erb +6 -6
  32. data/spec/gherkin/c_lexer_spec.rb +2 -2
  33. data/spec/gherkin/fixtures/complex.js +105 -0
  34. data/spec/gherkin/formatter/argument_spec.rb +3 -3
  35. data/spec/gherkin/formatter/colors_spec.rb +3 -4
  36. data/spec/gherkin/formatter/pretty_formatter_spec.rb +21 -50
  37. data/spec/gherkin/i18n_lexer_spec.rb +6 -6
  38. data/spec/gherkin/i18n_spec.rb +16 -9
  39. data/spec/gherkin/java_lexer_spec.rb +1 -2
  40. data/spec/gherkin/output_stream_string_io.rb +24 -0
  41. data/spec/gherkin/parser/filter_listener_spec.rb +16 -9
  42. data/spec/gherkin/parser/formatter_listener_spec.rb +134 -0
  43. data/spec/gherkin/parser/json_parser_spec.rb +129 -0
  44. data/spec/gherkin/parser/parser_spec.rb +9 -9
  45. data/spec/gherkin/parser/tag_expression_spec.rb +8 -8
  46. data/spec/gherkin/rb_lexer_spec.rb +1 -1
  47. data/spec/gherkin/sexp_recorder.rb +21 -1
  48. data/spec/gherkin/shared/{lexer_spec.rb → lexer_group.rb} +172 -102
  49. data/spec/gherkin/shared/{py_string_spec.rb → py_string_group.rb} +21 -17
  50. data/spec/gherkin/shared/{row_spec.rb → row_group.rb} +36 -19
  51. data/spec/gherkin/shared/{tags_spec.rb → tags_group.rb} +13 -9
  52. data/spec/spec_helper.rb +18 -38
  53. data/tasks/bench.rake +3 -3
  54. data/tasks/compile.rake +13 -14
  55. data/tasks/rspec.rake +6 -11
  56. metadata +42 -28
  57. data/features/pretty_printer.feature +0 -14
  58. data/spec/gherkin/csharp_lexer_spec.rb +0 -20
@@ -1,5 +1,5 @@
1
1
  #encoding: utf-8
2
- require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
+ require 'spec_helper'
3
3
 
4
4
  module Gherkin
5
5
  module Lexer
@@ -9,16 +9,17 @@ module Gherkin
9
9
  end
10
10
 
11
11
  def scan_file(lexer, file)
12
- lexer.scan(File.new(File.dirname(__FILE__) + "/fixtures/" + file).read)
12
+ lexer.scan(File.new(File.dirname(__FILE__) + "/fixtures/" + file).read, file, 0)
13
13
  end
14
14
 
15
15
  it "should recognize keywords in the language of the lexer" do
16
16
  lexer = Gherkin::I18nLexer.new(@listener, false)
17
17
  scan_file(lexer, "i18n_no.feature")
18
18
  @listener.to_sexp.should == [
19
+ [:location, "i18n_no.feature", 0],
19
20
  [:comment, "#language:no", 1],
20
- [:feature, "Egenskap", "i18n support", 2],
21
- [:scenario, "Scenario", "Parsing many languages", 4],
21
+ [:feature, "Egenskap", "i18n support", "", 2],
22
+ [:scenario, "Scenario", "Parsing many languages", "", 4],
22
23
  [:step, "Gitt ", "Gherkin supports many languages", 5],
23
24
  [:step, "Når ", "Norwegian keywords are parsed", 6],
24
25
  [:step, "Så ", "they should be recognized", 7],
@@ -30,9 +31,10 @@ module Gherkin
30
31
  lexer = Gherkin::I18nLexer.new(@listener, false)
31
32
  scan_file(lexer, "i18n_zh-CN.feature")
32
33
  @listener.to_sexp.should == [
34
+ [:location, "i18n_zh-CN.feature", 0],
33
35
  [:comment, "#language:zh-CN", 1],
34
- [:feature, "功能", "加法", 2],
35
- [:scenario, "场景", "两个数相加", 4],
36
+ [:feature, "功能", "加法", "", 2],
37
+ [:scenario, "场景", "两个数相加", "", 4],
36
38
  [:step, "假如", "我已经在计算器里输入6", 5],
37
39
  [:step, "而且", "我已经在计算器里输入7", 6],
38
40
  [:step, "当", "我按相加按钮", 7],
@@ -45,15 +47,16 @@ module Gherkin
45
47
  lexer = Gherkin::I18nLexer.new(@listener, false)
46
48
  scan_file(lexer, "i18n_fr.feature")
47
49
  @listener.to_sexp.should == [
50
+ [:location, "i18n_fr.feature", 0],
48
51
  [:comment, "#language:fr", 1],
49
- [:feature, "Fonctionnalité", "Addition", 2],
50
- [:scenario_outline, "Plan du scénario", "Addition de produits dérivés", 3],
52
+ [:feature, "Fonctionnalité", "Addition", "", 2],
53
+ [:scenario_outline, "Plan du scénario", "Addition de produits dérivés", "", 3],
51
54
  [:step, "Soit ", "une calculatrice", 4],
52
55
  [:step, "Etant donné ", "qu'on tape <a>", 5],
53
56
  [:step, "Et ", "qu'on tape <b>", 6],
54
57
  [:step, "Lorsqu'", "on tape additionner", 7],
55
58
  [:step, "Alors ", "le résultat doit être <somme>", 8],
56
- [:examples, "Exemples", "", 10],
59
+ [:examples, "Exemples", "", "", 10],
57
60
  [:row, %w{a b somme}, 11],
58
61
  [:row, %w{2 2 4}, 12],
59
62
  [:row, %w{2 3 5}, 13],
@@ -68,6 +71,10 @@ module Gherkin
68
71
  end
69
72
  end
70
73
 
74
+ it "should report keyword regexp" do
75
+ Gherkin::I18n.keyword_regexp(:step).should =~ /\|Quando \|Quand \|Quan \|Pryd \|Pokud \|/
76
+ end
77
+
71
78
  unless defined?(JRUBY_VERSION)
72
79
  it "should print available languages" do
73
80
  ("\n" + Gherkin::I18n.language_table).should == %{
@@ -1,7 +1,6 @@
1
1
  #encoding: utf-8
2
2
  if defined?(JRUBY_VERSION)
3
- require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
4
- require 'gherkin.jar'
3
+ require 'spec_helper'
5
4
 
6
5
  module Gherkin
7
6
  module JavaLexer
@@ -0,0 +1,24 @@
1
+ if defined?(JRUBY_VERSION)
2
+ class OutputStreamStringIO < Java.java.io.ByteArrayOutputStream
3
+ def write(what)
4
+ if String === what
5
+ super(Java.java.lang.String.new(what).getBytes("UTF-8"))
6
+ else
7
+ super(what)
8
+ end
9
+ end
10
+
11
+ def string
12
+ toString("UTF-8")
13
+ end
14
+ end
15
+
16
+ require 'stringio'
17
+ class StringIO
18
+ class << self
19
+ def new
20
+ OutputStreamStringIO.new
21
+ end
22
+ end
23
+ end
24
+ end
@@ -1,6 +1,7 @@
1
1
  # encoding: utf-8
2
- require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
2
+ require 'spec_helper'
3
3
  require 'gherkin/parser/filter_listener'
4
+ require 'gherkin/parser/formatter_listener'
4
5
  require 'gherkin/formatter/pretty_formatter'
5
6
  require 'stringio'
6
7
 
@@ -11,8 +12,12 @@ module Gherkin
11
12
  class LineListener
12
13
  attr_reader :lines
13
14
 
15
+ def location(uri, offset)
16
+ end
17
+
14
18
  def method_missing(*sexp_args)
15
19
  @lines ||= []
20
+ raise "Hmm" if sexp_args == [:eof, []]
16
21
  @lines << sexp_args[-1]
17
22
  end
18
23
  end
@@ -25,16 +30,17 @@ module Gherkin
25
30
 
26
31
  def verify_output(expected_output, filters)
27
32
  io = StringIO.new
28
- scan(Gherkin::Formatter::PrettyFormatter.new(io, true), filters)
29
- io.rewind
30
- io.read.should == expected_output
33
+ formatter = Gherkin::Formatter::PrettyFormatter.new(io, true)
34
+ listener = Gherkin::Parser::FormatterListener.new(formatter)
35
+ scan(listener, filters)
36
+ io.string.should == expected_output
31
37
  end
32
38
 
33
39
  def scan(listener, filters)
34
- filter_listener = FilterListener.new(listener, filters)
40
+ filter_listener = Gherkin::Parser::FilterListener.new(listener, filters)
35
41
  parser = Gherkin::Parser::Parser.new(filter_listener, true, "root")
36
42
  lexer = Gherkin::I18nLexer.new(parser, true)
37
- lexer.scan(@input)
43
+ lexer.scan(@input, "test.feature", 0)
38
44
  end
39
45
 
40
46
  context "Scenario" do
@@ -195,8 +201,8 @@ Feature: 2
195
201
 
196
202
  context "Scenario Outline" do
197
203
  before do
198
- @input = %{Feature: 1
199
-
204
+ @input = %{Feature: Fname
205
+ Fdesc
200
206
  @tag3
201
207
  Scenario Outline: 4
202
208
  Given <foo> 5
@@ -252,7 +258,8 @@ Feature: 2
252
258
  end
253
259
 
254
260
  it "should replay itself properly" do
255
- filtered = %{Feature: 1
261
+ filtered = %{Feature: Fname
262
+ Fdesc
256
263
 
257
264
  @tag3
258
265
  Scenario Outline: 4
@@ -0,0 +1,134 @@
1
+ require 'spec_helper'
2
+ require 'gherkin/parser/formatter_listener'
3
+ require 'gherkin/parser/parser'
4
+ require 'gherkin/parser/row'
5
+ require 'gherkin/i18n_lexer'
6
+ require 'stringio'
7
+
8
+ module Gherkin
9
+ module Parser
10
+ describe FormatterListener do
11
+ before do
12
+ @formatter = Gherkin::SexpRecorder.new
13
+ @fl = Gherkin::Parser::FormatterListener.new(@formatter)
14
+ @lexer = Gherkin::I18nLexer.new(Gherkin::Parser::Parser.new(@fl))
15
+ end
16
+
17
+ it "should pass tags to #feature method" do
18
+ @fl.tag("@hello", 1)
19
+ @fl.feature("Feature", "awesome", "description", 2)
20
+ @fl.eof
21
+
22
+ @formatter.to_sexp.should == [
23
+ [:feature, [], ["@hello"], "Feature", "awesome", "description", nil],
24
+ [:eof]
25
+ ]
26
+ end
27
+
28
+ it "should pass comments to #feature method" do
29
+ @fl.comment("# comment", 1)
30
+ @fl.feature("Feature", "awesome", "description", 2)
31
+ @fl.eof
32
+
33
+ @formatter.to_sexp.should == [
34
+ [:feature, ["# comment"], [], "Feature", "awesome", "description", nil],
35
+ [:eof]
36
+ ]
37
+ end
38
+
39
+ it "should pass comments and tags to #feature and #scenario methods" do
40
+ @fl.comment("# one", 1)
41
+ @fl.tag("@two", 2)
42
+ @fl.feature("Feature", "three", "feature description", 3)
43
+ @fl.comment("# four", 4)
44
+ @fl.tag("@five", 5)
45
+ @fl.scenario("Scenario", "six", "scenario description", 6)
46
+ @fl.eof
47
+
48
+ @formatter.to_sexp.should == [
49
+ [:feature, ["# one"], ["@two"], "Feature", "three", "feature description", nil],
50
+ [:scenario, ["# four"], ["@five"], "Scenario", "six", "scenario description", 6],
51
+ [:eof]
52
+ ]
53
+ end
54
+
55
+ it "should replay step table" do
56
+ @fl.step("Given ", "foo", 10)
57
+ @fl.row(['yo'], 11)
58
+ @fl.comment("# Hello", 12)
59
+ @fl.comment("# World", 13)
60
+ @fl.row(['bro'], 14)
61
+ @fl.eof
62
+
63
+ @formatter.to_sexp.should == [
64
+ [:step, [], "Given ", "foo", 10, [
65
+ {"line"=>11, "comments"=>[], "cells"=>["yo"]},
66
+ {"line"=>14, "comments"=>["# Hello", "# World"], "cells"=>["bro"]}
67
+ ], nil, nil, nil, nil],
68
+ [:eof]
69
+ ]
70
+ end
71
+
72
+ it "should format an entire feature" do
73
+ @lexer.scan(File.new(File.dirname(__FILE__) + "/../fixtures/complex.feature").read, "complex.feature", 0)
74
+ @formatter.to_sexp.should == [
75
+ [:feature, ["#Comment on line 1", "#Comment on line 2"], ["@tag1", "@tag2"],
76
+ "Feature",
77
+ "Feature Text",
78
+ "In order to test multiline forms\nAs a ragel writer\nI need to check for complex combinations",
79
+ "complex.feature"],
80
+ [:background, ["#Comment on line 9", "#Comment on line 11"], "Background", "", "", 13],
81
+ [:step, [], "Given ", "this is a background step", 14, nil, nil, nil, nil, nil],
82
+ [:step, [], "And ", "this is another one", 15, nil, nil, nil, nil, nil],
83
+ [:scenario, [], ["@tag3", "@tag4"], "Scenario", "Reading a Scenario", "", 18],
84
+ [:step, [], "Given ", "there is a step", 19, nil, nil, nil, nil, nil],
85
+ [:step, [], "But ", "not another step", 20, nil, nil, nil, nil, nil],
86
+ [:scenario, [], ["@tag3"], "Scenario", "Reading a second scenario", "With two lines of text", 23],
87
+ [:step, ["#Comment on line 24"], "Given ", "a third step with a table", 26, [
88
+ {
89
+ "comments" => [],
90
+ "line" => 27,
91
+ "cells" => ["a", "b"]
92
+ },
93
+ {
94
+ "comments" => [],
95
+ "line" => 28,
96
+ "cells" => ["c", "d"]
97
+ },
98
+ {
99
+ "comments" => [],
100
+ "line" => 29,
101
+ "cells" => ["e", "f"]
102
+ } ], nil, nil, nil, nil],
103
+ [:step, [], "And ", "I am still testing things", 30, [
104
+ {
105
+ "comments" => [],
106
+ "line" => 31,
107
+ "cells" => ["g", "h"]
108
+ },
109
+ {
110
+ "comments" => [],
111
+ "line" => 32,
112
+ "cells" => ["e", "r"]
113
+ },
114
+ {
115
+ "comments" => [],
116
+ "line" => 33,
117
+ "cells" => ["k", "i"]
118
+ },
119
+ {
120
+ "comments" => [],
121
+ "line" => 34,
122
+ "cells" => ["n", ""]
123
+ } ], nil, nil, nil, nil],
124
+ [:step, [], "And ", "I am done testing these tables", 35, nil, nil, nil, nil, nil],
125
+ [:step, ["#Comment on line 29"], "Then ", "I am happy", 37, nil, nil, nil, nil, nil],
126
+ [:scenario, [], [], "Scenario", "Hammerzeit", "", 39],
127
+ [:step, [], "Given ", "All work and no play", 40, "Makes Homer something something\nAnd something else", nil, nil, nil, nil],
128
+ [:step, [], "Then ", "crazy", 45, nil, nil, nil, nil, nil],
129
+ [:eof]
130
+ ]
131
+ end
132
+ end
133
+ end
134
+ end
@@ -0,0 +1,129 @@
1
+ #encoding: utf-8
2
+ require 'spec_helper'
3
+ require 'gherkin/parser/json_parser'
4
+
5
+ module Gherkin
6
+ module Parser
7
+ describe JSONParser do
8
+
9
+ before do
10
+ @listener = Gherkin::SexpRecorder.new
11
+ @parser = Gherkin::Parser::JSONParser.new(@listener)
12
+ end
13
+
14
+ describe "An empty feature" do
15
+ it "should parse empty features" do
16
+ @parser.parse('{}')
17
+ @listener.to_sexp.should == [
18
+ [:eof]
19
+ ]
20
+ end
21
+ end
22
+
23
+ describe "A barely empty feature" do
24
+ it "should parse a feature with no elements" do
25
+ @parser.parse('{ "name" : "One", "line" : 3 }')
26
+ @listener.to_sexp.should == [
27
+ [:feature, "Feature", "One", 3],
28
+ [:eof]
29
+ ]
30
+ end
31
+ end
32
+
33
+ describe "Determining language" do
34
+ it "should pick up the i18n language from attributes" do
35
+ @parser.parse('{ "language" : "fr" }')
36
+ @parser.i18n_language.iso_code.should == "fr"
37
+ end
38
+
39
+ it "should default to English if no language is found" do
40
+ @parser.parse('{ "name": "A Featuer" }')
41
+ @parser.i18n_language.iso_code.should == "en"
42
+ end
43
+ end
44
+
45
+ describe "Missing line numbers" do
46
+ it "should indicate a line number of 0 if a line attribute doesn't exist" do
47
+ @parser.parse('{ "name" : "My Sweet Featur" }')
48
+ @listener.to_sexp.should == [
49
+ [:feature, "Feature", "My Sweet Featur", 0],
50
+ [:eof]
51
+ ]
52
+ end
53
+
54
+ it "should use line number from file_colon_line if exists" do
55
+ @parser.parse('{ "name" : "My Sweet Featur",
56
+ "file_colon_line": "my_nice_feature.js:12" }')
57
+ @listener.to_sexp.should == [
58
+ [:feature, "Feature", "My Sweet Featur", 12],
59
+ [:eof]
60
+ ]
61
+ end
62
+ end
63
+
64
+ describe "Keywords" do
65
+ it "should use the keyword from the source when provided" do
66
+ @parser.parse('{ "name" : "My Sweet Featur", "language": "fr", "keyword": "Feature" }')
67
+ @listener.to_sexp.should == [
68
+ [:feature, "Feature", "My Sweet Featur", 0],
69
+ [:eof]
70
+ ]
71
+ end
72
+
73
+ it "should use a default keyword from the i18n_language if no keyword is provided" do
74
+ @parser.parse('{ "name" : "My Sweet Featur", "language": "fr" }')
75
+ @listener.to_sexp.should == [
76
+ [:feature, "Fonctionnalité", "My Sweet Featur", 0],
77
+ [:eof]
78
+ ]
79
+
80
+ end
81
+ end
82
+
83
+ describe "A complex feature with tags, comments, multiple scenarios, and multiple steps and tables" do
84
+ it "should find things in the right order" do
85
+ parse_file("complex.js")
86
+ @listener.to_sexp.should == [
87
+ [:tag, "@tag1", 0],
88
+ [:tag, "@tag2", 0],
89
+ [:feature, "Feature", "Feature Text\nIn order to test multiline forms", 0],
90
+ [:background, "Background", "", 0],
91
+ [:step, "Given ", "this is a background step", 0],
92
+ [:step, "When ", "this is another one", 412],
93
+ [:tag, "@foo", 0],
94
+ [:scenario_outline, "Scenario Outline", "An Scenario Outline", 0],
95
+ [:step, "Given ", "A step with a table", 0],
96
+ [:row, %w{a row for a step}, 0],
97
+ [:tag, "@exampletag", 0],
98
+ [:examples, "Examples", "Sweet Example", 0],
99
+ [:row, %w{Fill In}, 0],
100
+ [:row, %w{The Blanks}, 0],
101
+ [:tag, "@tag3", 0],
102
+ [:tag, "@tag4", 0],
103
+ [:scenario, "Scenario", "Reading a Scenario", 0],
104
+ [:step, "Given ", "there is a step", 0],
105
+ [:step, "Given ", "not another step", 0],
106
+ [:tag, "@tag3", 0],
107
+ [:scenario, "Scenario", "Reading a second scenario\nWith two lines of text", 0],
108
+ [:step, "Given ", "a third step with a table", 0],
109
+ [:row, %w{a b}, 0],
110
+ [:row, %w{c d}, 0],
111
+ [:row, %w{e f}, 0],
112
+ [:step, "Given ", "I am still testing things", 0],
113
+ [:row, %w{g h}, 0],
114
+ [:row, %w{e r}, 0],
115
+ [:row, %w{k i}, 0],
116
+ [:row, ['n', ''], 0],
117
+ [:step, "Given ", "I am done testing these tables", 0],
118
+ [:step, "Given ", "I am happy", 0],
119
+ [:scenario, "Scenario", "Hammerzeit", 0],
120
+ [:step, "Given ", "All work and no play", 0],
121
+ [:py_string, "Makes Homer something something\nAnd something else", 0 ],
122
+ [:step, "Given ", "crazy", 0],
123
+ [:eof]
124
+ ]
125
+ end
126
+ end
127
+ end
128
+ end
129
+ end
@@ -1,4 +1,4 @@
1
- require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
1
+ require 'spec_helper'
2
2
  require 'gherkin/parser/parser'
3
3
 
4
4
  module Gherkin
@@ -6,7 +6,7 @@ module Gherkin
6
6
  describe Parser do
7
7
  before do
8
8
  @listener = mock('listener')
9
- @parser = Parser.new(@listener, true)
9
+ @parser = Gherkin::Parser::Parser.new(@listener, true)
10
10
  end
11
11
 
12
12
  it "should delegate events to the listener" do
@@ -16,7 +16,7 @@ module Gherkin
16
16
 
17
17
  it "should raise helpful error messages by default" do
18
18
  lambda {
19
- @parser.scenario("Scenario", "My pet scenario", 12)
19
+ @parser.scenario("Scenario", "My pet scenario", "", 12)
20
20
  }.should raise_error(/Parse error on line 12\. Found scenario when expecting one of: comment, feature, tag\. \(Current state: root\)\.$/)
21
21
  end
22
22
 
@@ -27,22 +27,22 @@ module Gherkin
27
27
 
28
28
  it "should delegate an error message when raise on error is false" do
29
29
  @listener.should_receive(:syntax_error).with(sym(:root), sym(:background), a([:comment, :feature, :tag]), 1)
30
- @parser = Parser.new(@listener, false)
31
- @parser.background("Background", "Content", 1)
30
+ @parser = Gherkin::Parser::Parser.new(@listener, false)
31
+ @parser.background("Background", "Content", "", 1)
32
32
  end
33
33
 
34
34
  [true, false].each do |native|
35
35
  it "should be reusable for several feature files (native lexer: #{native})" do
36
- listener = mock('listener', :null_object => true)
37
- parser = Parser.new(listener, true)
36
+ listener = mock('listener').as_null_object
37
+ parser = Gherkin::Parser::Parser.new(listener, true)
38
38
  lexer = Gherkin::I18nLexer.new(parser, native)
39
39
  feature = <<-EOF
40
40
  Feature: foo
41
41
  Scenario: bar
42
42
  Given zap
43
43
  EOF
44
- lexer.scan(feature)
45
- lexer.scan(feature)
44
+ lexer.scan(feature, "test.feature", 0)
45
+ lexer.scan(feature, "test.feature", 0)
46
46
  end
47
47
  end
48
48
  end