cucumber 1.2.1 → 1.2.2

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 (172) hide show
  1. data/.rvmrc +1 -1
  2. data/.travis.yml +3 -2
  3. data/DEVELOPERS.md +48 -0
  4. data/History.md +22 -3
  5. data/README.md +13 -31
  6. data/Rakefile +1 -0
  7. data/cucumber.gemspec +18 -17
  8. data/cucumber.yml +3 -2
  9. data/examples/i18n/cs/Rakefile +6 -0
  10. data/examples/i18n/cs/features/addition.feature +17 -0
  11. data/examples/i18n/cs/features/division.feature +11 -0
  12. data/examples/i18n/cs/features/step_definitons/calculator_steps.rb +24 -0
  13. data/examples/i18n/cs/lib/calculator.rb +14 -0
  14. data/examples/i18n/hi/Rakefile +6 -0
  15. data/examples/i18n/hi/features/addition.feature +16 -0
  16. data/examples/i18n/hi/features/division.feature +10 -0
  17. data/examples/i18n/hi/features/step_definitons/calculator_steps.rb +24 -0
  18. data/examples/i18n/hi/lib/calculator.rb +15 -0
  19. data/examples/python/README.textile +2 -1
  20. data/examples/ruby2python/README.textile +2 -1
  21. data/features/.cucumber/stepdefs.json +1688 -445
  22. data/features/assertions.feature +69 -0
  23. data/features/formatter_callbacks.feature +189 -0
  24. data/features/html_formatter.feature +19 -0
  25. data/features/json_formatter.feature +8 -4
  26. data/features/nested_steps_with_second_arg.feature +73 -0
  27. data/features/step_definitions.feature +65 -0
  28. data/features/step_definitions/cucumber_steps.rb +18 -3
  29. data/fixtures/self_test/features/support/env.rb +1 -1
  30. data/gem_tasks/cucumber.rake +5 -3
  31. data/gem_tasks/downloads.rb +3 -3
  32. data/gem_tasks/stats +4 -2
  33. data/gem_tasks/yard.rake +31 -13
  34. data/legacy_features/default_snippets.feature +3 -3
  35. data/legacy_features/language_help.feature +4 -0
  36. data/legacy_features/report_called_undefined_steps.feature +1 -1
  37. data/legacy_features/snippet.feature +3 -3
  38. data/legacy_features/snippets_when_using_star_keyword.feature +1 -1
  39. data/legacy_features/step_definitions/cucumber_steps.rb +4 -3
  40. data/legacy_features/support/env.rb +1 -1
  41. data/legacy_features/support/fake_wire_server.rb +9 -9
  42. data/lib/autotest/cucumber_mixin.rb +14 -14
  43. data/lib/autotest/discover.rb +2 -0
  44. data/lib/cucumber.rb +2 -2
  45. data/lib/cucumber/ast.rb +1 -1
  46. data/lib/cucumber/ast/background.rb +11 -7
  47. data/lib/cucumber/ast/comment.rb +2 -2
  48. data/lib/cucumber/ast/doc_string.rb +1 -1
  49. data/lib/cucumber/ast/examples.rb +1 -1
  50. data/lib/cucumber/ast/feature.rb +2 -2
  51. data/lib/cucumber/ast/feature_element.rb +1 -1
  52. data/lib/cucumber/ast/multiline_argument.rb +2 -2
  53. data/lib/cucumber/ast/names.rb +2 -2
  54. data/lib/cucumber/ast/outline_table.rb +4 -5
  55. data/lib/cucumber/ast/scenario.rb +14 -14
  56. data/lib/cucumber/ast/scenario_outline.rb +4 -4
  57. data/lib/cucumber/ast/step.rb +3 -3
  58. data/lib/cucumber/ast/step_collection.rb +5 -5
  59. data/lib/cucumber/ast/step_invocation.rb +8 -8
  60. data/lib/cucumber/ast/table.rb +40 -27
  61. data/lib/cucumber/ast/tree_walker.rb +9 -8
  62. data/lib/cucumber/ast/visitor.rb +1 -1
  63. data/lib/cucumber/cli/configuration.rb +10 -10
  64. data/lib/cucumber/cli/drb_client.rb +1 -1
  65. data/lib/cucumber/cli/main.rb +3 -3
  66. data/lib/cucumber/cli/options.rb +3 -2
  67. data/lib/cucumber/cli/profile_loader.rb +1 -1
  68. data/lib/cucumber/configuration.rb +12 -12
  69. data/lib/cucumber/constantize.rb +11 -2
  70. data/lib/cucumber/core_ext/disable_mini_and_test_unit_autorun.rb +1 -1
  71. data/lib/cucumber/core_ext/instance_exec.rb +4 -4
  72. data/lib/cucumber/core_ext/proc.rb +3 -3
  73. data/lib/cucumber/errors.rb +1 -1
  74. data/lib/cucumber/feature_file.rb +1 -1
  75. data/lib/cucumber/formatter/ansicolor.rb +36 -23
  76. data/lib/cucumber/formatter/console.rb +45 -25
  77. data/lib/cucumber/formatter/debug.rb +7 -7
  78. data/lib/cucumber/formatter/duration.rb +1 -1
  79. data/lib/cucumber/formatter/gherkin_formatter_adapter.rb +7 -0
  80. data/lib/cucumber/formatter/gpretty.rb +1 -1
  81. data/lib/cucumber/formatter/html.rb +52 -53
  82. data/lib/cucumber/formatter/interceptor.rb +2 -2
  83. data/lib/cucumber/formatter/json.rb +1 -1
  84. data/lib/cucumber/formatter/json_pretty.rb +2 -1
  85. data/lib/cucumber/formatter/junit.rb +1 -1
  86. data/lib/cucumber/formatter/ordered_xml_markup.rb +1 -1
  87. data/lib/cucumber/formatter/pretty.rb +12 -12
  88. data/lib/cucumber/formatter/progress.rb +5 -5
  89. data/lib/cucumber/formatter/rerun.rb +5 -5
  90. data/lib/cucumber/formatter/stepdefs.rb +1 -1
  91. data/lib/cucumber/formatter/steps.rb +6 -6
  92. data/lib/cucumber/formatter/summary.rb +6 -6
  93. data/lib/cucumber/formatter/unicode.rb +18 -18
  94. data/lib/cucumber/formatter/usage.rb +7 -7
  95. data/lib/cucumber/js_support/js_dsl.js +1 -1
  96. data/lib/cucumber/language_support.rb +1 -1
  97. data/lib/cucumber/parser/gherkin_builder.rb +33 -33
  98. data/lib/cucumber/platform.rb +3 -2
  99. data/lib/cucumber/py_support/py_dsl.py +2 -2
  100. data/lib/cucumber/py_support/py_language.py +2 -2
  101. data/lib/cucumber/py_support/py_language.rb +2 -2
  102. data/lib/cucumber/rake/task.rb +4 -3
  103. data/lib/cucumber/rb_support/rb_dsl.rb +10 -10
  104. data/lib/cucumber/rb_support/rb_language.rb +27 -19
  105. data/lib/cucumber/rb_support/rb_step_definition.rb +39 -11
  106. data/lib/cucumber/rb_support/rb_transform.rb +3 -3
  107. data/lib/cucumber/rb_support/rb_world.rb +15 -15
  108. data/lib/cucumber/rb_support/regexp_argument_matcher.rb +1 -1
  109. data/lib/cucumber/rspec/disable_option_parser.rb +1 -1
  110. data/lib/cucumber/rspec/doubles.rb +1 -1
  111. data/lib/cucumber/runtime.rb +11 -10
  112. data/lib/cucumber/runtime/features_loader.rb +6 -6
  113. data/lib/cucumber/runtime/for_programming_languages.rb +8 -15
  114. data/lib/cucumber/runtime/results.rb +6 -6
  115. data/lib/cucumber/runtime/support_code.rb +37 -28
  116. data/lib/cucumber/runtime/user_interface.rb +4 -4
  117. data/lib/cucumber/step_definition_light.rb +4 -4
  118. data/lib/cucumber/step_definitions.rb +2 -3
  119. data/lib/cucumber/step_match.rb +6 -6
  120. data/lib/cucumber/step_mother.rb +1 -1
  121. data/lib/cucumber/term/ansicolor.rb +22 -22
  122. data/lib/cucumber/wire_support/configuration.rb +11 -14
  123. data/lib/cucumber/wire_support/connection.rb +10 -9
  124. data/lib/cucumber/wire_support/request_handler.rb +3 -3
  125. data/lib/cucumber/wire_support/wire_exception.rb +3 -3
  126. data/lib/cucumber/wire_support/wire_language.rb +11 -11
  127. data/lib/cucumber/wire_support/wire_packet.rb +7 -5
  128. data/lib/cucumber/wire_support/wire_protocol.rb +6 -6
  129. data/lib/cucumber/wire_support/wire_protocol/requests.rb +20 -20
  130. data/lib/cucumber/wire_support/wire_step_definition.rb +4 -4
  131. data/spec/cucumber/ast/background_spec.rb +4 -4
  132. data/spec/cucumber/ast/doc_string_spec.rb +8 -8
  133. data/spec/cucumber/ast/feature_factory.rb +4 -4
  134. data/spec/cucumber/ast/feature_spec.rb +18 -18
  135. data/spec/cucumber/ast/outline_table_spec.rb +3 -3
  136. data/spec/cucumber/ast/step_spec.rb +4 -4
  137. data/spec/cucumber/ast/table_spec.rb +50 -29
  138. data/spec/cucumber/ast/tree_walker_spec.rb +12 -4
  139. data/spec/cucumber/broadcaster_spec.rb +1 -1
  140. data/spec/cucumber/cli/configuration_spec.rb +10 -4
  141. data/spec/cucumber/cli/drb_client_spec.rb +1 -1
  142. data/spec/cucumber/cli/main_spec.rb +28 -7
  143. data/spec/cucumber/cli/options_spec.rb +3 -3
  144. data/spec/cucumber/configuration_spec.rb +4 -4
  145. data/spec/cucumber/constantize_spec.rb +2 -0
  146. data/spec/cucumber/core_ext/proc_spec.rb +7 -7
  147. data/spec/cucumber/formatter/ansicolor_spec.rb +2 -2
  148. data/spec/cucumber/formatter/duration_spec.rb +2 -2
  149. data/spec/cucumber/formatter/html_spec.rb +31 -31
  150. data/spec/cucumber/formatter/interceptor_spec.rb +10 -0
  151. data/spec/cucumber/formatter/progress_spec.rb +1 -1
  152. data/spec/cucumber/formatter/spec_helper.rb +7 -7
  153. data/spec/cucumber/rake/forked_spec.rb +15 -2
  154. data/spec/cucumber/rake/rcov_spec.rb +2 -2
  155. data/spec/cucumber/rb_support/rb_language_spec.rb +34 -17
  156. data/spec/cucumber/rb_support/rb_step_definition_spec.rb +45 -35
  157. data/spec/cucumber/rb_support/rb_transform_spec.rb +3 -3
  158. data/spec/cucumber/runtime/for_programming_languages_spec.rb +31 -0
  159. data/spec/cucumber/runtime/results_spec.rb +5 -5
  160. data/spec/cucumber/runtime/support_code_spec.rb +13 -2
  161. data/spec/cucumber/runtime_spec.rb +7 -7
  162. data/spec/cucumber/step_match_spec.rb +2 -2
  163. data/spec/cucumber/wire_support/configuration_spec.rb +16 -6
  164. data/spec/cucumber/wire_support/connection_spec.rb +25 -11
  165. data/spec/cucumber/wire_support/wire_exception_spec.rb +3 -3
  166. data/spec/cucumber/wire_support/wire_language_spec.rb +3 -3
  167. data/spec/cucumber/wire_support/wire_packet_spec.rb +4 -4
  168. data/spec/cucumber/wire_support/wire_step_definition_spec.rb +1 -1
  169. data/spec/spec_helper.rb +2 -2
  170. metadata +98 -128
  171. data/legacy_features/html_formatter.feature +0 -8
  172. data/legacy_features/html_formatter/a.html +0 -561
