cucumber 0.1.8 → 0.1.9

Sign up to get free protection for your applications and to get access to all the features.
Files changed (155) hide show
  1. data/History.txt +86 -3
  2. data/Manifest.txt +93 -44
  3. data/Rakefile +5 -1
  4. data/bin/cucumber +1 -0
  5. data/cucumber.yml +1 -1
  6. data/examples/calculator_ruby_features/features/{steps → step_definitons}/calculator_steps.rb +0 -0
  7. data/examples/cs/features/{steps → step_definitons}/hello_steps.rb +0 -0
  8. data/examples/cs/features/{steps → step_definitons}/tree_steps.rb +0 -0
  9. data/examples/i18n/README.textile +18 -0
  10. data/examples/i18n/Rakefile +16 -0
  11. data/examples/i18n/ar/Rakefile +6 -0
  12. data/examples/i18n/ar/features/addition.feature +17 -0
  13. data/examples/i18n/ar/features/step_definitons/calculator_steps.rb +31 -0
  14. data/examples/i18n/ar/lib/calculator.rb +10 -0
  15. data/examples/i18n/da/Rakefile +6 -0
  16. data/examples/{danish_calculator/features/steps → i18n/da/features/step_definitons}/kalkulator_steps.rb +0 -0
  17. data/examples/{danish_calculator → i18n/da}/features/summering.feature +1 -1
  18. data/examples/{danish_calculator → i18n/da}/lib/kalkulator.rb +0 -0
  19. data/examples/{swedish_calculator → i18n/en}/Rakefile +1 -1
  20. data/examples/{calculator → i18n/en}/features/addition.feature +0 -0
  21. data/examples/{calculator → i18n/en}/features/division.feature +0 -0
  22. data/examples/{calculator/features/steps → i18n/en/features/step_definitons}/calculator_steps.rb +0 -0
  23. data/examples/{calculator → i18n/en}/lib/calculator.rb +0 -2
  24. data/examples/i18n/es/Rakefile +6 -0
  25. data/examples/{spanish_calculator → i18n/es}/features/adicion.feature +1 -1
  26. data/examples/{spanish_calculator/features/steps → i18n/es/features/step_definitons}/calculador_steps.rb +0 -0
  27. data/examples/{spanish_calculator/lib/Calculador.rb → i18n/es/lib/calculador.rb} +0 -0
  28. data/examples/i18n/et/Rakefile +6 -0
  29. data/examples/i18n/et/features/liitmine.feature +17 -0
  30. data/examples/{estonian_calculator/features → i18n/et/features/step_definitions}/kalkulaator_steps.rb +2 -11
  31. data/examples/i18n/et/lib/kalkulaator.rb +10 -0
  32. data/examples/i18n/fr/Rakefile +6 -0
  33. data/examples/{calculatrice_francaise_avec_soit_scenario → i18n/fr}/features/addition.feature +0 -0
  34. data/examples/{calculatrice_francaise_avec_soit_scenario/features → i18n/fr/features/step_definitions}/calculatrice_steps.rb +2 -11
  35. data/examples/i18n/fr/lib/calculatrice.rb +10 -0
  36. data/examples/i18n/id/Rakefile +6 -0
  37. data/examples/i18n/id/features/addition.feature +17 -0
  38. data/examples/i18n/id/features/division.feature +10 -0
  39. data/examples/i18n/id/features/step_definitons/calculator_steps.rb +31 -0
  40. data/examples/i18n/id/lib/calculator.rb +14 -0
  41. data/examples/i18n/it/Rakefile +6 -0
  42. data/examples/i18n/it/features/somma.feature +10 -0
  43. data/examples/i18n/it/features/step_definitons/calcolatrice_steps.rb +22 -0
  44. data/examples/i18n/it/lib/calcolatrice.rb +11 -0
  45. data/examples/{calculator → i18n/ja}/README.txt +0 -0
  46. data/examples/i18n/ja/Rakefile +6 -0
  47. data/examples/i18n/ja/features/addition.feature +17 -0
  48. data/examples/i18n/ja/features/division.feature +10 -0
  49. data/examples/i18n/ja/features/step_definitons/calculator_steps.rb +30 -0
  50. data/examples/i18n/ja/lib/calculator.rb +14 -0
  51. data/examples/i18n/no/Rakefile +6 -0
  52. data/examples/{norwegian_calculator/features/steps → i18n/no/features/step_definitons}/kalkulator_steps.rb +0 -0
  53. data/examples/{norwegian_calculator → i18n/no}/features/summering.feature +0 -0
  54. data/examples/{norwegian_calculator → i18n/no}/lib/kalkulator.rb +0 -0
  55. data/examples/i18n/pt/Rakefile +6 -0
  56. data/examples/{portuguese_calculator → i18n/pt}/features/adicao.feature +0 -0
  57. data/examples/{portuguese_calculator/features → i18n/pt/features/step_definitions}/calculadora_steps.rb +2 -11
  58. data/examples/i18n/pt/lib/calculadora.rb +10 -0
  59. data/examples/i18n/ro/Rakefile +6 -0
  60. data/examples/i18n/ro/features/step_definitons/calculator_steps.rb +22 -0
  61. data/examples/i18n/ro/features/suma.feature +10 -0
  62. data/examples/i18n/ro/lib/calculator.rb +11 -0
  63. data/examples/i18n/se/Rakefile +6 -0
  64. data/examples/{swedish_calculator/features/steps → i18n/se/features/step_definitons}/kalkulator_steps.rb +0 -0
  65. data/examples/{swedish_calculator → i18n/se}/features/summering.feature +0 -0
  66. data/examples/{swedish_calculator → i18n/se}/lib/kalkulator.rb +0 -0
  67. data/examples/i18n/zh-CN/Rakefile +6 -0
  68. data/examples/{chinese_simplified_calculator → i18n/zh-CN}/features/addition.feature +0 -0
  69. data/examples/{chinese_simplified_calculator/features/steps → i18n/zh-CN/features/step_definitons}/calculator_steps.rb +0 -0
  70. data/examples/{chinese_simplified_calculator → i18n/zh-CN}/lib/calculator.rb +0 -0
  71. data/examples/java/features/{steps → step_definitons}/hello_steps.rb +0 -0
  72. data/examples/java/features/{steps → step_definitons}/tree_steps.rb +0 -0
  73. data/examples/selenium/features/{steps → step_definitons}/stories_steps.rb +0 -0
  74. data/examples/tickets/features/{steps → step_definitons}/tickets_steps.rb +0 -0
  75. data/examples/watir/features/search.feature +2 -2
  76. data/examples/watir/features/{steps → step_definitons}/stories_steps.rb +0 -0
  77. data/gem_tasks/treetop.rake +1 -9
  78. data/lib/autotest/cucumber.rb +6 -0
  79. data/lib/autotest/cucumber_mixin.rb +109 -0
  80. data/lib/autotest/cucumber_rails.rb +6 -0
  81. data/lib/autotest/cucumber_rails_rspec.rb +6 -0
  82. data/lib/autotest/cucumber_rspec.rb +6 -0
  83. data/lib/autotest/discover.rb +9 -0
  84. data/lib/cucumber.rb +4 -0
  85. data/lib/cucumber/broadcaster.rb +20 -0
  86. data/lib/cucumber/cli.rb +139 -48
  87. data/lib/cucumber/core_ext/proc.rb +2 -3
  88. data/lib/cucumber/executor.rb +59 -32
  89. data/lib/cucumber/formatters.rb +1 -1
  90. data/lib/cucumber/formatters/ansicolor.rb +3 -4
  91. data/lib/cucumber/formatters/autotest_formatter.rb +23 -0
  92. data/lib/cucumber/formatters/pretty_formatter.rb +99 -42
  93. data/lib/cucumber/formatters/progress_formatter.rb +21 -5
  94. data/lib/cucumber/languages.yml +125 -10
  95. data/lib/cucumber/rails/world.rb +1 -1
  96. data/lib/cucumber/rake/task.rb +52 -26
  97. data/lib/cucumber/step_mother.rb +7 -1
  98. data/lib/cucumber/tree/feature.rb +8 -6
  99. data/lib/cucumber/tree/scenario.rb +34 -15
  100. data/lib/cucumber/tree/step.rb +3 -1
  101. data/lib/cucumber/treetop_parser/feature.treetop.erb +15 -10
  102. data/lib/cucumber/treetop_parser/feature_ar.rb +1591 -0
  103. data/lib/cucumber/treetop_parser/feature_cy.rb +1591 -0
  104. data/lib/cucumber/treetop_parser/feature_da.rb +238 -240
  105. data/lib/cucumber/treetop_parser/feature_de.rb +238 -240
  106. data/lib/cucumber/treetop_parser/feature_en-tx.rb +1591 -0
  107. data/lib/cucumber/treetop_parser/feature_en.rb +238 -240
  108. data/lib/cucumber/treetop_parser/feature_es.rb +238 -240
  109. data/lib/cucumber/treetop_parser/feature_et.rb +238 -240
  110. data/lib/cucumber/treetop_parser/feature_fr.rb +238 -240
  111. data/lib/cucumber/treetop_parser/feature_id.rb +1591 -0
  112. data/lib/cucumber/treetop_parser/feature_it.rb +1591 -0
  113. data/lib/cucumber/treetop_parser/feature_ja.rb +1591 -0
  114. data/lib/cucumber/treetop_parser/feature_nl.rb +238 -240
  115. data/lib/cucumber/treetop_parser/feature_no.rb +238 -240
  116. data/lib/cucumber/treetop_parser/feature_pl.rb +1591 -0
  117. data/lib/cucumber/treetop_parser/feature_pt.rb +238 -240
  118. data/lib/cucumber/treetop_parser/feature_ro.rb +1591 -0
  119. data/lib/cucumber/treetop_parser/feature_ro2.rb +1591 -0
  120. data/lib/cucumber/treetop_parser/feature_ru.rb +238 -240
  121. data/lib/cucumber/treetop_parser/feature_se.rb +238 -240
  122. data/lib/cucumber/treetop_parser/feature_zh-CN.rb +238 -240
  123. data/lib/cucumber/version.rb +1 -1
  124. data/rails_generators/cucumber/USAGE +11 -0
  125. data/rails_generators/cucumber/cucumber_generator.rb +9 -6
  126. data/rails_generators/cucumber/templates/cucumber +6 -1
  127. data/rails_generators/cucumber/templates/{common_webrat.rb → webrat_steps.rb} +4 -0
  128. data/rails_generators/feature/USAGE +12 -0
  129. data/rails_generators/feature/feature_generator.rb +3 -4
  130. data/spec/cucumber/broadcaster_spec.rb +27 -0
  131. data/spec/cucumber/cli_spec.rb +211 -23
  132. data/spec/cucumber/executor_spec.rb +104 -14
  133. data/spec/cucumber/formatters/ansicolor_spec.rb +9 -1
  134. data/spec/cucumber/formatters/autotest_formatter_spec.rb +26 -0
  135. data/spec/cucumber/formatters/pretty_formatter_spec.rb +119 -26
  136. data/spec/cucumber/formatters/profile_formatter_spec.rb +1 -2
  137. data/spec/cucumber/formatters/progress_formatter_spec.rb +22 -1
  138. data/spec/cucumber/sell_cucumbers.feature +10 -0
  139. data/spec/cucumber/step_mother_spec.rb +21 -0
  140. data/spec/cucumber/tree/row_scenario_spec.rb +25 -0
  141. data/spec/cucumber/tree/scenario_spec.rb +47 -8
  142. data/spec/cucumber/tree/step_spec.rb +19 -0
  143. data/spec/cucumber/treetop_parser/feature_parser_spec.rb +2 -0
  144. data/spec/cucumber/treetop_parser/multiline_steps.feature +7 -3
  145. data/spec/spec_helper.rb +2 -0
  146. metadata +97 -48
  147. data/examples/calculator/Rakefile +0 -5
  148. data/examples/calculatrice_francaise_avec_soit_scenario/Rakefile +0 -6
  149. data/examples/chinese_simplified_calculator/Rakefile +0 -6
  150. data/examples/danish_calculator/Rakefile +0 -6
  151. data/examples/estonian_calculator/Rakefile +0 -6
  152. data/examples/estonian_calculator/features/liitmine.feature +0 -16
  153. data/examples/norwegian_calculator/Rakefile +0 -6
  154. data/examples/portuguese_calculator/Rakefile +0 -6
  155. data/examples/spanish_calculator/Rakefile +0 -6
