cucumber 1.2.5 → 1.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (110) hide show
  1. checksums.yaml +14 -6
  2. data/.ruby-gemset +1 -0
  3. data/.ruby-version +1 -0
  4. data/.travis.yml +1 -0
  5. data/.yardopts +1 -0
  6. data/CONTRIBUTING.md +2 -2
  7. data/History.md +38 -2
  8. data/bin/cucumber +2 -11
  9. data/cucumber.gemspec +3 -3
  10. data/cucumber.yml +5 -1
  11. data/examples/test_unit/Gemfile +4 -0
  12. data/examples/test_unit/features/step_definitions/test_unit_steps.rb +1 -4
  13. data/examples/watir/README.textile +2 -2
  14. data/examples/watir/features/support/env.rb +10 -7
  15. data/features/.cucumber/stepdefs.json +747 -1354
  16. data/features/assertions.feature +6 -2
  17. data/features/background.feature +3 -0
  18. data/features/backtraces.feature +3 -3
  19. data/features/before_hook.feature +43 -0
  20. data/features/bootstrap.feature +14 -2
  21. data/features/custom_formatter.feature +1 -1
  22. data/features/drb_server_integration.feature +3 -3
  23. data/features/formatter_callbacks.feature +2 -2
  24. data/features/formatter_step_file_colon_line.feature +1 -1
  25. data/features/html_formatter.feature +52 -1
  26. data/features/json_formatter.feature +93 -7
  27. data/features/load_path.feature +14 -0
  28. data/features/nested_steps.feature +75 -3
  29. data/features/nested_steps_i18n.feature +36 -0
  30. data/features/pretty_formatter.feature +31 -0
  31. data/features/progress_formatter.feature +31 -0
  32. data/features/raketask.feature +51 -0
  33. data/features/rerun_formatter.feature +1 -1
  34. data/features/stats_formatters.feature +17 -14
  35. data/features/step_definitions/cucumber_steps.rb +6 -4
  36. data/features/support/env.rb +31 -4
  37. data/features/support/feature_factory.rb +17 -0
  38. data/features/tagged_hooks.feature +37 -195
  39. data/features/transforms.feature +15 -15
  40. data/gem_tasks/cucumber.rake +2 -0
  41. data/gem_tasks/yard.rake +10 -6
  42. data/legacy_features/README.md +14 -0
  43. data/legacy_features/language_help.feature +3 -1
  44. data/legacy_features/report_called_undefined_steps.feature +1 -0
  45. data/legacy_features/snippets_when_using_star_keyword.feature +1 -0
  46. data/legacy_features/support/env.rb +4 -0
  47. data/lib/cucumber/ast/background.rb +35 -35
  48. data/lib/cucumber/ast/empty_background.rb +33 -0
  49. data/lib/cucumber/ast/examples.rb +5 -2
  50. data/lib/cucumber/ast/feature.rb +24 -35
  51. data/lib/cucumber/ast/features.rb +4 -1
  52. data/lib/cucumber/ast/has_steps.rb +9 -17
  53. data/lib/cucumber/ast/location.rb +41 -0
  54. data/lib/cucumber/ast/scenario.rb +37 -50
  55. data/lib/cucumber/ast/scenario_outline.rb +62 -49
  56. data/lib/cucumber/ast/step.rb +23 -27
  57. data/lib/cucumber/ast/step_collection.rb +16 -0
  58. data/lib/cucumber/ast/step_invocation.rb +4 -1
  59. data/lib/cucumber/ast/tree_walker.rb +7 -0
  60. data/lib/cucumber/cli/configuration.rb +15 -3
  61. data/lib/cucumber/cli/main.rb +24 -11
  62. data/lib/cucumber/cli/options.rb +24 -16
  63. data/lib/cucumber/configuration.rb +4 -0
  64. data/lib/cucumber/core_ext/disable_mini_and_test_unit_autorun.rb +10 -34
  65. data/lib/cucumber/core_ext/instance_exec.rb +4 -1
  66. data/lib/cucumber/core_ext/proc.rb +2 -0
  67. data/lib/cucumber/feature_file.rb +5 -12
  68. data/lib/cucumber/formatter/console.rb +10 -0
  69. data/lib/cucumber/formatter/gherkin_formatter_adapter.rb +4 -4
  70. data/lib/cucumber/formatter/html.rb +7 -42
  71. data/lib/cucumber/formatter/interceptor.rb +4 -0
  72. data/lib/cucumber/formatter/json_pretty.rb +0 -4
  73. data/lib/cucumber/formatter/junit.rb +8 -2
  74. data/lib/cucumber/formatter/pretty.rb +5 -1
  75. data/lib/cucumber/formatter/progress.rb +4 -0
  76. data/lib/cucumber/formatter/unicode.rb +12 -25
  77. data/lib/cucumber/formatter/usage.rb +7 -2
  78. data/lib/cucumber/js_support/js_snippets.rb +1 -1
  79. data/lib/cucumber/load_path.rb +13 -0
  80. data/lib/cucumber/parser/gherkin_builder.rb +237 -81
  81. data/lib/cucumber/platform.rb +1 -1
  82. data/lib/cucumber/py_support/py_language.rb +1 -1
  83. data/lib/cucumber/rake/task.rb +5 -1
  84. data/lib/cucumber/rb_support/rb_language.rb +20 -19
  85. data/lib/cucumber/rb_support/rb_world.rb +63 -21
  86. data/lib/cucumber/rb_support/snippet.rb +108 -0
  87. data/lib/cucumber/runtime.rb +1 -0
  88. data/lib/cucumber/runtime/support_code.rb +2 -2
  89. data/lib/cucumber/unit.rb +11 -0
  90. data/lib/cucumber/wire_support/wire_language.rb +1 -1
  91. data/spec/cucumber/ast/background_spec.rb +13 -6
  92. data/spec/cucumber/ast/feature_factory.rb +20 -10
  93. data/spec/cucumber/ast/features_spec.rb +51 -0
  94. data/spec/cucumber/ast/scenario_outline_spec.rb +13 -7
  95. data/spec/cucumber/ast/step_spec.rb +6 -4
  96. data/spec/cucumber/cli/configuration_spec.rb +34 -1
  97. data/spec/cucumber/cli/main_spec.rb +36 -26
  98. data/spec/cucumber/cli/options_spec.rb +28 -19
  99. data/spec/cucumber/core_ext/proc_spec.rb +13 -1
  100. data/spec/cucumber/formatter/interceptor_spec.rb +8 -0
  101. data/spec/cucumber/formatter/junit_spec.rb +33 -0
  102. data/spec/cucumber/formatter/pretty_spec.rb +391 -0
  103. data/spec/cucumber/rb_support/rb_language_spec.rb +21 -50
  104. data/spec/cucumber/rb_support/regexp_argument_matcher_spec.rb +2 -4
  105. data/spec/cucumber/rb_support/snippet_spec.rb +128 -0
  106. data/spec/cucumber/step_match_spec.rb +2 -6
  107. metadata +62 -113
  108. data/.rvmrc +0 -1
  109. data/features/hooks.feature +0 -59
  110. data/legacy_features/call_steps_from_stepdefs.feature +0 -154
