square-cucumber 0.3.12.2 → 0.3.93.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (91) hide show
  1. data/History.txt +117 -4
  2. data/Manifest.txt +11 -0
  3. data/Rakefile +1 -1
  4. data/config/hoe.rb +3 -2
  5. data/cucumber.yml +2 -2
  6. data/examples/i18n/ko/features/addition.feature +5 -5
  7. data/examples/i18n/ko/features/step_definitons/calculator_steps.rb +1 -1
  8. data/examples/i18n/no/features/step_definitons/kalkulator_steps.rb +1 -1
  9. data/examples/i18n/pt/features/adicao.feature +4 -4
  10. data/examples/self_test/features/support/env.rb +2 -1
  11. data/examples/sinatra/features/support/env.rb +7 -1
  12. data/examples/steps_library/features/step_definitions/steps_lib1.rb +8 -0
  13. data/examples/steps_library/features/step_definitions/steps_lib2.rb +8 -0
  14. data/examples/tickets/features/step_definitons/tickets_steps.rb +15 -0
  15. data/examples/tickets/features/table_diffing.feature +13 -0
  16. data/examples/watir/features/step_definitons/search_steps.rb +5 -1
  17. data/features/cucumber_cli_diff_disabled.feature +2 -1
  18. data/features/html_formatter/a.html +5 -7
  19. data/features/junit_formatter.feature +21 -14
  20. data/features/profiles.feature +99 -0
  21. data/features/rake_task.feature +28 -0
  22. data/features/step_definitions/cucumber_steps.rb +28 -15
  23. data/features/steps_formatter.feature +25 -0
  24. data/features/support/env.rb +9 -5
  25. data/features/table_diffing.feature +45 -0
  26. data/features/unicode_table.feature +35 -0
  27. data/features/work_in_progress.feature +1 -0
  28. data/gem_tasks/contributors.rake +4 -0
  29. data/lib/cucumber/ast/background.rb +1 -0
  30. data/lib/cucumber/ast/comment.rb +1 -0
  31. data/lib/cucumber/ast/examples.rb +1 -0
  32. data/lib/cucumber/ast/feature.rb +10 -0
  33. data/lib/cucumber/ast/features.rb +6 -1
  34. data/lib/cucumber/ast/outline_table.rb +4 -1
  35. data/lib/cucumber/ast/py_string.rb +1 -1
  36. data/lib/cucumber/ast/scenario.rb +1 -0
  37. data/lib/cucumber/ast/scenario_outline.rb +2 -0
  38. data/lib/cucumber/ast/step.rb +5 -1
  39. data/lib/cucumber/ast/step_collection.rb +1 -0
  40. data/lib/cucumber/ast/step_invocation.rb +1 -0
  41. data/lib/cucumber/ast/table.rb +306 -52
  42. data/lib/cucumber/ast/tags.rb +1 -0
  43. data/lib/cucumber/ast/visitor.rb +2 -1
  44. data/lib/cucumber/cli/configuration.rb +28 -278
  45. data/lib/cucumber/cli/drb_client.rb +3 -1
  46. data/lib/cucumber/cli/language_help_formatter.rb +9 -7
  47. data/lib/cucumber/cli/main.rb +16 -2
  48. data/lib/cucumber/cli/options.rb +370 -0
  49. data/lib/cucumber/cli/profile_loader.rb +65 -0
  50. data/lib/cucumber/core_ext/instance_exec.rb +8 -5
  51. data/lib/cucumber/feature_file.rb +7 -1
  52. data/lib/cucumber/filter.rb +2 -2
  53. data/lib/cucumber/formatter/ansicolor.rb +42 -9
  54. data/lib/cucumber/formatter/console.rb +1 -1
  55. data/lib/cucumber/formatter/html.rb +12 -10
  56. data/lib/cucumber/formatter/junit.rb +63 -26
  57. data/lib/cucumber/formatter/pretty.rb +20 -5
  58. data/lib/cucumber/formatter/progress.rb +1 -1
  59. data/lib/cucumber/formatter/steps.rb +49 -0
  60. data/lib/cucumber/languages.yml +6 -6
  61. data/lib/cucumber/parser/feature.rb +90 -63
  62. data/lib/cucumber/parser/feature.tt +28 -1
  63. data/lib/cucumber/parser/i18n/language.rb +12 -5
  64. data/lib/cucumber/parser/table.rb +25 -25
  65. data/lib/cucumber/rake/task.rb +9 -3
  66. data/lib/cucumber/step_definition.rb +1 -1
  67. data/lib/cucumber/step_match.rb +1 -1
  68. data/lib/cucumber/step_mother.rb +3 -1
  69. data/lib/cucumber/version.rb +2 -2
  70. data/lib/cucumber/webrat/table_locator.rb +66 -0
  71. data/rails_generators/cucumber/cucumber_generator.rb +5 -1
  72. data/rails_generators/cucumber/templates/cucumber +3 -2
  73. data/rails_generators/cucumber/templates/cucumber.rake +18 -6
  74. data/rails_generators/cucumber/templates/cucumber_environment.rb +7 -4
  75. data/rails_generators/cucumber/templates/env.rb +1 -0
  76. data/rails_generators/cucumber/templates/spork_env.rb +1 -0
  77. data/rails_generators/cucumber/templates/webrat_steps.rb +22 -0
  78. data/rails_generators/feature/templates/feature.erb +1 -1
  79. data/rails_generators/feature/templates/steps.erb +2 -8
  80. data/spec/cucumber/ast/table_spec.rb +169 -0
  81. data/spec/cucumber/cli/configuration_spec.rb +144 -101
  82. data/spec/cucumber/cli/main_spec.rb +14 -5
  83. data/spec/cucumber/cli/options_spec.rb +311 -0
  84. data/spec/cucumber/cli/profile_loader_spec.rb +10 -0
  85. data/spec/cucumber/core_ext/proc_spec.rb +16 -2
  86. data/spec/cucumber/formatter/html_spec.rb +18 -0
  87. data/spec/cucumber/formatter/progress_spec.rb +2 -2
  88. data/spec/cucumber/parser/table_parser_spec.rb +1 -1
  89. data/spec/spec.opts +3 -1
  90. metadata +18 -4
  91. data/lib/cucumber/webrat/mechanize_world.rb +0 -82
