cucumber 0.5.3 → 0.6.0

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 +25 -0
  2. data/Rakefile +4 -3
  3. data/VERSION.yml +3 -2
  4. data/cucumber.gemspec +21 -16
  5. data/cucumber.yml +5 -3
  6. data/examples/i18n/ar/features/step_definitons/calculator_steps.rb +1 -1
  7. data/examples/i18n/bg/features/support/env.rb +1 -2
  8. data/examples/i18n/cat/features/step_definitons/calculator_steps.rb +1 -1
  9. data/examples/i18n/da/features/step_definitons/lommeregner_steps.rb +1 -1
  10. data/examples/i18n/de/features/step_definitons/calculator_steps.rb +1 -1
  11. data/examples/i18n/en-lol/features/support/env.rb +0 -1
  12. data/examples/i18n/en/features/step_definitons/calculator_steps.rb +2 -2
  13. data/examples/i18n/es/features/step_definitons/calculador_steps.rb +2 -2
  14. data/examples/i18n/et/features/step_definitions/kalkulaator_steps.rb +1 -1
  15. data/examples/i18n/fi/features/step_definitons/laskin_steps.rb +1 -1
  16. data/examples/i18n/fr/features/step_definitions/calculatrice_steps.rb +0 -6
  17. data/examples/i18n/fr/features/support/env.rb +5 -0
  18. data/examples/i18n/he/features/step_definitons/calculator_steps.rb +1 -1
  19. data/examples/i18n/he/lib/calculator.rb +1 -0
  20. data/examples/i18n/hu/features/step_definitons/calculator_steps.rb +1 -1
  21. data/examples/i18n/id/features/step_definitons/calculator_steps.rb +1 -1
  22. data/examples/i18n/it/features/step_definitons/calcolatrice_steps.rb +1 -1
  23. data/examples/i18n/ja/features/step_definitons/calculator_steps.rb +0 -5
  24. data/examples/i18n/ja/features/support/env.rb +5 -0
  25. data/examples/i18n/ko/features/step_definitons/calculator_steps.rb +1 -1
  26. data/examples/i18n/lt/features/step_definitons/calculator_steps.rb +1 -1
  27. data/examples/i18n/lv/features/step_definitons/calculator_steps.rb +1 -1
  28. data/examples/i18n/no/features/support/env.rb +1 -2
  29. data/examples/i18n/pl/features/step_definitons/calculator_steps.rb +1 -1
  30. data/examples/i18n/pl/features/support/env.rb +1 -2
  31. data/examples/i18n/pt/features/support/env.rb +1 -2
  32. data/examples/i18n/ro/features/step_definitons/calculator_steps.rb +1 -1
  33. data/examples/i18n/ru/features/support/env.rb +1 -2
  34. data/examples/i18n/se/features/step_definitons/kalkulator_steps.rb +1 -1
  35. data/examples/i18n/sk/features/step_definitons/calculator_steps.rb +1 -1
  36. data/examples/i18n/sr-latn/features/step_definitons/calculator_steps.rb +3 -3
  37. data/examples/i18n/sr/features/step_definitons/calculator_steps.rb +1 -5
  38. data/examples/i18n/sr/features/support/env.rb +5 -0
  39. data/examples/i18n/tr/features/step_definitons/hesap_makinesi_adimlari.rb +1 -1
  40. data/examples/i18n/uz/features/support/env.rb +1 -2
  41. data/examples/i18n/zh-CN/features/step_definitons/calculator_steps.rb +1 -1
  42. data/examples/i18n/zh-TW/features/step_definitons/calculator_steps.rb +1 -1
  43. data/examples/self_test/features/step_definitions/sample_steps.rb +2 -0
  44. data/examples/watir/features/support/screenshots.rb +20 -17
  45. data/features/call_many_steps.feature +2 -0
  46. data/features/cucumber_cli.feature +7 -4
  47. data/features/html_formatter.feature +1 -0
  48. data/features/html_formatter/a.html +2 -2
  49. data/features/language_help.feature +1 -0
  50. data/features/step_definitions/cucumber_steps.rb +3 -3
  51. data/features/support/env.rb +7 -5
  52. data/features/tag_logic.feature +7 -7
  53. data/features/wire_protocol.feature +1 -1
  54. data/gem_tasks/features.rake +2 -0
  55. data/lib/autotest/cucumber_mixin.rb +4 -4
  56. data/lib/cucumber/ast.rb +0 -1
  57. data/lib/cucumber/ast/feature.rb +9 -12
  58. data/lib/cucumber/ast/feature_element.rb +4 -4
  59. data/lib/cucumber/ast/features.rb +2 -2
  60. data/lib/cucumber/ast/table.rb +1 -0
  61. data/lib/cucumber/ast/tags.rb +1 -97
  62. data/lib/cucumber/cli/configuration.rb +3 -1
  63. data/lib/cucumber/cli/main.rb +20 -23
  64. data/lib/cucumber/cli/options.rb +9 -18
  65. data/lib/cucumber/filter.rb +4 -2
  66. data/lib/cucumber/formatter/console.rb +8 -28
  67. data/lib/cucumber/formatter/html.rb +1 -1
  68. data/lib/cucumber/formatter/pdf.rb +0 -4
  69. data/lib/cucumber/formatter/pretty.rb +1 -2
  70. data/lib/cucumber/formatter/progress.rb +1 -5
  71. data/lib/cucumber/formatter/rerun.rb +2 -0
  72. data/lib/cucumber/formatter/unicode.rb +6 -6
  73. data/lib/cucumber/language_support/language_methods.rb +0 -1
  74. data/lib/cucumber/parser/common.rb +16 -4
  75. data/lib/cucumber/parser/feature.rb +92 -27
  76. data/lib/cucumber/parser/feature.tt +8 -6
  77. data/lib/cucumber/parser/py_string.rb +12 -3
  78. data/lib/cucumber/parser/table.rb +12 -3
  79. data/lib/cucumber/rb_support/rb_dsl.rb +6 -6
  80. data/lib/cucumber/rb_support/rb_hook.rb +4 -5
  81. data/lib/cucumber/rb_support/rb_language.rb +1 -1
  82. data/lib/cucumber/tag_expression.rb +41 -0
  83. data/spec/cucumber/ast/feature_spec.rb +23 -2
  84. data/spec/cucumber/ast/scenario_outline_spec.rb +0 -7
  85. data/spec/cucumber/cli/options_spec.rb +3 -3
  86. data/spec/cucumber/formatter/html_spec.rb +10 -0
  87. data/spec/cucumber/formatter/spec_helper.rb +2 -1
  88. data/spec/cucumber/tag_expression_spec.rb +127 -0
  89. metadata +15 -10
  90. data/spec/cucumber/ast/tags_spec.rb +0 -29
  91. data/spec/cucumber/formatter/console_spec.rb +0 -20