@@ -0,0 +1,36 @@
1
+ @fails_on_1_8_7
2
+ Feature: Nested Steps in I18n
3
+
4
+
5
+ Background:
6
+ Given a scenario with a step that looks like this in japanese:
7
+ """gherkin
8
+ 前提 two turtles
9
+ """
10
+ And a step definition that looks like this:
11
+ """ruby
12
+ # -*- coding: utf-8 -*-
13
+ 前提 /a turtle/ do
14
+ puts "turtle!"
15
+ end
16
+ """
17
+
18
+ Scenario: Use #steps to call several steps at once
19
+ Given a step definition that looks like this:
20
+ """ruby
21
+ # -*- coding: utf-8 -*-
22
+ 前提 /two turtles/ do
23
+ steps %{
24
+ 前提 a turtle
25
+ かつ a turtle
26
+ }
27
+ end
28
+ """
29
+ When I run the feature with the progress formatter
30
+ Then the output should contain:
31
+ """
32
+ turtle!
33
+
34
+ turtle!
35
+
36
+ """
@@ -0,0 +1,31 @@
1
+ Feature: Pretty output formatter
2
+
3
+ Background:
4
+ Given a file named "features/scenario_outline_with_undefined_steps.feature" with:
5
+ """
6
+ Feature:
7
+
8
+ Scenario Outline:
9
+ Given an undefined step
10
+
11
+ Examples:
12
+ |foo|
13
+ |bar|
14
+ """
15
+
16
+ Scenario: an scenario outline, one undefined step, one random example, expand flag on
17
+ When I run `cucumber features/scenario_outline_with_undefined_steps.feature --format pretty --expand `
18
+ Then it should pass
19
+
20
+ Scenario: when using a profile the output should include 'Using the default profile...'
21
+ And a file named "cucumber.yml" with:
22
+ """
23
+ default: -r features
24
+ """
25
+ When I run `cucumber --profile default --format pretty`
26
+ Then it should pass
27
+ And the output should contain:
28
+ """
29
+ Using the default profile...
30
+ """
31
+
@@ -0,0 +1,31 @@
1
+ Feature: Progress output formatter
2
+
3
+ Background:
4
+ Given a file named "features/scenario_outline_with_undefined_steps.feature" with:
5
+ """
6
+ Feature:
7
+
8
+ Scenario Outline:
9
+ Given an undefined step
10
+
11
+ Examples:
12
+ |foo|
13
+ |bar|
14
+ """
15
+
16
+ Scenario: an scenario outline, one undefined step, one random example, expand flag on
17
+ When I run `cucumber features/scenario_outline_with_undefined_steps.feature --format progress --expand `
18
+ Then it should pass
19
+
20
+ Scenario: when using a profile the output should include 'Using the default profile...'
21
+ And a file named "cucumber.yml" with:
22
+ """
23
+ default: -r features
24
+ """
25
+ When I run `cucumber --profile default --format progress`
26
+ Then it should pass
27
+ And the output should contain:
28
+ """
29
+ Using the default profile...
30
+ """
31
+
@@ -0,0 +1,51 @@
1
+ @spawn
2
+ Feature: Raketask
3
+ In order to use cucumber's rake task
4
+ As a Cuker
5
+ I do not want to see rake's backtraces when it fails
6
+ Also I want to get zero exit status code on failures
7
+ And non-zero exit status code when is pases
8
+
9
+ Background:
10
+ Given a file named "features/passing_and_failing.feature" with:
11
+ """
12
+ Feature: Sample
13
+
14
+ Scenario: Passing
15
+ Given passing
16
+
17
+ Scenario: Failing
18
+ Given failing
19
+ """
20
+ Given a file named "features/step_definitions/steps.rb" with:
21
+ """
22
+ Given(/^passing$/) do
23
+ end
24
+
25
+ Given /^failing$/ do
26
+ raise "FAIL"
27
+ end
28
+ """
29
+ Given a file named "Rakefile" with:
30
+ """
31
+ require 'cucumber/rake/task'
32
+
33
+ SAMPLE_FEATURE_FILE = 'features/passing_and_failing.feature'
34
+
35
+ Cucumber::Rake::Task.new(:pass) do |t|
36
+ t.cucumber_opts = "#{SAMPLE_FEATURE_FILE}:3"
37
+ end
38
+
39
+ Cucumber::Rake::Task.new(:fail) do |t|
40
+ t.cucumber_opts = "#{SAMPLE_FEATURE_FILE}:6"
41
+ end
42
+ """
43
+
44
+ Scenario: Passing feature
45
+ When I run `bundle exec rake pass`
46
+ Then the exit status should be 0
47
+
48
+ Scenario: Failing feature
49
+ When I run `bundle exec rake fail`
50
+ Then the exit status should not be 0
51
+ And the output should not contain "rake aborted!"
@@ -27,7 +27,7 @@ Feature: Rerun formatter
27
27
  """
28
28
 
29
29
  Scenario: Handle examples with the rerun formatter
30
- When I run cucumber "features/one_passing_one_failing.feature -r features -f rerun"
30
+ When I run `cucumber features/one_passing_one_failing.feature -r features -f rerun`
31
31
  Then it should fail with:
32
32
  """
