cucumber 0.5.3 → 0.6.0

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 +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)