@@ -1,33 +1,33 @@
1
- module Cucumber #:nodoc:
2
- module TreetopParser #:nodoc:
3
-
4
- module Feature #:nodoc:
1
+ module Cucumber
2
+ # :stopdoc:
3
+ module TreetopParser
4
+ module Feature
5
5
  include Treetop::Runtime
6
6
 
7
- def root #:nodoc:
7
+ def root
8
8
  @root || :root
9
9
  end
10
10
 
11
- module Root0 #:nodoc:
12
- def header #:nodoc:
11
+ module Root0
12
+ def header
13
13
  elements[1]
14
14
  end
15
15
 
16
- def scenario_sequence #:nodoc:
16
+ def scenario_sequence
17
17
  elements[2]
18
18
  end
19
19
 
20
20
  end
21
21
 
22
- module Root1 #:nodoc:
23
- def compile #:nodoc:
22
+ module Root1
23
+ def compile
24
24
  feature = Tree::Feature.new(header.text_value.strip)
25
25
  scenario_sequence.compile(feature)
26
26
  feature
27
27
  end
28
28
  end
29
29
 
30
- def _nt_root #:nodoc:
30
+ def _nt_root
31
31
  start_index = index
32
32
  if node_cache[:root].has_key?(index)
33
33
  cached = node_cache[:root][index]