@@ -168,13 +168,13 @@
168
168
  feature: Feature
169
169
  background: Background
170
170
  scenario: Scenario
171
- scenario_outline: All y'all
171
+ scenario_outline: All y\'all
172
172
  examples: Examples
173
- given: Given y'all
174
- when: When y'all
175
- then: Then y'all
176
- and: And y'all
177
- but: But y'all
173
+ given: Given y\'all
174
+ when: When y\'all
175
+ then: Then y\'all
176
+ and: And y\'all
177
+ but: But y\'all
178
178
  space_after_keyword: true
179
179
  "es":
180
180
  name: Spanish
@@ -55,7 +55,11 @@ module Cucumber
55
55
  def has_tags?(tag_names)
56
56
  tags.has_tags?(tag_names)
57
57
  end
58
-
58
+
59
+ def has_all_tags?(tag_names)
60
+ tags.has_all_tags?(tag_names)
61
+ end
62
+
59
63
  def build(filter)
60
64
  if(filter.nil? || feature_elements.accept?(filter) || (!bg.empty? && filter.accept?(bg)))
61
65
  background = bg.respond_to?(:build) ? bg.build : nil
@@ -111,7 +115,7 @@ module Cucumber
111
115
  if r12
112
116
  r9 = r12
113
117
  else
114
- self.index = i9
118
+ @index = i9
115
119
  r9 = nil
116
120
  end
117
121
  end
@@ -119,7 +123,7 @@ module Cucumber
119
123
  if r9
