gherkin 1.0.1 → 1.0.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,2 @@
1
+ Gregory Hnatiuk <ghnatiuk@gmail.com>
2
+ Mike Sassak <msassak@gmail.com>
@@ -0,0 +1,9 @@
1
+ == 1.0.2 (2009-12-30)
2
+
3
+ == Bugfixes
4
+ * Build passes on Ruby 1.9.2 (Aslak Hellesøy)
5
+
6
+ == New features
7
+ * New command line based on trollop. Commands: reformat, stats. (Aslak Hellesøy)
8
+ * I18nLexer#scan sets #language to the I18n for the language scanned (Mike Sassak)
9
+ * I18n#adverbs, brings I18n to parity with Cucumber::Parser::NaturalLanguage (Mike Sassak)
@@ -1,54 +1,25 @@
1
1
  = Gherkin
2
2
 
3
- Fast Gherkin lexer based on Ragel.
3
+ Fast Gherkin lexer and parser based on Ragel. Gherkin is two things:
4
4
 
5
- Gherkin is the language that has evolved out of the Cucumber project. Cucumber currently uses
6
- Treetop, which is too slow for larger projects.
5
+ * The language that has evolved out of the Cucumber project.
6
+ * This library
7
7
 
8
- This project will *not* include code to build an AST. Instead, this lexer will have an API
9
- that makes it possible to plug in a builder that can build an AST.
10
-
11
- == Testing
8
+ == Running RSpec and Cucumber tests
12
9
 
13
10
  rake clean spec cucumber
14
11
 
15
- == Cleaning generated code
16
-
17
- rake clobber
18
-
19
12
  == Release process
20
13
 
21
- Run just "rake clean spec cucumber" for each platform (1.8.6, 1.8.7, 1.9, jruby) to make sure all is green.
22
-
23
- 1) rvm 1.8.7
24
- 2) Bump version in the VERSION file
25
- 3) rake clean jar compile
26
- 2) rake gemspec
27
- 3) git commit -a -m "Release vX.Y.Z"
28
- 4) rake release
29
- 5) ./nativegems.sh
30
- 6) gem push pkg/... (for each native gem)
31
-
32
- TODO: Also build windows gem with dll using rake-compiler. MinGW gem can be done on OS X/Linux, but
33
- the one for the old Ruby one-click installers must be built with Visual Studio/nmake.
34
-
35
- == Build windows gems on OS X
36
-
37
- * http://www.copiousfreetime.org/articles/2008/10/12/building-gems-for-windows.html
38
- * rake-compiler docs
39
-
40
- == Notes
41
-
42
- Ragel supports Ruby, but it's much slower than C. The ruby target will be used for development.
43
- The final version will use C for MRI and Java for JRuby.
44
-
45
- == Ragel links
46
-
47
- * http://www.complang.org/ragel/
48
- * http://dev.sipdoc.net/attachments/2/ragel_talk.pdf
49
- * http://lambda-the-ultimate.org/node/1125
50
- * http://www.zedshaw.com/essays/ragel_state_charts.html
51
- * http://www.devchix.com/2008/01/13/a-hello-world-for-ruby-on-ragel-60/
14
+ * Run "rake clean spec cucumber" for each platform (1.8.6, 1.8.7, 1.9, jruby) to make sure all is green.
15
+ * rvm 1.8.7
16
+ * Bump version in the VERSION file
17
+ * rake clean jar compile
18
+ * rake gemspec
19
+ * git commit -a -m "Release vX.Y.Z"
20
+ * rake release
21
+ * ./nativegems.sh
22
+ * gem push pkg/... (for each native gem)
52
23
 
53
24
  == Note on Patches/Pull Requests
54
25
 
@@ -57,7 +28,7 @@ The final version will use C for MRI and Java for JRuby.
57
28
  * Make your feature addition or bug fix.
58
29
  * Add tests for it. This is important so I don't break it in a
59
30
  future version unintentionally.
60
- * Commit, do not mess with rakefile, version, or history.
31
+ * Commit, do not mess with Rakefile, VERSION, or History.txt.
61
32
  (if you want to have your own version, that is fine but
62
33
  bump version in a commit by itself I can ignore when I pull)
63
34
  * Send me a pull request. Bonus points for topic branches.
data/Rakefile CHANGED
@@ -8,28 +8,24 @@ begin
8
8
  require 'jeweler'
9
9
  Jeweler::Tasks.new do |gem|
10
10
  gem.name = "gherkin"
11
- gem.summary = %Q{Fast Gherkin lexer}
12
- gem.description = %Q{A fast Gherkin lexer in Ragel}
11
+ gem.summary = %Q{Fast Gherkin lexer/parser}
12
+ gem.description = %Q{A fast Gherkin lexer/parser based on the Ragel State Machine Compiler.}
13
13
  gem.email = "cukes@googlegroups.com"