@@ -0,0 +1,69 @@
1
+ Feature: Assertions
2
+ In order to get started quickly
3
+ As a new Cucumber user
4
+ I want to use a familiar assertion library
5
+
6
+ Background:
7
+ Given a file named "features/assert.feature" with:
8
+ """
9
+ Feature: Assert
10
+ Scenario: Passing
11
+ Then it should pass
12
+ """
13
+
14
+ Given a file named "without_rspec.rb" with:
15
+ """
16
+ require 'rubygems' if RUBY_VERSION <= '1.8.7'
17
+ require 'rspec/expectations'
18
+
19
+ module RSpec
20
+ remove_const :Matchers rescue nil
21
+ remove_const :Expectations rescue nil
22
+ end
23
+
24
+ module Spec
25
+ remove_const :Expectations rescue nil
26
+ end
27
+ """
28
+
29
+ Scenario: Test::Unit
30
+ Given a file named "features/step_definitions/assert_steps.rb" with:
31
+ """
32
+ Then /^it should pass$/ do
33
+ assert(2 + 2 == 4)
34
+ end
35
+ """
36
+ When I run `ruby -r./without_rspec -S cucumber`
37
+ Then it should pass with exactly:
38
+ """
39
+ Feature: Assert
40
+
41
+ Scenario: Passing # features/assert.feature:2
42
+ Then it should pass # features/step_definitions/assert_steps.rb:1
43
+
44
+ 1 scenario (1 passed)
45
+ 1 step (1 passed)
46
+ 0m0.012s
47
+
48
+ """
49
+
50
+ Scenario: RSpec
51
+ Given a file named "features/step_definitions/assert_steps.rb" with:
52
+ """
53
+ Then /^it should pass$/ do
54
+ (2 + 2).should == 4
55
+ end
56
+ """
57
+ When I run `cucumber`
58
+ Then it should pass with exactly:
59
+ """
60
+ Feature: Assert
61
+
62
+ Scenario: Passing # features/assert.feature:2
63
+ Then it should pass # features/step_definitions/assert_steps.rb:1
64
+
65
+ 1 scenario (1 passed)
66
+ 1 step (1 passed)
67
+ 0m0.012s
68
+
69
+ """
@@ -0,0 +1,189 @@
1
+ Feature: Formatter Callback
2
+
3
+ Scenario: callback if not expanded
4
+ Given a file named "features/f.feature" with:
5
+ """
6
+ Feature: I'll use my own
7
+ because I'm worth it
8
+ Scenario: just print me
9
+ Given this step works
10
+ Scenario Outline: outline
11
+ Given <x> step works
12
+ Then <y>
13
+ Examples:
14
+ |x|y|
15
+ |this|that|
16
+ |here|there|
17
+ """
18
+ And a file named "features/step_definitions/steps.rb" with:
19
+ """
20
+ Given /^.+ step works$/ do
21
+ end
22
+ Then /^that|there$/ do
23
+ end
24
+ """
25
+ When I run cucumber "features/f.feature --format debug"
26
+ Then it should pass with exactly:
27
+ """
28
+ before_features
29
+ before_feature
30
+ before_tags
31
+ after_tags
32
+ feature_name
33
+ before_feature_element
34
+ before_tags
35
+ after_tags
36
+ scenario_name
37
+ before_steps
38
+ before_step
39
+ before_step_result
40
+ step_name
41
+ after_step_result
42
+ after_step
43
+ after_steps
44
+ after_feature_element
45
+ before_feature_element
46
+ before_tags
47
+ after_tags
48
+ scenario_name
49
+ before_steps
50
+ before_step
51
+ before_step_result
52
+ step_name
53
+ after_step_result
54
+ after_step
55
+ before_step
56
+ before_step_result
57
+ step_name
58
+ after_step_result
59
+ after_step
60
+ after_steps
61
+ before_examples_array
62
+ before_examples
63
+ examples_name
64
+ before_outline_table
65
+ before_table_row
66
+ before_table_cell
67
+ table_cell_value
68
+ after_table_cell
69
+ before_table_cell
70
+ table_cell_value
71
+ after_table_cell
72
+ after_table_row
73
+ before_table_row
74
+ before_table_cell
75
+ table_cell_value
76
+ after_table_cell
77
+ before_table_cell
78
+ table_cell_value
79
+ after_table_cell
80
+ after_table_row
81
+ before_table_row
82
+ before_table_cell
83
+ table_cell_value
84
+ after_table_cell
85
+ before_table_cell
86
+ table_cell_value
87
+ after_table_cell
88
+ after_table_row
89
+ after_outline_table
90
+ after_examples
91
+ after_examples_array
92
+ after_feature_element
93
+ after_feature
94
+ after_features
95
+
96
+ """
97
+
98
+ Scenario: callback if expanded
99
+ Given a file named "features/f.feature" with:
100
+ """
101
+ Feature: I'll use my own
102
+ because I'm worth it
103
+ Scenario: just print me
104
+ Given this step works
105
+ Scenario Outline: outline
106
+ Given <x> step works
107
+ Then <y>
108
+ Examples:
109
+ |x|y|
110
+ |this|that|
111
+ |here|there|
112
+ """
113
+ And a file named "features/step_definitions/steps.rb" with:
114
+ """
115
+ Given /^.+ step works$/ do
116
+ end
117
+ Then /^that|there$/ do
118
+ end
119
+ """
120
+ When I run cucumber "features/f.feature --format debug --expand"
121
+ Then it should pass with exactly:
122
+ """
123
+ before_features
124
+ before_feature
125
+ before_tags
126
+ after_tags
127
+ feature_name
128
+ before_feature_element
129
+ before_tags
130
+ after_tags
131
+ scenario_name
132
+ before_steps
133
+ before_step
134
+ before_step_result
135
+ step_name
136
+ after_step_result
137
+ after_step
138
+ after_steps
139
+ after_feature_element
140
+ before_feature_element
141
+ before_tags
142
+ after_tags
143
+ scenario_name
144
+ before_steps
145
+ before_step
146
+ before_step_result
147
+ step_name
148
+ after_step_result
149
+ after_step
150
+ before_step
151
+ before_step_result
152
+ step_name
153
+ after_step_result
154
+ after_step
155
+ after_steps
156
+ before_examples_array
157
+ before_examples
158
+ examples_name
159
+ before_outline_table
160
+ scenario_name
161
+ before_step
162
+ before_step_result
163
+ step_name
164
+ after_step_result
165
+ after_step
166
+ before_step
167
+ before_step_result
168
+ step_name
169
+ after_step_result
170
+ after_step
171
+ scenario_name
172
+ before_step
173
+ before_step_result
174
+ step_name
175
+ after_step_result
176
+ after_step
177
+ before_step
178
+ before_step_result
179
+ step_name
180
+ after_step_result
181
+ after_step
182
+ after_outline_table
183
+ after_examples
184
+ after_examples_array
185
+ after_feature_element
186
+ after_feature
187
+ after_features
188
+
189
+ """
@@ -0,0 +1,19 @@
1
+ Feature: HTML 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 html --expand "
18
+ Then it should pass
19
+
@@ -101,7 +101,8 @@ Feature: JSON output formatter
101
101
  "location": "features/step_definitions/steps.rb:1"
