kosmas58-cucumber 0.2.2.1 → 0.2.3.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (101) hide show
  1. data/History.txt +57 -5
  2. data/Manifest.txt +21 -4
  3. data/bin/cucumber +1 -1
  4. data/config/hoe.rb +2 -2
  5. data/examples/i18n/Rakefile +6 -8
  6. data/examples/i18n/ar/features/step_definitons/calculator_steps.rb +1 -1
  7. data/examples/i18n/ar/lib/calculator.rb +1 -0
  8. data/examples/i18n/da/features/step_definitons/kalkulator_steps.rb +1 -1
  9. data/examples/i18n/de/features/step_definitons/calculator_steps.rb +1 -1
  10. data/examples/i18n/en/features/step_definitons/calculator_steps.rb +1 -1
  11. data/examples/i18n/es/features/step_definitons/calculador_steps.rb +1 -1
  12. data/examples/i18n/et/features/step_definitions/kalkulaator_steps.rb +1 -1
  13. data/examples/i18n/fi/features/step_definitons/laskin_steps.rb +1 -1
  14. data/examples/i18n/fr/features/step_definitions/calculatrice_steps.rb +1 -1
  15. data/examples/i18n/id/features/step_definitons/calculator_steps.rb +1 -1
  16. data/examples/i18n/it/features/step_definitons/calcolatrice_steps.rb +1 -1
  17. data/examples/i18n/ja/features/step_definitons/calculator_steps.rb +1 -1
  18. data/examples/i18n/ko/features/addition.feature +1 -1
  19. data/examples/i18n/ko/features/step_definitons/calculator_steps.rb +1 -1
  20. data/examples/i18n/lt/features/step_definitons/calculator_steps.rb +1 -1
  21. data/examples/i18n/no/features/support/env.rb +1 -1
  22. data/examples/i18n/pt/features/step_definitions/calculadora_steps.rb +1 -1
  23. data/examples/i18n/ro/features/step_definitons/calculator_steps.rb +1 -1
  24. data/examples/i18n/ru/features/support/env.rb +1 -1
  25. data/examples/i18n/ru/features/support/world.rb +4 -3
  26. data/examples/i18n/se/features/step_definitons/kalkulator_steps.rb +1 -1
  27. data/examples/i18n/sk/Rakefile +6 -0
  28. data/examples/i18n/sk/features/addition.feature +16 -0
  29. data/examples/i18n/sk/features/division.feature +9 -0
  30. data/examples/i18n/sk/features/step_definitons/calculator_steps.rb +24 -0
  31. data/examples/i18n/sk/lib/calculator.rb +14 -0
  32. data/examples/i18n/zh-CN/features/step_definitons/calculator_steps.rb +1 -1
  33. data/examples/i18n/zh-TW/features/step_definitons/calculator_steps.rb +1 -1
  34. data/examples/self_test/features/background/background_with_name.feature +7 -0
  35. data/examples/self_test/features/step_definitions/sample_steps.rb +8 -2
  36. data/examples/self_test/features/undefined_multiline_args.feature +12 -0
  37. data/examples/sinatra/features/support/env.rb +2 -6
  38. data/examples/test_unit/features/step_definitions/test_unit_steps.rb +1 -4
  39. data/examples/tickets/Rakefile +1 -1
  40. data/examples/tickets/features/246.feature +4 -0
  41. data/examples/tickets/features/270/back.feature +14 -0
  42. data/examples/tickets/features/270/back.steps.rb +14 -0
  43. data/examples/tickets/features/step_definitons/246_steps.rb +3 -0
  44. data/features/background.feature +21 -4
  45. data/features/cucumber_cli.feature +18 -5
  46. data/features/cucumber_cli_outlines.feature +5 -2
  47. data/features/snippet.feature +23 -0
  48. data/features/step_definitions/cucumber_steps.rb +6 -2
  49. data/features/usage.feature +5 -0
  50. data/gem_tasks/rspec.rake +3 -2
  51. data/lib/cucumber/ast/background.rb +3 -3
  52. data/lib/cucumber/ast/examples.rb +0 -12
  53. data/lib/cucumber/ast/feature.rb +2 -12
  54. data/lib/cucumber/ast/feature_element.rb +0 -8
  55. data/lib/cucumber/ast/features.rb +1 -1
  56. data/lib/cucumber/ast/outline_table.rb +14 -22
  57. data/lib/cucumber/ast/py_string.rb +6 -11
  58. data/lib/cucumber/ast/scenario.rb +1 -8
  59. data/lib/cucumber/ast/scenario_outline.rb +1 -11
  60. data/lib/cucumber/ast/step.rb +3 -9
  61. data/lib/cucumber/ast/step_collection.rb +0 -4
  62. data/lib/cucumber/ast/step_invocation.rb +5 -6
  63. data/lib/cucumber/ast/table.rb +26 -22
  64. data/lib/cucumber/ast/tags.rb +0 -8
  65. data/lib/cucumber/ast/visitor.rb +12 -25
  66. data/lib/cucumber/cli/configuration.rb +2 -2
  67. data/lib/cucumber/cli/main.rb +5 -2
  68. data/lib/cucumber/core_ext/instance_exec.rb +17 -4
  69. data/lib/cucumber/formatter/ansicolor.rb +10 -2
  70. data/lib/cucumber/formatter/console.rb +2 -1
  71. data/lib/cucumber/formatter/html.rb +21 -7
  72. data/lib/cucumber/formatter/pretty.rb +27 -20
  73. data/lib/cucumber/formatter/usage.rb +16 -0
  74. data/lib/cucumber/languages.yml +68 -7
  75. data/lib/cucumber/parser/feature.rb +238 -135
  76. data/lib/cucumber/parser/feature.tt +117 -22
  77. data/lib/cucumber/parser/i18n.tt +4 -0
  78. data/lib/cucumber/parser/table.rb +37 -25
  79. data/lib/cucumber/parser/table.tt +15 -3
  80. data/lib/cucumber/parser/treetop_ext.rb +48 -9
  81. data/lib/cucumber/parser.rb +2 -7
  82. data/lib/cucumber/step_definition.rb +13 -14
  83. data/lib/cucumber/step_mother.rb +93 -11
  84. data/lib/cucumber/version.rb +2 -2
  85. data/rails_generators/cucumber/templates/env.rb +1 -1
  86. data/rails_generators/cucumber/templates/paths.rb +15 -5
  87. data/rails_generators/cucumber/templates/webrat_steps.rb +8 -0
  88. data/spec/cucumber/ast/background_spec.rb +1 -0
  89. data/spec/cucumber/ast/feature_factory.rb +1 -1
  90. data/spec/cucumber/ast/feature_spec.rb +2 -2
  91. data/spec/cucumber/ast/scenario_spec.rb +0 -27
  92. data/spec/cucumber/ast/table_spec.rb +23 -2
  93. data/spec/cucumber/core_ext/proc_spec.rb +25 -8
  94. data/spec/cucumber/parser/feature_parser_spec.rb +43 -41
  95. data/spec/cucumber/step_definition_spec.rb +8 -0
  96. data/spec/cucumber/step_mother_spec.rb +48 -0
  97. data/spec/spec_helper.rb +2 -11
  98. metadata +17 -6
  99. data/examples/tickets/cucumber.yml +0 -3
  100. data/lib/cucumber/parser/basic.rb +0 -0
  101. data/spec/cucumber/ast/tags_spec.rb +0 -19
