gherkin3 3.0.0 → 3.1.0

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: a35039bc80ab11815655fae5a6aa3e06e91f8756
4
- data.tar.gz: 49f19d25217b0d84e71283d0f773694af94a3ddc
3
+ metadata.gz: 4b5220c8f72cd396ab0a8ec44e0c4ec82e7e0cdf
4
+ data.tar.gz: c0229d0cf820b457b5e7a09aa309c86db07ecdfa
5
5
  SHA512:
6
- metadata.gz: dcd7b24e67be72f4d4535fe52b6d9d9f38e03747e70c87c525284d5119c85234ecc833876551aadae5326e93c38091b0e189c84a977eb0ab107d44ccd383b7c6
7
- data.tar.gz: 216ed4b205d4f36952413d1af516d56fc021a813f030db9308c858d64cda3f55f101f43f6d1eec28621ed7d6e76c81ab37fa633debd8577fc14d180968c53895
6
+ metadata.gz: 46ce5c3083f84024343c7648c32504e2470a46830839700ba9ca2fbbb1805c2f527dc6ce18786d63adf660e2a84867f895c3b15e02be0712a7a4fa74e2d48621
7
+ data.tar.gz: e3b7e5f8ba2717fe48ab65cb2fd74e581c27dc94b71c4a6bd58090878a2aca1da42eedae0e1aed69cc0873ede6a361ba57ac5bd745f5d3071804b0f5bec8ab69
data/.travis.yml CHANGED
@@ -1 +1,2 @@
1
1
  language: ruby
2
+ sudo: false
@@ -2,8 +2,6 @@
2
2
  $LOAD_PATH.unshift(File.join(File.dirname(__FILE__),"../lib"))
3
3
  require 'gherkin3/parser'
4
4
  require 'gherkin3/token_scanner'
5
- require 'gherkin3/token_matcher'
6
- require 'gherkin3/ast_builder'
7
5
  require 'json'
8
6
 
9
7
  parser = Gherkin3::Parser.new
@@ -12,9 +10,8 @@ files = ARGV.any? ? ARGV : (STDIN.tty? ? [] : [STDIN])
12
10
  start_time = Time.now
13
11
  files.each do |file|
14
12
  scanner = Gherkin3::TokenScanner.new(file)
15
- builder = Gherkin3::AstBuilder.new
16
13
  begin
17
- puts JSON.generate(parser.parse(scanner, builder, Gherkin3::TokenMatcher.new))
14
+ puts JSON.generate(parser.parse(scanner))
18
15
  rescue Gherkin3::ParserError => e
19
16
  STDERR.puts e.message
20
17
  exit 1
@@ -3,12 +3,10 @@ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__),"../lib"))
3
3
  require 'gherkin3/parser'
4
4
  require 'gherkin3/token_scanner'
5
5
  require 'gherkin3/token_formatter_builder'
6
- require 'gherkin3/token_matcher'
7
6
 
8
- parser = Gherkin3::Parser.new
7
+ parser = Gherkin3::Parser.new(Gherkin3::TokenFormatterBuilder.new)
9
8
  files = ARGV + (STDIN.tty? ? [] : [STDIN])
10
9
  files.each do |file|
11
10
  scanner = Gherkin3::TokenScanner.new(file)
12
- builder = Gherkin3::TokenFormatterBuilder.new
13
- print parser.parse(scanner, builder, Gherkin3::TokenMatcher.new)
11
+ print parser.parse(scanner)
14
12
  end
data/gherkin-ruby.razor CHANGED
@@ -40,11 +40,10 @@ module Gherkin3
40
40
  ]
41
41
 
42
42
  class ParserContext
43
- attr_reader :token_scanner, :ast_builder, :token_matcher, :token_queue, :errors
43
+ attr_reader :token_scanner, :token_matcher, :token_queue, :errors
44
44
 
45
- def initialize(token_scanner, ast_builder, token_matcher, token_queue, errors)
45
+ def initialize(token_scanner, token_matcher, token_queue, errors)
46
46
  @@token_scanner = token_scanner
47
- @@ast_builder = ast_builder
48
47
  @@token_matcher = token_matcher
49
48
  @@token_queue = token_queue
50
49
  @@errors = errors
@@ -54,10 +53,15 @@ module Gherkin3
54
53
  class @Model.ParserClassName
55
54
  attr_accessor :stop_at_first_error
56
55
 