120
124
  r8 = nil
121
125
  else
122
- self.index = i8
126
+ @index = i8
123
127
  r8 = instantiate_node(SyntaxNode,input, index...index)
124
128
  end
125
129
  s7 << r8
@@ -137,7 +141,7 @@ module Cucumber
137
141
  r7 = instantiate_node(SyntaxNode,input, i7...index, s7)
138
142
  r7.extend(FeatureSub0)
139
143
  else
140
- self.index = i7
144
+ @index = i7
141
145
  r7 = nil
142
146
  end
143
147
  if r7
@@ -180,13 +184,13 @@ module Cucumber
180
184
  r0.extend(FeatureSub1)
181
185
  r0.extend(FeatureSub2)
182
186
  else
183
- self.index = i0
187
+ @index = i0
184
188
  r0 = nil
185
189
  end
186
190
 
187
191
  node_cache[:feature_sub][start_index] = r0
188
192
 
189
- return r0
193
+ r0
190
194
  end
191
195
 
192
196
  module Tags0
@@ -215,6 +219,10 @@ module Cucumber
215
219
  (tag_names & tags).any?
216
220
  end
217
221
 
222
+ def has_all_tags?(tags)
223
+ (tags & tag_names) == tags
224
+ end
225
+
218
226
  def build
219
227
  Ast::Tags.new(ts.line, tag_names)
220
228
  end
@@ -253,7 +261,7 @@ module Cucumber
253
261
  if r8
254
262
  r6 = r8
255
263
  else
256
- self.index = i6
264
+ @index = i6
257
265
  r6 = nil
258
266
  end
259
267
  end
@@ -264,7 +272,7 @@ module Cucumber
264
272
  end
265
273
  end
266
274
  if s5.empty?
267
- self.index = i5
275
+ @index = i5
268
276
  r5 = nil
269
277
  else
270
278
  r5 = instantiate_node(SyntaxNode,input, i5...index, s5)
@@ -275,7 +283,7 @@ module Cucumber
275
283
  r3 = instantiate_node(SyntaxNode,input, i3...index, s3)
276
284
  r3.extend(Tags0)
277
285
  else
278
- self.index = i3
286
+ @index = i3
279
287
  r3 = nil
280
288
  end
281
289
  if r3
@@ -292,13 +300,13 @@ module Cucumber
292
300
  r0.extend(Tags1)
293
301
  r0.extend(Tags2)
294
302
  else
295
- self.index = i0
303
+ @index = i0
296
304
  r0 = nil
297
305
  end
298
306
 
299
307
  node_cache[:tags][start_index] = r0
300
308
 
301
- return r0
309
+ r0
302
310
  end
303
311
 
304
312
  module Tag0
@@ -316,7 +324,7 @@ module Cucumber
316
324
  end
317
325
 
318
326
  i0, s0 = index, []
319
- if input.index('@', index) == index
327
+ if has_terminal?('@', false, index)
320
328
  r1 = instantiate_node(SyntaxNode,input, index...(index + 1))
321
329
  @index += 1
322
330
  else
@@ -327,7 +335,7 @@ module Cucumber
327
335
  if r1
328
336
  s2, i2 = [], index
329
337
  loop do
330
- if input.index(Regexp.new('[^@\\r\\n\\t ]'), index) == index
338
+ if has_terminal?('\G[^@\\r\\n\\t ]', true, index)
331
339
  r3 = instantiate_node(SyntaxNode,input, index...(index + 1))
332
340
  @index += 1
333
341
  else
@@ -340,7 +348,7 @@ module Cucumber
340
348
  end
341
349
  end
342
350
  if s2.empty?
343
- self.index = i2
351
+ @index = i2
344
352
  r2 = nil
345
353
  else
346
354
  r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
@@ -351,13 +359,13 @@ module Cucumber
351
359
  r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
352
360
  r0.extend(Tag0)
353
361
  else