102
102
  },
103
103
  "result": {
104
- "status": "passed"
104
+ "status": "passed",
105
+ "duration": 1
105
106
  }
106
107
  }
107
108
  ]
@@ -129,7 +130,8 @@ Feature: JSON output formatter
129
130
  },
130
131
  "result": {
131
132
  "status": "failed",
132
- "error_message": " (RuntimeError)\n./features/step_definitions/steps.rb:6:in `/a failing step/'\nfeatures/one_passing_one_failing.feature:10:in `Given a failing step'"
133
+ "error_message": " (RuntimeError)\n./features/step_definitions/steps.rb:6:in `/a failing step/'\nfeatures/one_passing_one_failing.feature:10:in `Given a failing step'",
134
+ "duration": 1
133
135
  }
134
136
  }
135
137
  ]
@@ -191,7 +193,8 @@ Feature: JSON output formatter
191
193
  },
192
194
  "result": {
193
195
  "status": "failed",
194
- "error_message": "a string (RuntimeError)\n./features/step_definitions/doc_string_steps.rb:2:in `/I should fail with/'\nfeatures/doc_string.feature:4:in `Then I should fail with'"
196
+ "error_message": "a string (RuntimeError)\n./features/step_definitions/doc_string_steps.rb:2:in `/I should fail with/'\nfeatures/doc_string.feature:4:in `Then I should fail with'",
197
+ "duration": 1
195
198
  }
