cucumber 0.9.4 → 0.10.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 (107) hide show
  1. data/Gemfile +1 -1
  2. data/History.txt +16 -0
  3. data/bin/cucumber +7 -1
  4. data/cucumber.gemspec +5 -4
  5. data/cucumber.yml +1 -1
  6. data/examples/sinatra/features/support/env.rb +1 -4
  7. data/features/background.feature +284 -95
  8. data/features/custom_formatter.feature +3 -73
  9. data/features/execute_with_tag_filter.feature +63 -0
  10. data/features/{negative_tagged_hooks.feature → hooks.feature} +5 -6
  11. data/features/json_formatter.feature +161 -245
  12. data/features/stats_formatters.feature +70 -0
  13. data/features/step_definitions/cucumber_steps.rb +5 -163
  14. data/features/support/env.rb +23 -149
  15. data/features/{tag_logic.feature → tagged_hooks.feature} +11 -52
  16. data/gem_tasks/{features.rake → cucumber.rake} +6 -1
  17. data/{features → legacy_features}/announce.feature +0 -0
  18. data/{features → legacy_features}/api/list_step_defs_as_json.feature +0 -0
  19. data/{features → legacy_features}/api/run_cli_main_with_existing_runtime.feature +0 -0
  20. data/{features → legacy_features}/around_hooks.feature +0 -0
  21. data/{features → legacy_features}/bug_371.feature +0 -0
  22. data/{features → legacy_features}/bug_464.feature +0 -0
  23. data/{features → legacy_features}/bug_475.feature +0 -0
  24. data/{features → legacy_features}/bug_585_tab_indentation.feature +0 -0
  25. data/{features → legacy_features}/bug_600.feature +0 -0
  26. data/{features → legacy_features}/call_steps_from_stepdefs.feature +0 -0
  27. data/{features → legacy_features}/cucumber_cli.feature +9 -9
  28. data/{features → legacy_features}/cucumber_cli_outlines.feature +0 -0
  29. data/{features → legacy_features}/default_snippets.feature +0 -0
  30. data/{features → legacy_features}/diffing.feature +0 -0
  31. data/{features → legacy_features}/drb_server_integration.feature +0 -0
  32. data/{features → legacy_features}/exception_in_after_block.feature +0 -0
  33. data/{features → legacy_features}/exception_in_after_step_block.feature +0 -0
  34. data/{features → legacy_features}/exception_in_before_block.feature +0 -0
  35. data/{features → legacy_features}/exclude_files.feature +0 -0
  36. data/{features → legacy_features}/expand.feature +0 -0
  37. data/{features → legacy_features}/html_formatter.feature +0 -0
  38. data/{features → legacy_features}/html_formatter/a.html +0 -0
  39. data/{features → legacy_features}/junit_formatter.feature +0 -0
  40. data/{features → legacy_features}/language_from_header.feature +0 -0
  41. data/{features → legacy_features}/language_help.feature +0 -0
  42. data/{features → legacy_features}/listener_debugger_formatter.feature +0 -0
  43. data/legacy_features/multiline_names.feature +44 -0
  44. data/{features → legacy_features}/post_configuration_hook.feature +0 -0
  45. data/{features → legacy_features}/profiles.feature +0 -0
  46. data/{features → legacy_features}/rake_task.feature +0 -0
  47. data/{features → legacy_features}/report_called_undefined_steps.feature +0 -0
  48. data/{features → legacy_features}/rerun_formatter.feature +0 -0
  49. data/{features → legacy_features}/simplest.feature +0 -0
  50. data/{features → legacy_features}/snippet.feature +0 -0
  51. data/{features → legacy_features}/snippets_when_using_star_keyword.feature +0 -0
  52. data/legacy_features/step_definitions/cucumber_steps.rb +168 -0
  53. data/{features → legacy_features}/step_definitions/extra_steps.rb +0 -0
  54. data/{features → legacy_features}/step_definitions/simplest_steps.rb +0 -0
  55. data/{features → legacy_features}/step_definitions/wire_steps.rb +1 -0
  56. data/legacy_features/support/env.rb +157 -0
  57. data/{features → legacy_features}/support/env.rb.simplest +0 -0
  58. data/{features → legacy_features}/support/fake_wire_server.rb +0 -0
  59. data/{features → legacy_features}/table_diffing.feature +0 -0
  60. data/{features → legacy_features}/table_mapping.feature +0 -0
  61. data/{features → legacy_features}/transform.feature +0 -0
  62. data/{features → legacy_features}/unicode_table.feature +0 -0
  63. data/{features → legacy_features}/wire_protocol.feature +1 -1
  64. data/{features → legacy_features}/wire_protocol_table_diffing.feature +0 -0
  65. data/{features → legacy_features}/wire_protocol_tags.feature +0 -0
  66. data/{features → legacy_features}/wire_protocol_timeouts.feature +0 -0
  67. data/{features → legacy_features}/work_in_progress.feature +0 -0
  68. data/lib/cucumber/ast/examples.rb +5 -0
  69. data/lib/cucumber/ast/feature.rb +5 -0
  70. data/lib/cucumber/ast/feature_element.rb +5 -0
  71. data/lib/cucumber/ast/scenario_outline.rb +9 -4
  72. data/lib/cucumber/ast/step.rb +5 -0
  73. data/lib/cucumber/ast/step_invocation.rb +4 -0
  74. data/lib/cucumber/ast/table.rb +3 -3
  75. data/lib/cucumber/ast/tree_walker.rb +1 -39
  76. data/lib/cucumber/cli/main.rb +1 -6
  77. data/lib/cucumber/cli/options.rb +1 -2
  78. data/lib/cucumber/formatter/ansicolor.rb +2 -4
  79. data/lib/cucumber/formatter/gherkin_formatter_adapter.rb +84 -0
  80. data/lib/cucumber/formatter/gpretty.rb +24 -0
  81. data/lib/cucumber/formatter/html.rb +1 -1
  82. data/lib/cucumber/formatter/io.rb +2 -4
  83. data/lib/cucumber/formatter/json.rb +15 -152
  84. data/lib/cucumber/formatter/json_pretty.rb +5 -6
  85. data/lib/cucumber/formatter/unicode.rb +41 -20
  86. data/lib/cucumber/parser/gherkin_builder.rb +7 -1
  87. data/lib/cucumber/platform.rb +1 -1
  88. data/lib/cucumber/step_match.rb +5 -1
  89. data/spec/cucumber/ast/scenario_outline_spec.rb +11 -8
  90. data/spec/cucumber/ast/table_spec.rb +6 -1
  91. data/spec/cucumber/cli/main_spec.rb +4 -1
  92. metadata +105 -132
  93. data/features/multiline_names.feature +0 -44
  94. data/features/usage_and_stepdefs_formatter.feature +0 -169
  95. data/fixtures/json/features/pystring.feature +0 -8
  96. data/fixtures/self_test/features/background/background_tagged_before_on_outline.feature +0 -12
  97. data/fixtures/self_test/features/background/background_with_name.feature +0 -7
  98. data/fixtures/self_test/features/background/failing_background.feature +0 -12
  99. data/fixtures/self_test/features/background/failing_background_after_success.feature +0 -11
  100. data/fixtures/self_test/features/background/multiline_args_background.feature +0 -32
  101. data/fixtures/self_test/features/background/passing_background.feature +0 -10
  102. data/fixtures/self_test/features/background/pending_background.feature +0 -10
  103. data/fixtures/self_test/features/background/scenario_outline_failing_background.feature +0 -16
  104. data/fixtures/self_test/features/background/scenario_outline_passing_background.feature +0 -16
  105. data/lib/cucumber/formatter/color_io.rb +0 -23
  106. data/lib/cucumber/formatter/tag_cloud.rb +0 -35
  107. data/spec/cucumber/formatter/color_io_spec.rb +0 -29