@@ -56,15 +56,21 @@ module Cucumber
56
56
  end
57
57
 
58
58
  module Feature2
59
- def build
60
- background = bg.respond_to?(:build) ? bg.build : nil
61
- Ast::Feature.new(
62
- background,
63
- comment.build,
64
- tags.build,
65
- header.text_value,
66
- feature_elements.build(background)
67
- )
59
+ def has_tags?(tag_names)
60
+ tags.has_tags?(tag_names)
61
+ end
62
+
63
+ def build(filter)
64
+ if(filter.nil? || feature_elements.accept?(filter))
65
+ background = bg.respond_to?(:build) ? bg.build : nil
66
+ Ast::Feature.new(
67
+ background,
68
+ comment.build,
69
+ tags.build,
70
+ header.text_value,
71
+ feature_elements.build(background, filter)
72
+ )
73
+ end
68
74
  end
69
75
  end
70
76
 
@@ -118,12 +124,12 @@ module Cucumber
118
124
  r8 = nil
119
125
  else
120
126
  self.index = i8
121
- r8 = SyntaxNode.new(input, index...index)
127
+ r8 = instantiate_node(SyntaxNode,input, index...index)
122
128
  end
123
129
  s7 << r8
124
130
  if r8
125
131
  if index < input_length
126
- r13 = (SyntaxNode).new(input, index...(index + 1))
132
+ r13 = instantiate_node(SyntaxNode,input, index...(index + 1))
127
133
  @index += 1
128
134
  else
129
135
  terminal_parse_failure("any character")
@@ -132,7 +138,7 @@ module Cucumber
132
138
  s7 << r13
133
139
  end
134
140
  if s7.last