354
- self.index = i0
362
+ @index = i0
355
363
  r0 = nil
356
364
  end
357
365
 
358
366
  node_cache[:tag][start_index] = r0
359
367
 
360
- return r0
368
+ r0
361
369
  end
362
370
 
363
371
  module Comment0
@@ -397,7 +405,7 @@ module Cucumber
397
405
  r1 = instantiate_node(SyntaxNode,input, i1...index, s1)
398
406
  r1.extend(Comment0)
399
407
  else
400
- self.index = i1
408
+ @index = i1
401
409
  r1 = nil
402
410
  end
403
411
  if r1
@@ -411,7 +419,7 @@ module Cucumber
411
419
 
412
420
  node_cache[:comment][start_index] = r0
413
421
 
414
- return r0
422
+ r0
415
423
  end
416
424
 
417
425
  module CommentLine0
@@ -429,7 +437,7 @@ module Cucumber
429
437
  end
430
438
 
431
439
  i0, s0 = index, []
432
- if input.index('#', index) == index
440
+ if has_terminal?('#', false, index)
433
441
  r1 = instantiate_node(SyntaxNode,input, index...(index + 1))
434
442
  @index += 1
435
443
  else
@@ -445,13 +453,13 @@ module Cucumber
445
453
  r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
446
454
  r0.extend(CommentLine0)
447
455
  else
448
- self.index = i0
456
+ @index = i0
449
457
  r0 = nil
450
458
  end
451
459
 
452
460
  node_cache[:comment_line][start_index] = r0
453
461
 
454
- return r0
462
+ r0
455
463
  end
456
464
 
457
465
  module Background0
@@ -491,6 +499,11 @@ module Cucumber
491
499
  feature_tags.has_tags?(tag_names)
492
500
  end
493
501
 
502
+ def has_all_tags?(tag_names)
503
+ feature_tags = self.parent.tags
504
+ feature_tags.has_all_tags?(tag_names)
505
+ end
506
+
494
507
  def build