33
33
  features/one_passing_one_failing.feature:9
@@ -12,6 +12,7 @@ Feature: Usage formatter
12
12
  Given B
13
13
  Scenario Outline: C
14
14
  Given <x>
15
+ And B
15
16
  Examples:
16
17
  |x|
17
18
  |C|
@@ -31,22 +32,24 @@ Feature: Usage formatter
31
32
  When I run `cucumber -f usage --dry-run`
32
33
  Then it should pass with exactly:
33
34
  """
34
- --------
35
+ ---------
35
36
 
36
- /A/ # features/step_definitions/steps.rb:1
37
- Given A # features/f.feature:3
38
- Given A # features/f.feature:3
39
- Given A # features/f.feature:3
40
- Given A # features/f.feature:12
41
- /B/ # features/step_definitions/steps.rb:2
42
- Given B # features/f.feature:5
43
- /C/ # features/step_definitions/steps.rb:3
44
- Given C # features/f.feature:13
45
- /D/ # features/step_definitions/steps.rb:4
37
+ /A/ # features/step_definitions/steps.rb:1
38
+ Given A # features/f.feature:3
39
+ Given A # features/f.feature:3
40
+ Given A # features/f.feature:3
41
+ Given A # features/f.feature:13
42
+ /B/ # features/step_definitions/steps.rb:2
43
+ Given B # features/f.feature:5
44
+ And B # features/f.feature:8
45
+ /C/ # features/step_definitions/steps.rb:3
46
+ Given <x> # features/f.feature:7
47
+ Given C # features/f.feature:14
48
+ /D/ # features/step_definitions/steps.rb:4
46
49
  NOT MATCHED BY ANY STEPS
47
50
 
48
51
  3 scenarios (3 skipped)
49
- 7 steps (7 skipped)
52
+ 8 steps (8 skipped)
50
53
  0m0.012s
51
54
 
52
55
  """
