gherkin 1.0.30-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 (104) hide show
  1. data/.gitattributes +2 -0
  2. data/.gitignore +9 -0
  3. data/.mailmap +2 -0
  4. data/History.txt +187 -0
  5. data/LICENSE +20 -0
  6. data/README.rdoc +59 -0
  7. data/Rakefile +58 -0
  8. data/VERSION.yml +5 -0
  9. data/bin/gherkin +5 -0
  10. data/cucumber.yml +3 -0
  11. data/features/escaped_pipes.feature +8 -0
  12. data/features/feature_parser.feature +226 -0
  13. data/features/native_lexer.feature +19 -0
  14. data/features/parser_with_native_lexer.feature +205 -0
  15. data/features/pretty_printer.feature +14 -0
  16. data/features/step_definitions/eyeball_steps.rb +3 -0
  17. data/features/step_definitions/gherkin_steps.rb +30 -0
  18. data/features/step_definitions/pretty_formatter_steps.rb +55 -0
  19. data/features/steps_parser.feature +46 -0
  20. data/features/support/env.rb +33 -0
  21. data/ikvm/.gitignore +3 -0
  22. data/java/.gitignore +2 -0
  23. data/java/src/main/java/gherkin/lexer/.gitignore +1 -0
  24. data/java/src/main/resources/gherkin/.gitignore +1 -0
  25. data/lib/.gitignore +4 -0
  26. data/lib/gherkin.rb +2 -0
  27. data/lib/gherkin/c_lexer.rb +17 -0
  28. data/lib/gherkin/cli/main.rb +33 -0
  29. data/lib/gherkin/formatter/argument.rb +27 -0
  30. data/lib/gherkin/formatter/colors.rb +119 -0
  31. data/lib/gherkin/formatter/escaping.rb +15 -0
  32. data/lib/gherkin/formatter/monochrome_format.rb +9 -0
  33. data/lib/gherkin/formatter/pretty_formatter.rb +168 -0
  34. data/lib/gherkin/i18n.rb +176 -0
  35. data/lib/gherkin/i18n.yml +588 -0
  36. data/lib/gherkin/i18n_lexer.rb +38 -0
  37. data/lib/gherkin/native.rb +7 -0
  38. data/lib/gherkin/native/ikvm.rb +55 -0
  39. data/lib/gherkin/native/java.rb +47 -0
  40. data/lib/gherkin/native/null.rb +9 -0
  41. data/lib/gherkin/parser/event.rb +45 -0
  42. data/lib/gherkin/parser/filter_listener.rb +199 -0
  43. data/lib/gherkin/parser/meta.txt +5 -0
  44. data/lib/gherkin/parser/parser.rb +142 -0
  45. data/lib/gherkin/parser/root.txt +11 -0
  46. data/lib/gherkin/parser/steps.txt +4 -0
  47. data/lib/gherkin/parser/tag_expression.rb +50 -0
  48. data/lib/gherkin/rb_lexer.rb +8 -0
  49. data/lib/gherkin/rb_lexer/.gitignore +1 -0
  50. data/lib/gherkin/rb_lexer/README.rdoc +8 -0
  51. data/lib/gherkin/rubify.rb +18 -0
  52. data/lib/gherkin/tools.rb +8 -0
  53. data/lib/gherkin/tools/files.rb +35 -0
  54. data/lib/gherkin/tools/reformat.rb +19 -0
  55. data/lib/gherkin/tools/stats.rb +21 -0
  56. data/lib/gherkin/tools/stats_listener.rb +57 -0
  57. data/ragel/i18n/.gitignore +1 -0
  58. data/ragel/lexer.c.rl.erb +425 -0
  59. data/ragel/lexer.java.rl.erb +216 -0
  60. data/ragel/lexer.rb.rl.erb +173 -0
  61. data/ragel/lexer_common.rl.erb +50 -0
  62. data/spec/gherkin/c_lexer_spec.rb +21 -0
  63. data/spec/gherkin/csharp_lexer_spec.rb +20 -0
  64. data/spec/gherkin/fixtures/1.feature +8 -0
  65. data/spec/gherkin/fixtures/comments_in_table.feature +9 -0
  66. data/spec/gherkin/fixtures/complex.feature +45 -0
  67. data/spec/gherkin/fixtures/dos_line_endings.feature +45 -0
  68. data/spec/gherkin/fixtures/i18n_fr.feature +14 -0
  69. data/spec/gherkin/fixtures/i18n_no.feature +7 -0
  70. data/spec/gherkin/fixtures/i18n_zh-CN.feature +9 -0
  71. data/spec/gherkin/fixtures/simple_with_comments.feature +7 -0
  72. data/spec/gherkin/fixtures/simple_with_tags.feature +11 -0
  73. data/spec/gherkin/fixtures/with_bom.feature +3 -0
  74. data/spec/gherkin/formatter/argument_spec.rb +28 -0
  75. data/spec/gherkin/formatter/colors_spec.rb +19 -0
  76. data/spec/gherkin/formatter/pretty_formatter_spec.rb +162 -0
  77. data/spec/gherkin/formatter/spaces.feature +9 -0
  78. data/spec/gherkin/formatter/tabs.feature +9 -0
  79. data/spec/gherkin/i18n_lexer_spec.rb +26 -0
  80. data/spec/gherkin/i18n_spec.rb +144 -0
  81. data/spec/gherkin/java_lexer_spec.rb +21 -0
  82. data/spec/gherkin/parser/filter_listener_spec.rb +390 -0
  83. data/spec/gherkin/parser/parser_spec.rb +50 -0
  84. data/spec/gherkin/parser/tag_expression_spec.rb +116 -0
  85. data/spec/gherkin/rb_lexer_spec.rb +19 -0
  86. data/spec/gherkin/sexp_recorder.rb +32 -0
  87. data/spec/gherkin/shared/lexer_spec.rb +550 -0
  88. data/spec/gherkin/shared/py_string_spec.rb +150 -0
  89. data/spec/gherkin/shared/row_spec.rb +104 -0
  90. data/spec/gherkin/shared/tags_spec.rb +50 -0
  91. data/spec/spec_helper.rb +87 -0
  92. data/tasks/bench.rake +188 -0
  93. data/tasks/bench/feature_builder.rb +49 -0
  94. data/tasks/bench/generated/.gitignore +1 -0
  95. data/tasks/bench/null_listener.rb +4 -0
  96. data/tasks/compile.rake +89 -0
  97. data/tasks/cucumber.rake +26 -0
  98. data/tasks/gems.rake +45 -0
  99. data/tasks/ikvm.rake +47 -0
  100. data/tasks/ragel_task.rb +70 -0
  101. data/tasks/rdoc.rake +12 -0
  102. data/tasks/release.rake +26 -0
  103. data/tasks/rspec.rake +15 -0
  104. metadata +257 -0