@@ -74,10 +74,10 @@ module Feature #:nodoc:
74
74
  return r0
75
75
  end
76
76
 
77
- module Header0 #:nodoc:
77
+ module Header0
78
78
  end
79
79
 
80
- def _nt_header #:nodoc:
80
+ def _nt_header
81
81
  start_index = index
82
82
  if node_cache[:header].has_key?(index)
83
83
  cached = node_cache[:header][index]
@@ -144,39 +144,39 @@ module Feature #:nodoc:
144
144
  return r0
145
145
  end
146
146
 
147
- module ScenarioSequence0 #:nodoc:
148
- def space #:nodoc:
147
+ module ScenarioSequence0
148
+ def space
149
149
  elements[0]
150
150
  end
151
151
 
152
- def scenario_or_table #:nodoc:
152
+ def scenario_or_table
153
153
  elements[1]
154
154
  end
155
155
  end
156
156
 
157
- module ScenarioSequence1 #:nodoc:
158
- def head #:nodoc:
157
+ module ScenarioSequence1
158
+ def head
159
159
  elements[0]
160
160
  end
161
161
 
162
- def tail #:nodoc:
162
+ def tail
163
163
  elements[1]
164
164
  end
165
165
  end
166
166
 
167
- module ScenarioSequence2 #:nodoc:
168
- def compile(feature) #:nodoc:
167
+ module ScenarioSequence2
168
+ def compile(feature)
169
169
  ([head] + tail).each do |scenario_or_table|
170
170
  scenario_or_table.compile(feature) if scenario_or_table.respond_to?(:compile)
171
171
  end
172
172
  end
173
173
 
174
- def tail #:nodoc:
174
+ def tail
175
175
  super.elements.map { |elt| elt.scenario_or_table }
176
176
  end
177
177
  end
178
178
 
179
- def _nt_scenario_sequence #:nodoc:
179
+ def _nt_scenario_sequence
180
180
  start_index = index
181
181
  if node_cache[:scenario_sequence].has_key?(index)
182
182
  cached = node_cache[:scenario_sequence][index]
@@ -232,32 +232,32 @@ module Feature #:nodoc:
232
232
  return r0
233
233
  end
234
234
 
235
- module Scenario0 #:nodoc:
236
- def space #:nodoc:
235
+ module Scenario0
236
+ def space
237
237
  elements[0]
238
238
  end
239
239
 
240
- def step_sequence #:nodoc:
240
+ def step_sequence
241
241
  elements[1]
