aslakhellesoy-cucumber 0.1.2 → 0.1.3

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 (47) hide show
  1. data/Manifest.txt +22 -10
  2. data/README.textile +147 -17
  3. data/README.txt +41 -0
  4. data/config/hoe.rb +1 -1
  5. data/examples/calculator/features/addition.feature +7 -7
  6. data/examples/calculator/features/division.feature +3 -4
  7. data/examples/calculator/features/steps/{addition_steps.rb → calculator_steps.rb} +0 -1
  8. data/examples/calculator/lib/calculator.rb +2 -4
  9. data/examples/{pure_ruby → calculator_ruby_features}/Rakefile +0 -0
  10. data/examples/{pure_ruby → calculator_ruby_features}/features/addition.rb +2 -2
  11. data/examples/{pure_ruby/features/steps/addition_steps.rb → calculator_ruby_features/features/steps/calculator_steps.rb} +0 -0
  12. data/examples/java/src/cucumber/demo/Hello.java +1 -1
  13. data/examples/{simple_norwegian → norwegian_calculator}/Rakefile +0 -0
  14. data/examples/{simple_norwegian/features/steps/matte_steg.rb.rb → norwegian_calculator/features/kalkulator_steps.rb} +2 -2
  15. data/examples/{simple_norwegian → norwegian_calculator}/features/summering.feature +4 -4
  16. data/examples/{web → watir}/Rakefile +0 -0
  17. data/examples/{web → watir}/features/search.feature +1 -1
  18. data/examples/{web → watir}/features/steps/stories_steps.rb +4 -4
  19. data/gem_tasks/gemspec.rake +6 -0
  20. data/generators/cucumber/cucumber_generator.rb +20 -0
  21. data/generators/cucumber/templates/common_webrat.rb +30 -0
  22. data/generators/cucumber/templates/cucumber.rake +7 -0
  23. data/generators/cucumber/templates/env.rb +6 -0
  24. data/generators/feature/feature_generator.rb +17 -0
  25. data/generators/feature/templates/feature.erb +27 -0
  26. data/generators/feature/templates/steps.erb +22 -0
  27. data/lib/cucumber.rb +9 -1
  28. data/lib/cucumber/cli.rb +13 -8
  29. data/lib/cucumber/executor.rb +0 -4
  30. data/lib/cucumber/formatters/html_formatter.rb +1 -0
  31. data/lib/cucumber/formatters/pretty_formatter.rb +15 -5
  32. data/lib/cucumber/languages.yml +1 -1
  33. data/lib/cucumber/rails/rspec.rb +12 -0
  34. data/lib/cucumber/rails/world.rb +18 -16
  35. data/lib/cucumber/rake/task.rb +17 -14
  36. data/lib/cucumber/step_methods.rb +3 -1
  37. data/lib/cucumber/tree/scenario.rb +6 -0
  38. data/lib/cucumber/tree/step.rb +8 -0
  39. data/lib/cucumber/treetop_parser/feature.treetop.erb +10 -6
  40. data/lib/cucumber/treetop_parser/feature_en.rb +132 -81
  41. data/lib/cucumber/treetop_parser/feature_fr.rb +136 -85
  42. data/lib/cucumber/treetop_parser/feature_no.rb +132 -81
  43. data/lib/cucumber/treetop_parser/feature_pt.rb +132 -81
  44. data/lib/cucumber/version.rb +1 -1
  45. data/spec/cucumber/treetop_parser/feature_parser_spec.rb +40 -0
  46. data/spec/cucumber/treetop_parser/spaces.feature +10 -0
  47. metadata +25 -12
@@ -14,7 +14,7 @@ module Feature
14
14
  end
15
15
 
16
16
  def scenarios
17
- elements[1]
17
+ elements[2]
18
18
  end
19
19
  end
20
20
 
@@ -39,8 +39,21 @@ module Feature
39
39
  r1 = _nt_header
40
40
  s0 << r1
41
41
  if r1
42
- r2 = _nt_scenarios
42
+ s2, i2 = [], index
43
+ loop do
44
+ r3 = _nt_whitespace
45
+ if r3
46
+ s2 << r3
47
+ else
48
+ break
49
+ end
50
+ end
51
+ r2 = SyntaxNode.new(input, i2...index, s2)
43
52
  s0 << r2
53
+ if r2
54
+ r4 = _nt_scenarios
55
+ s0 << r4
56
+ end
44
57
  end
