gherkin3 3.0.0 → 3.1.0

Sign up to get free protection for your applications and to get access to all the features.
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