@@ -0,0 +1,2 @@
1
+ spec/gherkin/fixtures/dos_line_endings.feature -crlf
2
+ spec/gherkin/fixtures/with_bom.feature -crlf
@@ -0,0 +1,9 @@
1
+ *.sw?
2
+ .DS_Store
3
+ coverage
4
+ rdoc
5
+ pkg
6
+ ext
7
+ tmp
8
+ release
9
+ gherkin.gemspec
@@ -0,0 +1,2 @@
1
+ Gregory Hnatiuk <ghnatiuk@gmail.com>
2
+ Mike Sassak <msassak@gmail.com>
@@ -0,0 +1,187 @@
1
+ == 1.0.30 (2010-05-18)
2
+
3
+ === New Features
4
+ * Native gems for IronRuby. Bundles IKVM OpenJDK dlls as well as ikvmc-compiled gherkin.dll. Experimental! (Aslak Hellesøy)
5
+
6
+ == 1.0.29 (2010-05-18)
7
+
8
+ === Bugfixes
9
+ * Use I18n.class' class loader instead of context class loader to load Java lexers. Hoping this fixes loading bug for good. (Aslak Hellesøy)
10
+
11
+ == 1.0.28 (2010-05-18)
12
+
13
+ === Bugfixes
14
+ * Use context class loader instead of boot class loader to load Java lexers. (Aslak Hellesøy)
15
+ * Only add gcc flags when the compiler is gcc. (#60 Aslak Hellesøy, Christian Höltje)
16
+
17
+ == 1.0.27 (2010-05-17)
18
+
19
+ === New Features
20
+ * Table cells can now contain escaped bars - \| and escaped backslashes - \\. (#48. Gregory Hnatiuk, Aslak Hellesøy)
21
+ * Luxemburgish (lu) added. (Christoph König)
22
+
23
+ == 1.0.26 (2010-05-09)
24
+
25
+ === New Features
26
+ * Ignore the BOM that many retarded Windows editors insist on sticking in the beginning of a file. (Aslak Hellesøy)
27
+
28
+ == 1.0.25 (2010-05-02)
29
+
30
+ === Bugfixes
31
+ * Allow fallback to a slower ruby lexer if the C lexer can't be loaded for some reason.
32
+ * Can't run specs in gherkin 1.0.24 (#59 Aslak Hellesøy)
33
+
34
+ == 1.0.24 (2010-05-02)
35
+
36
+ === Bugfixes
37
+ * hard tabs crazy indentation for pystrings in formatter (#55 Aslak Hellesøy)
38
+
39
+ == 1.0.23 (2010-05-02)
40
+
41
+ === Changed Features
42
+ * Java API now uses camelCased method names instead of underscored (more Java-like) (Aslak Hellesøy)
43
+
44
+ == 1.0.22 (2010-04-28)
45
+
46
+ === Bugfixes
47
+ * Make prebuilt binaries work on both Ruby 1.8.x and 1.9.x on Windows (#54 Luis Lavena, Aslak Hellesøy)
48
+
49
+ == 1.0.21 (2010-04-27)
50
+
51
+ === Bugfixes
52
+ * Fix compile warning on ruby 1.9.2dev (2009-07-18 trunk 24186) (#53 Aslak Hellesøy)
53
+
54
+ == 1.0.20 (2010-04-20)
55
+
56
+ === Bugfixes
57
+ * The gherkin CLI is working again (Gregory Hnatiuk)
58
+
59
+ == 1.0.19 (2010-04-20)
60
+
61
+ === New Features
62
+ * Works with JRuby 1.5.0.RC1 (Aslak Hellesøy)
63
+
64
+ === Changed Features
65
+ * I18n.code_keywords now return And and But as well, making Cucumber StepDefs a little more flexible (Aslak Hellesøy)
66
+
67
+ == 1.0.18 (2010-04-20)
68
+
69
+ === Bugfixes
70
+ * Explicitly use UTF-8 encoding when scanning source with Java lexer. (Aslak Hellesøy)
71
+
72
+ == 1.0.17 (2010-04-19)
73
+
74
+ === Bugfixes
75
+ * Gherkin::I18n.keyword_regexp was broken (used for 3rd party code generation). (#51 Aslak Hellesøy)
76
+
77
+ == 1.0.16 (2010-04-19)
78
+ (Something went wrong when releasing 1.0.15)
79
+
80
+ === Bugfixes
81
+ * Reduced risk of halfway botched releases. (Aslak Hellesøy)
82
+
83
+ == 1.0.15 (2010-04-19)
84
+
85
+ === New Features
86
+ * Implemented more functionality in I18n.java. (Aslak Hellesøy)
87
+
88
+ === Changed Features
89
+ * Java methods are no longer throwing Exception (but RuntimeException). (Aslak Hellesøy)
90
+
91
+ == 1.0.14 (2010-04-18)
92
+ (Something went wrong when releasing 1.0.13)
93
+
94
+ == 1.0.13 (2010-04-18)
95
+
96
+ === New Features
97
+ * Filter on Background name. (Aslak Hellesøy)
98
+
99
+ == 1.0.12 (2010-04-18)
100
+
101
+ === Bugfixes
102
+ * Fixed incorrect filtering of pystring in Background. (Mike Sassak)
103
+
104
+ == 1.0.11 (2010-04-16)
105
+
106
+ === Bugfixes
107
+ * Fixed bad packaging (C files were not packaged in POSIX gem)
108
+
109
+ == 1.0.10 (2010-04-16)
110
+
111
+ === New Features
112
+ * Added Esperanto and added a Russian synonym for Feature. (Antono Vasiljev)
113
+ * Pure Java implementation of FilterListener and TagExpression (Mike Gaffney, Aslak Hellesøy)
114
+
115
+ === Changed Features
116
+ * TagExpression takes array args instead of varargs. (Aslak Hellesøy)
117
+
118
+ == 1.0.9 (2010-04-12)
119
+
120
+ === Bugfixes
121
+ * Triple escaped quotes (\"\"\") in PyStrings are unescaped to """. (Aslak Hellesøy)
122
+
123
+ == 1.0.8 (2010-04-10)
124
+
125
+ === Bugfixes
126
+ * Removed illegal comma from Ukrainian synonym. (Aslak Hellesøy)
127
+
128
+ == 1.0.7 (2010-04-10)
129
+
130
+ === Bugfixes
131
+ * Fixed problems with packaging of 1.0.6 release. (Aslak Hellesøy)
132
+
133
+ == 1.0.6 (2010-04-10)
134
+
135
+ === New Features
136
+ * Fully automated release process. (Aslak Hellesøy)
137
+
138
+ === Changed Features
139
+ * Made generated classes use a more uniform naming convention. (Aslak Hellesøy)
140
+
141
+ === Removed Features
142
+ * Removed C# port, obsoleted by IKVM build from 1.0.5. (Aslak Hellesøy)
143
+
144
+ == 1.0.5 (2010-04-08)
145
+
146
+ === New Features
147
+ * New .NET build of gherkin - an ikvmc build of gherkin.jar to gherkin.dll. (Aslak Hellesøy)
148
+
149
+ === Bugfixes
150
+ * Made parsers reusable so that the same instance can parse several features. (Aslak Hellesøy)
151
+
152
+ == 1.0.4 (2010-04-07)
153
+
154
+ === New features
155
+ * Pure java releases of Gherkin at http://cukes.info/maven
156
+ * A FilterListener in Ruby that is the last missing piece to plug Gherkin into Cucumber. (Gregory Hnatiuk, Aslak Hellesøy, Matt Wynne, Mike Sassak)
157
+
158
+ === Changed features
159
+ * The Lexer now emits the '@' for tags. (Aslak Hellesøy)
160
+
161
+ == 1.0.3 (2010-03-31)
162
+
163
+ === Bugfixes
164
+ * The C lexer correctly instantiates a new array for each table, instead of reusing the old one. (Aslak Hellesøy)
165
+ * Emit keywords with space instead of stripping (< keywords are emmitted without space) (Aslak Hellesøy)
166
+ * gherkin reformat now prints comments, and does it with proper indentation (Aslak Hellesøy)
167
+ * .NET resource files are now automatically copied into the .dll (#46 Aslak Hellesøy)
168
+
169
+ === New features
170
+ * The Pure Java implementation now has a simple main method that pretty prints a feature. (#39 Aslak Hellesøy)
171
+ * Writing code generated i18n syntax highlighters for Gherkin is a lot easier thanks to several convenience methods in Gherkin::I18n. (Aslak Hellesøy)
172
+ * .NET (C#) port (#36, #37 Attila Sztupak)
173
+ * Tables parsed and sent by row rather than by table. (Mike Sassak)
174
+
175
+ === Changed features
176
+ * Switced to ISO 639-1 (language) and ISO 3166 alpha-2 (region - if applicable). Applies to Catalan,
177
+ Swedish, Welsh, Romanian and Serbian. (Aslak Hellesøy)
178
+
179
+ == 1.0.2 (2009-12-30)
180
+
181
+ === Bugfixes
182
+ * Build passes on Ruby 1.9.2 (Aslak Hellesøy)
183
+
184
+ === New features
185
+ * New command line based on trollop. Commands: reformat, stats. (Aslak Hellesøy)
186
+ * I18nLexer#scan sets #language to the I18n for the language scanned (Mike Sassak)
187
+ * I18n#adverbs, brings I18n to parity with Cucumber::Parser::NaturalLanguage (Mike Sassak)
data/LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2009 Mike Sassak, Gregory Hnatiuk, Aslak Hellesøy
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,59 @@
1
+ = Gherkin
2
+
3
+ Fast Gherkin lexer and parser based on Ragel. Gherkin is two things:
4
+
5
+ * The language that has evolved out of the Cucumber project.
6
+ * This library
7
+
8
+ == Generating and building the code
9
+
10
+ You'll need MRI (any version) if you want to build for MRI. To build the Java implementation you'll need JRuby.
11
+ You'll also need Ragel installed and on your PATH.
12
+ Finally you'll need the jeweler gem. (Jeweler will tell you what other gems you need when you run rake)
13
+
14
+ === MRI
15
+
16
+ rake clean compile
17
+
18
+ === Java
19
+
20
+ rake clean jar
21
+
22
+ == Running RSpec and Cucumber tests
23
+
24
+ rake clean spec cucumber
25
+
26
+ If the RL_LANG environment variable is set, only the parsers for the languages specified there will be built.
27
+ E.g. in Bash, export RL_LANG="en,fr,no". This can be quite helpful when modifying the Ragel grammar.
28
+
29
+ == Release process
30
+
31
+ * Bump version in the VERSION.yml file and:
32
+ ** java/pom.xml
33
+ ** ikvm/Gherkin/Gherkin.csproj
34
+ * rake release:ALL
35
+ * Announce on Cucumber list, IRC and Twitter.
36
+
37
+ == Configuring Rake-Compiler for cross compilation
38
+ In order to build Windows binaries (so we can release Windows gems from OS X/Linux) we need to set up rake-compiler.
39
+
40
+ http://github.com/luislavena/rake-compiler/
41
+
42
+ I didn't want to install macports (I'm on homebrew) and I couldn't figure out how to build MinGW myself. I got prebuilt binaries:
43
+ http://crossgcc.rts-software.org/doku.php - just add the bin folder to your PATH
44
+
45
+ == Note on Patches/Pull Requests
46
+
47
+ * Fork the project.
48
+ * Run rake ragel:rb to generate all the I18N lexers
49
+ * Make your feature addition or bug fix.
50
+ * Add tests for it. This is important so I don't break it in a
51
+ future version unintentionally.
52
+ * Commit, do not mess with Rakefile, VERSION, or History.txt.
53
+ (if you want to have your own version, that is fine but
54
+ bump version in a commit by itself I can ignore when I pull)
55
+ * Send me a pull request. Bonus points for topic branches.
56
+
57
+ == Copyright
58
+
59
+ Copyright (c) 2009 Mike Sassak, Gregory Hnatiuk, Aslak Hellesøy. See LICENSE for details.
@@ -0,0 +1,58 @@
1
+ # encoding: utf-8
2
+ require 'rbconfig'
3
+ require 'rubygems'
4
+ require 'rake'
5
+ require 'rake/clean'
6
+ require 'yaml'
7
+
8
+ config = YAML.load_file('VERSION.yml')
9
+ GHERKIN_VERSION = "#{config[:major]}.#{config[:minor]}.#{config[:patch]}"
10
+
11
+ begin
12
+ require 'jeweler'
13
+ Jeweler::Tasks.new do |gem|
14
+ gem.name = "gherkin"
15
+ gem.summary = %Q{Fast Gherkin lexer/parser}
16
+ gem.description = %Q{A fast Gherkin lexer/parser based on the Ragel State Machine Compiler.}
17
+ gem.email = "cukes@googlegroups.com"
18
+ gem.homepage = "http://github.com/aslakhellesoy/gherkin"
19
+ gem.authors = ["Mike Sassak", "Gregory Hnatiuk", "Aslak Hellesøy"]
20
+ gem.executables = ["gherkin"]
21
+ gem.add_dependency "trollop", ">= 1.16.2"
22
+ gem.add_development_dependency "rspec", ">= 1.3.0"
23
+ gem.add_development_dependency "cucumber", ">= 0.7.2"
24
+ gem.add_development_dependency "rake-compiler", ">= 0.7.0" unless defined?(JRUBY_VERSION)
25
+
26
+ gem.files -= FileList['ikvm/**/*']
27
+ gem.files -= FileList['java/**/*']
28
+ case ENV['PLATFORM']
29
+ when 'java'
30
+ gem.platform = 'java'
31
+ gem.files += FileList['lib/gherkin.jar']
32
+ gem.extensions = []
33
+ when 'i386-mswin32', 'i386-mingw32'
34
+ gem.platform = ENV['PLATFORM']
35
+ gem.files += FileList['lib/*/*.so']
36
+ gem.extensions = []
37
+ when 'universal-dotnet'
38
+ gem.platform = ENV['PLATFORM']
39
+ gem.files += FileList['lib/*.dll']
40
+ gem.extensions = []
41
+ else
42
+ gem.files += FileList['lib/gherkin/rb_lexer/*.rb']
43
+ gem.files += FileList['ext/**/*.c']
44
+ gem.extensions = FileList['ext/**/extconf.rb']
45
+ end
46
+
47
+ # gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
48
+ end
49
+ Jeweler::GemcutterTasks.new
50
+ rescue LoadError
51
+ warn "Jeweler (or a dependency) not available. Install it with: sudo gem install jeweler"
52
+ end
53
+
54
+ Dir['tasks/**/*.rake'].each { |rake| load File.expand_path(rake) }
55
+
56
+ task :default => [:spec, :cucumber]
57
+ task :spec => defined?(JRUBY_VERSION) ? :jar : :compile
58
+ task :cucumber => defined?(JRUBY_VERSION) ? :jar : :compile
@@ -0,0 +1,5 @@
1
+ ---
2
+ :major: 1
3
+ :minor: 0
4
+ :build:
5
+ :patch: 30
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env ruby
2
+ $:.unshift(File.dirname(__FILE__) + '/../lib') unless $:.include?(File.dirname(__FILE__) + '/../lib')
3
+
4
+ require 'gherkin/cli/main'
5
+ Gherkin::Cli::Main.run(ARGV)
@@ -0,0 +1,3 @@
1
+ default: --format pretty --tags ~@pending,~@wip --strict features
2
+ wip: --format pretty --tags @wip --wip features
3
+ pending: --format pretty --tags @pending,~@native_lexer
@@ -0,0 +1,8 @@
1
+ Feature: Escaped pipes
2
+ Scenario: They are the future
3
+ Given they have arrived
4
+ | æ | o |
5
+ | a | ø |
6
+ Given they have arrived
7
+ | æ | \|o |
8
+ | \|a | ø\\ |
@@ -0,0 +1,226 @@
1
+ # language: en
2
+ Feature: Gherkin Feature lexer
3
+ In order to make it easy to control the Gherkin syntax
4
+ As a Gherkin developer bent on Gherkin world-domination
5
+ I want a feature lexer that uses a feature parser to
6
+ make all the syntax decisions for me
7
+
8
+ Background:
9
+ Given a "ruby" "root" parser
10
+
11
+ Scenario: Correctly formed feature
12
+ Given the following text is parsed:
13
+ """
14
+ # Apologies to Bill Watterson
15
+ @cardboard_box @wip
16
+ Feature: Transmogrification
17
+ As a young boy with a hyperactive imagination
18
+ I want a cardboard box
19
+ In order to transform the ennui of suburban life into something
20
+ befitting my imagination
21
+
22
+ Background:
23
+ Given I have a transmogrifier
24
+ And I am a member of G.R.O.S.S
25
+
26
+ Scenario: Whoozit to whatzit transmogrification
27
+ Given I have a whoozit
28
+ When I put it in the transmogrifier
29
+ And I press the "transmogrify" button
30
+ Then I should have a whatzit
31
+
32
+ Scenario Outline: Imaginary Beings
33
+ Given I have a <boring being>
34
+ When I transmogrify it with the incantation:
35
+ \"\"\"
36
+ ALAKAZAM!
37
+ \"\"\"
38
+ Then I should have an <exciting being>
39
+
40
+ Examples:
41
+ | boring being | exciting being |
42
+ | Sparrow | Alicanto |
43
+ | Goldfish | Baldanders |
44
+ | Cow | Hsiao |
45
+
46
+ Scenario: Sense of humor detection
47
+ Given the following excerpt:
48
+ \"\"\"
49
+ WOMAN: Who are the Britons?
50
+ ARTHUR: Well, we all are. we're all Britons and I am your king.
51
+ WOMAN: I didn't know we had a king. I thought we were an autonomous
52
+ collective.
53
+ DENNIS: You're fooling yourself. We're living in a dictatorship.
54
+ A self-perpetuating autocracy in which the working classes--
55
+ WOMAN: Oh there you go, bringing class into it again.
56
+ DENNIS: That's what it's all about if only people would--
57
+ ARTHUR: Please, please good people. I am in haste. Who lives
58
+ in that castle?
59
+ \"\"\"
60
+ When I read it
61
+ Then I should be amused
62
+ """
63
+ Then there should be no parse errors
64
+
65
+ Scenario: Keyword before feature
66
+ Given the following text is parsed:
67
+ """
68
+ Scenario: Bullying my way to the head of the line
69
+ Given I am a big bully of a scenario
70
+ Then I should be caught by the syntax police(y)
71
+
72
+ Feature: Too timid to stand up for myself
73
+ """
74
+ Then there should be parse errors on lines 1 through 3
75
+
76
+ Scenario: Tag ends background and scenario
77
+ Given the following text is parsed:
78
+ """
79
+ Feature: test feature
80
+ Background:
81
+ Given a something
82
+ @tag
83
+ And something else
84
+
85
+ @foo
86
+ Scenario: my scenario
87
+ @tag
88
+ Given this is a step
89
+ @oh_hai
90
+ And this is a horrible idea
91
+ Then it shouldn't work
92
+ """
93
+ Then there should be parse errors on lines 5, 10 and 12
94
+
95
+ Scenario: Malformed Tables
96
+ Given the following text is parsed:
97
+ """
98
+ Feature: Antiques Roadshow
99
+ Scenario Outline: Table
100
+ Given a <foo>
101
+ Then a <bar>
102
+
103
+ Examples:
104
+ | foo | bar |
105
+ | 42 | towel |
106
+ @hello
107
+ | 1 | prime |
108
+
109
+ Scenario: Table arguments
110
+ Given this step needs this table:
111
+ | foo | bar |
112
+ | one | two |
113
+ @tag
114
+ | aaa | bbb |
115
+ """
116
+ Then there should be parse errors on lines 10 and 17
117
+
118
+ Scenario: Well-formed Tables
119
+ Given the following text is parsed:
120
+ """
121
+ Feature: Row-by-row
122
+
123
+ Scenario: Tables with comments!
124
+ Given I can now comment out a row:
125
+ | Key | Value |
126
+ # | Yes | No |
127
+ # | Good | Bad |
128
+ | Good | Evil |
129
+ Then I am pleased by these things:
130
+ | Raindrops | Roses |
131
+ # | Whiskers | Kittens |
132
+ | Bright Copper | Kettles |
133
+ # | Warm woolen | Mittens |
134
+ | Also Oban | And Hendricks |
135
+ """
136
+ Then there should be no parse errors
137
+
138
+ Scenario: Multiline keyword descriptions
139
+ Given the following text is parsed:
140
+ """
141
+ Feature: Documentation is fun
142
+ Scenario Outline: With lots of docs
143
+ We need lots of embedded documentation for some reason
144
+ \"\"\" # Not interpreted as a pystring, just plain text
145
+ Oh hai
146
+ \"\"\"
147
+
148
+ La la la
149
+
150
+ Examples:
151
+ | one | two |
152
+ | foo | bar |
153
+
154
+ \"\"\"
155
+ Oh Hello
156
+ \"\"\"
157
+
158
+ # Body of the scenario outline starts below
159
+ Given <something>
160
+ And something <else>
161
+
162
+ # The real examples table
163
+ Examples:
164
+ | something | else |
165
+ | orange | apple |
166
+ """
167
+ Then there should be no parse errors
168
+
169
+ Scenario: Scenario Outline with multiple Example groups
170
+ Given the following text is parsed:
171
+ """
172
+ Feature: Outline Sample
173
+
174
+ Scenario: I have no steps
175
+
176
+ Scenario Outline: Test state
177
+ Given <state> without a table
178
+ Given <other_state> without a table
179
+
180
+ Examples: Rainbow colours
181
+ | state | other_state |
182
+ | missing | passing |
183
+ | passing | passing |
184
+ | failing | passing |
185
+
186
+ Examples: Only passing
187
+ | state | other_state |
188
+ | passing | passing |
189
+ """
190
+ Then there should be no parse errors
191
+
192
+ Scenario: Multiple Scenario Outlines with multiline outline steps
193
+ Given the following text is parsed:
194
+ """
195
+ Feature: Test
196
+ Scenario Outline: with step tables
197
+ Given I have the following fruits in my pantry
198
+ | name | quantity |
199
+ | cucumbers | 10 |
200
+ | strawberrys | 5 |
201
+ | apricots | 7 |
202
+
203
+ When I eat <number> <fruits> from the pantry
204
+ Then I should have <left> <fruits> in the pantry
205
+
206
+ Examples:
207
+ | number | fruits | left |
208
+ | 2 | cucumbers | 8 |
209
+ | 4 | strawberrys | 1 |
210
+ | 2 | apricots | 5 |
211
+
212
+ Scenario Outline: placeholder in a multiline string
213
+ Given my shopping list
214
+ \"\"\"
215
+ Must buy some <fruits>
216
+ \"\"\"
217
+ Then my shopping list should equal
218
+ \"\"\"
219
+ Must buy some cucumbers
220
+ \"\"\"
221
+
222
+ Examples:
223
+ | fruits |
224
+ | cucumbers |
225
+ """
226
+ Then there should be no parse errors