gherkin3 3.1.1 → 3.1.2
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 +4 -4
- data/README.md +10 -0
- data/bin/gherkin-generate-ast +3 -3
- data/bin/gherkin-generate-tokens +3 -3
- data/gherkin-ruby.razor +4 -1
- data/gherkin3.gemspec +1 -1
- data/lib/gherkin3/parser.rb +4 -1
- data/lib/gherkin3/token_matcher.rb +2 -1
- data/lib/gherkin3/token_scanner.rb +16 -9
- data/spec/gherkin3/parser_spec.rb +48 -0
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b01f87ff376d17629e22eea00b781a1927f49fa8
|
4
|
+
data.tar.gz: c30f9c6938ff0b8da9efcab944f7bf6ce98376ae
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1af62f02da64aab37a8a3f9b7692f6ffe5a55638f60c22f1ac6cf885de43a473fdb17c99efbf4eb473b22a0aaa370bb6520d099461ee967ad6d7fba730bdfb44
|
7
|
+
data.tar.gz: 754a0d3728fbe8fb56bb65c91c391a3501aefaa52caf35fd2f0352e536aa52031ef3c59443465d385bc7d3167f6336785c116271f5d795e1fdeaddf4baf6a94c
|
data/README.md
CHANGED
@@ -1,3 +1,13 @@
|
|
1
1
|
[](http://travis-ci.org/cucumber/gherkin-ruby)
|
2
2
|
|
3
3
|
Gherkin parser/compiler for Ruby. Please see [Gherkin3](https://github.com/cucumber/gherkin3) for details.
|
4
|
+
|
5
|
+
## Developers
|
6
|
+
|
7
|
+
Some files are generated from the `gherkin-ruby.razor` file. Please run the
|
8
|
+
following command to generate the ruby files.
|
9
|
+
|
10
|
+
~~~bash
|
11
|
+
cd <project_root>/ruby
|
12
|
+
make
|
13
|
+
~~~
|
data/bin/gherkin-generate-ast
CHANGED
@@ -1,7 +1,6 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__),"../lib"))
|
3
3
|
require 'gherkin3/parser'
|
4
|
-
require 'gherkin3/token_scanner'
|
5
4
|
require 'json'
|
6
5
|
|
7
6
|
parser = Gherkin3::Parser.new
|
@@ -9,9 +8,10 @@ parser.stop_at_first_error = false
|
|
9
8
|
files = ARGV.any? ? ARGV : (STDIN.tty? ? [] : [STDIN])
|
10
9
|
start_time = Time.now
|
11
10
|
files.each do |file|
|
12
|
-
scanner = Gherkin3::TokenScanner.new(file)
|
13
11
|
begin
|
14
|
-
|
12
|
+
File.open(file) do |io|
|
13
|
+
puts JSON.generate(parser.parse(io))
|
14
|
+
end
|
15
15
|
rescue Gherkin3::ParserError => e
|
16
16
|
STDERR.puts e.message
|
17
17
|
exit 1
|
data/bin/gherkin-generate-tokens
CHANGED
@@ -1,12 +1,12 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__),"../lib"))
|
3
3
|
require 'gherkin3/parser'
|
4
|
-
require 'gherkin3/token_scanner'
|
5
4
|
require 'gherkin3/token_formatter_builder'
|
6
5
|
|
7
6
|
parser = Gherkin3::Parser.new(Gherkin3::TokenFormatterBuilder.new)
|
8
7
|
files = ARGV + (STDIN.tty? ? [] : [STDIN])
|
9
8
|
files.each do |file|
|
10
|
-
|
11
|
-
|
9
|
+
File.open(file) do |io|
|
10
|
+
print parser.parse(io)
|
11
|
+
end
|
12
12
|
end
|
data/gherkin-ruby.razor
CHANGED
@@ -28,6 +28,7 @@
|
|
28
28
|
# This file is generated. Do not edit! Edit gherkin-ruby.razor instead.
|
29
29
|
require_relative 'ast_builder'
|
30
30
|
require_relative 'token_matcher'
|
31
|
+
require_relative 'token_scanner'
|
31
32
|
require_relative 'errors'
|
32
33
|
|
33
34
|
module Gherkin3
|
@@ -58,6 +59,8 @@ module Gherkin3
|
|
58
59
|
end
|
59
60
|
|
60
61
|
def parse(token_scanner, token_matcher=TokenMatcher.new)
|
62
|
+
token_scanner = token_scanner.is_a?(TokenScanner) ? token_scanner : TokenScanner.new(token_scanner)
|
63
|
+
|
61
64
|
@@ast_builder.reset
|
62
65
|
token_matcher.reset
|
63
66
|
context = ParserContext.new(
|
@@ -175,7 +178,7 @@ module Gherkin3
|
|
175
178
|
loop do
|
176
179
|
token = read_token(context)
|
177
180
|
token.detach
|
178
|
-
queue.
|
181
|
+
queue.push(token)
|
179
182
|
|
180
183
|
if (false @foreach(var tokenType in lookAheadHint.ExpectedTokens) {<text>|| @MatchToken(tokenType)</text>})
|
181
184
|
match = true
|
data/gherkin3.gemspec
CHANGED
data/lib/gherkin3/parser.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
# This file is generated. Do not edit! Edit gherkin-ruby.razor instead.
|
2
2
|
require_relative 'ast_builder'
|
3
3
|
require_relative 'token_matcher'
|
4
|
+
require_relative 'token_scanner'
|
4
5
|
require_relative 'errors'
|
5
6
|
|
6
7
|
module Gherkin3
|
@@ -64,6 +65,8 @@ module Gherkin3
|
|
64
65
|
end
|
65
66
|
|
66
67
|
def parse(token_scanner, token_matcher=TokenMatcher.new)
|
68
|
+
token_scanner = token_scanner.is_a?(TokenScanner) ? token_scanner : TokenScanner.new(token_scanner)
|
69
|
+
|
67
70
|
@ast_builder.reset
|
68
71
|
token_matcher.reset
|
69
72
|
context = ParserContext.new(
|
@@ -1868,7 +1871,7 @@ module Gherkin3
|
|
1868
1871
|
loop do
|
1869
1872
|
token = read_token(context)
|
1870
1873
|
token.detach
|
1871
|
-
queue.
|
1874
|
+
queue.push(token)
|
1872
1875
|
|
1873
1876
|
if (false || match_ExamplesLine(context, token))
|
1874
1877
|
match = true
|
@@ -6,12 +6,13 @@ module Gherkin3
|
|
6
6
|
LANGUAGE_PATTERN = /^\s*#\s*language\s*:\s*([a-zA-Z\-_]+)\s*$/
|
7
7
|
|
8
8
|
def initialize(dialect_name = 'en')
|
9
|
+
@default_dialect_name = dialect_name
|
9
10
|
change_dialect(dialect_name, nil)
|
10
11
|
reset
|
11
12
|
end
|
12
13
|
|
13
14
|
def reset
|
14
|
-
change_dialect(
|
15
|
+
change_dialect(@default_dialect_name, nil) unless @dialect_name == @default_dialect_name
|
15
16
|
@active_doc_string_separator = nil
|
16
17
|
@indent_to_remove = 0
|
17
18
|
end
|
@@ -1,19 +1,26 @@
|
|
1
|
+
require 'stringio'
|
1
2
|
require_relative 'token'
|
2
3
|
require_relative 'gherkin_line'
|
3
4
|
|
4
5
|
module Gherkin3
|
6
|
+
# The scanner reads a gherkin doc (typically read from a .feature file) and
|
7
|
+
# creates a token for line. The tokens are passed to the parser, which outputs
|
8
|
+
# an AST (Abstract Syntax Tree).
|
9
|
+
#
|
10
|
+
# If the scanner sees a # language header, it will reconfigure itself dynamically
|
11
|
+
# to look for Gherkin keywords for the associated language. The keywords are defined
|
12
|
+
# in gherkin-languages.json.
|
5
13
|
class TokenScanner
|
6
|
-
|
7
|
-
def initialize(source_or_path_or_io)
|
14
|
+
def initialize(source_or_io)
|
8
15
|
@line_number = 0
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
16
|
+
|
17
|
+
case(source_or_io)
|
18
|
+
when String
|
19
|
+
@io = StringIO.new(source_or_io)
|
20
|
+
when StringIO, IO
|
21
|
+
@io = source_or_io
|
15
22
|
else
|
16
|
-
|
23
|
+
fail ArgumentError, "Please a pass String, StringIO or IO. I got a #{source_or_io.class}"
|
17
24
|
end
|
18
25
|
end
|
19
26
|
|
@@ -23,6 +23,37 @@ module Gherkin3
|
|
23
23
|
})
|
24
24
|
end
|
25
25
|
|
26
|
+
it "parses string feature" do
|
27
|
+
parser = Parser.new
|
28
|
+
ast = parser.parse("Feature: test")
|
29
|
+
expect(ast).to eq({
|
30
|
+
type: :Feature,
|
31
|
+
tags: [],
|
32
|
+
location: {line: 1, column: 1},
|
33
|
+
language: "en",
|
34
|
+
keyword: "Feature",
|
35
|
+
name: "test",
|
36
|
+
scenarioDefinitions: [],
|
37
|
+
comments: []
|
38
|
+
})
|
39
|
+
end
|
40
|
+
|
41
|
+
it "parses io feature" do
|
42
|
+
parser = Parser.new
|
43
|
+
ast = parser.parse(StringIO.new("Feature: test"))
|
44
|
+
|
45
|
+
expect(ast).to eq({
|
46
|
+
type: :Feature,
|
47
|
+
tags: [],
|
48
|
+
location: {line: 1, column: 1},
|
49
|
+
language: "en",
|
50
|
+
keyword: "Feature",
|
51
|
+
name: "test",
|
52
|
+
scenarioDefinitions: [],
|
53
|
+
comments: []
|
54
|
+
})
|
55
|
+
end
|
56
|
+
|
26
57
|
it "can parse multiple features" do
|
27
58
|
parser = Parser.new
|
28
59
|
ast1 = parser.parse(TokenScanner.new("Feature: test"))
|
@@ -95,5 +126,22 @@ module Gherkin3
|
|
95
126
|
comments: []
|
96
127
|
})
|
97
128
|
end
|
129
|
+
|
130
|
+
it "can change the default language" do
|
131
|
+
parser = Parser.new
|
132
|
+
matcher = TokenMatcher.new("no")
|
133
|
+
scanner = TokenScanner.new("Egenskap: i18n support")
|
134
|
+
ast = parser.parse(scanner, matcher)
|
135
|
+
expect(ast).to eq({
|
136
|
+
type: :Feature,
|
137
|
+
tags: [],
|
138
|
+
location: {line: 1, column: 1},
|
139
|
+
language: "no",
|
140
|
+
keyword: "Egenskap",
|
141
|
+
name: "i18n support",
|
142
|
+
scenarioDefinitions: [],
|
143
|
+
comments: []
|
144
|
+
})
|
145
|
+
end
|
98
146
|
end
|
99
147
|
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.1.
|
4
|
+
version: 3.1.2
|
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-
|
13
|
+
date: 2015-10-03 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.1.
|
126
|
+
summary: gherkin-3.1.2
|
127
127
|
test_files:
|
128
128
|
- spec/capture_warnings.rb
|
129
129
|
- spec/coverage.rb
|