135
- r7 = (SyntaxNode).new(input, i7...index, s7)
141
+ r7 = instantiate_node(SyntaxNode,input, i7...index, s7)
136
142
  r7.extend(Feature0)
137
143
  else
138
144
  self.index = i7
@@ -144,14 +150,14 @@ module Cucumber
144
150
  break
145
151
  end
146
152
  end
147
- r6 = SyntaxNode.new(input, i6...index, s6)
153
+ r6 = instantiate_node(SyntaxNode,input, i6...index, s6)
148
154
  s0 << r6
149
155
  if r6
150
156
  r15 = _nt_background
151
157
  if r15
152
158
  r14 = r15
153
159
  else
154
- r14 = SyntaxNode.new(input, index...index)
160
+ r14 = instantiate_node(SyntaxNode,input, index...index)
155
161
  end
156
162
  s0 << r14
157
163
  if r14
@@ -162,7 +168,7 @@ module Cucumber
162
168
  if r18
163
169
  r17 = r18
164
170
  else
165
- r17 = SyntaxNode.new(input, index...index)
171
+ r17 = instantiate_node(SyntaxNode,input, index...index)
166
172
  end
167
173
  s0 << r17
168
174
  end
@@ -174,7 +180,7 @@ module Cucumber
174
180
  end
175
181
  end
176
182
  if s0.last
177
- r0 = (SyntaxNode).new(input, i0...index, s0)
183
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
178
184
  r0.extend(Feature1)
179
185
  r0.extend(Feature2)
180
186
  else
@@ -205,10 +211,21 @@ module Cucumber
205
211
  end
206
212
 
207
213
  module Tags2
214
+ def at_line?(line)
215
+ ts.elements.detect{|e| e.tag.line == line}
216
+ end
217
+
218
+ def has_tags?(tags)
219
+ tag_names.detect{|tag_name| tags.index(tag_name)}
220
+ end
221
+
208
222
  def build
209
- tag_names = ts.elements.map{|e| e.tag.tag_name.text_value}
210
223
  Ast::Tags.new(ts.line, tag_names)
211
224
  end
225
+
226
+ def tag_names
227
+ ts.elements.map{|e| e.tag.tag_name.text_value}
228
+ end
212
229
  end
213
230
 
214
231
  def _nt_tags
@@ -254,12 +271,12 @@ module Cucumber
254
271
  self.index = i5
255
272
  r5 = nil
256
273
  else
257
- r5 = SyntaxNode.new(input, i5...index, s5)
274
+ r5 = instantiate_node(SyntaxNode,input, i5...index, s5)
258
275
  end
259
276
  s3 << r5
260
277
  end
261
278
  if s3.last
262
- r3 = (SyntaxNode).new(input, i3...index, s3)
279
+ r3 = instantiate_node(SyntaxNode,input, i3...index, s3)
263
280
  r3.extend(Tags0)
264
281
  else
265
282
  self.index = i3
@@ -271,11 +288,11 @@ module Cucumber
271
288
  break
272
289
  end
273
290
  end
274
- r2 = SyntaxNode.new(input, i2...index, s2)
291
+ r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
275
292
  s0 << r2
276
293
  end
277
294
  if s0.last
278
- r0 = (SyntaxNode).new(input, i0...index, s0)
295
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
279
296
  r0.extend(Tags1)
280
297
  r0.extend(Tags2)
281
298
  else
@@ -304,7 +321,7 @@ module Cucumber
304
321
 
305
322
  i0, s0 = index, []
306
323
  if input.index('@', index) == index
307
- r1 = (SyntaxNode).new(input, index...(index + 1))
324
+ r1 = instantiate_node(SyntaxNode,input, index...(index + 1))
308
325
  @index += 1
309
326
  else
310
327
  terminal_parse_failure('@')
@@ -315,7 +332,7 @@ module Cucumber
315
332
  s2, i2 = [], index
316
333
  loop do
317
334
  if input.index(Regexp.new('[^@\\r\\n\\t ]'), index) == index
318
- r3 = (SyntaxNode).new(input, index...(index + 1))
335
+ r3 = instantiate_node(SyntaxNode,input, index...(index + 1))
319
336
  @index += 1
320
337
  else
321
338
  r3 = nil
@@ -330,12 +347,12 @@ module Cucumber
330
347
  self.index = i2
331
348
  r2 = nil
332
349
  else
333
- r2 = SyntaxNode.new(input, i2...index, s2)
350
+ r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
334
351
  end
335
352
  s0 << r2
336
353
  end
337
354
  if s0.last