242
242
  end
243
243
  end
244
244
 
245
- module Scenario1 #:nodoc:
246
- def scenario_keyword #:nodoc:
245
+ module Scenario1
246
+ def scenario_keyword
247
247
  elements[0]
248
248
  end
249
249
 
250
- def name #:nodoc:
250
+ def name
251
251
  elements[2]
252
252
  end
253
253
 
254
- def steps #:nodoc:
254
+ def steps
255
255
  elements[3]
256
256
  end
257
257
  end
258
258
 
259
- module Scenario2 #:nodoc:
260
- def compile(feature) #:nodoc:
259
+ module Scenario2
260
+ def compile(feature)
261
261
  line = input.line_of(interval.first)
262
262
  scenario = feature.add_scenario(name.text_value.strip, line)
263
263
  steps.step_sequence.compile(scenario) if steps.respond_to?(:step_sequence)
@@ -267,7 +267,7 @@ module Feature #:nodoc:
267
267
  end
268
268
  end
269
269
 
270
- def _nt_scenario #:nodoc:
270
+ def _nt_scenario
271
271
  start_index = index
272
272
  if node_cache[:scenario].has_key?(index)
273
273
  cached = node_cache[:scenario][index]
@@ -327,7 +327,7 @@ module Feature #:nodoc:
327
327
  return r0
328
328
  end
329
329
 
330
- def _nt_scenario_or_table #:nodoc:
330
+ def _nt_scenario_or_table
331
331
  start_index = index
332
332
  if node_cache[:scenario_or_table].has_key?(index)
333
333
  cached = node_cache[:scenario_or_table][index]
@@ -354,27 +354,23 @@ module Feature #:nodoc:
354
354
  return r0
355
355
  end
356
356
 
357
- module MoreExamples0 #:nodoc:
358
- def more_examples_keyword #:nodoc:
357
+ module MoreExamples0
358
+ def more_examples_keyword
359
359
  elements[0]
360
360
  end
361
361
 
362
- def space #:nodoc:
362
+ def table
363
363
  elements[1]
364
364
  end
365
-
366
- def table #:nodoc:
367
- elements[2]
368
- end
369
365
  end
370
366
 
371
- module MoreExamples1 #:nodoc:
372
- def compile(f) #:nodoc:
367
+ module MoreExamples1
368
+ def compile(f)
373
369
  table.compile(f)
374
370
  end
375
371
  end
376
372
 
377
- def _nt_more_examples #:nodoc:
373
+ def _nt_more_examples
378
374
  start_index = index
379
375
  if node_cache[:more_examples].has_key?(index)
380
376
  cached = node_cache[:more_examples][index]
@@ -386,12 +382,8 @@ module Feature #:nodoc:
386
382
  r1 = _nt_more_examples_keyword
387
383
  s0 << r1
388
384
  if r1
389
- r2 = _nt_space
385
+ r2 = _nt_table
390
386
  s0 << r2
391
- if r2
392
- r3 = _nt_table
393
- s0 << r3
394
- end
395
387
  end
396
388
  if s0.last
397
389
  r0 = (SyntaxNode).new(input, i0...index, s0)
@@ -407,50 +399,54 @@ module Feature #:nodoc:
407
399
  return r0
408
400
  end
409
401
 
410
- module Table0 #:nodoc:
411
- def eol #:nodoc:
402
+ module Table0
403
+ def eol
412
404
  elements[1]
413
405
  end
414
406
 
415
- def table_line #:nodoc:
407
+ def table_line
416
408
  elements[3]
417
409
  end
418
410
  end
419
411
 
420
- module Table1 #:nodoc:
421
- def head #:nodoc:
412
+ module Table1
413
+ def space
422
414
  elements[0]
423
415
  end
424
416
 
425
- def body #:nodoc:
417
+ def head
426
418
  elements[1]
427
419
  end
420
+
421
+ def body
422
+ elements[2]
423
+ end
428
424
  end
429
425
 
430
- module Table2 #:nodoc:
431
- def compile(feature) #:nodoc:
426
+ module Table2
427
+ def compile(feature)
432
428
  Feature.last_scenario.table_header = head.cell_values
433
429
  body.each do |table_line|
434
430
  feature.add_row_scenario(Feature.last_scenario, table_line.cell_values, table_line.line)
435
431
  end
436
432
  end
437
433
 
438
- def matrix #:nodoc:
434
+ def matrix
439
435
  ([head] + body).map do |table_line|
440
- table_line.cell_values # We're losing the line - we'll get it back when we make our own class #:nodoc:
436
+ table_line.cell_values # We're losing the line - we'll get it back when we make our own class
441
437
  end
442
438
  end
443
439
 
444
- def to_arg #:nodoc:
440
+ def to_arg
445
441
  Model::Table.new(matrix)
446
442
  end
447
443
 
448
- def body #:nodoc:
444
+ def body
449
445
  super.elements.map { |elt| elt.table_line }
450
446
  end
451
447
  end
452
448
 
453
- def _nt_table #:nodoc:
449
+ def _nt_table
454
450
  start_index = index
455
451
  if node_cache[:table].has_key?(index)
456
452
  cached = node_cache[:table][index]
@@ -459,55 +455,59 @@ module Feature #:nodoc:
459
455
  end
460
456
 
461
457
  i0, s0 = index, []
462
- r1 = _nt_table_line
458
+ r1 = _nt_space
463
459
  s0 << r1
464
460
  if r1