57
- def parse(token_scanner, ast_builder=AstBuilder.new, token_matcher=TokenMatcher.new)
56
+ def initialize(ast_builder=AstBuilder.new)
57
+ @@ast_builder = ast_builder
58
+ end
59
+
60
+ def parse(token_scanner, token_matcher=TokenMatcher.new)
61
+ @@ast_builder.reset
62
+ token_matcher.reset
58
63
  context = ParserContext.new(
59
64
  token_scanner,
60
- ast_builder,
61
65
  token_matcher,
62
66
  [],
63
67
  []
@@ -75,12 +79,12 @@ module Gherkin3
75
79
 
76
80
  raise CompositeParserException.new(context.errors) if context.errors.any?
77
81
 
78
- get_result(context)
82
+ get_result()
79
83
  end
80
84
 
81
85
  def build(context, token)
82
86
  handle_ast_error(context) do
83
- context.ast_builder.build(token)
87
+ @@ast_builder.build(token)
84
88
  end
85
89
  end
86
90
 
@@ -91,18 +95,18 @@ module Gherkin3
91
95
 
92
96
  def start_rule(context, rule_type)
93
97
  handle_ast_error(context) do
94
- context.ast_builder.start_rule(rule_type)
98
+ @@ast_builder.start_rule(rule_type)
95
99
  end
96
100
  end
97
101
 
98
102
  def end_rule(context, rule_type)
99
103
  handle_ast_error(context) do
100
- context.ast_builder.end_rule(rule_type)
104
+ @@ast_builder.end_rule(rule_type)
101
105
  end
102
106
  end
103
107
 
104
- def get_result(context)
105
- context.ast_builder.get_result
108
+ def get_result()
109
+ @@ast_builder.get_result
106
110
  end
107
111
 
108
112
  def read_token(context)
data/gherkin3.gemspec CHANGED
@@ -1,7 +1,7 @@
1
1
  # encoding: utf-8
2
2
  Gem::Specification.new do |s|
3
3
  s.name = 'gherkin3'
4
- s.version = '3.0.0'
4
+ s.version = '3.1.0'
5
5
  s.authors = ["Gáspár Nagy", "Aslak Hellesøy", "Steve Tooke"]
6
6
  s.description = 'Gherkin parser'
7
7
  s.summary = "gherkin-#{s.version}"
@@ -3,6 +3,10 @@ require_relative 'ast_node'
3
3
  module Gherkin3
4
4
  class AstBuilder
5
5
  def initialize
6
+ reset
7
+ end
8
+
9
+ def reset
6
10
  @stack = [AstNode.new(:None)]
7
11
  @comments = []
8
12
  end
@@ -46,11 +46,10 @@ module Gherkin3
46
46
  ]
47
47
 
48
48
  class ParserContext
49
- attr_reader :token_scanner, :ast_builder, :token_matcher, :token_queue, :errors
49
+ attr_reader :token_scanner, :token_matcher, :token_queue, :errors
50
50
 
51
- def initialize(token_scanner, ast_builder, token_matcher, token_queue, errors)
51
+ def initialize(token_scanner, token_matcher, token_queue, errors)
52
52
  @token_scanner = token_scanner
53
- @ast_builder = ast_builder
54
53
  @token_matcher = token_matcher
55
54
  @token_queue = token_queue
56
55
  @errors = errors
@@ -60,10 +59,15 @@ module Gherkin3
60
59
  class Parser
61
60
  attr_accessor :stop_at_first_error
62
61
 