@@ -0,0 +1,70 @@
1
+ Feature: Usage formatter
2
+ In order to see where step definitions are used
3
+ Developers should be able to see a list of step definitions and their use
4
+
5
+ Background:
6
+ Given a file named "features/f.feature" with:
7
+ """
8
+ Feature: F
9
+ Background: A
10
+ Given A
11
+ Scenario: B
12
+ Given B
13
+ Scenario Outline: C
14
+ Given <x>
15
+ Examples:
16
+ |x|
17
+ |C|
18
+ Scenario: AC
19
+ Given A
20
+ Given C
21
+ """
22
+ And a file named "features/step_definitions/steps.rb" with:
23
+ """
24
+ Given /A/ do;end
25
+ Given /B/ do;end
26
+ Given /C/ do;end
27
+ Given /D/ do;end
28
+ """
29
+
30
+ Scenario: Run with --format usage
31
+ When I run "cucumber -f usage --dry-run"
32
+ Then it should pass with exactly:
33
+ """
34
+ --------
35
+
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
46
+ NOT MATCHED BY ANY STEPS
47
+
48
+ 3 scenarios (3 skipped)
49
+ 7 steps (7 skipped)
50
+ 0m0.012s
51
+
52
+ """
53
+
54
+ Scenario: Run with --format stepdefs
55
+ When I run "cucumber -f stepdefs --dry-run"
56
+ Then it should pass with exactly:
57
+ """
58
+ --------
59
+
60
+ /A/ # features/step_definitions/steps.rb:1
61
+ /B/ # features/step_definitions/steps.rb:2
62
+ /C/ # features/step_definitions/steps.rb:3
63
+ /D/ # features/step_definitions/steps.rb:4
64
+ NOT MATCHED BY ANY STEPS
65
+
66
+ 3 scenarios (3 skipped)
67
+ 7 steps (7 skipped)
68
+ 0m0.012s
69
+
70
+ """
@@ -1,166 +1,8 @@
1
- # encoding: utf-8
2
- require 'tempfile'
3
-
4
- Given /^I am in (.*)$/ do |example_dir_relative_path|
5
- @current_dir = fixtures_dir(example_dir_relative_path)
6
- end
7
-
8
- Given /^a standard Cucumber project directory structure$/ do
9
- @current_dir = working_dir
10
- in_current_dir do
11
- FileUtils.rm_rf 'features' if File.directory?('features')
12
- FileUtils.mkdir_p 'features/support'
13
- FileUtils.mkdir 'features/step_definitions'
14
- end
15
- end
16
-
17
- Given /^the (.*) directory is empty$/ do |directory|
18
- in_current_dir do
19
- FileUtils.remove_dir(directory) rescue nil
20
- FileUtils.mkdir 'tmp'
21
- end
22
- end
23
-
24
- Given /^a file named "([^"]*)"$/ do |file_name|
25
- create_file(file_name, '')
26
- end
27
-
28
- Given /^a file named "([^"]*)" with:$/ do |file_name, file_content|
29
- create_file(file_name, file_content)
30
- end
31
-
32
- Given /^the following profiles? (?:are|is) defined:$/ do |profiles|
33
- create_file('cucumber.yml', profiles)
34
- end
35
-
36
- Given /^I am running spork in the background$/ do
37
- run_spork_in_background
38
- end
39
-
40
- Given /^I am running spork in the background on port (\d+)$/ do |port|
41
- run_spork_in_background(port.to_i)
42
- end
43
-
44
- Given /^I am not running (?:.*) in the background$/ do
45
- # no-op
46
- end
47
-
48
- Given /^I have environment variable (\w+) set to "([^"]*)"$/ do |variable, value|
49
- set_env_var(variable, value)
50
- end
51
-
52
- When /^I run cucumber (.*)$/ do |cucumber_opts|
53
- run "#{Cucumber::RUBY_BINARY} -I rubygems #{cucumber_bin} --no-color #{cucumber_opts} CUCUMBER_OUTPUT_ENCODING=UTF-8"
54
- end
55
-
56
- When /^I run rake (.*)$/ do |rake_opts|
57
- run "rake #{rake_opts} --trace"
58
- end
59
-
60
- When /^I run the following Ruby code:$/ do |code|
61
- run %{#{Cucumber::RUBY_BINARY} -r rubygems -I #{cucumber_lib_dir} -e "#{code}"}
62
- end
63
-
64
- Then /^it should (fail|pass)$/ do |success|
65
- if success == 'fail'
66
- last_exit_status.should_not == 0
67
- else
68
- if last_exit_status != 0
69
- raise "Failed with exit status #{last_exit_status}\nSTDOUT:\n#{last_stdout}\nSTDERR:\n#{last_stderr}"
70
- end
71
- end
72
- end
73
-
74
- Then /^it should (fail|pass) with$/ do |success, output|
75
- combined_output.should =~ Regexp.compile(Regexp.escape(output))
76
- Then("it should #{success}")
77
- end
78
-
79
- Then /^the output should contain:?$/ do |text|
80
- last_stdout.should include(text)
81
- end
82
-
83
- Then /^the output should not contain$/ do |text|
84
- last_stdout.should_not include(text)
85
- end
86
-
87
- Then /^the output should be$/ do |text|
88
- last_stdout.should == text
89
- end
90
-
91
- Then /^it should (fail|pass) with JSON$/ do |success, text|
92
- JSON.parse(last_stdout).should == JSON.parse(text)
93
- Then("it should #{success}")
94
- end
95
-
96
- Then /^"([^"]*)" should contain$/ do |file, text|
97
- strip_duration(IO.read(file)).should == text
98
- end
99
-
100
- Then /^"([^"]*)" with junit duration "([^"]*)" should contain$/ do |actual_file, duration_replacement, text|
101
- actual = IO.read(actual_file)
102
- actual = replace_junit_duration(actual, duration_replacement)
103
- actual = strip_ruby186_extra_trace(actual)
104
- actual.should == text
105
- end
106
-
107
- Then /^"([^"]*)" should match "(.+?)"$/ do |file, text|
108
- File.open(file, Cucumber.file_mode('r')).read.should =~ Regexp.new(text)
109
- end
110
-
111
- Then /^"([^"]*)" should have the same contents as "([^"]*)"$/ do |actual_file, expected_file|
112
- actual = IO.read(actual_file)
113
- actual = replace_duration(actual, '0m30.005s')
114
- # Comment out to replace expected file. Use with care!
115
- # File.open(expected_file, "w") {|io| io.write(actual)}
116
- actual.should == IO.read(expected_file)
117
- end
118
-
119
- Then /^STDERR should match$/ do |text|
120
- last_stderr.should =~ /#{text}/
121
- end
122
-
123
- Then /^STDERR should not match$/ do |text|
124
- last_stderr.should_not =~ /#{text}/
125
- end
126
-
127
- Then /^STDERR should be$/ do |text|
128
- last_stderr.should == text
129
- end
130
-
131
- Then /^STDERR should be empty$/ do
132
- last_stderr.should == ""
133
- end
134
-
135
- Then /^"([^"]*)" should exist$/ do |file|
136
- File.exists?(file).should be_true
137
- FileUtils.rm(file)
138
- end
139
-
140
- Then /^"([^"]*)" should not be required$/ do |file_name|
141
- last_stdout.should_not include("* #{file_name}")
142
- end
143
-
144
- Then /^"([^"]*)" should be required$/ do |file_name|
145
- last_stdout.should include("* #{file_name}")
146
- end
147
-
148
- Then /^exactly these files should be loaded:\s*(.*)$/ do |files|
149
- last_stdout.scan(/^ \* (.*\.rb)$/).flatten.should == files.split(/,\s+/)
150
- end
151
-
152
- Then /^exactly these features should be ran:\s*(.*)$/ do |files|
153
- last_stdout.scan(/^ \* (.*\.feature)$/).flatten.should == files.split(/,\s+/)
154
- end
155
-
156
- Then /^the (.*) profile should be used$/ do |profile|
157
- last_stdout.should =~ /Using the #{profile} profile/
158
- end
159
-
160
- Then /^print output$/ do
161
- puts last_stdout
1
+ When /^I run cucumber "([^"]*)"$/ do |cmd|
2
+ run_simple(unescape("cucumber #{cmd}"), false)
162
3
  end