465
- s2, i2 = [], index
466
- loop do
467
- i3, s3 = index, []
468
- s4, i4 = [], index
461
+ r2 = _nt_table_line
462
+ s0 << r2
463
+ if r2
464
+ s3, i3 = [], index
469
465
  loop do
470
- r5 = _nt_blank
471
- if r5
472
- s4 << r5
473
- else
474
- break
475
- end
476
- end
477
- r4 = SyntaxNode.new(input, i4...index, s4)
478
- s3 << r4
479
- if r4
480
- r6 = _nt_eol
481
- s3 << r6
482
- if r6
483
- r8 = _nt_space
484
- if r8
485
- r7 = r8
466
+ i4, s4 = index, []
467
+ s5, i5 = [], index
468
+ loop do
469
+ r6 = _nt_blank
470
+ if r6
471
+ s5 << r6
486
472
  else
487
- r7 = SyntaxNode.new(input, index...index)
473
+ break
488
474
  end
489
- s3 << r7
475
+ end
476
+ r5 = SyntaxNode.new(input, i5...index, s5)
477
+ s4 << r5
478
+ if r5
479
+ r7 = _nt_eol
480
+ s4 << r7
490
481
  if r7
491
- r9 = _nt_table_line
492
- s3 << r9
482
+ r9 = _nt_space
483
+ if r9
484
+ r8 = r9
485
+ else
486
+ r8 = SyntaxNode.new(input, index...index)
487
+ end
488
+ s4 << r8
489
+ if r8
490
+ r10 = _nt_table_line
491
+ s4 << r10
492
+ end
493
493
  end
494
494
  end
495
+ if s4.last
496
+ r4 = (SyntaxNode).new(input, i4...index, s4)
497
+ r4.extend(Table0)
498
+ else
499
+ self.index = i4
500
+ r4 = nil
501
+ end
502
+ if r4
503
+ s3 << r4
504
+ else
505
+ break
506
+ end
495
507
  end
496
- if s3.last
497
- r3 = (SyntaxNode).new(input, i3...index, s3)
498
- r3.extend(Table0)
499
- else
500
- self.index = i3
501
- r3 = nil
502
- end
503
- if r3
504
- s2 << r3
505
- else
506
- break
507
- end
508
+ r3 = SyntaxNode.new(input, i3...index, s3)
509
+ s0 << r3
508
510
  end
509
- r2 = SyntaxNode.new(input, i2...index, s2)
510
- s0 << r2
511
511
  end
512
512
  if s0.last
513
513
  r0 = (SyntaxNode).new(input, i0...index, s0)
@@ -523,37 +523,37 @@ module Feature #:nodoc:
523
523
  return r0
524
524
  end
525
525
 
526
- module TableLine0 #:nodoc:
527
- def cell_value #:nodoc:
526
+ module TableLine0
527
+ def cell_value
528
528
  elements[1]
529
529
  end
530
530
 
531
- def separator #:nodoc:
531
+ def separator
532
532
  elements[3]
533
533
  end
534
534
  end
535
535
 
536
- module TableLine1 #:nodoc:
537
- def separator #:nodoc:
536
+ module TableLine1
537
+ def separator
538
538
  elements[0]
539
539
  end
540
540
 
541
- def cells #:nodoc:
541
+ def cells
542
542
  elements[1]
543
543
  end
544
544
  end
545
545
 
546
- module TableLine2 #:nodoc:
547
- def cell_values #:nodoc:
546
+ module TableLine2
547
+ def cell_values
548
548
  cells.elements.map { |elt| elt.cell_value.text_value.strip }
549
549
  end
550
550
 
551
- def line #:nodoc:
551
+ def line
552
552
  input.line_of(interval.first)
553
553
  end
554
554
  end
555
555
 
556
- def _nt_table_line #:nodoc:
556
+ def _nt_table_line
557
557
  start_index = index
558
558
  if node_cache[:table_line].has_key?(index)
559
559
  cached = node_cache[:table_line][index]
@@ -635,10 +635,10 @@ module Feature #:nodoc:
635
635
  return r0
636
636
  end
637
637
 
638
- module CellValue0 #:nodoc:
638
+ module CellValue0
639
639
  end
640
640
 
641
- def _nt_cell_value #:nodoc:
641
+ def _nt_cell_value
642
642
  start_index = index
643
643
  if node_cache[:cell_value].has_key?(index)
644
644
  cached = node_cache[:cell_value][index]
@@ -700,39 +700,39 @@ module Feature #:nodoc:
700
700
  return r0
701
701
  end
702
702
 
703
- module StepSequence0 #:nodoc:
704
- def space #:nodoc:
703
+ module StepSequence0
704
+ def space
705
705
  elements[0]
706
706
  end
707
707
 
708
- def step #:nodoc:
708
+ def step
709
709
  elements[1]
710
710
  end
711
711
  end
712
712
 
713
- module StepSequence1 #:nodoc:
714
- def head #:nodoc:
713
+ module StepSequence1
714
+ def head
715
715
  elements[0]
716
716
  end
717
717
 
718
- def tail #:nodoc:
718
+ def tail
719
719
  elements[1]
720
720
  end
721
721
  end
722
722
 
723
- module StepSequence2 #:nodoc:
724
- def compile(scenario) #:nodoc:
723
+ module StepSequence2
724
+ def compile(scenario)
725
725
  ([head] + tail).each do |step|
726
726
  step.compile(scenario)
727
727
  end
728
728
  end
729
729
 