@@ -55,7 +58,7 @@ Feature: Usage formatter
55
58
  When I run `cucumber -f stepdefs --dry-run`
56
59
  Then it should pass with exactly:
57
60
  """
58
- --------
61
+ ---------
59
62
 
60
63
  /A/ # features/step_definitions/steps.rb:1
61
64
  /B/ # features/step_definitions/steps.rb:2
@@ -64,7 +67,7 @@ Feature: Usage formatter
64
67
  NOT MATCHED BY ANY STEPS
65
68
 
66
69
  3 scenarios (3 skipped)
67
- 7 steps (7 skipped)
70
+ 8 steps (8 skipped)
68
71
  0m0.012s
69
72
 
70
73
  """
@@ -1,7 +1,3 @@
1
- When /^I run cucumber "(.+)"$/ do |cmd|
2
- run_simple(unescape("cucumber #{cmd}"), false)
3
- end
4
-
5
1
  Then 'it should pass' do
6
2
  assert_exit_status 0
7
3
  end
@@ -43,6 +39,12 @@ Given /^a scenario with a step that looks like this:$/ do |string|
43
39
  end
44
40
  end
45
41
 
42
+ Given(/^a scenario with a step that looks like this in japanese:$/) do |string|
43
+ create_feature_ja do
44
+ create_scenario_ja { string }
45
+ end
46
+ end
47
+
46
48
  Given /^a step definition that looks like this:$/ do |string|