495
508
  Ast::Background.new(
496
509
  comment.build,
@@ -551,7 +564,7 @@ module Cucumber
551
564
  end
552
565
  end
553
566
  if s9.empty?
554
- self.index = i9
567
+ @index = i9
555
568
  r9 = nil
556
569
  else
557
570
  r9 = instantiate_node(SyntaxNode,input, i9...index, s9)
@@ -563,7 +576,7 @@ module Cucumber
563
576
  if r11
564
577
  r8 = r11
565
578
  else
566
- self.index = i8
579
+ @index = i8
567
580
  r8 = nil
568
581
  end
569
582
  end
@@ -582,13 +595,13 @@ module Cucumber
582
595
  r0.extend(Background0)
583
596
  r0.extend(Background1)
584
597
  else
585
- self.index = i0
598
+ @index = i0
586
599
  r0 = nil
587
600
  end
588
601
 
589
602
  node_cache[:background][start_index] = r0
590
603
 
591
- return r0
604
+ r0
592
605
  end
593
606
 
594
607
  module FeatureElements0
@@ -624,7 +637,7 @@ module Cucumber
624
637
  if r3
625
638
  r1 = r3
626
639
  else
627
- self.index = i1
640
+ @index = i1
628
641
  r1 = nil
629
642
  end
630
643
  end
@@ -639,7 +652,7 @@ module Cucumber
639
652
 
640
653
  node_cache[:feature_elements][start_index] = r0
641
654
 
642
- return r0
655
+ r0
643
656
  end
644
657
 
645
658
  module Scenario0
@@ -688,6 +701,11 @@ module Cucumber
688
701
  tags.has_tags?(tag_names) || feature_tags.has_tags?(tag_names)
689
702
  end
690
703
 
704
+ def has_all_tags?(tag_names)
705
+ feature_tags = self.parent.parent.tags
706
+ tags.has_all_tags?(tag_names) || feature_tags.has_all_tags?(tag_names)
707
+ end
708
+
691
709
  def matches_name?(regexp_to_match)
692
710
  name.build =~ regexp_to_match
693
711
  end
@@ -762,13 +780,13 @@ module Cucumber
762
780
  r0.extend(Scenario0)
763
781
  r0.extend(Scenario1)
764
782
  else
765
- self.index = i0
783
+ @index = i0
766
784
  r0 = nil
767
785
  end
768
786
 
769
787
  node_cache[:scenario][start_index] = r0
770
788
 
771
- return r0
789
+ r0
772
790
  end
773
791
 
774
792
  module ScenarioOutline0
@@ -826,6 +844,11 @@ module Cucumber
826
844
  tags.has_tags?(tag_names) || feature_tags.has_tags?(tag_names)
827
845
  end
828
846
 
847
+ def has_all_tags?(tag_names)
848
+ feature_tags = self.parent.parent.tags
849
+ tags.has_all_tags?(tag_names) || feature_tags.has_all_tags?(tag_names)
850
+ end
851
+
829
852
  def matches_name?(regexp_to_match)
830
853
  outline_matches_name?(regexp_to_match) || examples_sections.matches_name?(regexp_to_match)
831
854
  end
@@ -909,13 +932,13 @@ module Cucumber
909
932
  r0.extend(ScenarioOutline0)
910
933
  r0.extend(ScenarioOutline1)
911
934
  else
912
- self.index = i0
935
+ @index = i0
913
936
  r0 = nil
914
937
  end
915
938
 
916
939
  node_cache[:scenario_outline][start_index] = r0
917
940
 
918
- return r0
941
+ r0
919
942
  end
920
943
 
921
944
  module Steps0
@@ -950,7 +973,7 @@ module Cucumber
950
973
 
951
974
  node_cache[:steps][start_index] = r0
952
975
 
953
- return r0
976
+ r0
954
977
  end
955
978
 
956
979
  module Step0
@@ -1038,7 +1061,7 @@ module Cucumber
1038
1061
  end
1039
1062
  end
1040
1063
  if s8.empty?
1041
- self.index = i8
1064
+ @index = i8
1042
1065
  r8 = nil
1043
1066
  else
1044
1067
  r8 = instantiate_node(SyntaxNode,input, i8...index, s8)
@@ -1050,7 +1073,7 @@ module Cucumber
1050
1073
  if r10
1051
1074
  r7 = r10
1052
1075
  else
1053
- self.index = i7
1076
+ @index = i7
1054
1077
  r7 = nil
1055
1078
  end
1056
1079
  end
@@ -1078,13 +1101,13 @@ module Cucumber
1078
1101
  r0.extend(Step0)
1079
1102
  r0.extend(Step1)
1080
1103
  else
1081
- self.index = i0
1104
+ @index = i0
1082
1105
  r0 = nil
1083
1106
  end
1084
1107
 
1085
1108
  node_cache[:step][start_index] = r0
1086
1109
 
1087
- return r0
1110
+ r0
1088
1111
  end
1089
1112
 
1090
1113
  module ExamplesSections0
@@ -1127,7 +1150,7 @@ module Cucumber
1127
1150
 
1128
1151
  node_cache[:examples_sections][start_index] = r0
1129
1152
 
1130
- return r0
1153
+ r0
1131
1154
  end
1132
1155
 
1133
1156
  module Examples0
@@ -1162,6 +1185,10 @@ module Cucumber
1162
1185
  true
1163
1186
  end
1164
1187
 
1188
+ def has_all_tags?(tag_names)
1189
+ true
1190
+ end
1191
+
1165
1192
  def outline_at_line?(line)
1166
1193
  true
1167
1194
  end
@@ -1238,13 +1265,13 @@ module Cucumber
1238
1265
  r0.extend(Examples0)
1239
1266
  r0.extend(Examples1)
1240
1267
  else
1241
- self.index = i0
1268
+ @index = i0
1242
1269
  r0 = nil
1243
1270
  end
1244
1271
 
1245
1272
  node_cache[:examples][start_index] = r0
1246
1273
 
1247
- return r0
1274
+ r0
1248
1275
  end
1249
1276
 
1250
1277
  def _nt_multiline_arg
@@ -1264,14 +1291,14 @@ module Cucumber
1264
1291
  if r2
1265
1292
  r0 = r2
1266
1293
  else
1267
- self.index = i0
1294
+ @index = i0
1268
1295
  r0 = nil
1269
1296
  end
1270
1297
  end
1271
1298
 
1272
1299
  node_cache[:multiline_arg][start_index] = r0
1273
1300
 
1274
- return r0
1301
+ r0
1275
1302
  end
1276
1303
 
1277
1304
  module LineToEol0
@@ -1293,7 +1320,7 @@ module Cucumber
1293
1320
  if r3
1294
1321
  r2 = nil
1295
1322
  else
1296
- self.index = i2
1323
+ @index = i2
1297
1324
  r2 = instantiate_node(SyntaxNode,input, index...index)
1298
1325
  end
1299
1326
  s1 << r2
@@ -1311,7 +1338,7 @@ module Cucumber
1311
1338
  r1 = instantiate_node(SyntaxNode,input, i1...index, s1)
1312
1339
  r1.extend(LineToEol0)
1313
1340
  else
1314
- self.index = i1
1341
+ @index = i1
1315
1342
  r1 = nil
1316
1343
  end
1317
1344
  if r1
@@ -1324,7 +1351,7 @@ module Cucumber
1324
1351
 
1325
1352
  node_cache[:line_to_eol][start_index] = r0
1326
1353
 
1327
- return r0
1354
+ r0
1328
1355
  end
1329
1356
 
1330
1357
  module LinesToKeyword0
@@ -1382,13 +1409,13 @@ module Cucumber
1382
1409
  r3 = instantiate_node(SyntaxNode,input, i3...index, s3)
1383
1410
  r3.extend(LinesToKeyword0)
1384
1411
  else
1385
- self.index = i3
1412
+ @index = i3
1386
1413
  r3 = nil
1387
1414
  end
1388
1415
  if r3
1389
1416
  r2 = nil
1390
1417
  else
1391
- self.index = i2
1418
+ @index = i2
1392
1419
  r2 = instantiate_node(SyntaxNode,input, index...index)
1393
1420
  end
1394
1421
  s1 << r2
@@ -1406,7 +1433,7 @@ module Cucumber
1406
1433
  r1 = instantiate_node(SyntaxNode,input, i1...index, s1)
1407
1434
  r1.extend(LinesToKeyword1)
1408
1435
  else
1409
- self.index = i1
1436
+ @index = i1
1410
1437
  r1 = nil
1411
1438
  end
1412
1439
  if r1
@@ -1420,7 +1447,7 @@ module Cucumber
1420
1447
 
1421
1448
  node_cache[:lines_to_keyword][start_index] = r0
1422
1449
 
1423
- return r0
1450
+ r0
1424
1451
  end
1425
1452
 
1426
1453
  module ReservedWordsAndSymbols0
@@ -1453,7 +1480,7 @@ module Cucumber
1453
1480
  r1 = instantiate_node(SyntaxNode,input, i1...index, s1)
1454
1481
  r1.extend(ReservedWordsAndSymbols0)
1455
1482
  else
1456
- self.index = i1
1483
+ @index = i1
1457
1484
  r1 = nil
1458
1485
  end
1459
1486
  if r1
@@ -1479,7 +1506,7 @@ module Cucumber
1479
1506
  if r8
1480
1507
  r0 = r8
1481
1508
  else
1482
- self.index = i0
1509
+ @index = i0
1483
1510
  r0 = nil
1484
1511
  end
1485
1512
  end
@@ -1490,7 +1517,7 @@ module Cucumber
1490
1517
 
1491
1518
  node_cache[:reserved_words_and_symbols][start_index] = r0
1492
1519
 
1493
- return r0
1520
+ r0
1494
1521
  end
1495
1522
 
1496
1523
  module PyString0
@@ -1540,7 +1567,7 @@ module Cucumber
1540
1567
  if r5
1541
1568
  r4 = nil
1542
1569
  else
1543
- self.index = i4
1570
+ @index = i4
1544
1571
  r4 = instantiate_node(SyntaxNode,input, index...index)
1545
1572
  end
1546
1573
  s3 << r4
@@ -1558,7 +1585,7 @@ module Cucumber
1558
1585
  r3 = instantiate_node(SyntaxNode,input, i3...index, s3)
1559
1586
  r3.extend(PyString0)
1560
1587
  else
1561
- self.index = i3
1588
+ @index = i3
1562
1589
  r3 = nil
1563
1590
  end
1564
1591
  if r3
@@ -1579,13 +1606,13 @@ module Cucumber
1579
1606
  r0.extend(PyString1)
1580
1607
  r0.extend(PyString2)
1581
1608
  else
1582
- self.index = i0
1609
+ @index = i0
1583
1610
  r0 = nil
1584
1611
  end
1585
1612
 
1586
1613
  node_cache[:py_string][start_index] = r0
1587
1614
 
1588
- return r0
1615
+ r0
1589
1616
  end
1590
1617
 
1591
1618
  module OpenPyString0
@@ -1629,7 +1656,7 @@ module Cucumber
1629
1656
  r1 = instantiate_node(SyntaxNode,input, i1...index, s1)
1630
1657
  s0 << r1
1631
1658
  if r1
1632
- if input.index('"""', index) == index
1659
+ if has_terminal?('"""', false, index)
1633
1660
  r3 = instantiate_node(SyntaxNode,input, index...(index + 3))
1634
1661
  @index += 3
1635
1662
  else
@@ -1660,13 +1687,13 @@ module Cucumber
1660
1687
  r0.extend(OpenPyString0)
1661
1688
  r0.extend(OpenPyString1)
1662
1689
  else
1663
- self.index = i0
1690
+ @index = i0
1664
1691
  r0 = nil
1665
1692
  end
1666
1693
 
1667
1694
  node_cache[:open_py_string][start_index] = r0
1668
1695
 
1669
- return r0
1696
+ r0
1670
1697
  end
1671
1698
 
1672
1699
  module ClosePyString0
@@ -1713,7 +1740,7 @@ module Cucumber
1713
1740
  r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
1714
1741
  s0 << r2
1715
1742
  if r2
1716
- if input.index('"""', index) == index
1743
+ if has_terminal?('"""', false, index)
1717
1744
  r4 = instantiate_node(SyntaxNode,input, index...(index + 3))
1718
1745
  @index += 3
1719
1746
  else
@@ -1732,13 +1759,13 @@ module Cucumber
1732
1759
  r0.extend(ClosePyString0)
1733
1760
  r0.extend(ClosePyString1)
1734
1761
  else
1735
- self.index = i0
1762
+ @index = i0
1736
1763
  r0 = nil
1737
1764
  end
1738
1765
 
1739
1766
  node_cache[:close_py_string][start_index] = r0
1740
1767
 
1741
- return r0
1768
+ r0
1742
1769
  end
1743
1770
 
1744
1771
  def _nt_white
@@ -1760,7 +1787,7 @@ module Cucumber
1760
1787
  if r3
1761
1788
  r1 = r3
1762
1789
  else
1763
- self.index = i1
1790
+ @index = i1
1764
1791
  r1 = nil
1765
1792
  end
1766
1793
  end
@@ -1774,7 +1801,7 @@ module Cucumber
1774
1801
 
1775
1802
  node_cache[:white][start_index] = r0
1776
1803
 
1777
- return r0
1804
+ r0
1778
1805
  end
1779
1806
 
1780
1807
  end