338
- r0 = (SyntaxNode).new(input, i0...index, s0)
355
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
339
356
  r0.extend(Tag0)
340
357
  else
341
358
  self.index = i0
@@ -381,7 +398,7 @@ module Cucumber
381
398
  s1 << r3
382
399
  end
383
400
  if s1.last
384
- r1 = (SyntaxNode).new(input, i1...index, s1)
401
+ r1 = instantiate_node(SyntaxNode,input, i1...index, s1)
385
402
  r1.extend(Comment0)
386
403
  else
387
404
  self.index = i1
@@ -393,7 +410,7 @@ module Cucumber
393
410
  break
394
411
  end
395
412
  end
396
- r0 = SyntaxNode.new(input, i0...index, s0)
413
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
397
414
  r0.extend(Comment1)
398
415
 
399
416
  node_cache[:comment][start_index] = r0
@@ -417,7 +434,7 @@ module Cucumber
417
434
 
418
435
  i0, s0 = index, []
419
436
  if input.index('#', index) == index
420
- r1 = (SyntaxNode).new(input, index...(index + 1))
437
+ r1 = instantiate_node(SyntaxNode,input, index...(index + 1))
421
438
  @index += 1
422
439
  else
423
440
  terminal_parse_failure('#')
@@ -429,7 +446,7 @@ module Cucumber
429
446
  s0 << r2
430
447
  end
431
448
  if s0.last
432
- r0 = (SyntaxNode).new(input, i0...index, s0)
449
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
433
450
  r0.extend(CommentLine0)
434
451
  else
435
452
  self.index = i0
@@ -454,8 +471,12 @@ module Cucumber
454
471
  elements[2]
455
472
  end
456
473
 
474
+ def name
475
+ elements[4]
476
+ end
477
+
457
478
  def steps
458
- elements[5]
479
+ elements[6]
459
480
  end
460
481
  end
461
482
 
@@ -464,7 +485,8 @@ module Cucumber
464
485
  Ast::Background.new(
465
486
  comment.build,
466
487
  background_keyword.line,
467
- background_keyword.text_value,
488
+ background_keyword.text_value,
489
+ name.text_value,
468
490
  steps.build
469
491
  )
470
492
  end
@@ -497,47 +519,56 @@ module Cucumber
497
519
  break
498
520
  end
499
521
  end
500
- r4 = SyntaxNode.new(input, i4...index, s4)
522
+ r4 = instantiate_node(SyntaxNode,input, i4...index, s4)
501
523
  s0 << r4
502
524
  if r4
503
- i6 = index
504
- s7, i7 = [], index
505
- loop do
506
- r8 = _nt_eol
507
- if r8
508
- s7 << r8
509
- else
510
- break
511
- end
512
- end
513
- if s7.empty?
514
- self.index = i7
515
- r7 = nil
516
- else
517
- r7 = SyntaxNode.new(input, i7...index, s7)
518
- end
525
+ r7 = _nt_line_to_eol
519
526
  if r7
520
527
  r6 = r7
521
528
  else
522
- r9 = _nt_eof
523
- if r9
524
- r6 = r9
525
- else
526
- self.index = i6
527
- r6 = nil
528
- end
529
+ r6 = instantiate_node(SyntaxNode,input, index...index)
529
530
  end
530
531
  s0 << r6
531
532
  if r6
532
- r10 = _nt_steps
533
- s0 << r10
533
+ i8 = index
534
+ s9, i9 = [], index
535
+ loop do
536
+ r10 = _nt_eol
537
+ if r10
538
+ s9 << r10
539
+ else
540
+ break
541
+ end
542
+ end
543
+ if s9.empty?
544
+ self.index = i9
545
+ r9 = nil
546
+ else
547
+ r9 = instantiate_node(SyntaxNode,input, i9...index, s9)
548
+ end
549
+ if r9
550
+ r8 = r9
551
+ else
552
+ r11 = _nt_eof
553
+ if r11
554
+ r8 = r11
555
+ else
556
+ self.index = i8
557
+ r8 = nil
558
+ end
559
+ end
560
+ s0 << r8
561
+ if r8
562
+ r12 = _nt_steps
563
+ s0 << r12
564
+ end
534
565
  end
535
566
  end
536
567
  end
537
568
  end
538
569
  end
539
570
  if s0.last
540
- r0 = (SyntaxNode).new(input, i0...index, s0)
571
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
541
572
  r0.extend(Background0)
542
573
  r0.extend(Background1)
543
574
  else
@@ -551,8 +582,16 @@ module Cucumber
551
582
  end
552
583
 
553
584
  module FeatureElements0