730
- def tail #:nodoc:
730
+ def tail
731
731
  super.elements.map { |elt| elt.step }
732
732
  end
733
733
  end
734
734
 
735
- def _nt_step_sequence #:nodoc:
735
+ def _nt_step_sequence
736
736
  start_index = index
737
737
  if node_cache[:step_sequence].has_key?(index)
738
738
  cached = node_cache[:step_sequence][index]
@@ -783,7 +783,7 @@ module Feature #:nodoc:
783
783
  return r0
784
784
  end
785
785
 
786
- def _nt_step #:nodoc:
786
+ def _nt_step
787
787
  start_index = index
788
788
  if node_cache[:step].has_key?(index)
789
789
  cached = node_cache[:step][index]
@@ -810,24 +810,24 @@ module Feature #:nodoc:
810
810
  return r0
811
811
  end
812
812
 
813
- module GivenScenario0 #:nodoc:
814
- def given_scenario_keyword #:nodoc:
813
+ module GivenScenario0
814
+ def given_scenario_keyword
815
815
  elements[0]
816
816
  end
817
817
 
818
- def name #:nodoc:
818
+ def name
819
819
  elements[2]
820
820
  end
821
821
  end
822
822
 
823
- module GivenScenario1 #:nodoc:
824
- def compile(scenario) #:nodoc:
823
+ module GivenScenario1
824
+ def compile(scenario)
825
825
  line = input.line_of(interval.first)
826
826
  scenario.create_given_scenario(name.text_value.strip, line)
827
827
  end
828
828
  end
829
829
 
830
- def _nt_given_scenario #:nodoc:
830
+ def _nt_given_scenario
831
831
  start_index = index
832
832
  if node_cache[:given_scenario].has_key?(index)
833
833
  cached = node_cache[:given_scenario][index]
@@ -865,41 +865,32 @@ module Feature #:nodoc:
865
865
  return r0
866
866
  end
867
867
 
868
- module PlainStep0 #:nodoc:
869
- def space #:nodoc:
870
- elements[0]
871
- end
872
-
873
- def multiline_arg #:nodoc:
874
- elements[1]
875
- end
876
- end
877
-
878
- module PlainStep1 #:nodoc:
879
- def step_keyword #:nodoc:
868
+ module PlainStep0
869
+ def step_keyword
880
870
  elements[0]
881
871
  end
882
872
 
883
- def name #:nodoc:
873
+ def name
884
874
  elements[2]
885
875
  end
886
876
 
887
- def multi #:nodoc:
877
+ def multi
888
878
  elements[3]
889
879
  end
890
880
  end
891
881
 
892
- module PlainStep2 #:nodoc:
893
- def compile(scenario) #:nodoc:
882
+ module PlainStep1
883
+ def compile(scenario)
894
884
  line = input.line_of(interval.first)
895
885
  step = scenario.create_step(step_keyword.text_value, name.text_value.strip, line)
896
- if multi.respond_to?(:multiline_arg)
897
- step.extra_args << multi.multiline_arg.to_arg
886
+
887
+ if multi.respond_to?(:to_arg)
888
+ step.extra_args << multi.to_arg
898
889
  end
899
890
  end
900
891
  end
901
892
 
902
- def _nt_plain_step #:nodoc:
893
+ def _nt_plain_step
903
894
  start_index = index
904
895
  if node_cache[:plain_step].has_key?(index)
905
896
  cached = node_cache[:plain_step][index]
@@ -922,20 +913,7 @@ module Feature #:nodoc:
922
913
  r4 = _nt_line_to_eol
923
914
  s0 << r4
924
915
  if r4
925
- i6, s6 = index, []
926
- r7 = _nt_space
927
- s6 << r7
928
- if r7
929
- r8 = _nt_multiline_arg
930
- s6 << r8
931
- end
932
- if s6.last
933
- r6 = (SyntaxNode).new(input, i6...index, s6)
934
- r6.extend(PlainStep0)
935
- else
936
- self.index = i6
937
- r6 = nil
938
- end
916
+ r6 = _nt_multiline_arg
939
917
  if r6
940
918
  r5 = r6
941
919
  else
@@ -947,8 +925,8 @@ module Feature #:nodoc:
947
925
  end
948
926
  if s0.last
949
927
  r0 = (SyntaxNode).new(input, i0...index, s0)
928
+ r0.extend(PlainStep0)
950
929
  r0.extend(PlainStep1)
951
- r0.extend(PlainStep2)
952
930
  else
953
931
  self.index = i0
954
932
  r0 = nil
@@ -959,7 +937,7 @@ module Feature #:nodoc:
959
937
  return r0
960
938
  end
961
939
 
962
- def _nt_multiline_arg #:nodoc:
940
+ def _nt_multiline_arg
963
941
  start_index = index
964
942
  if node_cache[:multiline_arg].has_key?(index)
965
943
  cached = node_cache[:multiline_arg][index]
@@ -986,30 +964,42 @@ module Feature #:nodoc:
986
964
  return r0
987
965
  end
988
966
 
989
- module MultilineString0 #:nodoc:
967
+ module MultilineString0
990
968
  end
991
969
 
992
- module MultilineString1 #:nodoc:
993
- def quote #:nodoc:
970
+ module MultilineString1
971
+ def eol
994
972
  elements[0]
995
973
  end
996
974
 
997
- def string #:nodoc:
975
+ def indent
998
976
  elements[1]
999
977
  end
1000
978
 
1001
- def quote #:nodoc:
979
+ def triple_quote
1002
980
  elements[2]