163
4
 
164
- Then /^the output should contain the following JSON:$/ do |json_string|
165
- JSON.parse(last_stdout).should == JSON.parse(json_string)
5
+ Then /^it should (pass|fail) with JSON:$/ do |pass_fail, json|
6
+ JSON.pretty_generate(JSON.parse(all_stdout)).should == JSON.pretty_generate(JSON.parse(json))
7
+ assert_exiting_with(pass_fail == 'pass')
166
8
  end
@@ -1,157 +1,31 @@
1
- require 'rubygems'
1
+ require 'aruba/api'
2
2
 
3
- require 'tempfile'
4
- require 'rspec/expectations'
5
- require 'fileutils'
6
- require 'forwardable'
7
- require 'cucumber/formatter/unicode'
8
- # This is to force miniunit to be loaded on 1.9.2, and verify that we can still run with --profile. See:
9
- # * disable_mini_test_autorun.rb and
10
- # * http://groups.google.com/group/cukes/browse_thread/thread/5682d41436e235d7
11
- # * https://rspec.lighthouseapp.com/projects/16211/tickets/677-cucumber-093-prevents-testunit-from-running
12
- require 'test/unit'
13
-
14
- class CucumberWorld
15
- extend Forwardable
16
- def_delegators CucumberWorld, :fixtures_dir, :self_test_dir, :working_dir, :cucumber_lib_dir
17
-
18
- def self.fixtures_dir(subdir=nil)
19
- @fixtures_dir ||= File.expand_path(File.join(File.dirname(__FILE__), '../../fixtures'))
20
- subdir ? File.join(@fixtures_dir, subdir) : @fixtures_dir
21
- end
22
-
23
- def self.self_test_dir
24
- @self_test_dir ||= fixtures_dir('self_test')
25
- end
26
-
27
- def self.working_dir
28
- @working_dir ||= fixtures_dir('self_test/tmp')
29
- end
30
-
31
- def cucumber_lib_dir
32
- @cucumber_lib_dir ||= File.expand_path(File.join(File.dirname(__FILE__), '../../lib'))
33
- end
3
+ # Monkey patch aruba to filter out some stuff
4
+ module Aruba::Api
5
+ alias _all_stdout all_stdout
34
6
 