47
49
  create_step_definition { string }
48
50
  end
@@ -1,28 +1,55 @@
1
1
  ENV['FORCE_COLOR'] = 'true'
2
+
3
+ require 'aruba'
2
4
  require 'aruba/api'
3
5
  require 'aruba/cucumber'
6
+ require 'aruba/in_process'
7
+ require 'aruba/spawn_process'
8
+ require 'cucumber/rspec/disable_option_parser'
9
+ require 'cucumber/cli/main'
4
10
 
5
11
  # Monkey patch aruba to filter out some stuff
6
12
  module Aruba::Api
7
13
  alias __all_stdout all_stdout
8
-
14
+
9
15
  def all_stdout
10
16
  unrandom(__all_stdout)
11
17
  end
12
18
 
19
+ alias __all_stderr all_stderr
20
+ def all_stderr
21
+ err = __all_stderr
22
+ if Cucumber::JRUBY
23
+ # TODO: this actually a workaround for cucumber/gherkin#238
24
+ err = err.gsub(/^.*java_package_module_template.rb:\d+ warning: `eval' should not be aliased.*\n/, '')
25
+ end
26
+ err
27
+ end
28
+
13
29
  def unrandom(out)
14
30
  out = out.gsub(/#{Dir.pwd}\/tmp\/aruba/, '.') # Remove absolute paths
31
+ out = out.gsub(/tmp\/aruba\//, '') # Fix aruba path
32
+ out = out.gsub(/^.*cucumber_process\.rb.*$\n/, '')
15
33
  out = out.gsub(/^\d+m\d+\.\d+s$/, '0m0.012s') # Make duration predictable
16
34
  out = out.gsub(/Coverage report generated for Cucumber Features to #{Dir.pwd}\/coverage.*\n$/, '') # Remove SimpleCov message
17
35
  end
18
36
  end
19
37
 
38
+ Before('@spawn') do
39
+ Aruba.process = Aruba::SpawnProcess
40
+ end
41
+
42
+ Before('~@spawn') do
43
+ Aruba::InProcess.main_class = Cucumber::Cli::Main
44
+ Aruba.process = Aruba::InProcess
45
+ end
46
+
20
47
  Before do
21
48
  # Make sure bin/cucumber runs with SimpleCov enabled
22
49
  # set_env('SIMPLECOV', 'true')
23
-
24
- # Set a longer timeout for aruba
25
- @aruba_timeout_seconds = 15
50
+
51
+ # Set a longer timeout for aruba, and a really long one if running on JRuby
52
+ @aruba_timeout_seconds = Cucumber::JRUBY ? 35 : 15
26
53
  end
27
54
 
28
55
  After do
@@ -1,3 +1,4 @@
1
+ # -*- coding: utf-8 -*-
1
2
  module FeatureFactory
2
3
  def create_feature(name = generate_feature_name)
3
4
  gherkin = <<-GHERKIN
@@ -7,6 +8,15 @@ Feature: #{name}
7
8
  write_file filename(name), gherkin
8
9
  end
9
10
 
11
+ def create_feature_ja(name = generate_feature_name)
12
+ gherkin = <<-GHERKIN
13
+ # language: ja
14
+ 機能: #{name}
15
+ #{yield}
16
+ GHERKIN
17
+ write_file filename(name), gherkin
18
+ end
19
+
10
20
  def create_scenario(name = generate_scenario_name)
11
21
  <<-GHERKIN
12
22
  Scenario: #{name}
@@ -14,6 +24,13 @@ Feature: #{name}
14
24
  GHERKIN
15
25
  end
16
26
 
27
+ def create_scenario_ja(name = generate_scenario_name)
28
+ <<-GHERKIN
29
+ シナリオ: #{name}
30
+ #{yield}
31
+ GHERKIN
32
+ end
33
+
17
34
  def create_step_definition
18
35
  write_file generate_step_definition_filename, yield
19
36
  end
@@ -1,217 +1,59 @@
1
- Feature: Tag logic
2
- In order to conveniently run subsets of features
3
- As a Cuker
4
- I want to select features using logical AND/OR of tags
1
+ Feature: Tagged hooks
5
2
 
6
3
  Background:
7
- Given a file named "features/tagulicious.feature" with:
4
+ Given a file named "features/step_definitions/steps.rb" with:
8
5
  """
9
- Feature: Sample
10
-
11
- @one @three
12
- Scenario: Example
13
- Given passing
14
-
15
- @one
16
- Scenario: Another Example
17
- Given passing
18
-
19
- @three
20
- Scenario: Yet another Example
21
- Given passing
22
-
23
- @ignore
24
- Scenario: And yet another Example
25
- """
26
-
27
- Scenario: Before hooks ORing
28
- Given a file named "features/support/hooks.rb" with:
29
- """
30
- Before('@one,@three') do
31
- raise 'boom'
32
- end
33
- """
34
- When I run `cucumber -q features/tagulicious.feature`
35
- Then it should fail with:
36
- """
37
- Feature: Sample
38
-
39
- @one @three
40
- Scenario: Example
41
- boom (RuntimeError)
42
- ./features/support/hooks.rb:2:in `Before'
43
- Given passing
44
-
45
- @one
46
- Scenario: Another Example
47
- boom (RuntimeError)
48
- ./features/support/hooks.rb:2:in `Before'
49
- Given passing
50
-
51
- @three
52
- Scenario: Yet another Example
53
- boom (RuntimeError)
54
- ./features/support/hooks.rb:2:in `Before'
55
- Given passing
56
-
57
- @ignore
58
- Scenario: And yet another Example
59
-
60
- Failing Scenarios:
61
- cucumber features/tagulicious.feature:4
62
- cucumber features/tagulicious.feature:8
63
- cucumber features/tagulicious.feature:12
64
-
65
- 4 scenarios (3 failed, 1 passed)
66
- 3 steps (3 undefined)
67
-
68
- """
69
-
70
- Scenario: Before hooks ANDing
71
- Given a file named "features/support/hooks.rb" with:
72
- """
73
- Before('@one','@three') do
74
- raise 'boom'
75
- end
76
- """
77
- When I run `cucumber -q features/tagulicious.feature`
78
- Then it should fail with:
79
- """
80
- Feature: Sample
81
-
82
- @one @three
83
- Scenario: Example
84
- boom (RuntimeError)
85
- ./features/support/hooks.rb:2:in `Before'
86
- Given passing
87
-
88
- @one
89
- Scenario: Another Example
90
- Given passing
91
-
92
- @three
93
- Scenario: Yet another Example
94
- Given passing
95
-
96
- @ignore
97
- Scenario: And yet another Example
98
-
99
- Failing Scenarios:
100
- cucumber features/tagulicious.feature:4
101
-
102
- 4 scenarios (1 failed, 2 undefined, 1 passed)
103
- 3 steps (3 undefined)
104
-
6
+ Given /^this step works$/ do; end
105
7
  """
106
-
107
- Scenario: Before hooks ANDing with a bad hook matching nothing
108
- Given a file named "features/support/hooks.rb" with:
8
+ And a file named "features/support/hooks.rb" with:
109
9
  """
110
- Before('@one','@notused') do
10
+ Before('~@no-boom') do
111
11
  raise 'boom'
112
12
  end
113
13
  """
114
- When I run `cucumber -q features/tagulicious.feature`
115
- Then it should pass with:
116
- """
117
- Feature: Sample
118
-
119
- @one @three
120
- Scenario: Example
121
- Given passing
122
-
123
- @one
124
- Scenario: Another Example
125
- Given passing
126
-
127
- @three
128
- Scenario: Yet another Example
129
- Given passing
130
-
131
- @ignore
132
- Scenario: And yet another Example
133
-
134
- 4 scenarios (3 undefined, 1 passed)
135
- 3 steps (3 undefined)
136
-
14
+ And a file named "features/f.feature" with:
137
15
  """
16
+ Feature: With and without hooks
17
+ Scenario: using hook
18
+ Given this step works
138
19
 
139
- Scenario: After hooks ORing
140
- Given a file named "features/support/hooks.rb" with:
141
- """
142
- After('@one,@three') do
143
- raise 'boom'
144
- end
20
+ @no-boom
21
+ Scenario: omitting hook
22
+ Given this step works
145
23
  """
146
- When I run `cucumber -q features/tagulicious.feature`
24
+ @spawn
25
+ Scenario: omit tagged hook
26
+ When I run `cucumber features/f.feature:2`
147
27
  Then it should fail with:
148
28
  """
149
- Feature: Sample
150
-
151
- @one @three
152
- Scenario: Example
153
- Given passing
154
- boom (RuntimeError)
155
- ./features/support/hooks.rb:2:in `After'
156
-
157
- @one
158
- Scenario: Another Example
159
- Given passing
160
- boom (RuntimeError)
161
- ./features/support/hooks.rb:2:in `After'
162
-
163
- @three
164
- Scenario: Yet another Example
165
- Given passing
166
- boom (RuntimeError)
167
- ./features/support/hooks.rb:2:in `After'
168
-
169
- @ignore
170
- Scenario: And yet another Example
171
-
29
+ Feature: With and without hooks
30
+
31
+ Scenario: using hook # features/f.feature:2
32
+ boom (RuntimeError)
33
+ ./features/support/hooks.rb:2:in `Before'
34
+ Given this step works # features/step_definitions/steps.rb:1
35
+
172
36
  Failing Scenarios:
173
- cucumber features/tagulicious.feature:4
174
- cucumber features/tagulicious.feature:8
175
- cucumber features/tagulicious.feature:12
176
-
177
- 4 scenarios (3 failed, 1 passed)
178
- 3 steps (3 undefined)
37
+ cucumber features/f.feature:2 # Scenario: using hook
38
+
39
+ 1 scenario (1 failed)
40
+ 1 step (1 skipped)
179
41
 
180
42
  """
181
43
 
182
- Scenario: After hooks ANDing
183
- Given a file named "features/support/hooks.rb" with:
184
- """
185
- After('@one','@three') do
186
- raise 'boom'
187
- end
188
- """
189
- When I run `cucumber -q features/tagulicious.feature`
190
- Then it should fail with:
191
- """
192
- Feature: Sample
44
+ Scenario: omit tagged hook
45
+ When I run `cucumber features/f.feature:6`
46
+ Then it should pass with:
47
+ """
48
+ Feature: With and without hooks
193
49
 
194
- @one @three
195
- Scenario: Example
196
- Given passing
197
- boom (RuntimeError)
198
- ./features/support/hooks.rb:2:in `After'
50
+ @no-boom
51
+ Scenario: omitting hook # features/f.feature:6
52
+ Given this step works # features/step_definitions/steps.rb:1
199
53
 
200
- @one
201
- Scenario: Another Example
202
- Given passing
54
+ 1 scenario (1 passed)
55
+ 1 step (1 passed)
203
56
 
204
- @three
205
- Scenario: Yet another Example
206
- Given passing
207
-
208
- @ignore
209
- Scenario: And yet another Example
210
-
211
- Failing Scenarios:
212
- cucumber features/tagulicious.feature:4
57
+ """
213
58
 
214
- 4 scenarios (1 failed, 2 undefined, 1 passed)
215
- 3 steps (3 undefined)
216
59
 
217
- """