554
- def build(background)
555
- elements.map{|s| s.build(background)}
585
+ def accept?(filter)
586
+ filter.nil? || elements.empty? || elements.detect{|feature_element| filter.accept?(feature_element)}
587
+ end
588
+
589
+ def build(background, filter)
590
+ elements.map do |feature_element|
591
+ if filter.nil? || filter.accept?(feature_element)
592
+ feature_element.build(background, filter)
593
+ end
594
+ end.compact
556
595
  end
557
596
  end
558
597
 
@@ -585,7 +624,7 @@ module Cucumber
585
624
  break
586
625
  end
587
626
  end
588
- r0 = SyntaxNode.new(input, i0...index, s0)
627
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
589
628
  r0.extend(FeatureElements0)
590
629
 
591
630
  node_cache[:feature_elements][start_index] = r0
@@ -628,7 +667,22 @@ module Cucumber
628
667
  end
629
668
 
630
669
  module Scenario1
631
- def build(background)
670
+ def at_line?(line)
671
+ scenario_keyword.line == line ||
672
+ steps.at_line?(line) ||
673
+ tags.at_line?(line)
674
+ end
675
+
676
+ def has_tags?(tag_names)
677
+ feature_tags = self.parent.parent.tags
678
+ tags.has_tags?(tag_names) || feature_tags.has_tags?(tag_names)
679
+ end
680
+
681
+ def matches_name?(name_to_match)
682
+ name.text_value == name_to_match
683
+ end
684
+
685
+ def build(background, filter)
632
686
  Ast::Scenario.new(
633
687
  background,
634
688
  comment.build,
@@ -671,7 +725,7 @@ module Cucumber
671
725
  break
672
726
  end
673
727
  end
674
- r5 = SyntaxNode.new(input, i5...index, s5)
728
+ r5 = instantiate_node(SyntaxNode,input, i5...index, s5)
675
729
  s0 << r5
676
730
  if r5
677
731
  r7 = _nt_line_to_eol
@@ -694,7 +748,7 @@ module Cucumber
694
748
  end
695
749
  end
696
750
  if s0.last
697
- r0 = (SyntaxNode).new(input, i0...index, s0)
751
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
698
752
  r0.extend(Scenario0)
699
753
  r0.extend(Scenario1)
700
754
  else
@@ -746,7 +800,27 @@ module Cucumber
746
800
  end
747
801
 
748
802
  module ScenarioOutline1
749
- def build(background)
803
+ def at_line?(line)
804
+ outline_at_line?(line) ||
805
+ examples_sections.at_line?(line) ||
806
+ tags.at_line?(line)
807
+ end
808
+
809
+ def outline_at_line?(line)
810
+ scenario_outline_keyword.line == line ||
811
+ steps.at_line?(line)
812
+ end
813
+
814
+ def has_tags?(tag_names)
815
+ feature_tags = self.parent.parent.tags
816
+ tags.has_tags?(tag_names) || feature_tags.has_tags?(tag_names)
817
+ end
818
+
819
+ def matches_name?(name_to_match)
820
+ name.text_value == name_to_match
821
+ end
822
+
823
+ def build(background, filter)
750
824
  Ast::ScenarioOutline.new(
751
825
  background,
752
826
  comment.build,
@@ -755,7 +829,7 @@ module Cucumber
755
829
  scenario_outline_keyword.text_value,
756
830
  name.text_value,
757
831
  steps.build,
758
- examples_sections.build
832
+ examples_sections.build(filter, self)
759
833
  )
760
834
  end
761
835
  end
@@ -790,7 +864,7 @@ module Cucumber
790
864
  break
791
865
  end
792
866
  end
793
- r5 = SyntaxNode.new(input, i5...index, s5)
867
+ r5 = instantiate_node(SyntaxNode,input, i5...index, s5)
794
868
  s0 << r5
795
869
  if r5
796
870
  r7 = _nt_line_to_eol
@@ -817,7 +891,7 @@ module Cucumber
817
891
  end
818
892
  end
819
893
  if s0.last
820
- r0 = (SyntaxNode).new(input, i0...index, s0)
894
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
821
895
  r0.extend(ScenarioOutline0)
822
896
  r0.extend(ScenarioOutline1)
823
897
  else
@@ -831,6 +905,10 @@ module Cucumber
831
905
  end
832
906
 
833
907
  module Steps0
908
+ def at_line?(line)
909
+ elements.detect{|e| e.at_line?(line)}
910
+ end
911
+
834
912
  def build
835
913
  elements.map{|e| e.build}
836
914
  end
@@ -853,7 +931,7 @@ module Cucumber
853
931
  break
854
932
  end
855
933
  end
856
- r0 = SyntaxNode.new(input, i0...index, s0)
934
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
857
935
  r0.extend(Steps0)
858
936
 
859
937
  node_cache[:steps][start_index] = r0
@@ -870,6 +948,10 @@ module Cucumber
870
948
  elements[2]
871
949
  end
872
950
 
951
+ def keyword_space
952
+ elements[3]
953
+ end
954
+
873
955
  def name
874
956
  elements[4]
875
957
  end
@@ -884,6 +966,11 @@ module Cucumber
884
966
  end
885
967
 
886
968
  module Step1
969
+ def at_line?(line)
970
+ step_keyword.line == line ||
971
+ (multi.respond_to?(:at_line?) && multi.at_line?(line))
972
+ end
973
+
887
974
  def build
888
975
  if multi.respond_to?(:build)
889
976
  Ast::Step.new(step_keyword.line, step_keyword.text_value, name.text_value.strip, multi.build)
@@ -914,66 +1001,57 @@ module Cucumber
914
1001
  break
915
1002
  end
916
1003
  end
917
- r2 = SyntaxNode.new(input, i2...index, s2)
1004
+ r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
918
1005
  s0 << r2
919
1006
  if r2
920
1007
  r4 = _nt_step_keyword
921
1008
  s0 << r4
922
1009
  if r4
923
- s5, i5 = [], index
924
- loop do
925
- r6 = _nt_space
926
- if r6
927
- s5 << r6
928
- else
929
- break
930
- end
931
- end
932
- r5 = SyntaxNode.new(input, i5...index, s5)
1010
+ r5 = _nt_keyword_space
933
1011
  s0 << r5
934
1012
  if r5
935
- r7 = _nt_line_to_eol
936
- s0 << r7
937
- if r7
938
- i8 = index
939
- s9, i9 = [], index
1013
+ r6 = _nt_line_to_eol
1014
+ s0 << r6
1015
+ if r6
1016
+ i7 = index
1017
+ s8, i8 = [], index
940
1018
  loop do
941
- r10 = _nt_eol
942
- if r10
943
- s9 << r10
1019
+ r9 = _nt_eol
1020
+ if r9
1021
+ s8 << r9
944
1022
  else
945
1023
  break
946
1024
  end
947
1025
  end
948
- if s9.empty?
949
- self.index = i9
950
- r9 = nil
1026
+ if s8.empty?
1027
+ self.index = i8
1028
+ r8 = nil
951
1029
  else
952
- r9 = SyntaxNode.new(input, i9...index, s9)
1030
+ r8 = instantiate_node(SyntaxNode,input, i8...index, s8)
953
1031
  end
954
- if r9
955
- r8 = r9
1032
+ if r8
1033
+ r7 = r8
956
1034
  else
957
- r11 = _nt_eof
958
- if r11
959
- r8 = r11
1035
+ r10 = _nt_eof
1036
+ if r10
1037
+ r7 = r10
960
1038
  else
961
- self.index = i8
962
- r8 = nil
1039
+ self.index = i7
1040
+ r7 = nil
963
1041
  end
964
1042
  end
965
- s0 << r8
966
- if r8
967
- r13 = _nt_multiline_arg
968
- if r13
969
- r12 = r13
1043
+ s0 << r7
1044
+ if r7
1045
+ r12 = _nt_multiline_arg
1046
+ if r12
1047
+ r11 = r12
970
1048
  else
971
- r12 = SyntaxNode.new(input, index...index)
1049
+ r11 = instantiate_node(SyntaxNode,input, index...index)
972
1050
  end
973
- s0 << r12
974
- if r12
975
- r14 = _nt_white
976
- s0 << r14
1051
+ s0 << r11
1052
+ if r11
1053
+ r13 = _nt_white
1054
+ s0 << r13
977
1055
  end
978
1056
  end
979
1057
  end
@@ -982,7 +1060,7 @@ module Cucumber
982
1060
  end
983
1061
  end
984
1062
  if s0.last
985
- r0 = (SyntaxNode).new(input, i0...index, s0)
1063
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
986
1064
  r0.extend(Step0)
987
1065
  r0.extend(Step1)
988
1066
  else
@@ -996,8 +1074,16 @@ module Cucumber
996
1074
  end
997
1075
 
998
1076
  module ExamplesSections0
999
- def build
1000
- elements.map{|e| e.build}
1077
+ def at_line?(line)
1078
+ elements.detect { |e| e.at_line?(line) }
1079
+ end
1080
+
1081
+ def build(filter, scenario_outline)
1082
+ elements.map do |e|
1083
+ if(filter.nil? || filter.accept?(e) || filter.outline_at_line?(scenario_outline))
1084
+ e.build(filter, scenario_outline)
1085
+ end
1086
+ end.compact
1001
1087
  end
1002
1088
  end
1003
1089
 
@@ -1018,7 +1104,7 @@ module Cucumber
1018
1104
  break
1019
1105
  end
1020
1106
  end
1021
- r0 = SyntaxNode.new(input, i0...index, s0)
1107
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
1022
1108
  r0.extend(ExamplesSections0)
1023
1109
 
1024
1110
  node_cache[:examples_sections][start_index] = r0
@@ -1049,8 +1135,21 @@ module Cucumber
1049
1135
  end
1050
1136
 
1051
1137
  module Examples1
1052
- def build
1053
- [examples_keyword.line, examples_keyword.text_value, name.text_value, table.raw]
1138
+ def at_line?(line)
1139
+ examples_keyword.line == line ||
1140
+ table.at_line?(line)
1141
+ end
1142
+
1143
+ def has_tags?(tag_names)
1144
+ true
1145
+ end
1146
+
1147
+ def outline_at_line?(line)
1148
+ true
1149
+ end
1150
+
1151
+ def build(filter, scenario_outline)
1152
+ [examples_keyword.line, examples_keyword.text_value, name.text_value, table.raw(filter, scenario_outline)]
1054
1153
  end
1055
1154
  end
1056
1155
 
@@ -1072,7 +1171,7 @@ module Cucumber
1072
1171
  break
1073
1172
  end
1074
1173
  end
1075
- r1 = SyntaxNode.new(input, i1...index, s1)
1174
+ r1 = instantiate_node(SyntaxNode,input, i1...index, s1)
1076
1175
  s0 << r1
1077
1176
  if r1
1078
1177
  r3 = _nt_examples_keyword
@@ -1087,14 +1186,14 @@ module Cucumber
1087
1186
  break
1088
1187
  end
1089
1188
  end
1090
- r4 = SyntaxNode.new(input, i4...index, s4)
1189
+ r4 = instantiate_node(SyntaxNode,input, i4...index, s4)
1091
1190
  s0 << r4
1092
1191
  if r4
1093
1192
  r7 = _nt_line_to_eol
1094
1193
  if r7
1095
1194
  r6 = r7
1096
1195
  else
1097
- r6 = SyntaxNode.new(input, index...index)
1196
+ r6 = instantiate_node(SyntaxNode,input, index...index)
1098
1197
  end
1099
1198
  s0 << r6
1100
1199
  if r6
@@ -1113,7 +1212,7 @@ module Cucumber
1113
1212
  end
1114
1213
  end
1115
1214
  if s0.last
1116
- r0 = (SyntaxNode).new(input, i0...index, s0)
1215
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
1117
1216
  r0.extend(Examples0)
1118
1217
  r0.extend(Examples1)
1119
1218
  else
@@ -1173,12 +1272,12 @@ module Cucumber
1173
1272
  r2 = nil
1174
1273
  else
1175
1274
  self.index = i2
1176
- r2 = SyntaxNode.new(input, index...index)
1275
+ r2 = instantiate_node(SyntaxNode,input, index...index)
1177
1276
  end
1178
1277
  s1 << r2
1179
1278
  if r2
1180
1279
  if index < input_length
1181
- r4 = (SyntaxNode).new(input, index...(index + 1))
1280
+ r4 = instantiate_node(SyntaxNode,input, index...(index + 1))
1182
1281
  @index += 1
1183
1282
  else
1184
1283
  terminal_parse_failure("any character")
@@ -1187,7 +1286,7 @@ module Cucumber
1187
1286
  s1 << r4
1188
1287
  end
1189
1288
  if s1.last
1190
- r1 = (SyntaxNode).new(input, i1...index, s1)
1289
+ r1 = instantiate_node(SyntaxNode,input, i1...index, s1)
1191
1290
  r1.extend(LineToEol0)
1192
1291
  else
1193
1292
  self.index = i1
@@ -1199,7 +1298,7 @@ module Cucumber
1199
1298
  break
1200
1299
  end
1201
1300
  end
1202
- r0 = SyntaxNode.new(input, i0...index, s0)
1301
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
1203
1302
 
1204
1303
  node_cache[:line_to_eol][start_index] = r0
1205
1304
 
@@ -1224,6 +1323,10 @@ module Cucumber
1224
1323
  end
1225
1324
 
1226
1325
  module PyString2
1326
+ def at_line?(line)
1327
+ line >= open_py_string.line && line <= close_py_string.line
1328
+ end
1329
+
1227
1330
  def build
1228
1331
  Ast::PyString.new(open_py_string.line, close_py_string.line, s.text_value, open_py_string.indentation)
1229
1332
  end
@@ -1250,12 +1353,12 @@ module Cucumber
1250
1353
  r4 = nil
1251
1354
  else
1252
1355
  self.index = i4
1253
- r4 = SyntaxNode.new(input, index...index)
1356
+ r4 = instantiate_node(SyntaxNode,input, index...index)
1254
1357
  end
1255
1358
  s3 << r4
1256
1359
  if r4
1257
1360
  if index < input_length
1258
- r6 = (SyntaxNode).new(input, index...(index + 1))
1361
+ r6 = instantiate_node(SyntaxNode,input, index...(index + 1))
1259
1362
  @index += 1
1260
1363
  else
1261
1364
  terminal_parse_failure("any character")
@@ -1264,7 +1367,7 @@ module Cucumber
1264
1367
  s3 << r6
1265
1368
  end
1266
1369
  if s3.last
1267
- r3 = (SyntaxNode).new(input, i3...index, s3)
1370
+ r3 = instantiate_node(SyntaxNode,input, i3...index, s3)
1268
1371
  r3.extend(PyString0)
1269
1372
  else
1270
1373
  self.index = i3
@@ -1276,7 +1379,7 @@ module Cucumber
1276
1379
  break
1277
1380
  end
1278
1381
  end
1279
- r2 = SyntaxNode.new(input, i2...index, s2)
1382
+ r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
1280
1383
  s0 << r2
1281
1384
  if r2
1282
1385
  r7 = _nt_close_py_string
@@ -1284,7 +1387,7 @@ module Cucumber
1284
1387
  end
1285
1388
  end
1286
1389
  if s0.last
1287
- r0 = (SyntaxNode).new(input, i0...index, s0)
1390
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
1288
1391
  r0.extend(PyString1)
1289
1392
  r0.extend(PyString2)
1290
1393
  else
@@ -1330,7 +1433,7 @@ module Cucumber
1330
1433
  s0 << r1
1331
1434
  if r1
1332
1435
  if input.index('"""', index) == index
1333
- r2 = (SyntaxNode).new(input, index...(index + 3))
1436
+ r2 = instantiate_node(SyntaxNode,input, index...(index + 3))
1334
1437
  @index += 3
1335
1438
  else
1336
1439
  terminal_parse_failure('"""')
@@ -1347,7 +1450,7 @@ module Cucumber
1347
1450
  break
1348
1451
  end
1349
1452
  end
1350
- r3 = SyntaxNode.new(input, i3...index, s3)
1453
+ r3 = instantiate_node(SyntaxNode,input, i3...index, s3)
1351
1454
  s0 << r3
1352
1455
  if r3
1353
1456
  r5 = _nt_eol
@@ -1356,7 +1459,7 @@ module Cucumber
1356
1459
  end
1357
1460
  end
1358
1461
  if s0.last
1359
- r0 = (SyntaxNode).new(input, i0...index, s0)
1462
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
1360
1463
  r0.extend(OpenPyString0)
1361
1464
  r0.extend(OpenPyString1)
1362
1465
  else
@@ -1410,11 +1513,11 @@ module Cucumber
1410
1513
  break
1411
1514
  end
1412
1515
  end
1413
- r2 = SyntaxNode.new(input, i2...index, s2)
1516
+ r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
1414
1517
  s0 << r2
1415
1518
  if r2
1416
1519
  if input.index('"""', index) == index
1417
- r4 = (SyntaxNode).new(input, index...(index + 3))
1520
+ r4 = instantiate_node(SyntaxNode,input, index...(index + 3))
1418
1521
  @index += 3
1419
1522
  else
1420
1523
  terminal_parse_failure('"""')
@@ -1428,7 +1531,7 @@ module Cucumber
1428
1531
  end
1429
1532
  end
1430
1533
  if s0.last
1431
- r0 = (SyntaxNode).new(input, i0...index, s0)
1534
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
1432
1535
  r0.extend(ClosePyString0)
1433
1536
  r0.extend(ClosePyString1)
1434
1537
  else
@@ -1470,7 +1573,7 @@ module Cucumber
1470
1573
  break
1471
1574
  end
1472
1575
  end
1473
- r0 = SyntaxNode.new(input, i0...index, s0)
1576
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
1474
1577
 
1475
1578
  node_cache[:white][start_index] = r0
1476
1579