35
- # Don't use Cucumber::BINARY (which is the binary used to start the "outer" cucumber)
36
- # Instead we force the use of this codebase's cucumber bin script.
37
- # This allows us to run cucumber's cukes with an older, stable cucumber.
38
- def cucumber_bin
39
- File.expand_path(File.dirname(__FILE__) + '/../../bin/cucumber')
40
- end
41
-
42
- def initialize
43
- @current_dir = self_test_dir
44
- end
45
-
46
- private
47
- attr_reader :last_exit_status, :last_stderr
48
-
49
- # The last standard out, with the duration line taken out (unpredictable)
50
- def last_stdout
51
- strip_1_9_paths(strip_duration(@last_stdout))
52
- end
53
-
54
- def combined_output
55
- last_stdout + "\n" + last_stderr
56
- end
57
-
58
- def strip_duration(s)
59
- s.gsub(/^\d+m\d+\.\d+s\n/m, "")
60
- end
61
-
62
- def strip_1_9_paths(s)
63
- s.gsub(/#{Dir.pwd}\/fixtures\/self_test\/tmp/m, ".").gsub(/#{Dir.pwd}\/fixtures\/self_test/m, ".")
64
- end
65
-
66
- def replace_duration(s, replacement)
67
- s.gsub(/\d+m\d+\.\d+s/m, replacement)
68
- end
69
-
70
- def replace_junit_duration(s, replacement)
71
- s.gsub(/\d+\.\d\d+/m, replacement)
7
+ def all_stdout
8
+ out = _all_stdout
9
+
10
+ # Remove absolute paths
11
+ out.gsub!(/#{Dir.pwd}\/tmp\/aruba/, '.')
12
+ # Make duration predictable
13
+ out.gsub!(/^\d+m\d+\.\d+s$/, '0m0.012s')
14
+ # Remove SimpleCov message
15
+ out.gsub!(/Coverage report generated for Cucumber Features to #{Dir.pwd}\/coverage\n$/, '')
16
+
17
+ out
72
18
  end
73
-
74
- def strip_ruby186_extra_trace(s)
75
- s.gsub(/^.*\.\/features\/step_definitions(.*)\n/, "")
76
- end
77
-
78
- def create_file(file_name, file_content)
79
- file_content.gsub!("CUCUMBER_LIB", "'#{cucumber_lib_dir}'") # Some files, such as Rakefiles need to use the lib dir
80
- in_current_dir do
81
- FileUtils.mkdir_p(File.dirname(file_name)) unless File.directory?(File.dirname(file_name))
82
- File.open(file_name, 'w') { |f| f << file_content }
83
- end
84
- end
85
-
86
- def set_env_var(variable, value)
87
- @original_env_vars ||= {}
88
- @original_env_vars[variable] = ENV[variable]
89
- ENV[variable] = value
90
- end
91
-
92
- def background_jobs
93
- @background_jobs ||= []
94
- end
95
-
96
- def in_current_dir(&block)
97
- Dir.chdir(@current_dir, &block)
98
- end
99
-
100
- def run(command)
101
- stderr_file = Tempfile.new('cucumber')
102
- stderr_file.close
103
- in_current_dir do
104
- mode = Cucumber::RUBY_1_9 ? {:external_encoding=>"UTF-8"} : 'r'
105
- IO.popen("#{command} 2> #{stderr_file.path}", mode) do |io|
106
- @last_stdout = io.read
107
- end
108
-
109
- @last_exit_status = $?.exitstatus
110
- end
111
- @last_stderr = IO.read(stderr_file.path)
112
- end
113
-
114
- def run_spork_in_background(port = nil)
115
- require 'spork'
116
-
117
- pid = fork
118
- in_current_dir do
119
- if pid
120
- background_jobs << pid
121
- else
122
- # STDOUT.close
123
- # STDERR.close
124
- port_arg = port ? "-p #{port}" : ''
125
- cmd = "#{Cucumber::RUBY_BINARY} -I #{Cucumber::LIBDIR} #{Spork::BINARY} cuc #{port_arg}"
126
- exec cmd
127
- end
128
- end
129
- sleep 1.0
130
- end
131
-
132
- def terminate_background_jobs
133
- background_jobs.each do |pid|
134
- Process.kill(Signal.list['TERM'], pid)
135
- end
136
- end
137
-
138
- def restore_original_env_vars
139
- @original_env_vars.each { |variable, value| ENV[variable] = value } if @original_env_vars
140
- end
141
-
142
19
  end
143
20
 
144
- World do
145
- CucumberWorld.new
146
- end
21
+ require 'aruba/cucumber'
147
22
 
148
- Before do
149
- FileUtils.rm_rf CucumberWorld.working_dir
150
- FileUtils.mkdir CucumberWorld.working_dir
151
- end
23
+ Before do |scenario|
24
+ @scenario = scenario
152
25
 
153
- After do
154
- FileUtils.rm_rf CucumberWorld.working_dir unless ENV['KEEP_FILES']
155
- terminate_background_jobs
156
- restore_original_env_vars
26
+ # Make sure bin/cucumber runs with SimpleCov enabled
27
+ set_env('SIMPLECOV', 'true')
28
+
29
+ # Set a longer timeout for aruba
30
+ @aruba_timeout_seconds = 5
157
31
  end
@@ -4,8 +4,7 @@ Feature: Tag logic
4
4
  I want to select features using logical AND/OR of tags
5
5
 
6
6
  Background:
7
- Given a standard Cucumber project directory structure
8
- And a file named "features/tagulicious.feature" with:
7
+ Given a file named "features/tagulicious.feature" with:
9
8
  """
10
9
  Feature: Sample
11
10
 
@@ -25,46 +24,6 @@ Feature: Tag logic
25
24
  Scenario: And yet another Example
26
25
  """
27
26
 
28
- Scenario: ANDing tags
29
- When I run cucumber -q -t @one -t @three features/tagulicious.feature
30
- Then it should pass
31
- And the output should contain
32
- """
33
- Feature: Sample
34
-
35
- @one @three
36
- Scenario: Example
37
- Given passing
38
-
39
- 1 scenario (1 undefined)
40
- 1 step (1 undefined)
41
-
42
- """
43
-
44
- Scenario: ORing tags
45
- When I run cucumber -q -t @one,@three features/tagulicious.feature
46
- Then it should pass
47
- And the output should contain
48
- """
49
- Feature: Sample
50
-
51
- @one @three
52
- Scenario: Example
53
- Given passing
54
-
55
- @one
56
- Scenario: Another Example
57
- Given passing
58
-
59
- @three
60
- Scenario: Yet another Example
61
- Given passing
62
-
63
- 3 scenarios (3 undefined)
64
- 3 steps (3 undefined)
65
-
66
- """
67
-
68
27
  Scenario: Before hooks ORing
69
28
  Given a file named "features/support/hooks.rb" with:
70
29
  """
@@ -72,8 +31,8 @@ Feature: Tag logic
72
31
  raise 'boom'
73
32
  end
74
33
  """
75
- When I run cucumber -q features/tagulicious.feature
76
- Then it should fail with
34
+ When I run "cucumber -q features/tagulicious.feature"
35
+ Then it should fail with:
77
36
  """
78
37
  Feature: Sample
79
38
 
@@ -115,8 +74,8 @@ Feature: Tag logic
115
74
  raise 'boom'
116
75
  end
117
76
  """
118
- When I run cucumber -q features/tagulicious.feature
119
- Then it should fail with
77
+ When I run "cucumber -q features/tagulicious.feature"
78
+ Then it should fail with:
120
79
  """
121
80
  Feature: Sample
122
81
 
@@ -152,8 +111,8 @@ Feature: Tag logic
152
111
  raise 'boom'
153
112
  end
154
113
  """
155
- When I run cucumber -q features/tagulicious.feature
156
- Then it should pass with
114
+ When I run "cucumber -q features/tagulicious.feature"
115
+ Then it should pass with:
157
116
  """
158
117
  Feature: Sample
159
118
 
@@ -184,8 +143,8 @@ Feature: Tag logic
184
143
  raise 'boom'
185
144
  end
186
145
  """
187
- When I run cucumber -q features/tagulicious.feature
188
- Then it should fail with
146
+ When I run "cucumber -q features/tagulicious.feature"
147
+ Then it should fail with:
189
148
  """
190
149
  Feature: Sample
191
150
 
@@ -227,8 +186,8 @@ Feature: Tag logic
227
186
  raise 'boom'
228
187
  end
229
188
  """
230
- When I run cucumber -q features/tagulicious.feature
231
- Then it should fail with
189
+ When I run "cucumber -q features/tagulicious.feature"
190
+ Then it should fail with:
232
191
  """
233
192
  Feature: Sample
234
193