gherkin 4.0.0 → 4.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rsync +5 -0
- data/.travis.yml +16 -1
- data/Makefile +31 -36
- data/berp/CommandLine.dll +0 -0
- data/berp/RazorEngine.dll +0 -0
- data/berp/RazorEngine.pdb +0 -0
- data/berp/System.Web.Razor.dll +0 -0
- data/berp/berp.exe +0 -0
- data/berp/berp.pdb +0 -0
- data/bin/gherkin +34 -0
- data/bin/gherkin-generate-tokens +1 -1
- data/gherkin-languages.json +3191 -0
- data/gherkin.berp +46 -0
- data/gherkin.gemspec +6 -6
- data/lib/gherkin/gherkin-languages.json +225 -3
- data/lib/gherkin/pickles/compiler.rb +31 -31
- data/lib/gherkin/stream/gherkin_events.rb +69 -0
- data/lib/gherkin/stream/source_events.rb +26 -0
- data/lib/gherkin/token_scanner.rb +1 -1
- data/testdata/bad/inconsistent_cell_count.feature +14 -0
- data/testdata/bad/inconsistent_cell_count.feature.errors.ndjson +2 -0
- data/testdata/bad/invalid_language.feature +6 -0
- data/testdata/bad/invalid_language.feature.errors.ndjson +1 -0
- data/testdata/bad/multiple_parser_errors.feature +9 -0
- data/testdata/bad/multiple_parser_errors.feature.errors.ndjson +2 -0
- data/testdata/bad/not_gherkin.feature +2 -0
- data/testdata/bad/not_gherkin.feature.errors.ndjson +1 -0
- data/testdata/bad/single_parser_error.feature +7 -0
- data/testdata/bad/single_parser_error.feature.errors.ndjson +1 -0
- data/testdata/bad/unexpected_eof.feature +6 -0
- data/testdata/bad/unexpected_eof.feature.errors.ndjson +1 -0
- data/testdata/good/background.feature +8 -0
- data/testdata/good/background.feature.ast.ndjson +1 -0
- data/testdata/good/background.feature.pickles.ndjson +1 -0
- data/testdata/good/background.feature.source.ndjson +1 -0
- data/testdata/good/background.feature.tokens +9 -0
- data/testdata/good/datatables.feature +18 -0
- data/testdata/good/datatables.feature.ast.ndjson +1 -0
- data/testdata/good/datatables.feature.pickles.ndjson +1 -0
- data/testdata/good/datatables.feature.source.ndjson +1 -0
- data/testdata/good/datatables.feature.tokens +19 -0
- data/testdata/good/descriptions.feature +52 -0
- data/testdata/good/descriptions.feature.ast.ndjson +1 -0
- data/testdata/good/descriptions.feature.pickles.ndjson +8 -0
- data/testdata/good/descriptions.feature.source.ndjson +1 -0
- data/testdata/good/descriptions.feature.tokens +53 -0
- data/testdata/good/docstrings.feature +43 -0
- data/testdata/good/docstrings.feature.ast.ndjson +1 -0
- data/testdata/good/docstrings.feature.pickles.ndjson +1 -0
- data/testdata/good/docstrings.feature.source.ndjson +1 -0
- data/testdata/good/docstrings.feature.tokens +44 -0
- data/testdata/good/empty.feature +0 -0
- data/testdata/good/empty.feature.ast.ndjson +1 -0
- data/testdata/good/empty.feature.pickles.ndjson +0 -0
- data/testdata/good/empty.feature.source.ndjson +1 -0
- data/testdata/good/empty.feature.tokens +1 -0
- data/testdata/good/escaped_pipes.feature +11 -0
- data/testdata/good/escaped_pipes.feature.ast.ndjson +1 -0
- data/testdata/good/escaped_pipes.feature.pickles.ndjson +1 -0
- data/testdata/good/escaped_pipes.feature.source.ndjson +1 -0
- data/testdata/good/escaped_pipes.feature.tokens +14 -0
- data/testdata/good/example_token_multiple.feature +8 -0
- data/testdata/good/example_token_multiple.feature.ast.ndjson +1 -0
- data/testdata/good/example_token_multiple.feature.pickles.ndjson +1 -0
- data/testdata/good/example_token_multiple.feature.source.ndjson +1 -0
- data/testdata/good/example_token_multiple.feature.tokens +9 -0
- data/testdata/good/example_tokens_everywhere.feature +14 -0
- data/testdata/good/example_tokens_everywhere.feature.ast.ndjson +1 -0
- data/testdata/good/example_tokens_everywhere.feature.pickles.ndjson +2 -0
- data/testdata/good/example_tokens_everywhere.feature.source.ndjson +1 -0
- data/testdata/good/example_tokens_everywhere.feature.tokens +15 -0
- data/testdata/good/i18n_emoji.feature +5 -0
- data/testdata/good/i18n_emoji.feature.ast.ndjson +1 -0
- data/testdata/good/i18n_emoji.feature.pickles.ndjson +1 -0
- data/testdata/good/i18n_emoji.feature.source.ndjson +1 -0
- data/testdata/good/i18n_emoji.feature.tokens +6 -0
- data/testdata/good/i18n_fr.feature +63 -0
- data/testdata/good/i18n_fr.feature.ast.ndjson +1 -0
- data/testdata/good/i18n_fr.feature.pickles.ndjson +11 -0
- data/testdata/good/i18n_fr.feature.source.ndjson +1 -0
- data/testdata/good/i18n_fr.feature.tokens +64 -0
- data/testdata/good/i18n_no.feature +7 -0
- data/testdata/good/i18n_no.feature.ast.ndjson +1 -0
- data/testdata/good/i18n_no.feature.pickles.ndjson +1 -0
- data/testdata/good/i18n_no.feature.source.ndjson +1 -0
- data/testdata/good/i18n_no.feature.tokens +8 -0
- data/testdata/good/incomplete_background_1.feature +6 -0
- data/testdata/good/incomplete_background_1.feature.ast.ndjson +1 -0
- data/testdata/good/incomplete_background_1.feature.pickles.ndjson +1 -0
- data/testdata/good/incomplete_background_1.feature.source.ndjson +1 -0
- data/testdata/good/incomplete_background_1.feature.tokens +7 -0
- data/testdata/good/incomplete_background_2.feature +7 -0
- data/testdata/good/incomplete_background_2.feature.ast.ndjson +1 -0
- data/testdata/good/incomplete_background_2.feature.pickles.ndjson +1 -0
- data/testdata/good/incomplete_background_2.feature.source.ndjson +1 -0
- data/testdata/good/incomplete_background_2.feature.tokens +8 -0
- data/testdata/good/incomplete_feature_1.feature +2 -0
- data/testdata/good/incomplete_feature_1.feature.ast.ndjson +1 -0
- data/testdata/good/incomplete_feature_1.feature.pickles.ndjson +0 -0
- data/testdata/good/incomplete_feature_1.feature.source.ndjson +1 -0
- data/testdata/good/incomplete_feature_1.feature.tokens +3 -0
- data/testdata/good/incomplete_feature_2.feature +1 -0
- data/testdata/good/incomplete_feature_2.feature.ast.ndjson +1 -0
- data/testdata/good/incomplete_feature_2.feature.pickles.ndjson +0 -0
- data/testdata/good/incomplete_feature_2.feature.source.ndjson +1 -0
- data/testdata/good/incomplete_feature_2.feature.tokens +2 -0
- data/testdata/good/incomplete_feature_3.feature +1 -0
- data/testdata/good/incomplete_feature_3.feature.ast.ndjson +1 -0
- data/testdata/good/incomplete_feature_3.feature.pickles.ndjson +0 -0
- data/testdata/good/incomplete_feature_3.feature.source.ndjson +1 -0
- data/testdata/good/incomplete_feature_3.feature.tokens +2 -0
- data/testdata/good/incomplete_scenario.feature +6 -0
- data/testdata/good/incomplete_scenario.feature.ast.ndjson +1 -0
- data/testdata/good/incomplete_scenario.feature.pickles.ndjson +0 -0
- data/testdata/good/incomplete_scenario.feature.source.ndjson +1 -0
- data/testdata/good/incomplete_scenario.feature.tokens +7 -0
- data/testdata/good/incomplete_scenario_outline.feature +24 -0
- data/testdata/good/incomplete_scenario_outline.feature.ast.ndjson +1 -0
- data/testdata/good/incomplete_scenario_outline.feature.pickles.ndjson +0 -0
- data/testdata/good/incomplete_scenario_outline.feature.source.ndjson +1 -0
- data/testdata/good/incomplete_scenario_outline.feature.tokens +25 -0
- data/testdata/good/language.feature +6 -0
- data/testdata/good/language.feature.ast.ndjson +1 -0
- data/testdata/good/language.feature.pickles.ndjson +1 -0
- data/testdata/good/language.feature.source.ndjson +1 -0
- data/testdata/good/language.feature.tokens +7 -0
- data/testdata/good/minimal.feature +4 -0
- data/testdata/good/minimal.feature.ast.ndjson +1 -0
- data/testdata/good/minimal.feature.pickles.ndjson +1 -0
- data/testdata/good/minimal.feature.source.ndjson +1 -0
- data/testdata/good/minimal.feature.tokens +5 -0
- data/testdata/good/readme_example.feature +18 -0
- data/testdata/good/readme_example.feature.ast.ndjson +1 -0
- data/testdata/good/readme_example.feature.pickles.ndjson +2 -0
- data/testdata/good/readme_example.feature.source.ndjson +1 -0
- data/testdata/good/readme_example.feature.tokens +19 -0
- data/testdata/good/scenario_outline.feature +8 -0
- data/testdata/good/scenario_outline.feature.ast.ndjson +1 -0
- data/testdata/good/scenario_outline.feature.pickles.ndjson +1 -0
- data/testdata/good/scenario_outline.feature.source.ndjson +1 -0
- data/testdata/good/scenario_outline.feature.tokens +9 -0
- data/testdata/good/scenario_outline_no_newline.feature +8 -0
- data/testdata/good/scenario_outline_no_newline.feature.ast.ndjson +1 -0
- data/testdata/good/scenario_outline_no_newline.feature.pickles.ndjson +1 -0
- data/testdata/good/scenario_outline_no_newline.feature.source.ndjson +1 -0
- data/testdata/good/scenario_outline_no_newline.feature.tokens +9 -0
- data/testdata/good/scenario_outlines_with_tags.feature +18 -0
- data/testdata/good/scenario_outlines_with_tags.feature.ast.ndjson +1 -0
- data/testdata/good/scenario_outlines_with_tags.feature.pickles.ndjson +2 -0
- data/testdata/good/scenario_outlines_with_tags.feature.source.ndjson +1 -0
- data/testdata/good/scenario_outlines_with_tags.feature.tokens +19 -0
- data/testdata/good/several_examples.feature +17 -0
- data/testdata/good/several_examples.feature.ast.ndjson +1 -0
- data/testdata/good/several_examples.feature.pickles.ndjson +2 -0
- data/testdata/good/several_examples.feature.source.ndjson +1 -0
- data/testdata/good/several_examples.feature.tokens +18 -0
- data/testdata/good/spaces_in_language.feature +2 -0
- data/testdata/good/spaces_in_language.feature.ast.ndjson +1 -0
- data/testdata/good/spaces_in_language.feature.pickles.ndjson +0 -0
- data/testdata/good/spaces_in_language.feature.source.ndjson +1 -0
- data/testdata/good/spaces_in_language.feature.tokens +3 -0
- data/testdata/good/tags.feature +25 -0
- data/testdata/good/tags.feature.ast.ndjson +1 -0
- data/testdata/good/tags.feature.pickles.ndjson +3 -0
- data/testdata/good/tags.feature.source.ndjson +1 -0
- data/testdata/good/tags.feature.tokens +26 -0
- metadata +176 -25
- data/bin/gherkin-generate-ast +0 -22
- data/bin/gherkin-generate-pickles +0 -26
@@ -0,0 +1,69 @@
|
|
1
|
+
require 'gherkin/parser'
|
2
|
+
require 'gherkin/pickles/compiler'
|
3
|
+
|
4
|
+
module Gherkin
|
5
|
+
module Stream
|
6
|
+
class GherkinEvents
|
7
|
+
def initialize(options)
|
8
|
+
@options = options
|
9
|
+
@parser = Gherkin::Parser.new
|
10
|
+
@compiler = Gherkin::Pickles::Compiler.new
|
11
|
+
end
|
12
|
+
|
13
|
+
def enum(source_event)
|
14
|
+
Enumerator.new do |y|
|
15
|
+
uri = source_event['uri']
|
16
|
+
source = source_event['data']
|
17
|
+
begin
|
18
|
+
gherkin_document = @parser.parse(source)
|
19
|
+
|
20
|
+
if (@options[:print_source])
|
21
|
+
y.yield source_event
|
22
|
+
end
|
23
|
+
if (@options[:print_ast])
|
24
|
+
y.yield({
|
25
|
+
type: 'gherkin-document',
|
26
|
+
uri: uri,
|
27
|
+
document: gherkin_document
|
28
|
+
})
|
29
|
+
end
|
30
|
+
if (@options[:print_pickles])
|
31
|
+
pickles = @compiler.compile(gherkin_document)
|
32
|
+
pickles.each do |pickle|
|
33
|
+
y.yield({
|
34
|
+
type: 'pickle',
|
35
|
+
uri: uri,
|
36
|
+
pickle: pickle
|
37
|
+
})
|
38
|
+
end
|
39
|
+
end
|
40
|
+
rescue Gherkin::CompositeParserException => e
|
41
|
+
yield_errors(y, e.errors, uri)
|
42
|
+
rescue Gherkin::ParserError => e
|
43
|
+
yield_errors(y, [e], uri)
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
def yield_errors(y, errors, uri)
|
49
|
+
errors.each do |error|
|
50
|
+
y.yield({
|
51
|
+
type: 'attachment',
|
52
|
+
source: {
|
53
|
+
uri: uri,
|
54
|
+
start: {
|
55
|
+
line: error.location[:line],
|
56
|
+
column: error.location[:column]
|
57
|
+
}
|
58
|
+
},
|
59
|
+
data: error.message,
|
60
|
+
media: {
|
61
|
+
encoding: 'utf-8',
|
62
|
+
type: 'text/vnd.cucumber.stacktrace+plain'
|
63
|
+
}
|
64
|
+
})
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
module Gherkin
|
2
|
+
module Stream
|
3
|
+
class SourceEvents
|
4
|
+
def initialize(paths)
|
5
|
+
@paths = paths
|
6
|
+
end
|
7
|
+
|
8
|
+
def enum
|
9
|
+
Enumerator.new do |y|
|
10
|
+
@paths.each do |path|
|
11
|
+
event = {
|
12
|
+
'type' => 'source',
|
13
|
+
'uri' => path,
|
14
|
+
'data' => File.open(path, 'r:UTF-8', &:read),
|
15
|
+
'media' => {
|
16
|
+
'encoding' => 'utf-8',
|
17
|
+
'type' => 'text/vnd.cucumber.gherkin+plain'
|
18
|
+
}
|
19
|
+
}
|
20
|
+
y.yield(event)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -25,7 +25,7 @@ module Gherkin
|
|
25
25
|
end
|
26
26
|
|
27
27
|
def read
|
28
|
-
location = {line: @line_number += 1}
|
28
|
+
location = {line: @line_number += 1, column: 0}
|
29
29
|
if @io.nil? || line = @io.gets
|
30
30
|
gherkin_line = line ? GherkinLine.new(line, location[:line]) : nil
|
31
31
|
Token.new(gherkin_line, location)
|
@@ -0,0 +1,2 @@
|
|
1
|
+
{"data":"(6:7): inconsistent cell count within the table","media":{"encoding":"utf-8","type":"text/vnd.cucumber.stacktrace+plain"},"source":{"start":{"column":7,"line":6},"uri":"testdata/bad/inconsistent_cell_count.feature"},"type":"attachment"}
|
2
|
+
{"data":"(14:5): inconsistent cell count within the table","media":{"encoding":"utf-8","type":"text/vnd.cucumber.stacktrace+plain"},"source":{"start":{"column":5,"line":14},"uri":"testdata/bad/inconsistent_cell_count.feature"},"type":"attachment"}
|
@@ -0,0 +1 @@
|
|
1
|
+
{"data":"(1:1): Language not supported: no-such","media":{"encoding":"utf-8","type":"text/vnd.cucumber.stacktrace+plain"},"source":{"start":{"column":1,"line":1},"uri":"testdata/bad/invalid_language.feature"},"type":"attachment"}
|
@@ -0,0 +1,2 @@
|
|
1
|
+
{"data":"(2:1): expected: #EOF, #Language, #TagLine, #FeatureLine, #Comment, #Empty, got 'invalid line here'","media":{"encoding":"utf-8","type":"text/vnd.cucumber.stacktrace+plain"},"source":{"start":{"column":1,"line":2},"uri":"testdata/bad/multiple_parser_errors.feature"},"type":"attachment"}
|
2
|
+
{"data":"(9:1): expected: #EOF, #TableRow, #DocStringSeparator, #StepLine, #TagLine, #ScenarioLine, #ScenarioOutlineLine, #Comment, #Empty, got 'another invalid line here'","media":{"encoding":"utf-8","type":"text/vnd.cucumber.stacktrace+plain"},"source":{"start":{"column":1,"line":9},"uri":"testdata/bad/multiple_parser_errors.feature"},"type":"attachment"}
|
@@ -0,0 +1 @@
|
|
1
|
+
{"data":"(1:1): expected: #EOF, #Language, #TagLine, #FeatureLine, #Comment, #Empty, got 'not gherkin'","media":{"encoding":"utf-8","type":"text/vnd.cucumber.stacktrace+plain"},"source":{"start":{"column":1,"line":1},"uri":"testdata/bad/not_gherkin.feature"},"type":"attachment"}
|
@@ -0,0 +1 @@
|
|
1
|
+
{"data":"(2:1): expected: #EOF, #Language, #TagLine, #FeatureLine, #Comment, #Empty, got 'invalid line here'","media":{"encoding":"utf-8","type":"text/vnd.cucumber.stacktrace+plain"},"source":{"start":{"column":1,"line":2},"uri":"testdata/bad/single_parser_error.feature"},"type":"attachment"}
|
@@ -0,0 +1 @@
|
|
1
|
+
{"data":"(7:0): unexpected end of file, expected: #TagLine, #ScenarioLine, #ScenarioOutlineLine, #Comment, #Empty","media":{"encoding":"utf-8","type":"text/vnd.cucumber.stacktrace+plain"},"source":{"start":{"column":0,"line":7},"uri":"testdata/bad/unexpected_eof.feature"},"type":"attachment"}
|
@@ -0,0 +1 @@
|
|
1
|
+
{"document":{"comments":[],"feature":{"children":[{"keyword":"Background","location":{"column":3,"line":3},"name":"a simple background","steps":[{"keyword":"Given ","location":{"column":5,"line":4},"text":"the minimalism inside a background","type":"Step"}],"type":"Background"},{"keyword":"Scenario","location":{"column":3,"line":7},"name":"minimalistic","steps":[{"keyword":"Given ","location":{"column":5,"line":8},"text":"the minimalism","type":"Step"}],"tags":[],"type":"Scenario"}],"keyword":"Feature","language":"en","location":{"column":1,"line":1},"name":"Background","tags":[],"type":"Feature"},"type":"GherkinDocument"},"type":"gherkin-document","uri":"testdata/good/background.feature"}
|
@@ -0,0 +1 @@
|
|
1
|
+
{"pickle":{"language":"en","locations":[{"column":3,"line":7}],"name":"minimalistic","steps":[{"arguments":[],"locations":[{"column":11,"line":4}],"text":"the minimalism inside a background"},{"arguments":[],"locations":[{"column":11,"line":8}],"text":"the minimalism"}],"tags":[]},"type":"pickle","uri":"testdata/good/background.feature"}
|
@@ -0,0 +1 @@
|
|
1
|
+
{"data":"Feature: Background\n\n Background: a simple background\n Given the minimalism inside a background\n\n\n Scenario: minimalistic\n Given the minimalism\n","media":{"encoding":"utf-8","type":"text/vnd.cucumber.gherkin+plain"},"type":"source","uri":"testdata/good/background.feature"}
|
@@ -0,0 +1,9 @@
|
|
1
|
+
(1:1)FeatureLine:Feature/Background/
|
2
|
+
(2:1)Empty://
|
3
|
+
(3:3)BackgroundLine:Background/a simple background/
|
4
|
+
(4:5)StepLine:Given /the minimalism inside a background/
|
5
|
+
(5:1)Empty://
|
6
|
+
(6:1)Empty://
|
7
|
+
(7:3)ScenarioLine:Scenario/minimalistic/
|
8
|
+
(8:5)StepLine:Given /the minimalism/
|
9
|
+
EOF
|
@@ -0,0 +1,18 @@
|
|
1
|
+
Feature: DataTables
|
2
|
+
|
3
|
+
Scenario: minimalistic
|
4
|
+
Given a simple data table
|
5
|
+
| foo | bar |
|
6
|
+
| boz | boo |
|
7
|
+
And a data table with a single cell
|
8
|
+
| foo |
|
9
|
+
And a data table with different fromatting
|
10
|
+
| foo|bar| boz |
|
11
|
+
And a data table with an empty cell
|
12
|
+
|foo||boz|
|
13
|
+
And a data table with comments and newlines inside
|
14
|
+
| foo | bar |
|
15
|
+
|
16
|
+
| boz | boo |
|
17
|
+
# this is a comment
|
18
|
+
| boz2 | boo2 |
|
@@ -0,0 +1 @@
|
|
1
|
+
{"document":{"comments":[{"location":{"column":1,"line":17},"text":" # this is a comment","type":"Comment"}],"feature":{"children":[{"keyword":"Scenario","location":{"column":3,"line":3},"name":"minimalistic","steps":[{"argument":{"location":{"column":7,"line":5},"rows":[{"cells":[{"location":{"column":9,"line":5},"type":"TableCell","value":"foo"},{"location":{"column":15,"line":5},"type":"TableCell","value":"bar"}],"location":{"column":7,"line":5},"type":"TableRow"},{"cells":[{"location":{"column":9,"line":6},"type":"TableCell","value":"boz"},{"location":{"column":15,"line":6},"type":"TableCell","value":"boo"}],"location":{"column":7,"line":6},"type":"TableRow"}],"type":"DataTable"},"keyword":"Given ","location":{"column":5,"line":4},"text":"a simple data table","type":"Step"},{"argument":{"location":{"column":7,"line":8},"rows":[{"cells":[{"location":{"column":9,"line":8},"type":"TableCell","value":"foo"}],"location":{"column":7,"line":8},"type":"TableRow"}],"type":"DataTable"},"keyword":"And ","location":{"column":5,"line":7},"text":"a data table with a single cell","type":"Step"},{"argument":{"location":{"column":7,"line":10},"rows":[{"cells":[{"location":{"column":11,"line":10},"type":"TableCell","value":"foo"},{"location":{"column":15,"line":10},"type":"TableCell","value":"bar"},{"location":{"column":23,"line":10},"type":"TableCell","value":"boz"}],"location":{"column":7,"line":10},"type":"TableRow"}],"type":"DataTable"},"keyword":"And ","location":{"column":5,"line":9},"text":"a data table with different fromatting","type":"Step"},{"argument":{"location":{"column":7,"line":12},"rows":[{"cells":[{"location":{"column":8,"line":12},"type":"TableCell","value":"foo"},{"location":{"column":12,"line":12},"type":"TableCell","value":""},{"location":{"column":13,"line":12},"type":"TableCell","value":"boz"}],"location":{"column":7,"line":12},"type":"TableRow"}],"type":"DataTable"},"keyword":"And ","location":{"column":5,"line":11},"text":"a data table with an empty cell","type":"Step"},{"argument":{"location":{"column":7,"line":14},"rows":[{"cells":[{"location":{"column":9,"line":14},"type":"TableCell","value":"foo"},{"location":{"column":15,"line":14},"type":"TableCell","value":"bar"}],"location":{"column":7,"line":14},"type":"TableRow"},{"cells":[{"location":{"column":9,"line":16},"type":"TableCell","value":"boz"},{"location":{"column":16,"line":16},"type":"TableCell","value":"boo"}],"location":{"column":7,"line":16},"type":"TableRow"},{"cells":[{"location":{"column":9,"line":18},"type":"TableCell","value":"boz2"},{"location":{"column":16,"line":18},"type":"TableCell","value":"boo2"}],"location":{"column":7,"line":18},"type":"TableRow"}],"type":"DataTable"},"keyword":"And ","location":{"column":5,"line":13},"text":"a data table with comments and newlines inside","type":"Step"}],"tags":[],"type":"Scenario"}],"keyword":"Feature","language":"en","location":{"column":1,"line":1},"name":"DataTables","tags":[],"type":"Feature"},"type":"GherkinDocument"},"type":"gherkin-document","uri":"testdata/good/datatables.feature"}
|
@@ -0,0 +1 @@
|
|
1
|
+
{"pickle":{"language":"en","locations":[{"column":3,"line":3}],"name":"minimalistic","steps":[{"arguments":[{"rows":[{"cells":[{"location":{"column":9,"line":5},"value":"foo"},{"location":{"column":15,"line":5},"value":"bar"}]},{"cells":[{"location":{"column":9,"line":6},"value":"boz"},{"location":{"column":15,"line":6},"value":"boo"}]}]}],"locations":[{"column":11,"line":4}],"text":"a simple data table"},{"arguments":[{"rows":[{"cells":[{"location":{"column":9,"line":8},"value":"foo"}]}]}],"locations":[{"column":9,"line":7}],"text":"a data table with a single cell"},{"arguments":[{"rows":[{"cells":[{"location":{"column":11,"line":10},"value":"foo"},{"location":{"column":15,"line":10},"value":"bar"},{"location":{"column":23,"line":10},"value":"boz"}]}]}],"locations":[{"column":9,"line":9}],"text":"a data table with different fromatting"},{"arguments":[{"rows":[{"cells":[{"location":{"column":8,"line":12},"value":"foo"},{"location":{"column":12,"line":12},"value":""},{"location":{"column":13,"line":12},"value":"boz"}]}]}],"locations":[{"column":9,"line":11}],"text":"a data table with an empty cell"},{"arguments":[{"rows":[{"cells":[{"location":{"column":9,"line":14},"value":"foo"},{"location":{"column":15,"line":14},"value":"bar"}]},{"cells":[{"location":{"column":9,"line":16},"value":"boz"},{"location":{"column":16,"line":16},"value":"boo"}]},{"cells":[{"location":{"column":9,"line":18},"value":"boz2"},{"location":{"column":16,"line":18},"value":"boo2"}]}]}],"locations":[{"column":9,"line":13}],"text":"a data table with comments and newlines inside"}],"tags":[]},"type":"pickle","uri":"testdata/good/datatables.feature"}
|
@@ -0,0 +1 @@
|
|
1
|
+
{"data":"Feature: DataTables\n\n Scenario: minimalistic\n Given a simple data table\n | foo | bar |\r\n | boz | boo |\n And a data table with a single cell\n | foo |\n And a data table with different fromatting\n | foo|bar| boz | \n And a data table with an empty cell\n |foo||boz|\n And a data table with comments and newlines inside\n | foo | bar |\r\n\r\n | boz | boo |\r\n # this is a comment\r\n | boz2 | boo2 |\n","media":{"encoding":"utf-8","type":"text/vnd.cucumber.gherkin+plain"},"type":"source","uri":"testdata/good/datatables.feature"}
|
@@ -0,0 +1,19 @@
|
|
1
|
+
(1:1)FeatureLine:Feature/DataTables/
|
2
|
+
(2:1)Empty://
|
3
|
+
(3:3)ScenarioLine:Scenario/minimalistic/
|
4
|
+
(4:5)StepLine:Given /a simple data table/
|
5
|
+
(5:7)TableRow://9:foo,15:bar
|
6
|
+
(6:7)TableRow://9:boz,15:boo
|
7
|
+
(7:5)StepLine:And /a data table with a single cell/
|
8
|
+
(8:7)TableRow://9:foo
|
9
|
+
(9:5)StepLine:And /a data table with different fromatting/
|
10
|
+
(10:7)TableRow://11:foo,15:bar,23:boz
|
11
|
+
(11:5)StepLine:And /a data table with an empty cell/
|
12
|
+
(12:7)TableRow://8:foo,12:,13:boz
|
13
|
+
(13:5)StepLine:And /a data table with comments and newlines inside/
|
14
|
+
(14:7)TableRow://9:foo,15:bar
|
15
|
+
(15:1)Empty://
|
16
|
+
(16:7)TableRow://9:boz,16:boo
|
17
|
+
(17:1)Comment:/ # this is a comment/
|
18
|
+
(18:7)TableRow://9:boz2,16:boo2
|
19
|
+
EOF
|
@@ -0,0 +1,52 @@
|
|
1
|
+
Feature: Descriptions everywhere
|
2
|
+
This is a single line description
|
3
|
+
|
4
|
+
Scenario: two lines
|
5
|
+
This description
|
6
|
+
has two lines and indented with two spaces
|
7
|
+
Given the minimalism
|
8
|
+
|
9
|
+
Scenario: without indentation
|
10
|
+
This is a description without indentation
|
11
|
+
Given the minimalism
|
12
|
+
|
13
|
+
Scenario: empty lines in the middle
|
14
|
+
This description
|
15
|
+
|
16
|
+
has an empty line in the middle
|
17
|
+
Given the minimalism
|
18
|
+
|
19
|
+
Scenario: empty lines around
|
20
|
+
|
21
|
+
This description
|
22
|
+
has an empty lines around
|
23
|
+
|
24
|
+
Given the minimalism
|
25
|
+
|
26
|
+
Scenario: comment after description
|
27
|
+
This description
|
28
|
+
has a comment after
|
29
|
+
|
30
|
+
# this is a comment
|
31
|
+
Given the minimalism
|
32
|
+
|
33
|
+
Scenario: comment right after description
|
34
|
+
This description
|
35
|
+
has a comment right after
|
36
|
+
# this is another comment
|
37
|
+
|
38
|
+
Given the minimalism
|
39
|
+
|
40
|
+
Scenario: description with escaped docstring separator
|
41
|
+
This description has an \"\"\" (escaped docstring sparator)
|
42
|
+
|
43
|
+
Given the minimalism
|
44
|
+
|
45
|
+
Scenario Outline: scenario outline with a description
|
46
|
+
This is a scenario outline description
|
47
|
+
Given the minimalism
|
48
|
+
|
49
|
+
Examples: examples with description
|
50
|
+
This is an examples description
|
51
|
+
| foo |
|
52
|
+
| bar |
|
@@ -0,0 +1 @@
|
|
1
|
+
{"document":{"comments":[{"location":{"column":1,"line":30},"text":"# this is a comment","type":"Comment"},{"location":{"column":1,"line":36},"text":" # this is another comment","type":"Comment"}],"feature":{"children":[{"description":" This description\n has two lines and indented with two spaces","keyword":"Scenario","location":{"column":3,"line":4},"name":"two lines","steps":[{"keyword":"Given ","location":{"column":5,"line":7},"text":"the minimalism","type":"Step"}],"tags":[],"type":"Scenario"},{"description":"This is a description without indentation","keyword":"Scenario","location":{"column":1,"line":9},"name":"without indentation","steps":[{"keyword":"Given ","location":{"column":3,"line":11},"text":"the minimalism","type":"Step"}],"tags":[],"type":"Scenario"},{"description":" This description\n\n has an empty line in the middle","keyword":"Scenario","location":{"column":3,"line":13},"name":"empty lines in the middle","steps":[{"keyword":"Given ","location":{"column":5,"line":17},"text":"the minimalism","type":"Step"}],"tags":[],"type":"Scenario"},{"description":" This description\n has an empty lines around","keyword":"Scenario","location":{"column":3,"line":19},"name":"empty lines around","steps":[{"keyword":"Given ","location":{"column":5,"line":24},"text":"the minimalism","type":"Step"}],"tags":[],"type":"Scenario"},{"description":" This description\n has a comment after","keyword":"Scenario","location":{"column":3,"line":26},"name":"comment after description","steps":[{"keyword":"Given ","location":{"column":5,"line":31},"text":"the minimalism","type":"Step"}],"tags":[],"type":"Scenario"},{"description":" This description\n has a comment right after","keyword":"Scenario","location":{"column":3,"line":33},"name":"comment right after description","steps":[{"keyword":"Given ","location":{"column":5,"line":38},"text":"the minimalism","type":"Step"}],"tags":[],"type":"Scenario"},{"description":" This description has an \\\"\\\"\\\" (escaped docstring sparator)","keyword":"Scenario","location":{"column":3,"line":40},"name":"description with escaped docstring separator","steps":[{"keyword":"Given ","location":{"column":5,"line":43},"text":"the minimalism","type":"Step"}],"tags":[],"type":"Scenario"},{"description":"This is a scenario outline description","examples":[{"description":"This is an examples description","keyword":"Examples","location":{"column":3,"line":49},"name":"examples with description","tableBody":[{"cells":[{"location":{"column":7,"line":52},"type":"TableCell","value":"bar"}],"location":{"column":5,"line":52},"type":"TableRow"}],"tableHeader":{"cells":[{"location":{"column":7,"line":51},"type":"TableCell","value":"foo"}],"location":{"column":5,"line":51},"type":"TableRow"},"tags":[],"type":"Examples"}],"keyword":"Scenario Outline","location":{"column":3,"line":45},"name":"scenario outline with a description","steps":[{"keyword":"Given ","location":{"column":5,"line":47},"text":"the minimalism","type":"Step"}],"tags":[],"type":"ScenarioOutline"}],"description":" This is a single line description","keyword":"Feature","language":"en","location":{"column":1,"line":1},"name":"Descriptions everywhere","tags":[],"type":"Feature"},"type":"GherkinDocument"},"type":"gherkin-document","uri":"testdata/good/descriptions.feature"}
|
@@ -0,0 +1,8 @@
|
|
1
|
+
{"pickle":{"language":"en","locations":[{"column":3,"line":4}],"name":"two lines","steps":[{"arguments":[],"locations":[{"column":11,"line":7}],"text":"the minimalism"}],"tags":[]},"type":"pickle","uri":"testdata/good/descriptions.feature"}
|
2
|
+
{"pickle":{"language":"en","locations":[{"column":1,"line":9}],"name":"without indentation","steps":[{"arguments":[],"locations":[{"column":9,"line":11}],"text":"the minimalism"}],"tags":[]},"type":"pickle","uri":"testdata/good/descriptions.feature"}
|
3
|
+
{"pickle":{"language":"en","locations":[{"column":3,"line":13}],"name":"empty lines in the middle","steps":[{"arguments":[],"locations":[{"column":11,"line":17}],"text":"the minimalism"}],"tags":[]},"type":"pickle","uri":"testdata/good/descriptions.feature"}
|
4
|
+
{"pickle":{"language":"en","locations":[{"column":3,"line":19}],"name":"empty lines around","steps":[{"arguments":[],"locations":[{"column":11,"line":24}],"text":"the minimalism"}],"tags":[]},"type":"pickle","uri":"testdata/good/descriptions.feature"}
|
5
|
+
{"pickle":{"language":"en","locations":[{"column":3,"line":26}],"name":"comment after description","steps":[{"arguments":[],"locations":[{"column":11,"line":31}],"text":"the minimalism"}],"tags":[]},"type":"pickle","uri":"testdata/good/descriptions.feature"}
|
6
|
+
{"pickle":{"language":"en","locations":[{"column":3,"line":33}],"name":"comment right after description","steps":[{"arguments":[],"locations":[{"column":11,"line":38}],"text":"the minimalism"}],"tags":[]},"type":"pickle","uri":"testdata/good/descriptions.feature"}
|
7
|
+
{"pickle":{"language":"en","locations":[{"column":3,"line":40}],"name":"description with escaped docstring separator","steps":[{"arguments":[],"locations":[{"column":11,"line":43}],"text":"the minimalism"}],"tags":[]},"type":"pickle","uri":"testdata/good/descriptions.feature"}
|
8
|
+
{"pickle":{"language":"en","locations":[{"column":5,"line":52},{"column":3,"line":45}],"name":"scenario outline with a description","steps":[{"arguments":[],"locations":[{"column":5,"line":52},{"column":11,"line":47}],"text":"the minimalism"}],"tags":[]},"type":"pickle","uri":"testdata/good/descriptions.feature"}
|
@@ -0,0 +1 @@
|
|
1
|
+
{"data":"Feature: Descriptions everywhere\n This is a single line description\n\n Scenario: two lines\n This description\n has two lines and indented with two spaces\n Given the minimalism\n\nScenario: without indentation\nThis is a description without indentation\n Given the minimalism\n\n Scenario: empty lines in the middle\n This description\n\n has an empty line in the middle\n Given the minimalism\n\n Scenario: empty lines around\n\n This description\n has an empty lines around\n\n Given the minimalism\n\n Scenario: comment after description\n This description\n has a comment after\n\n# this is a comment\n Given the minimalism\n\n Scenario: comment right after description\n This description\n has a comment right after\n # this is another comment\n\n Given the minimalism\n\n Scenario: description with escaped docstring separator\n This description has an \\\"\\\"\\\" (escaped docstring sparator)\n\n Given the minimalism\n\n Scenario Outline: scenario outline with a description\nThis is a scenario outline description\n Given the minimalism\n\n Examples: examples with description\nThis is an examples description\n | foo |\r\n | bar |\r\n","media":{"encoding":"utf-8","type":"text/vnd.cucumber.gherkin+plain"},"type":"source","uri":"testdata/good/descriptions.feature"}
|
@@ -0,0 +1,53 @@
|
|
1
|
+
(1:1)FeatureLine:Feature/Descriptions everywhere/
|
2
|
+
(2:1)Other:/ This is a single line description/
|
3
|
+
(3:1)Other://
|
4
|
+
(4:3)ScenarioLine:Scenario/two lines/
|
5
|
+
(5:1)Other:/ This description/
|
6
|
+
(6:1)Other:/ has two lines and indented with two spaces/
|
7
|
+
(7:5)StepLine:Given /the minimalism/
|
8
|
+
(8:1)Empty://
|
9
|
+
(9:1)ScenarioLine:Scenario/without indentation/
|
10
|
+
(10:1)Other:/This is a description without indentation/
|
11
|
+
(11:3)StepLine:Given /the minimalism/
|
12
|
+
(12:1)Empty://
|
13
|
+
(13:3)ScenarioLine:Scenario/empty lines in the middle/
|
14
|
+
(14:1)Other:/ This description/
|
15
|
+
(15:1)Other://
|
16
|
+
(16:1)Other:/ has an empty line in the middle/
|
17
|
+
(17:5)StepLine:Given /the minimalism/
|
18
|
+
(18:1)Empty://
|
19
|
+
(19:3)ScenarioLine:Scenario/empty lines around/
|
20
|
+
(20:1)Empty://
|
21
|
+
(21:1)Other:/ This description/
|
22
|
+
(22:1)Other:/ has an empty lines around/
|
23
|
+
(23:1)Other://
|
24
|
+
(24:5)StepLine:Given /the minimalism/
|
25
|
+
(25:1)Empty://
|
26
|
+
(26:3)ScenarioLine:Scenario/comment after description/
|
27
|
+
(27:1)Other:/ This description/
|
28
|
+
(28:1)Other:/ has a comment after/
|
29
|
+
(29:1)Other://
|
30
|
+
(30:1)Comment:/# this is a comment/
|
31
|
+
(31:5)StepLine:Given /the minimalism/
|
32
|
+
(32:1)Empty://
|
33
|
+
(33:3)ScenarioLine:Scenario/comment right after description/
|
34
|
+
(34:1)Other:/ This description/
|
35
|
+
(35:1)Other:/ has a comment right after/
|
36
|
+
(36:1)Comment:/ # this is another comment/
|
37
|
+
(37:1)Empty://
|
38
|
+
(38:5)StepLine:Given /the minimalism/
|
39
|
+
(39:1)Empty://
|
40
|
+
(40:3)ScenarioLine:Scenario/description with escaped docstring separator/
|
41
|
+
(41:1)Other:/ This description has an \"\"\" (escaped docstring sparator)/
|
42
|
+
(42:1)Other://
|
43
|
+
(43:5)StepLine:Given /the minimalism/
|
44
|
+
(44:1)Empty://
|
45
|
+
(45:3)ScenarioOutlineLine:Scenario Outline/scenario outline with a description/
|
46
|
+
(46:1)Other:/This is a scenario outline description/
|
47
|
+
(47:5)StepLine:Given /the minimalism/
|
48
|
+
(48:1)Empty://
|
49
|
+
(49:3)ExamplesLine:Examples/examples with description/
|
50
|
+
(50:1)Other:/This is an examples description/
|
51
|
+
(51:5)TableRow://7:foo
|
52
|
+
(52:5)TableRow://7:bar
|
53
|
+
EOF
|
@@ -0,0 +1,43 @@
|
|
1
|
+
Feature: DocString variations
|
2
|
+
|
3
|
+
Scenario: minimalistic
|
4
|
+
Given a simple DocString
|
5
|
+
"""
|
6
|
+
first line (no indent)
|
7
|
+
second line (indented with two spaces)
|
8
|
+
|
9
|
+
third line was empty
|
10
|
+
"""
|
11
|
+
Given a DocString with content type
|
12
|
+
"""xml
|
13
|
+
<foo>
|
14
|
+
<bar />
|
15
|
+
</foo>
|
16
|
+
"""
|
17
|
+
And a DocString with wrong indentation
|
18
|
+
"""
|
19
|
+
wrongly indented line
|
20
|
+
"""
|
21
|
+
And a DocString with alternative separator
|
22
|
+
```
|
23
|
+
first line
|
24
|
+
second line
|
25
|
+
```
|
26
|
+
And a DocString with normal separator inside
|
27
|
+
```
|
28
|
+
first line
|
29
|
+
"""
|
30
|
+
third line
|
31
|
+
```
|
32
|
+
And a DocString with alternative separator inside
|
33
|
+
"""
|
34
|
+
first line
|
35
|
+
```
|
36
|
+
third line
|
37
|
+
"""
|
38
|
+
And a DocString with escaped separator inside
|
39
|
+
"""
|
40
|
+
first line
|
41
|
+
\"\"\"
|
42
|
+
third line
|
43
|
+
"""
|
@@ -0,0 +1 @@
|
|
1
|
+
{"document":{"comments":[],"feature":{"children":[{"keyword":"Scenario","location":{"column":3,"line":3},"name":"minimalistic","steps":[{"argument":{"content":"first line (no indent)\n second line (indented with two spaces)\n\nthird line was empty","location":{"column":7,"line":5},"type":"DocString"},"keyword":"Given ","location":{"column":5,"line":4},"text":"a simple DocString","type":"Step"},{"argument":{"content":"<foo>\n <bar />\n</foo>","contentType":"xml","location":{"column":7,"line":12},"type":"DocString"},"keyword":"Given ","location":{"column":5,"line":11},"text":"a DocString with content type","type":"Step"},{"argument":{"content":"wrongly indented line","location":{"column":7,"line":18},"type":"DocString"},"keyword":"And ","location":{"column":5,"line":17},"text":"a DocString with wrong indentation","type":"Step"},{"argument":{"content":"first line\nsecond line","location":{"column":7,"line":22},"type":"DocString"},"keyword":"And ","location":{"column":5,"line":21},"text":"a DocString with alternative separator","type":"Step"},{"argument":{"content":"first line\n\"\"\"\nthird line","location":{"column":7,"line":27},"type":"DocString"},"keyword":"And ","location":{"column":5,"line":26},"text":"a DocString with normal separator inside","type":"Step"},{"argument":{"content":"first line\n```\nthird line","location":{"column":7,"line":33},"type":"DocString"},"keyword":"And ","location":{"column":5,"line":32},"text":"a DocString with alternative separator inside","type":"Step"},{"argument":{"content":"first line\n\"\"\"\nthird line","location":{"column":7,"line":39},"type":"DocString"},"keyword":"And ","location":{"column":5,"line":38},"text":"a DocString with escaped separator inside","type":"Step"}],"tags":[],"type":"Scenario"}],"keyword":"Feature","language":"en","location":{"column":1,"line":1},"name":"DocString variations","tags":[],"type":"Feature"},"type":"GherkinDocument"},"type":"gherkin-document","uri":"testdata/good/docstrings.feature"}
|
@@ -0,0 +1 @@
|
|
1
|
+
{"pickle":{"language":"en","locations":[{"column":3,"line":3}],"name":"minimalistic","steps":[{"arguments":[{"content":"first line (no indent)\n second line (indented with two spaces)\n\nthird line was empty","location":{"column":7,"line":5}}],"locations":[{"column":11,"line":4}],"text":"a simple DocString"},{"arguments":[{"content":"<foo>\n <bar />\n</foo>","location":{"column":7,"line":12}}],"locations":[{"column":11,"line":11}],"text":"a DocString with content type"},{"arguments":[{"content":"wrongly indented line","location":{"column":7,"line":18}}],"locations":[{"column":9,"line":17}],"text":"a DocString with wrong indentation"},{"arguments":[{"content":"first line\nsecond line","location":{"column":7,"line":22}}],"locations":[{"column":9,"line":21}],"text":"a DocString with alternative separator"},{"arguments":[{"content":"first line\n\"\"\"\nthird line","location":{"column":7,"line":27}}],"locations":[{"column":9,"line":26}],"text":"a DocString with normal separator inside"},{"arguments":[{"content":"first line\n```\nthird line","location":{"column":7,"line":33}}],"locations":[{"column":9,"line":32}],"text":"a DocString with alternative separator inside"},{"arguments":[{"content":"first line\n\"\"\"\nthird line","location":{"column":7,"line":39}}],"locations":[{"column":9,"line":38}],"text":"a DocString with escaped separator inside"}],"tags":[]},"type":"pickle","uri":"testdata/good/docstrings.feature"}
|
@@ -0,0 +1 @@
|
|
1
|
+
{"data":"Feature: DocString variations\n\n Scenario: minimalistic\n Given a simple DocString\n \"\"\"\n first line (no indent)\n second line (indented with two spaces)\n\n third line was empty\n \"\"\"\n Given a DocString with content type\n \"\"\"xml\n <foo>\n <bar />\n </foo>\n \"\"\"\n And a DocString with wrong indentation\n \"\"\"\n wrongly indented line\n \"\"\"\n And a DocString with alternative separator\n ```\n first line\n second line\n ```\n And a DocString with normal separator inside\n ```\n first line\n \"\"\"\n third line\n ```\n And a DocString with alternative separator inside\n \"\"\"\n first line\n ```\n third line\n \"\"\"\n And a DocString with escaped separator inside\n \"\"\"\n first line\n \\\"\\\"\\\"\n third line\n \"\"\"\n","media":{"encoding":"utf-8","type":"text/vnd.cucumber.gherkin+plain"},"type":"source","uri":"testdata/good/docstrings.feature"}
|
@@ -0,0 +1,44 @@
|
|
1
|
+
(1:1)FeatureLine:Feature/DocString variations/
|
2
|
+
(2:1)Empty://
|
3
|
+
(3:3)ScenarioLine:Scenario/minimalistic/
|
4
|
+
(4:5)StepLine:Given /a simple DocString/
|
5
|
+
(5:7)DocStringSeparator://
|
6
|
+
(6:1)Other:/first line (no indent)/
|
7
|
+
(7:1)Other:/ second line (indented with two spaces)/
|
8
|
+
(8:1)Other://
|
9
|
+
(9:1)Other:/third line was empty/
|
10
|
+
(10:7)DocStringSeparator://
|
11
|
+
(11:5)StepLine:Given /a DocString with content type/
|
12
|
+
(12:7)DocStringSeparator:/xml/
|
13
|
+
(13:1)Other:/<foo>/
|
14
|
+
(14:1)Other:/ <bar />/
|
15
|
+
(15:1)Other:/</foo>/
|
16
|
+
(16:7)DocStringSeparator://
|
17
|
+
(17:5)StepLine:And /a DocString with wrong indentation/
|
18
|
+
(18:7)DocStringSeparator://
|
19
|
+
(19:1)Other:/wrongly indented line/
|
20
|
+
(20:7)DocStringSeparator://
|
21
|
+
(21:5)StepLine:And /a DocString with alternative separator/
|
22
|
+
(22:7)DocStringSeparator://
|
23
|
+
(23:1)Other:/first line/
|
24
|
+
(24:1)Other:/second line/
|
25
|
+
(25:7)DocStringSeparator://
|
26
|
+
(26:5)StepLine:And /a DocString with normal separator inside/
|
27
|
+
(27:7)DocStringSeparator://
|
28
|
+
(28:1)Other:/first line/
|
29
|
+
(29:1)Other:/"""/
|
30
|
+
(30:1)Other:/third line/
|
31
|
+
(31:7)DocStringSeparator://
|
32
|
+
(32:5)StepLine:And /a DocString with alternative separator inside/
|
33
|
+
(33:7)DocStringSeparator://
|
34
|
+
(34:1)Other:/first line/
|
35
|
+
(35:1)Other:/```/
|
36
|
+
(36:1)Other:/third line/
|
37
|
+
(37:7)DocStringSeparator://
|
38
|
+
(38:5)StepLine:And /a DocString with escaped separator inside/
|
39
|
+
(39:7)DocStringSeparator://
|
40
|
+
(40:1)Other:/first line/
|
41
|
+
(41:1)Other:/"""/
|
42
|
+
(42:1)Other:/third line/
|
43
|
+
(43:7)DocStringSeparator://
|
44
|
+
EOF
|