@@ -89,10 +89,6 @@ module Cucumber
89
89
  @pdf.move_down(30)
90
90
  end
91
91
 
92
- def before_feature_element(feature_element)
93
- record_tag_occurrences(feature_element, @options)
94
- end
95
-
96
92
  def after_feature_element(feature_element)
97
93
  flush
98
94
  end
@@ -67,7 +67,6 @@ module Cucumber
67
67
  end
68
68
 
69
69
  def before_feature_element(feature_element)
70
- record_tag_occurrences(feature_element, @options)
71
70
  @indent = 2
72
71
  @scenario_indent = 2
73
72
  end
@@ -230,7 +229,7 @@ module Cucumber
230
229
  print_stats(features)
231
230
  print_snippets(@options)
232
231
  print_passing_wip(@options)
233
- print_tag_limit_warnings(@options)
232
+ print_tag_limit_warnings(features)
234
233
  end
235
234
  end
236
235
  end
@@ -19,10 +19,6 @@ module Cucumber
19
19
  print_summary(features)
20
20
  end
21
21
 
22
- def before_feature_element(feature_element)
23
- record_tag_occurrences(feature_element, @options)
24
- end
25
-
26
22
  def after_step_result(keyword, step_match, multiline_arg, status, exception, source_indent, background)
27
23
  progress(status)