45
58
  if s0.last
46
59
  r0 = (SyntaxNode).new(input, i0...index, s0)
@@ -181,11 +194,15 @@ module Feature
181
194
 
182
195
  module StepScenario1
183
196
  def scenario_keyword
184
- elements[1]
197
+ elements[0]
185
198
  end
186
199
 
187
200
  def name
188
- elements[4]
201
+ elements[3]
202
+ end
203
+
204
+ def blanks
205
+ elements[5]
189
206
  end
190
207
 
191
208
  def steps
@@ -195,7 +212,7 @@ module Feature
195
212
 
196
213
  module StepScenario2
197
214
  def populate(feature)
198
- sc = feature.add_scenario(name.text_value)
215
+ sc = feature.add_scenario(name.text_value.strip)
199
216
  steps.elements.each{|s| s.populate(sc)}
200
217
  Feature.last_scenario = sc
201
218
  end
@@ -210,33 +227,59 @@ module Feature
210
227
  end
211
228
 
212
229
  i0, s0 = index, []
213
- s1, i1 = [], index
214
- loop do
215
- r2 = _nt_whitespace
216
- if r2
217
- s1 << r2
218
- else
219
- break
220
- end
221
- end
222
- r1 = SyntaxNode.new(input, i1...index, s1)
230
+ r1 = _nt_scenario_keyword
223
231
  s0 << r1
224
232
  if r1
225
- r3 = _nt_scenario_keyword
226
- s0 << r3
227
- if r3
228
- if input.index(":", index) == index
229
- r4 = (SyntaxNode).new(input, index...(index + 1))
230
- @index += 1
231
- else
232
- terminal_parse_failure(":")
233
- r4 = nil
233
+ if input.index(":", index) == index
234
+ r2 = (SyntaxNode).new(input, index...(index + 1))
235
+ @index += 1
236
+ else
237
+ terminal_parse_failure(":")
238
+ r2 = nil
239
+ end
240
+ s0 << r2
241
+ if r2
242
+ s3, i3 = [], index
243
+ loop do
244
+ r4 = _nt_whitespace
245
+ if r4
246
+ s3 << r4
247
+ else
248
+ break
249
+ end
234
250
  end
235
- s0 << r4
236
- if r4
251
+ r3 = SyntaxNode.new(input, i3...index, s3)
252
+ s0 << r3
253
+ if r3
237
254
  s5, i5 = [], index
238
255
  loop do
239
- r6 = _nt_whitespace
256
+ i6, s6 = index, []
257
+ i7 = index
258
+ r8 = _nt_newline
259
+ if r8
260
+ r7 = nil
261
+ else
262
+ self.index = i7
263
+ r7 = SyntaxNode.new(input, index...index)
264
+ end
265
+ s6 << r7
266
+ if r7
267
+ if index < input_length
268
+ r9 = (SyntaxNode).new(input, index...(index + 1))
269
+ @index += 1
270
+ else
271
+ terminal_parse_failure("any character")
272
+ r9 = nil
273
+ end
274
+ s6 << r9
275
+ end
276
+ if s6.last
277
+ r6 = (SyntaxNode).new(input, i6...index, s6)
278
+ r6.extend(StepScenario0)
279
+ else
280
+ self.index = i6
281
+ r6 = nil
282
+ end
240
283
  if r6
241
284
  s5 << r6
242
285
  else
@@ -246,72 +289,37 @@ module Feature
246
289
  r5 = SyntaxNode.new(input, i5...index, s5)
247
290
  s0 << r5
248
291
  if r5
249
- s7, i7 = [], index
292
+ s10, i10 = [], index
250
293
  loop do
251
- i8, s8 = index, []
252
- i9 = index
253
- r10 = _nt_newline
254
- if r10
255
- r9 = nil
256
- else
257
- self.index = i9
258
- r9 = SyntaxNode.new(input, index...index)
259
- end
260
- s8 << r9
261
- if r9
262
- if index < input_length
263
- r11 = (SyntaxNode).new(input, index...(index + 1))
264
- @index += 1
265
- else
266
- terminal_parse_failure("any character")
267
- r11 = nil
268
- end
269
- s8 << r11
270
- end
271
- if s8.last
272
- r8 = (SyntaxNode).new(input, i8...index, s8)
273
- r8.extend(StepScenario0)
274
- else
275
- self.index = i8
276
- r8 = nil
277
- end
278
- if r8
279
- s7 << r8
294
+ r11 = _nt_newline
295
+ if r11
296
+ s10 << r11
280
297
  else