1003
981
  end
982
+
983
+ def string
984
+ elements[3]
985
+ end
986
+
987
+ def triple_quote
988
+ elements[4]
989
+ end
1004
990
  end
1005
991
 
1006
- module MultilineString2 #:nodoc:
1007
- def to_arg #:nodoc:
1008
- string.text_value.split("\n").map{|l| l.strip}.join("\n")
992
+ module MultilineString2
993
+ def to_arg
994
+ indent_length = indent.text_value.length
995
+ significant_lines = string.text_value.split("\n")[1..-2]
996
+ significant_lines.map do |l|
997
+ l[indent_length..-1]
998
+ end.join("\n")
1009
999
  end
1010
1000
  end
1011
1001
 
1012
- def _nt_multiline_string #:nodoc:
1002
+ def _nt_multiline_string
1013
1003
  start_index = index
1014
1004
  if node_cache[:multiline_string].has_key?(index)
1015
1005
  cached = node_cache[:multiline_string][index]
@@ -1018,49 +1008,57 @@ module Feature #:nodoc:
1018
1008
  end
1019
1009
 
1020
1010
  i0, s0 = index, []
1021
- r1 = _nt_quote
1011
+ r1 = _nt_eol
1022
1012
  s0 << r1
1023
1013
  if r1
1024
- s2, i2 = [], index
1025
- loop do
1026
- i3, s3 = index, []
1027
- i4 = index
1028
- r5 = _nt_quote
1029
- if r5
1030
- r4 = nil
1031
- else
1032
- self.index = i4
1033
- r4 = SyntaxNode.new(input, index...index)
1034
- end
1035
- s3 << r4
1036
- if r4
1037
- if index < input_length
1038
- r6 = (SyntaxNode).new(input, index...(index + 1))
1039
- @index += 1
1040
- else
1041
- terminal_parse_failure("any character")
1042
- r6 = nil
1043
- end
1044
- s3 << r6
1045
- end
1046
- if s3.last
1047
- r3 = (SyntaxNode).new(input, i3...index, s3)
1048
- r3.extend(MultilineString0)
1049
- else
1050
- self.index = i3
1051
- r3 = nil
1052
- end
1053
- if r3
1054
- s2 << r3
1055
- else
1056
- break
1057
- end
1058
- end
1059
- r2 = SyntaxNode.new(input, i2...index, s2)
1014
+ r2 = _nt_space
1060
1015
  s0 << r2
1061
1016
  if r2
1062
- r7 = _nt_quote
1063
- s0 << r7
1017
+ r3 = _nt_triple_quote
1018
+ s0 << r3
1019
+ if r3
1020
+ s4, i4 = [], index
1021
+ loop do
1022
+ i5, s5 = index, []
1023
+ i6 = index
1024
+ r7 = _nt_triple_quote
1025
+ if r7
1026
+ r6 = nil
1027
+ else
1028
+ self.index = i6
1029
+ r6 = SyntaxNode.new(input, index...index)
1030
+ end
1031
+ s5 << r6
1032
+ if r6
1033
+ if index < input_length
1034
+ r8 = (SyntaxNode).new(input, index...(index + 1))
1035
+ @index += 1
1036
+ else
1037
+ terminal_parse_failure("any character")
1038
+ r8 = nil
1039
+ end
1040
+ s5 << r8
1041
+ end
1042
+ if s5.last
1043
+ r5 = (SyntaxNode).new(input, i5...index, s5)
1044
+ r5.extend(MultilineString0)
1045
+ else
1046
+ self.index = i5
1047
+ r5 = nil
1048
+ end
1049
+ if r5
1050
+ s4 << r5
1051
+ else
1052
+ break
1053
+ end
1054
+ end
1055
+ r4 = SyntaxNode.new(input, i4...index, s4)
1056
+ s0 << r4
1057
+ if r4
1058
+ r9 = _nt_triple_quote
1059
+ s0 << r9
1060
+ end
1061
+ end
1064
1062
  end
1065
1063
  end
1066
1064
  if s0.last
@@ -1077,28 +1075,28 @@ module Feature #:nodoc:
1077
1075
  return r0
1078
1076
  end
1079
1077
 
1080
- def _nt_quote #:nodoc:
1078
+ def _nt_triple_quote
1081
1079
  start_index = index
1082
- if node_cache[:quote].has_key?(index)
1083
- cached = node_cache[:quote][index]
1080
+ if node_cache[:triple_quote].has_key?(index)
1081
+ cached = node_cache[:triple_quote][index]
1084
1082
  @index = cached.interval.end if cached
1085
1083
  return cached
1086
1084
  end
1087
1085
 
1088
- if input.index('"', index) == index
1089
- r0 = (SyntaxNode).new(input, index...(index + 1))
1090
- @index += 1
1086
+ if input.index('"""', index) == index
1087
+ r0 = (SyntaxNode).new(input, index...(index + 3))
1088
+ @index += 3
1091
1089
  else
1092
- terminal_parse_failure('"')
1090
+ terminal_parse_failure('"""')
1093
1091
  r0 = nil
1094
1092
  end
1095
1093
 
1096
- node_cache[:quote][start_index] = r0
1094
+ node_cache[:triple_quote][start_index] = r0
1097
1095
 
1098
1096
  return r0
1099
1097
  end
1100
1098
 
1101
- def _nt_separator #:nodoc:
1099
+ def _nt_separator
1102
1100
  start_index = index