196
199
  }
197
200
  ]
@@ -236,7 +239,8 @@ Feature: JSON output formatter
236
239
  "location": "features/step_definitions/steps.rb:29"
237
240
  },
238
241
  "result": {
239
- "status": "passed"
242
+ "status": "passed",
243
+ "duration": 1
240
244
  }
241
245
  }
242
246
  ]
@@ -0,0 +1,73 @@
1
+ Feature: Nested Steps with either table or doc string
2
+
3
+ Background:
4
+ Given a scenario with a step that looks like this:
5
+ """gherkin
6
+ Given two turtles
7
+ """
8
+
9
+ Scenario: Use #step with table
10
+ Given a step definition that looks like this:
11
+ """ruby
12
+ Given /turtles:/ do |table|
13
+ table.hashes.each do |row|
14
+ puts row[:name]
15
+ end
16
+ end
17
+ """
18
+ And a step definition that looks like this:
19
+ """ruby
20
+ Given /two turtles/ do
21
+ step %{turtles:}, table(%{
22
+ | name |
23
+ | Sturm |
24
+ | Liouville |
25
+ })
26
+ end
27
+ """
28
+ When I run the feature with the progress formatter
29
+ Then the output should contain:
30
+ """
31
+ Sturm
32
+
33
+ Liouville
34
+
35
+ """
36
+
37
+ Scenario: Use #step with docstring
38
+ Given a step definition that looks like this:
39
+ """ruby
40
+ Given /two turtles/ do
41
+ step %{turtles:}, "Sturm and Lioville"
42
+ end
43
+ """
44
+ And a step definition that looks like this:
45
+ """ruby
46
+ Given /turtles:/ do |text|
47
+ puts text
48
+ end
49
+ """
50
+ When I run the feature with the progress formatter
51
+ Then the output should contain:
52
+ """
53
+ Sturm and Lioville
54
+ """
55
+
56
+ Scenario: Use #step with docstring and content-type
57
+ Given a step definition that looks like this:
58
+ """ruby
59
+ Given /two turtles/ do
60
+ step %{turtles:}, doc_string('Sturm and Lioville','math')
61
+ end
62
+ """
63
+ And a step definition that looks like this:
64
+ """ruby
65
+ Given /turtles:/ do |text|
66
+ puts text.content_type
67
+ end
68
+ """
69
+ When I run the feature with the progress formatter
70
+ Then the output should contain:
71
+ """
72
+ math
73
+ """
@@ -0,0 +1,65 @@
1
+ Feature: Step Definitions
2
+
3
+ Everybody knows you can do step definitions in Cucumber
4
+ but did you know you can do this?
5
+
6
+ Scenario: Call a method in World directly from a step def
7
+ Given a file named "features/step_definitions/steps.rb" with:
8
+ """
9
+ module Driver
10
+ def do_action
11
+ @done = true
12
+ end
13
+
14
+ def assert_done
15
+ @done.should be_true
16
+ end
17
+ end
18
+ World(Driver)
19
+
20
+ When /I do the action/, :do_action
21
+ Then /The action should be done/, :assert_done
22
+ """
23
+ And a file named "features/action.feature" with:
24
+ """
25
+ Feature:
26
+ Scenario:
27
+ When I do the action
28
+ Then the action should be done
29
+ """
30
+ When I run `cucumber`
31
+ Then it should pass
32
+
33
+ Scenario: Call a method on an actor in the World directly from a step def
34
+ Given a file named "features/step_definitions/steps.rb" with:
35
+ """
36
+ class Thing
37
+ def do_action
38
+ @done = true
39
+ end
40
+
41
+ def assert_done
42
+ @done.should be_true
43
+ end
44
+ end
45
+
46
+ module Driver
47
+ def thing
48
+ @thing ||= Thing.new
49
+ end
50
+ end
51
+ World(Driver)
52
+
53
+ When /I do the action to the thing/, :do_action, :on => lambda { thing }
54
+ Then /The thing should be done/, :assert_done, :on => lambda { thing }
55
+ """
56
+ And a file named "features/action.feature" with:
57
+ """
58
+ Feature:
59
+ Scenario:
60
+ When I do the action to the thing
61
+ Then the thing should be done
62
+ """
63
+ When I run `cucumber`
64
+ Then it should pass
65
+