14
14
  gem.homepage = "http://github.com/aslakhellesoy/gherkin"
15
15
  gem.authors = ["Mike Sassak", "Gregory Hnatiuk", "Aslak Hellesøy"]
16
- gem.default_executable = "gherkin"
17
- gem.executables = ["gherkin", "gherkin-purdy"]
18
- gem.add_development_dependency "rspec", "1.2.9"
19
- gem.add_development_dependency "cucumber", "0.4.4"
20
- gem.add_development_dependency "rake-compiler", "0.6.0" unless defined?(JRUBY_VERSION)
16
+ gem.executables = ["gherkin"]
17
+ gem.add_dependency "trollop", ">= 1.15"
18
+ gem.add_development_dependency "rspec", ">= 1.2.9"
19
+ gem.add_development_dependency "cucumber", ">= 0.5.1"
20
+ gem.add_development_dependency "rake-compiler", ">= 0.7.0" unless defined?(JRUBY_VERSION)
21
21
 
22
22
  case ENV['PLATFORM']
23
- when 'universal-java-1.5'
24
- gem.platform = 'universal-java-1.5'
23
+ when 'java'
24
+ gem.platform = 'java'
25
25
  gem.files += FileList['lib/gherkin.jar']
26
26
  gem.extensions = []
27
- when 'i386-mswin32'
28
- gem.platform = 'i386-mswin32'
29
- gem.files += FileList['lib/*.so']
30
- gem.extensions = []
31
- when 'i386-mingw32'
32
- gem.platform = 'i386-mingw32'
27
+ when 'i386-mswin32', 'i386-mingw32'
28
+ gem.platform = ENV['PLATFORM']
33
29
  gem.files += FileList['lib/*.so']
34
30
  gem.extensions = []
35
31
  else
@@ -42,10 +38,10 @@ begin
42
38
  end
43
39
  Jeweler::GemcutterTasks.new
44
40
  rescue LoadError
45
- puts "Jeweler (or a dependency) not available. Install it with: sudo gem install jeweler"
41
+ warn "Jeweler (or a dependency) not available. Install it with: sudo gem install jeweler"
46
42
  end
47
43
 
48
- Dir['tasks/**/*.rake'].each { |rake| load rake }
44
+ Dir['tasks/**/*.rake'].each { |rake| load File.expand_path(rake) }
49
45
 
50
46
  task :default => [:spec, :cucumber]
51
47
  task :spec => defined?(JRUBY_VERSION) ? :jar : :compile
@@ -1,4 +1,4 @@
1
1
  ---
2
2
  :minor: 0
3
- :patch: 1
3
+ :patch: 2
4
4
  :major: 1
@@ -1,10 +1,5 @@
1
1
  #!/usr/bin/env ruby
2
2
  $:.unshift(File.dirname(__FILE__) + '/../lib') unless $:.include?(File.dirname(__FILE__) + '/../lib')
3
3
 
4
- require 'gherkin'
5
- require 'gherkin/tools/pretty_printer'
6
-
7
- listener = Gherkin::Tools::PrettyPrinter.new(STDOUT)
8
- parser = Gherkin::Parser.new(listener, true) # We could skip the parser here, if we don't want to verify well-formedness
9
- lexer = Gherkin::I18nLexer.new(parser)
10
- lexer.scan(IO.read(ARGV[0]))
4
+ require 'gherkin/cli/main'
5
+ Gherkin::Cli::Main.run(ARGV)
@@ -3,9 +3,9 @@ Feature: Gherkin Feature lexer
3
3
  In order to make it easy to control the Gherkin syntax
4
4
  As a Gherkin developer bent on Gherkin world-domination
5
5
  I want a feature lexer that uses a feature parser to
6
- make all the syntax decisions for me
6
+ make all the syntax decisions for me
7
7
 
8
- Background:
8
+ Background:
9
9
  Given a "en", "ruby" "root" parser
10
10
 
11
11
  Scenario: Correctly formed feature
@@ -22,13 +22,13 @@ Feature: Gherkin Feature lexer
22
22
  Background:
23
23
  Given I have a transmogrifier
24
24
  And I am a member of G.R.O.S.S
25
-
25
+
26
26
  Scenario: Whoozit to whatzit transmogrification
27
27
  Given I have a whoozit
28
28
  When I put it in the transmogrifier
29
29
  And I press the "transmogrify" button
30
30
  Then I should have a whatzit
31
-
31
+
32
32
  Scenario Outline: Imaginary Beings
33
33
  Given I have a <boring being>
34
34
  When I transmogrify it with the incantation:
@@ -36,7 +36,7 @@ Feature: Gherkin Feature lexer
36
36
  ALAKAZAM!
37
37
  \"\"\"