63
- def parse(token_scanner, ast_builder=AstBuilder.new, token_matcher=TokenMatcher.new)
62
+ def initialize(ast_builder=AstBuilder.new)
63
+ @ast_builder = ast_builder
64
+ end
65
+
66
+ def parse(token_scanner, token_matcher=TokenMatcher.new)
67
+ @ast_builder.reset
68
+ token_matcher.reset
64
69
  context = ParserContext.new(
65
70
  token_scanner,
66
- ast_builder,
67
71
  token_matcher,
68
72
  [],
69
73
  []
@@ -81,12 +85,12 @@ module Gherkin3
81
85
 
82
86
  raise CompositeParserException.new(context.errors) if context.errors.any?
83
87
 
84
- get_result(context)
88
+ get_result()
85
89
  end
86
90
 
87
91
  def build(context, token)
88
92
  handle_ast_error(context) do
89
- context.ast_builder.build(token)
93
+ @ast_builder.build(token)
90
94
  end
91
95
  end
92
96
 
@@ -97,18 +101,18 @@ module Gherkin3
97
101
 
98
102
  def start_rule(context, rule_type)
99
103
  handle_ast_error(context) do
100
- context.ast_builder.start_rule(rule_type)
104
+ @ast_builder.start_rule(rule_type)
101
105
  end
102
106
  end
103
107
 
104
108
  def end_rule(context, rule_type)
105
109
  handle_ast_error(context) do
106
- context.ast_builder.end_rule(rule_type)
110
+ @ast_builder.end_rule(rule_type)
107
111
  end
108
112
  end
109
113
 
110
- def get_result(context)
111
- context.ast_builder.get_result
114
+ def get_result()
115
+ @ast_builder.get_result
112
116
  end
113
117
 
114
118
  def read_token(context)
@@ -1,6 +1,10 @@
1
1
  module Gherkin3
2
2
  class TokenFormatterBuilder
3
3
  def initialize
4
+ reset
5
+ end
6
+
7
+ def reset
4
8
  @tokens_text = ""
5
9
  end
6
10
 
@@ -7,6 +7,11 @@ module Gherkin3
7
7
 
8
8
  def initialize(dialect_name = 'en')
9
9
  change_dialect(dialect_name, nil)
10
+ reset
11
+ end
12
+
13
+ def reset
14
+ change_dialect('en', nil) unless @dialect_name == 'en'
10
15
  @active_doc_string_separator = nil
11
16
  @indent_to_remove = 0
12
17
  end
@@ -2,6 +2,7 @@ require 'gherkin3/parser'
2
2
  require 'gherkin3/token_scanner'
3
3
  require 'gherkin3/token_matcher'
4
4
  require 'gherkin3/ast_builder'
5
+ require 'gherkin3/errors'
5
6
  require 'rspec'
6
7
 
7
8
  module Gherkin3
@@ -9,8 +10,7 @@ module Gherkin3
9
10
  it "parses a simple feature" do
10
11
  parser = Parser.new
11
12
  scanner = TokenScanner.new("Feature: test")
12
- builder = AstBuilder.new
13
- ast = parser.parse(scanner, builder, TokenMatcher.new)
13
+ ast = parser.parse(scanner)
14
14
  expect(ast).to eq({
15
15
  type: :Feature,
16
16
  tags: [],
@@ -22,5 +22,78 @@ module Gherkin3
22
22
  comments: []
23
23
  })
24
24
  end
25
+
26
+ it "can parse multiple features" do
27
+ parser = Parser.new
28
+ ast1 = parser.parse(TokenScanner.new("Feature: test"))
29
+ ast2 = parser.parse(TokenScanner.new("Feature: test2"))
30
+
31
+ expect(ast1).to eq({
32
+ type: :Feature,
33
+ tags: [],
34
+ location: {line: 1, column: 1},
35
+ language: "en",
36
+ keyword: "Feature",
37
+ name: "test",
38
+ scenarioDefinitions: [],
39
+ comments: []
40
+ })
41
+ expect(ast2).to eq({
42
+ type: :Feature,
43
+ tags: [],
44
+ location: {line: 1, column: 1},
45
+ language: "en",
46
+ keyword: "Feature",
47
+ name: "test2",
48
+ scenarioDefinitions: [],
49
+ comments: []
50
+ })
51
+ end
52
+
53
+ it "can parse feature after parse error" do
54
+ parser = Parser.new
55
+ matcher = TokenMatcher.new
56
+
57
+ expect { parser.parse(TokenScanner.new("# a comment\n" +
58
+ "Feature: Foo\n" +
59
+ " Scenario: Bar\n" +
60
+ " Given x\n" +
61
+ " ```\n" +
62
+ " unclosed docstring\n"),
63
+ matcher)
64
+ }.to raise_error(ParserError)
65
+ ast = parser.parse(TokenScanner.new("Feature: Foo\n" +
66
+ " Scenario: Bar\n" +
67
+ " Given x\n" +
68
+ ' """' + "\n" +
69
+ " closed docstring\n" +
70
+ ' """' + "\n"),
71
+ matcher)
72
+
73
+ expect(ast).to eq({
74
+ type: :Feature,
75
+ tags: [],
76
+ location: {line: 1, column: 1},
77
+ language: "en",
78
+ keyword: "Feature",
79
+ name: "Foo",
80
+ scenarioDefinitions: [{
81
+ :type=>:Scenario,
82
+ :tags=>[],
83
+ :location=>{:line=>2, :column=>3},
84
+ :keyword=>"Scenario",
85
+ :name=>"Bar",
86
+ :steps=>[{
87
+ :type=>:Step,
88
+ :location=>{:line=>3, :column=>5},
89
+ :keyword=>"Given ",
90
+ :text=>"x",
91
+ :argument=>{:type=>:DocString,
92
+ :location=>{:line=>4, :column=>7},
93
+ :contentType=>"",
94
+ :content=>"closed docstring"}}]}],
95
+ comments: []
96
+ })
97
+ end
25
98
  end
26
99
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gherkin3
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.0.0
4
+ version: 3.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Gáspár Nagy
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2015-07-16 00:00:00.000000000 Z
13
+ date: 2015-08-16 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: bundler
@@ -123,7 +123,7 @@ rubyforge_project:
123
123
  rubygems_version: 2.4.5
124
124
  signing_key:
125
125
  specification_version: 4
126
- summary: gherkin-3.0.0
126
+ summary: gherkin-3.1.0
127
127
  test_files:
128
128
  - spec/capture_warnings.rb
129
129
  - spec/coverage.rb