281
298
  break
282
299
  end
283
300
  end
284
- r7 = SyntaxNode.new(input, i7...index, s7)
285
- s0 << r7
286
- if r7
287
- s12, i12 = [], index
288
- loop do
289
- r13 = _nt_newline
290
- if r13
291
- s12 << r13
292
- else
293
- break
294
- end
295
- end
296
- r12 = SyntaxNode.new(input, i12...index, s12)
301
+ r10 = SyntaxNode.new(input, i10...index, s10)
302
+ s0 << r10
303
+ if r10
304
+ r12 = _nt_blanks
297
305
  s0 << r12
298
306
  if r12
299
- s14, i14 = [], index
307
+ s13, i13 = [], index
300
308
  loop do
301
- r15 = _nt_step
302
- if r15
303
- s14 << r15
309
+ r14 = _nt_step
310
+ if r14
311
+ s13 << r14
304
312
  else
305
313
  break
306
314
  end
307
315
  end
308
- if s14.empty?
309
- self.index = i14
310
- r14 = nil
316
+ if s13.empty?
317
+ self.index = i13
318
+ r13 = nil
311
319
  else
312
- r14 = SyntaxNode.new(input, i14...index, s14)
320
+ r13 = SyntaxNode.new(input, i13...index, s13)
313
321
  end
314
- s0 << r14
322
+ s0 << r13
315
323
  end
316
324
  end
317
325
  end
@@ -344,12 +352,15 @@ module Feature
344
352
  elements[3]
345
353
  end
346
354
 
355
+ def blanks
356
+ elements[5]
357
+ end
347
358
  end
348
359
 
349
360
  module Step2
350
361
  def populate(scenario)
351
362
  line = input.line_of(interval.first)
352
- scenario.add_step(step_keyword.text_value, name.text_value, line)
363
+ scenario.add_step(step_keyword.text_value, name.text_value.strip, line)
353
364
  end
354
365
  end
355
366
 
@@ -438,6 +449,10 @@ module Feature
438
449
  end
439
450
  r11 = SyntaxNode.new(input, i11...index, s11)
440
451
  s0 << r11
452
+ if r11
453
+ r13 = _nt_blanks
454
+ s0 << r13
455
+ end
441
456
  end
442
457
  end
443
458
  end
@@ -853,6 +868,42 @@ module Feature
853
868
  return r0
854
869
  end
855
870
 
871
+ def _nt_blanks
872
+ start_index = index
873
+ if node_cache[:blanks].has_key?(index)
874
+ cached = node_cache[:blanks][index]
875
+ @index = cached.interval.end if cached
876
+ return cached
877
+ end
878
+
879
+ s0, i0 = [], index
880
+ loop do
881
+ i1 = index
882
+ r2 = _nt_newline
883
+ if r2
884
+ r1 = r2
885
+ else
886
+ r3 = _nt_whitespace
887
+ if r3
888
+ r1 = r3
889
+ else
890
+ self.index = i1
891
+ r1 = nil
892
+ end
893
+ end
894
+ if r1
895
+ s0 << r1
896
+ else
897
+ break
898
+ end
899
+ end
900
+ r0 = SyntaxNode.new(input, i0...index, s0)
901
+
902
+ node_cache[:blanks][start_index] = r0
903
+
904
+ return r0
905
+ end
906
+
856
907
  def _nt_newline
857
908
  start_index = index
858
909
  if node_cache[:newline].has_key?(index)
@@ -900,7 +951,7 @@ module Feature
900
951
  return cached
901
952
  end
902
953
 
903
- if input.index(Regexp.new('[ \\v\\f\\t]'), index) == index
954
+ if input.index(Regexp.new('[ \\t]'), index) == index
904
955
  r0 = (SyntaxNode).new(input, index...(index + 1))
905
956
  @index += 1
906
957
  else
@@ -14,7 +14,7 @@ module Feature
14
14
  end
15
15
 
16
16
  def scenarios
17
- elements[1]
17
+ elements[2]
18
18
  end
19
19
  end
20
20
 
@@ -39,8 +39,21 @@ module Feature
39
39
  r1 = _nt_header
40
40
  s0 << r1
41
41
  if r1