1103
1101
  if node_cache[:separator].has_key?(index)
1104
1102
  cached = node_cache[:separator][index]
@@ -1119,7 +1117,7 @@ module Feature #:nodoc:
1119
1117
  return r0
1120
1118
  end
1121
1119
 
1122
- def _nt_space #:nodoc:
1120
+ def _nt_space
1123
1121
  start_index = index
1124
1122
  if node_cache[:space].has_key?(index)
1125
1123
  cached = node_cache[:space][index]
@@ -1160,10 +1158,10 @@ module Feature #:nodoc:
1160
1158
  return r0
1161
1159
  end
1162
1160
 
1163
- module LineToEol0 #:nodoc:
1161
+ module LineToEol0
1164
1162
  end
1165
1163
 
1166
- def _nt_line_to_eol #:nodoc:
1164
+ def _nt_line_to_eol
1167
1165
  start_index = index
1168
1166
  if node_cache[:line_to_eol].has_key?(index)
1169
1167
  cached = node_cache[:line_to_eol][index]
@@ -1213,13 +1211,13 @@ module Feature #:nodoc:
1213
1211
  return r0
1214
1212
  end
1215
1213
 
1216
- module CommentToEol0 #:nodoc:
1217
- def line_to_eol #:nodoc:
1214
+ module CommentToEol0
1215
+ def line_to_eol
1218
1216
  elements[1]
1219
1217
  end
1220
1218
  end
1221
1219
 
1222
- def _nt_comment_to_eol #:nodoc:
1220
+ def _nt_comment_to_eol
1223
1221
  start_index = index
1224
1222
  if node_cache[:comment_to_eol].has_key?(index)
1225
1223
  cached = node_cache[:comment_to_eol][index]
@@ -1253,7 +1251,7 @@ module Feature #:nodoc:
1253
1251
  return r0
1254
1252
  end
1255
1253
 
1256
- def _nt_white #:nodoc:
1254
+ def _nt_white
1257
1255
  start_index = index
1258
1256
  if node_cache[:white].has_key?(index)
1259
1257
  cached = node_cache[:white][index]
@@ -1280,7 +1278,7 @@ module Feature #:nodoc:
1280
1278
  return r0
1281
1279
  end
1282
1280
 
1283
- def _nt_blank #:nodoc:
1281
+ def _nt_blank
1284
1282
  start_index = index
1285
1283
  if node_cache[:blank].has_key?(index)
1286
1284
  cached = node_cache[:blank][index]
@@ -1300,10 +1298,10 @@ module Feature #:nodoc:
1300
1298
  return r0
1301
1299
  end
1302
1300
 
1303
- module Eol0 #:nodoc:
1301
+ module Eol0
1304
1302
  end
1305
1303
 
1306
- def _nt_eol #:nodoc:
1304
+ def _nt_eol
1307
1305
  start_index = index
1308
1306
  if node_cache[:eol].has_key?(index)
1309
1307
  cached = node_cache[:eol][index]
@@ -1366,7 +1364,7 @@ module Feature #:nodoc:
1366
1364
  return r0
1367
1365
  end
1368
1366
 
1369
- def _nt_step_keyword #:nodoc:
1367
+ def _nt_step_keyword
1370
1368
  start_index = index
1371
1369
  if node_cache[:step_keyword].has_key?(index)
1372
1370
  cached = node_cache[:step_keyword][index]
@@ -1438,10 +1436,10 @@ module Feature #:nodoc:
1438
1436
  return r0
1439
1437
  end
1440
1438
 
1441
- module ScenarioKeyword0 #:nodoc:
1439
+ module ScenarioKeyword0
1442
1440
  end
1443
1441
 
1444
- def _nt_scenario_keyword #:nodoc:
1442
+ def _nt_scenario_keyword
1445
1443
  start_index = index
1446
1444
  if node_cache[:scenario_keyword].has_key?(index)
1447
1445
  cached = node_cache[:scenario_keyword][index]
@@ -1486,10 +1484,10 @@ module Feature #:nodoc:
1486
1484
  return r0
1487
1485
  end
1488
1486
 
1489
- module MoreExamplesKeyword0 #:nodoc:
1487
+ module MoreExamplesKeyword0
1490
1488
  end
1491
1489
 
1492
- def _nt_more_examples_keyword #:nodoc:
1490
+ def _nt_more_examples_keyword
1493
1491
  start_index = index
1494
1492
  if node_cache[:more_examples_keyword].has_key?(index)
1495
1493
  cached = node_cache[:more_examples_keyword][index]
@@ -1534,10 +1532,10 @@ module Feature #:nodoc:
1534
1532
  return r0
1535
1533
  end
1536
1534
 
1537
- module GivenScenarioKeyword0 #:nodoc:
1535
+ module GivenScenarioKeyword0
1538
1536
  end
1539
1537
 
1540
- def _nt_given_scenario_keyword #:nodoc:
1538
+ def _nt_given_scenario_keyword
1541
1539
  start_index = index
1542
1540
  if node_cache[:given_scenario_keyword].has_key?(index)
1543
1541
  cached = node_cache[:given_scenario_keyword][index]
@@ -1584,7 +1582,7 @@ module Feature #:nodoc:
1584
1582
 
1585
1583
  end
1586
1584
 
1587
- class FeatureParser < Treetop::Runtime::CompiledParser #:nodoc:
1585
+ class FeatureParser < Treetop::Runtime::CompiledParser
1588
1586
  include Feature
1589
1587
  end
1590
1588