28
24
  @status = status
@@ -50,7 +46,7 @@ module Cucumber
50
46
  print_stats(features)
51
47
  print_snippets(@options)
52
48
  print_passing_wip(@options)
53
- print_tag_limit_warnings(@options)
49
+ print_tag_limit_warnings(features)
54
50
  end
55
51
 
56
52
  CHARS = {
@@ -1,3 +1,5 @@
1
+ require 'cucumber/formatter/io'
2
+
1
3
  module Cucumber
2
4
  module Formatter
3
5
  # The formatter used for <tt>--format rerun</tt>
@@ -3,10 +3,10 @@ require 'cucumber/platform'
3
3
  require 'cucumber/formatter/ansicolor'
4
4
  $KCODE='u' unless Cucumber::RUBY_1_9
5
5
 
6
- if Cucumber::WINDOWS && `cmd /c chcp` =~ /(\d+)/
6
+ if Cucumber::WINDOWS
7
7
  require 'iconv'
8
- codepage = $1.to_i
9
- Cucumber::CODEPAGE = "cp#{codepage}"
8
+ require 'Win32/Console/ANSI'
9
+ Cucumber::CODEPAGE = "cp#{Win32::Console::OutputCP()}"
10
10
 
11
11
  module Cucumber
12
12
  module WindowsOutput #:nodoc:
@@ -32,9 +32,9 @@ if Cucumber::WINDOWS && `cmd /c chcp` =~ /(\d+)/
32
32
  end
33
33
  end
34
34
 
35
- Kernel.extend(self)
36
- STDOUT.extend(self)
37
- STDERR.extend(self)
35
+ Kernel.extend(self) if STDOUT.tty?
36
+ STDOUT.extend(self) if STDOUT.tty?
37
+ STDERR.extend(self) if STDERR.tty?
38
38
  end
39
39
  end
40
40
  end
@@ -38,7 +38,6 @@ module Cucumber
38
38
  end
39
39
 
40
40
  def add_hook(phase, hook)
41
- hook.tag_name_lists = hook.tag_names.map {|tag_string| Ast::Tags.parse_tags(tag_string)}
42
41
  hooks[phase.to_sym] << hook
43
42
  hook
44
43
  end
@@ -14,7 +14,10 @@ module Cucumber
14
14
  start_index = index
15
15
  if node_cache[:white].has_key?(index)
16
16
  cached = node_cache[:white][index]
17
- @index = cached.interval.end if cached
17
+ if cached
18
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
19
+ @index = cached.interval.end
20
+ end
18
21
  return cached
19
22
  end
20
23
 
@@ -50,7 +53,10 @@ module Cucumber
50
53
  start_index = index
51
54
  if node_cache[:space].has_key?(index)
52
55
  cached = node_cache[:space][index]
53
- @index = cached.interval.end if cached
56
+ if cached
57
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
58
+ @index = cached.interval.end
59
+ end
54
60
  return cached
55
61
  end
56
62
 
@@ -73,7 +79,10 @@ module Cucumber
73
79
  start_index = index
74
80
  if node_cache[:eol].has_key?(index)
75
81
  cached = node_cache[:eol][index]
76
- @index = cached.interval.end if cached
82
+ if cached
83
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
84
+ @index = cached.interval.end
85
+ end
77
86
  return cached
78
87
  end
79
88
 
@@ -136,7 +145,10 @@ module Cucumber
136
145
  start_index = index
137
146
  if node_cache[:eof].has_key?(index)
138
147
  cached = node_cache[:eof][index]
139
- @index = cached.interval.end if cached
148
+ if cached
149
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
150
+ @index = cached.interval.end
151
+ end
140
152
  return cached
141
153
  end
142
154
 
@@ -1,6 +1,8 @@
1
1
  # Autogenerated from a Treetop grammar. Edits may be lost.
2
2
 
3
3
 
4
+ require 'cucumber/ast/tags'
5
+
4
6
  module Cucumber
5
7
  module Parser
6
8
  # TIP: When you hack on the grammar, just delete feature.rb in this directory.
@@ -73,7 +75,10 @@ module Cucumber
73
75
  start_index = index
74
76
  if node_cache[:feature_sub].has_key?(index)
75
77
  cached = node_cache[:feature_sub][index]
76
- @index = cached.interval.end if cached
78
+ if cached
79
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
80
+ @index = cached.interval.end
81
+ end
77
82
  return cached
78
83
  end
79
84
 
@@ -223,7 +228,10 @@ module Cucumber
223
228
  start_index = index
224
229
  if node_cache[:tags].has_key?(index)
225
230
  cached = node_cache[:tags][index]
226
- @index = cached.interval.end if cached
231
+ if cached
232
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
233
+ @index = cached.interval.end
234
+ end
227
235
  return cached
228
236
  end
229
237
 
@@ -303,7 +311,10 @@ module Cucumber
303
311
  start_index = index
304
312
  if node_cache[:tag].has_key?(index)
305
313
  cached = node_cache[:tag][index]
306
- @index = cached.interval.end if cached
314
+ if cached
315
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
316
+ @index = cached.interval.end
317
+ end
307
318
  return cached
308
319
  end
309
320
 
@@ -372,7 +383,10 @@ module Cucumber
372
383
  start_index = index
373
384
  if node_cache[:comment].has_key?(index)
374
385
  cached = node_cache[:comment][index]
375
- @index = cached.interval.end if cached
386
+ if cached
387
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
388
+ @index = cached.interval.end
389
+ end
376
390
  return cached
377
391
  end
378
392
 
@@ -416,7 +430,10 @@ module Cucumber
416
430
  start_index = index
417
431
  if node_cache[:comment_line].has_key?(index)
418
432
  cached = node_cache[:comment_line][index]
419
- @index = cached.interval.end if cached
433
+ if cached
434
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
435
+ @index = cached.interval.end
436
+ end
420
437
  return cached
421
438
  end
422
439
 
@@ -491,8 +508,8 @@ module Cucumber
491
508
  steps.at_line?(line)
492
509
  end
493
510
 
494
- def matches_tags?(tag_names)
495
- Ast::Tags.matches?(self.parent.tags.tag_names, tag_names)
511
+ def matches_tags?(tag_expression)
512
+ tag_expression.eval(self.parent.tags.tag_names)
496
513
  end
497
514
 
498
515
  def build
@@ -510,7 +527,10 @@ module Cucumber
510
527
  start_index = index
511
528
  if node_cache[:background].has_key?(index)
512
529
  cached = node_cache[:background][index]
513
- @index = cached.interval.end if cached
530
+ if cached
531
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
532
+ @index = cached.interval.end
533
+ end
514
534
  return cached
515
535
  end
516
536
 
@@ -613,7 +633,10 @@ module Cucumber
613
633
  start_index = index
614
634
  if node_cache[:feature_elements].has_key?(index)
615
635
  cached = node_cache[:feature_elements][index]
616
- @index = cached.interval.end if cached
636
+ if cached
637
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
638
+ @index = cached.interval.end
639
+ end
617
640
  return cached
618
641
  end
619
642
 
@@ -687,10 +710,10 @@ module Cucumber
687
710
  tags.at_line?(line)
688
711
  end
689
712
 
690
- def matches_tags?(tag_names)
713
+ def matches_tags?(tag_expression)
691
714
  feature_tag_names = self.parent.parent.tags.tag_names
692
715
  source_tag_names = (feature_tag_names + tags.tag_names).uniq
693
- Ast::Tags.matches?(source_tag_names, tag_names)
716
+ tag_expression.eval(source_tag_names)
694
717
  end
695
718
 
696
719
  def matches_name?(regexp_to_match)
@@ -714,7 +737,10 @@ module Cucumber
714
737
  start_index = index
715
738
  if node_cache[:scenario].has_key?(index)
716
739
  cached = node_cache[:scenario][index]
717
- @index = cached.interval.end if cached
740
+ if cached
741
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
742
+ @index = cached.interval.end
743
+ end
718
744
  return cached
719
745
  end
720
746
 
@@ -826,10 +852,10 @@ module Cucumber
826
852
  steps.at_line?(line)
827
853
  end
828
854
 
829
- def matches_tags?(tag_names)
855
+ def matches_tags?(tag_expression)
830
856
  feature_tag_names = self.parent.parent.tags.tag_names
831
857
  source_tag_names = (feature_tag_names + tags.tag_names).uniq
832
- Ast::Tags.matches?(source_tag_names, tag_names)
858
+ tag_expression.eval(source_tag_names)
833
859
  end
834
860
 
835
861
  def matches_name?(regexp_to_match)
@@ -858,7 +884,10 @@ module Cucumber
858
884
  start_index = index
859
885
  if node_cache[:scenario_outline].has_key?(index)
860
886
  cached = node_cache[:scenario_outline][index]
861
- @index = cached.interval.end if cached
887
+ if cached
888
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
889
+ @index = cached.interval.end
890
+ end
862
891
  return cached
863
892
  end
864
893
 
@@ -938,7 +967,10 @@ module Cucumber
938
967
  start_index = index
939
968
  if node_cache[:steps].has_key?(index)
940
969
  cached = node_cache[:steps][index]
941
- @index = cached.interval.end if cached
970
+ if cached
971
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
972
+ @index = cached.interval.end
973
+ end
942
974
  return cached
943
975
  end
944
976
 
@@ -1000,7 +1032,10 @@ module Cucumber
1000
1032
  start_index = index
1001
1033
  if node_cache[:step].has_key?(index)
1002
1034
  cached = node_cache[:step][index]
1003
- @index = cached.interval.end if cached
1035
+ if cached
1036
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1037
+ @index = cached.interval.end
1038
+ end
1004
1039
  return cached
1005
1040
  end
1006
1041
 
@@ -1120,7 +1155,10 @@ module Cucumber
1120
1155
  start_index = index
1121
1156
  if node_cache[:examples_sections].has_key?(index)
1122
1157
  cached = node_cache[:examples_sections][index]
1123
- @index = cached.interval.end if cached
1158
+ if cached
1159
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1160
+ @index = cached.interval.end
1161
+ end
1124
1162
  return cached
1125
1163
  end
1126
1164
 
@@ -1194,7 +1232,10 @@ module Cucumber
1194
1232
  start_index = index
1195
1233
  if node_cache[:examples].has_key?(index)
1196
1234
  cached = node_cache[:examples][index]
1197
- @index = cached.interval.end if cached
1235
+ if cached
1236
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1237
+ @index = cached.interval.end
1238
+ end
1198
1239
  return cached
1199
1240
  end
1200
1241
 
@@ -1270,7 +1311,10 @@ module Cucumber
1270
1311
  start_index = index
1271
1312
  if node_cache[:multiline_arg].has_key?(index)
1272
1313
  cached = node_cache[:multiline_arg][index]
1273
- @index = cached.interval.end if cached
1314
+ if cached
1315
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1316
+ @index = cached.interval.end
1317
+ end
1274
1318
  return cached
1275
1319
  end
1276
1320
 
@@ -1300,7 +1344,10 @@ module Cucumber
1300
1344
  start_index = index
1301
1345
  if node_cache[:line_to_eol].has_key?(index)
1302
1346
  cached = node_cache[:line_to_eol][index]
1303
- @index = cached.interval.end if cached
1347
+ if cached
1348
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1349
+ @index = cached.interval.end
1350
+ end
1304
1351
  return cached
1305
1352
  end
1306
1353
 
@@ -1369,7 +1416,10 @@ module Cucumber
1369
1416
  start_index = index
1370
1417
  if node_cache[:lines_to_keyword].has_key?(index)
1371
1418
  cached = node_cache[:lines_to_keyword][index]
1372
- @index = cached.interval.end if cached
1419
+ if cached
1420
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1421
+ @index = cached.interval.end
1422
+ end
1373
1423
  return cached
1374
1424
  end
1375
1425
 
@@ -1446,7 +1496,10 @@ module Cucumber
1446
1496
  start_index = index
1447
1497
  if node_cache[:reserved_words_and_symbols].has_key?(index)
1448
1498
  cached = node_cache[:reserved_words_and_symbols][index]
1449
- @index = cached.interval.end if cached
1499
+ if cached
1500
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1501
+ @index = cached.interval.end
1502
+ end
1450
1503
  return cached
1451
1504
  end
1452
1505
 
@@ -1520,7 +1573,10 @@ module Cucumber
1520
1573
  start_index = index
1521
1574
  if node_cache[:py_string].has_key?(index)
1522
1575
  cached = node_cache[:py_string][index]
1523
- @index = cached.interval.end if cached
1576
+ if cached
1577
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1578
+ @index = cached.interval.end
1579
+ end
1524
1580
  return cached
1525
1581
  end
1526
1582
 
@@ -1608,7 +1664,10 @@ module Cucumber
1608
1664
  start_index = index
1609
1665
  if node_cache[:open_py_string].has_key?(index)
1610
1666
  cached = node_cache[:open_py_string][index]
1611
- @index = cached.interval.end if cached
1667
+ if cached
1668
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1669
+ @index = cached.interval.end
1670
+ end
1612
1671
  return cached
1613
1672
  end
1614
1673
 
@@ -1689,7 +1748,10 @@ module Cucumber
1689
1748
  start_index = index
1690
1749
  if node_cache[:close_py_string].has_key?(index)
1691
1750
  cached = node_cache[:close_py_string][index]
1692
- @index = cached.interval.end if cached
1751
+ if cached
1752
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1753
+ @index = cached.interval.end
1754
+ end
1693
1755
  return cached
1694
1756
  end
1695
1757
 
@@ -1741,7 +1803,10 @@ module Cucumber
1741
1803
  start_index = index
1742
1804
  if node_cache[:white].has_key?(index)
1743
1805
  cached = node_cache[:white][index]
1744
- @index = cached.interval.end if cached
1806
+ if cached
1807
+ cached = SyntaxNode.new(input, index...(index + 1)) if cached == true
1808
+ @index = cached.interval.end
1809
+ end
1745
1810
  return cached
1746
1811
  end
1747
1812
 
@@ -1,3 +1,5 @@
1
+ require 'cucumber/ast/tags'
2
+
1
3
  module Cucumber
2
4
  module Parser
3
5
  # TIP: When you hack on the grammar, just delete feature.rb in this directory.
@@ -76,8 +78,8 @@ module Cucumber
76
78
  steps.at_line?(line)
77
79
  end
78
80
 
79
- def matches_tags?(tag_names)
80
- Ast::Tags.matches?(self.parent.tags.tag_names, tag_names)
81
+ def matches_tags?(tag_expression)
82
+ tag_expression.eval(self.parent.tags.tag_names)
81
83
  end
82
84
 
83
85
  def build
@@ -116,10 +118,10 @@ module Cucumber
116
118
  tags.at_line?(line)
117
119
  end
118
120
 
119
- def matches_tags?(tag_names)
121
+ def matches_tags?(tag_expression)
120
122
  feature_tag_names = self.parent.parent.tags.tag_names
121
123
  source_tag_names = (feature_tag_names + tags.tag_names).uniq
122
- Ast::Tags.matches?(source_tag_names, tag_names)
124
+ tag_expression.eval(source_tag_names)
123
125
  end
124
126
 
125
127
  def matches_name?(regexp_to_match)
@@ -153,10 +155,10 @@ module Cucumber
153
155
  steps.at_line?(line)
154
156
  end
155
157
 
156
- def matches_tags?(tag_names)
158
+ def matches_tags?(tag_expression)
157
159
  feature_tag_names = self.parent.parent.tags.tag_names
158
160
  source_tag_names = (feature_tag_names + tags.tag_names).uniq
159
- Ast::Tags.matches?(source_tag_names, tag_names)
161
+ tag_expression.eval(source_tag_names)
160
162
  end
161
163
 
162
164
  def matches_name?(regexp_to_match)