42
- r2 = _nt_scenarios
42
+ s2, i2 = [], index
43
+ loop do
44
+ r3 = _nt_whitespace
45
+ if r3
46
+ s2 << r3
47
+ else
48
+ break
49
+ end
50
+ end
51
+ r2 = SyntaxNode.new(input, i2...index, s2)
43
52
  s0 << r2
53
+ if r2
54
+ r4 = _nt_scenarios
55
+ s0 << r4
56
+ end
44
57
  end
45
58
  if s0.last
46
59
  r0 = (SyntaxNode).new(input, i0...index, s0)
@@ -181,11 +194,15 @@ module Feature
181
194
 
182
195
  module StepScenario1
183
196
  def scenario_keyword
184
- elements[1]
197
+ elements[0]
185
198
  end
186
199
 
187
200
  def name
188
- elements[4]
201
+ elements[3]
202
+ end
203
+
204
+ def blanks
205
+ elements[5]
189
206
  end
190
207
 
191
208
  def steps
@@ -195,7 +212,7 @@ module Feature
195
212
 
196
213
  module StepScenario2
197
214
  def populate(feature)
198
- sc = feature.add_scenario(name.text_value)
215
+ sc = feature.add_scenario(name.text_value.strip)
199
216
  steps.elements.each{|s| s.populate(sc)}
200
217
  Feature.last_scenario = sc
201
218
  end
@@ -210,33 +227,59 @@ module Feature
210
227
  end
211
228
 
212
229
  i0, s0 = index, []
213
- s1, i1 = [], index
214
- loop do
215
- r2 = _nt_whitespace
216
- if r2
217
- s1 << r2
218
- else
219
- break
220
- end
221
- end
222
- r1 = SyntaxNode.new(input, i1...index, s1)
230
+ r1 = _nt_scenario_keyword
223
231
  s0 << r1
224
232
  if r1
225
- r3 = _nt_scenario_keyword
226
- s0 << r3
227
- if r3
228
- if input.index(":", index) == index
229
- r4 = (SyntaxNode).new(input, index...(index + 1))
230
- @index += 1
231
- else
232
- terminal_parse_failure(":")
233
- r4 = nil
233
+ if input.index(":", index) == index
234
+ r2 = (SyntaxNode).new(input, index...(index + 1))
235
+ @index += 1
236
+ else
237
+ terminal_parse_failure(":")
238
+ r2 = nil
239
+ end
240
+ s0 << r2
241
+ if r2
242
+ s3, i3 = [], index
243
+ loop do
244
+ r4 = _nt_whitespace
245
+ if r4
246
+ s3 << r4
247
+ else
248
+ break
249
+ end
234
250
  end
235
- s0 << r4
236
- if r4
251
+ r3 = SyntaxNode.new(input, i3...index, s3)
252
+ s0 << r3
253
+ if r3
237
254
  s5, i5 = [], index
238
255
  loop do
239
- r6 = _nt_whitespace
256
+ i6, s6 = index, []
257
+ i7 = index
258
+ r8 = _nt_newline
259
+ if r8
260
+ r7 = nil
261
+ else
262
+ self.index = i7
263
+ r7 = SyntaxNode.new(input, index...index)
264
+ end
265
+ s6 << r7
266
+ if r7
267
+ if index < input_length
268
+ r9 = (SyntaxNode).new(input, index...(index + 1))
269
+ @index += 1
270
+ else
271
+ terminal_parse_failure("any character")
272
+ r9 = nil
273
+ end
274
+ s6 << r9
275
+ end
276
+ if s6.last
277
+ r6 = (SyntaxNode).new(input, i6...index, s6)
278
+ r6.extend(StepScenario0)
279
+ else
280
+ self.index = i6
281
+ r6 = nil
282
+ end
240
283
  if r6
241
284
  s5 << r6
242
285
  else
@@ -246,72 +289,37 @@ module Feature
246
289
  r5 = SyntaxNode.new(input, i5...index, s5)
247
290
  s0 << r5
248
291
  if r5
249
- s7, i7 = [], index
292
+ s10, i10 = [], index
250
293
  loop do