38
38
  Then I should have an <exciting being>
39
-
39
+
40
40
  Examples:
41
41
  | boring being | exciting being |
42
42
  | Sparrow | Alicanto |
@@ -60,8 +60,8 @@ Feature: Gherkin Feature lexer
60
60
  When I read it
61
61
  Then I should be amused
62
62
  """
63
- Then there should be no parse errors
64
-
63
+ Then there should be no parse errors
64
+
65
65
  Scenario: Keyword before feature
66
66
  Given the following text is parsed:
67
67
  """
@@ -91,7 +91,7 @@ Feature: Gherkin Feature lexer
91
91
  Then it shouldn't work
92
92
  """
93
93
  Then there should be parse errors on lines 5, 10 and 12
94
-
94
+
95
95
  Scenario: Tables
96
96
  Given the following text is parsed:
97
97
  """
@@ -124,48 +124,48 @@ Feature: Gherkin Feature lexer
124
124
  \"\"\" # Not interpreted as a pystring, just plain text
125
125
  Oh hai
126
126
  \"\"\"
127
-
127
+
128
128
  La la la
129
-
129
+
130
130
  Examples:
131
131
  | one | two |
132
132
  | foo | bar |
133
-
133
+
134
134
  \"\"\"
135
135
  Oh Hello
136
136
  \"\"\"
137
-
137
+
138
138
  # Body of the scenario outline starts below
139
139
  Given <something>
140
140
  And something <else>
141
-
141
+
142
142
  # The real examples table
143
143
  Examples:
144
144
  | something | else |
145
145
  | orange | apple |
146
146
  """
147
- Then there should be no parse errors
147
+ Then there should be no parse errors
148
148
 
149
149
  Scenario: Scenario Outline with multiple Example groups
150
150
  Given the following text is parsed:
151
151
  """
152
152
  Feature: Outline Sample
153
-
153
+
154
154
  Scenario: I have no steps
155
-
155
+
156
156
  Scenario Outline: Test state
157
157
  Given <state> without a table
158
158
  Given <other_state> without a table
159
-
159
+
160
160
  Examples: Rainbow colours
161
- | state | other_state |
162
- | missing | passing|
163
- | passing| passing |
164
- | failing | passing |
161
+ | state | other_state |
162
+ | missing | passing |
163
+ | passing | passing |
164
+ | failing | passing |
165
165
 
166
166
  Examples: Only passing
167
- | state | other_state |
168
- | passing | passing |
167
+ | state | other_state |
168
+ | passing | passing |
169
169
  """
170
170
  Then there should be no parse errors
171
171
 
@@ -175,20 +175,20 @@ Feature: Gherkin Feature lexer
175
175
  Feature: Test
176
176
  Scenario Outline: with step tables
177
177
  Given I have the following fruits in my pantry
178
- | name | quantity |
179
- | cucumbers | 10 |
180
- | strawberrys | 5 |
181
- | apricots | 7 |
182
-
178
+ | name | quantity |
179
+ | cucumbers | 10 |
180
+ | strawberrys | 5 |
181
+ | apricots | 7 |
182
+
183
183
  When I eat <number> <fruits> from the pantry
184
184
  Then I should have <left> <fruits> in the pantry
185
-
185
+
186
186
  Examples:
187
- | number | fruits | left |
188
- | 2 | cucumbers | 8 |
189
- | 4 | strawberrys| 1 |
190
- | 2 | apricots | 5 |
191
-
187
+ | number | fruits | left |
188
+ | 2 | cucumbers | 8 |
189
+ | 4 | strawberrys | 1 |
190
+ | 2 | apricots | 5 |
191
+
192
192
  Scenario Outline: placeholder in a multiline string
193
193
  Given my shopping list
194
194
  \"\"\"
@@ -198,9 +198,9 @@ Feature: Gherkin Feature lexer
198
198
  \"\"\"
199
199
  Must buy some cucumbers
200
200
  \"\"\"
201
-
201
+
202
202
  Examples:
203
- | fruits |
203
+ | fruits |
204
204
  | cucumbers |
205
205
  """
206
206
  Then there should be no parse errors
@@ -1,6 +1,6 @@
1
1
  Feature: Native (C/Java) Lexer
2
2
 
3
- Background:
3
+ Background:
4
4
  Given a "en", "native" "root" parser
5
5
 
6
6
  Scenario: Parsing an empty feature
@@ -9,7 +9,7 @@ Feature: Native (C/Java) Lexer
9
9
  Feature: blah
10
10
  """
11
11
  Then there should be no parse errors
12
-
12
+
13
13
  Scenario: Parsing a comment
14
14
  Given the following text is parsed:
15
15
  """
@@ -4,7 +4,7 @@ Feature: Gherkin Feature lexer/parser
4
4
  I want a feature lexer that uses a feature parser to
