square-cucumber 0.3.12.2 → 0.3.93.1

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 (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