251
- i8, s8 = index, []
252
- i9 = index
253
- r10 = _nt_newline
254
- if r10
255
- r9 = nil
256
- else
257
- self.index = i9
258
- r9 = SyntaxNode.new(input, index...index)
259
- end
260
- s8 << r9
261
- if r9
262
- if index < input_length
263
- r11 = (SyntaxNode).new(input, index...(index + 1))
264
- @index += 1
265
- else
266
- terminal_parse_failure("any character")
267
- r11 = nil
268
- end
269
- s8 << r11
270
- end
271
- if s8.last
272
- r8 = (SyntaxNode).new(input, i8...index, s8)
273
- r8.extend(StepScenario0)
274
- else
275
- self.index = i8
276
- r8 = nil
277
- end
278
- if r8
279
- s7 << r8
294
+ r11 = _nt_newline
295
+ if r11
296
+ s10 << r11
280
297
  else
281
298
  break
282
299
  end
283
300
  end
284
- r7 = SyntaxNode.new(input, i7...index, s7)
285
- s0 << r7
286
- if r7
287
- s12, i12 = [], index
288
- loop do
289
- r13 = _nt_newline
290
- if r13
291
- s12 << r13
292
- else
293
- break
294
- end
295
- end
296
- r12 = SyntaxNode.new(input, i12...index, s12)
301
+ r10 = SyntaxNode.new(input, i10...index, s10)
302
+ s0 << r10
303
+ if r10
304
+ r12 = _nt_blanks
297
305
  s0 << r12
298
306
  if r12
299
- s14, i14 = [], index
307
+ s13, i13 = [], index
300
308
  loop do
301
- r15 = _nt_step
302
- if r15
303
- s14 << r15
309
+ r14 = _nt_step
310
+ if r14
311
+ s13 << r14
304
312
  else
305
313
  break
306
314
  end
307
315
  end
308
- if s14.empty?
309
- self.index = i14
310
- r14 = nil
316
+ if s13.empty?
317
+ self.index = i13
318
+ r13 = nil
311
319
  else
312
- r14 = SyntaxNode.new(input, i14...index, s14)
320
+ r13 = SyntaxNode.new(input, i13...index, s13)
313
321
  end
314
- s0 << r14
322
+ s0 << r13
315
323
  end
316
324
  end
317
325
  end
@@ -344,12 +352,15 @@ module Feature
344
352
  elements[3]
345
353
  end
346
354
 
355
+ def blanks
356
+ elements[5]
357
+ end
347
358
  end
348
359
 
349
360
  module Step2
350
361
  def populate(scenario)
351
362
  line = input.line_of(interval.first)
352
- scenario.add_step(step_keyword.text_value, name.text_value, line)
363
+ scenario.add_step(step_keyword.text_value, name.text_value.strip, line)
353
364
  end
354
365
  end
355
366
 
@@ -438,6 +449,10 @@ module Feature
438
449
  end
439
450
  r11 = SyntaxNode.new(input, i11...index, s11)
440
451
  s0 << r11
452
+ if r11
453
+ r13 = _nt_blanks
454
+ s0 << r13
455
+ end
441
456
  end
442
457
  end
443
458
  end
@@ -853,6 +868,42 @@ module Feature
853
868
  return r0
854
869
  end
855
870
 
871
+ def _nt_blanks
872
+ start_index = index
873
+ if node_cache[:blanks].has_key?(index)
874
+ cached = node_cache[:blanks][index]
875
+ @index = cached.interval.end if cached
876
+ return cached
877
+ end
878
+
879
+ s0, i0 = [], index
880
+ loop do
881
+ i1 = index
882
+ r2 = _nt_newline
883
+ if r2
884
+ r1 = r2
885
+ else
886
+ r3 = _nt_whitespace
887
+ if r3
888
+ r1 = r3
889
+ else
890
+ self.index = i1
891
+ r1 = nil
892
+ end
893
+ end
894
+ if r1
895
+ s0 << r1
896
+ else
897
+ break
898
+ end
899
+ end
900
+ r0 = SyntaxNode.new(input, i0...index, s0)
901
+
902
+ node_cache[:blanks][start_index] = r0
903
+
904
+ return r0
905
+ end
906
+
856
907
  def _nt_newline
857
908
  start_index = index
858
909
  if node_cache[:newline].has_key?(index)
@@ -900,7 +951,7 @@ module Feature
900
951
  return cached
901
952
  end
902
953
 
903
- if input.index(Regexp.new('[ \\v\\f\\t]'), index) == index
954
+ if input.index(Regexp.new('[ \\t]'), index) == index
904
955
  r0 = (SyntaxNode).new(input, index...(index + 1))
905
956
  @index += 1
906
957
  else