5
5
  make all the syntax decisions for me
6
6
 
7
- Background:
7
+ Background:
8
8
  Given a "en", "native" "root" parser
9
9
 
10
10
  Scenario: Correctly formed feature
@@ -27,7 +27,7 @@ Feature: Gherkin Feature lexer/parser
27
27
  When I put it in the transmogrifier
28
28
  And I press the "transmogrify" button
29
29
  Then I should have a whatzit
30
-
30
+
31
31
  Scenario Outline: Imaginary Beings
32
32
  Given I have a <boring being>
33
33
  When I transmogrify it with the incantation:
@@ -35,7 +35,7 @@ Feature: Gherkin Feature lexer/parser
35
35
  ALAKAZAM!
36
36
  \"\"\"
37
37
  Then I should have an <exciting being>
38
-
38
+
39
39
  Examples:
40
40
  | boring being | exciting being |
41
41
  | Sparrow | Alicanto |
@@ -59,8 +59,8 @@ Feature: Gherkin Feature lexer/parser
59
59
  When I read it
60
60
  Then I should be amused
61
61
  """
62
- Then there should be no parse errors
63
-
62
+ Then there should be no parse errors
63
+
64
64
  Scenario: Keyword before feature
65
65
  When the following text is parsed:
66
66
  """
@@ -90,7 +90,7 @@ Feature: Gherkin Feature lexer/parser
90
90
  Then it shouldn't work
91
91
  """
92
92
  Then there should be parse errors on lines 5, 10 and 12
93
-
93
+
94
94
  Scenario: Tables
95
95
  When the following text is parsed:
96
96
  """
@@ -123,44 +123,44 @@ Feature: Gherkin Feature lexer/parser
123
123
  \"\"\" # Not interpreted as a pystring, just plain text
124
124
  Oh hai
125
125
  \"\"\"
126
-
126
+
127
127
  La la la
128
-
128
+
129
129
  Examples:
130
130
  | one | two |
131
131
  | foo | bar |
132
-
132
+
133
133
  \"\"\"
134
134
  Oh Hello
135
135
  \"\"\"
136
-
136
+
137
137
  # Body of the scenario outline starts below
138
138
  Given <something>
139
139
  And something <else>
140
-
140
+
141
141
  # The real examples table
142
142
  Examples:
143
143
  | something | else |
144
144
  | orange | apple |
145
145
  """
146
- Then there should be no parse errors
146
+ Then there should be no parse errors
147
147
 
148
148
  Scenario: Scenario Outline with multiple Example groups
149
149
  When the following text is parsed:
150
150
  """
151
151
  Feature: Outline Sample
152
-
152
+
153
153
  Scenario: I have no steps
154
-
154
+
155
155
  Scenario Outline: Test state
156
156
  Given <state> without a table
157
157
  Given <other_state> without a table
158
-
158
+
159
159
  Examples: Rainbow colours
160
- | state | other_state |
161
- | missing | passing|
162
- | passing| passing |
163
- | failing | passing |
160
+ | state | other_state |
161
+ | missing | passing |
162
+ | passing | passing |
163
+ | failing | passing |
164
164
 
165
165
  Examples: Only passing
166
166
  | state | other_state |
@@ -174,20 +174,20 @@ Feature: Gherkin Feature lexer/parser
174
174
  Feature: Test
175
175
  Scenario Outline: with step tables
176
176
  Given I have the following fruits in my pantry
177
- | name | quantity |
178
- | cucumbers | 10 |
179
- | strawberrys | 5 |
180
- | apricots | 7 |
181
-
177
+ | name | quantity |
178
+ | cucumbers | 10 |
179
+ | strawberrys | 5 |
180
+ | apricots | 7 |
181
+
182
182
  When I eat <number> <fruits> from the pantry
183
183
  Then I should have <left> <fruits> in the pantry
184
-
184
+
185
185
  Examples:
186
- | number | fruits | left |
187
- | 2 | cucumbers | 8 |
188
- | 4 | strawberrys| 1 |
189
- | 2 | apricots | 5 |
190
-
186
+ | number | fruits | left |
187
+ | 2 | cucumbers | 8 |
188
+ | 4 | strawberrys | 1 |
189
+ | 2 | apricots | 5 |
190
+
191
191
  Scenario Outline: placeholder in a multiline string
192
192
  Given my shopping list
193
193
  \"\"\"
@@ -197,9 +197,9 @@ Feature: Gherkin Feature lexer/parser
197
197
  \"\"\"
198
198
  Must buy some cucumbers
199
199
  \"\"\"
200
-
200
+
201
201
  Examples:
202
- | fruits |
202
+ | fruits |
203
203
  | cucumbers |
204
204
  """
205
205
  Then there should be no parse errors