cucumber 0.8.5 → 0.8.6

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 (181) hide show
  1. data/.rspec +1 -1
  2. data/LICENSE +1 -1
  3. data/Rakefile +5 -51
  4. data/bin/cucumber +7 -1
  5. data/cucumber.gemspec +463 -679
  6. data/examples/i18n/ar/features/step_definitons/calculator_steps.rb +1 -1
  7. data/examples/i18n/he/features/step_definitons/calculator_steps.rb +1 -1
  8. data/examples/i18n/ro/features/step_definitons/calculator_steps.rb +4 -7
  9. data/examples/i18n/ru/features/division.feature +2 -2
  10. data/examples/i18n/tr/features/step_definitons/hesap_makinesi_adimlari.rb +3 -3
  11. data/examples/sinatra/features/support/env.rb +2 -5
  12. data/examples/v8/features/fibonacci.feature +1 -1
  13. data/examples/watir/features/step_definitions/search_steps.rb +1 -1
  14. data/features/background.feature +284 -95
  15. data/features/custom_formatter.feature +3 -73
  16. data/features/json_formatter.feature +160 -245
  17. data/features/step_definitions/cucumber_steps.rb +7 -153
  18. data/features/support/env.rb +18 -140
  19. data/fixtures/junit/features/pending.feature +3 -1
  20. data/fixtures/self_test/features/support/env.rb +8 -0
  21. data/fixtures/tickets/features.html +1 -1
  22. data/gem_tasks/examples.rake +1 -1
  23. data/lib/cucumber.rb +12 -0
  24. data/lib/cucumber/ast.rb +1 -1
  25. data/lib/cucumber/ast/background.rb +21 -5
  26. data/lib/cucumber/ast/examples.rb +12 -4
  27. data/lib/cucumber/ast/feature.rb +13 -5
  28. data/lib/cucumber/ast/feature_element.rb +9 -4
  29. data/lib/cucumber/ast/outline_table.rb +4 -4
  30. data/lib/cucumber/ast/scenario.rb +7 -5
  31. data/lib/cucumber/ast/scenario_outline.rb +23 -15
  32. data/lib/cucumber/ast/step.rb +5 -0
  33. data/lib/cucumber/ast/step_invocation.rb +21 -15
  34. data/lib/cucumber/ast/table.rb +14 -8
  35. data/lib/cucumber/ast/tree_walker.rb +10 -48
  36. data/lib/cucumber/cli/configuration.rb +33 -8
  37. data/lib/cucumber/cli/main.rb +20 -35
  38. data/lib/cucumber/cli/options.rb +8 -7
  39. data/lib/cucumber/cli/profile_loader.rb +2 -0
  40. data/lib/cucumber/core_ext/proc.rb +2 -1
  41. data/lib/cucumber/feature_file.rb +47 -15
  42. data/lib/cucumber/formatter/ansicolor.rb +3 -5
  43. data/lib/cucumber/formatter/console.rb +27 -23
  44. data/lib/cucumber/formatter/cucumber.css +34 -17
  45. data/lib/cucumber/formatter/cucumber.sass +173 -182
  46. data/lib/cucumber/formatter/html.rb +46 -11
  47. data/lib/cucumber/formatter/io.rb +2 -4
  48. data/lib/cucumber/formatter/json.rb +15 -152
  49. data/lib/cucumber/formatter/json_pretty.rb +5 -6
  50. data/lib/cucumber/formatter/junit.rb +28 -22
  51. data/lib/cucumber/formatter/pdf.rb +6 -6
  52. data/lib/cucumber/formatter/pretty.rb +5 -5
  53. data/lib/cucumber/formatter/rerun.rb +22 -11
  54. data/lib/cucumber/formatter/unicode.rb +41 -20
  55. data/lib/cucumber/js_support/js_dsl.js +4 -4
  56. data/lib/cucumber/js_support/js_language.rb +9 -5
  57. data/lib/cucumber/js_support/js_snippets.rb +2 -2
  58. data/lib/cucumber/language_support.rb +2 -2
  59. data/lib/cucumber/parser/gherkin_builder.rb +35 -30
  60. data/lib/cucumber/platform.rb +8 -8
  61. data/lib/cucumber/py_support/py_language.rb +2 -2
  62. data/lib/cucumber/rake/task.rb +80 -31
  63. data/lib/cucumber/rb_support/rb_dsl.rb +1 -0
  64. data/lib/cucumber/rb_support/rb_language.rb +10 -8
  65. data/lib/cucumber/rb_support/rb_step_definition.rb +8 -0
  66. data/lib/cucumber/rb_support/rb_transform.rb +17 -0
  67. data/lib/cucumber/rb_support/rb_world.rb +26 -18
  68. data/lib/cucumber/rspec/doubles.rb +3 -3
  69. data/lib/cucumber/step_match.rb +6 -2
  70. data/lib/cucumber/step_mother.rb +6 -427
  71. data/lib/cucumber/wire_support/configuration.rb +4 -1
  72. data/lib/cucumber/wire_support/wire_language.rb +3 -10
  73. data/spec/cucumber/ast/background_spec.rb +68 -6
  74. data/spec/cucumber/ast/feature_factory.rb +5 -4
  75. data/spec/cucumber/ast/feature_spec.rb +4 -4
  76. data/spec/cucumber/ast/outline_table_spec.rb +1 -1
  77. data/spec/cucumber/ast/scenario_outline_spec.rb +15 -11
  78. data/spec/cucumber/ast/scenario_spec.rb +4 -4
  79. data/spec/cucumber/ast/step_spec.rb +3 -3
  80. data/spec/cucumber/ast/table_spec.rb +38 -2
  81. data/spec/cucumber/ast/tree_walker_spec.rb +2 -2
  82. data/spec/cucumber/broadcaster_spec.rb +1 -1
  83. data/spec/cucumber/cli/configuration_spec.rb +32 -6
  84. data/spec/cucumber/cli/drb_client_spec.rb +2 -3
  85. data/spec/cucumber/cli/main_spec.rb +43 -43
  86. data/spec/cucumber/cli/options_spec.rb +28 -1
  87. data/spec/cucumber/cli/profile_loader_spec.rb +1 -1
  88. data/spec/cucumber/core_ext/proc_spec.rb +1 -1
  89. data/spec/cucumber/formatter/ansicolor_spec.rb +1 -1
  90. data/spec/cucumber/formatter/duration_spec.rb +1 -1
  91. data/spec/cucumber/formatter/html_spec.rb +3 -5
  92. data/spec/cucumber/formatter/junit_spec.rb +16 -2
  93. data/spec/cucumber/formatter/progress_spec.rb +1 -1
  94. data/spec/cucumber/formatter/spec_helper.rb +11 -12
  95. data/spec/cucumber/rb_support/rb_language_spec.rb +241 -28
  96. data/spec/cucumber/rb_support/rb_step_definition_spec.rb +33 -28
  97. data/spec/cucumber/rb_support/regexp_argument_matcher_spec.rb +1 -1
  98. data/spec/cucumber/step_match_spec.rb +11 -9
  99. data/spec/cucumber/wire_support/configuration_spec.rb +1 -1
  100. data/spec/cucumber/wire_support/connection_spec.rb +1 -1
  101. data/spec/cucumber/wire_support/wire_exception_spec.rb +1 -1
  102. data/spec/cucumber/wire_support/wire_language_spec.rb +1 -1
  103. data/spec/cucumber/wire_support/wire_packet_spec.rb +1 -1
  104. data/spec/cucumber/wire_support/wire_step_definition_spec.rb +1 -1
  105. data/spec/cucumber/world/pending_spec.rb +2 -2
  106. data/spec/spec_helper.rb +13 -20
  107. metadata +11 -222
  108. data/.gitignore +0 -20
  109. data/Caliper.yml +0 -4
  110. data/History.txt +0 -1552
  111. data/README.rdoc +0 -26
  112. data/VERSION.yml +0 -5
  113. data/examples/i18n/ro/features/suma.feature +0 -11
  114. data/features/announce.feature +0 -164
  115. data/features/around_hooks.feature +0 -232
  116. data/features/bug_371.feature +0 -32
  117. data/features/bug_464.feature +0 -16
  118. data/features/bug_475.feature +0 -42
  119. data/features/bug_585_tab_indentation.feature +0 -22
  120. data/features/bug_600.feature +0 -67
  121. data/features/call_steps_from_stepdefs.feature +0 -154
  122. data/features/cucumber_cli.feature +0 -591
  123. data/features/cucumber_cli_outlines.feature +0 -117
  124. data/features/default_snippets.feature +0 -42
  125. data/features/diffing.feature +0 -25
  126. data/features/drb_server_integration.feature +0 -174
  127. data/features/exception_in_after_block.feature +0 -127
  128. data/features/exception_in_after_step_block.feature +0 -104
  129. data/features/exception_in_before_block.feature +0 -98
  130. data/features/exclude_files.feature +0 -20
  131. data/features/expand.feature +0 -60
  132. data/features/html_formatter.feature +0 -8
  133. data/features/html_formatter/a.html +0 -582
  134. data/features/junit_formatter.feature +0 -88
  135. data/features/language_from_header.feature +0 -30
  136. data/features/language_help.feature +0 -78
  137. data/features/listener_debugger_formatter.feature +0 -42
  138. data/features/multiline_names.feature +0 -44
  139. data/features/negative_tagged_hooks.feature +0 -60
  140. data/features/post_configuration_hook.feature +0 -37
  141. data/features/profiles.feature +0 -126
  142. data/features/rake_task.feature +0 -152
  143. data/features/report_called_undefined_steps.feature +0 -34
  144. data/features/rerun_formatter.feature +0 -45
  145. data/features/simplest.feature +0 -11
  146. data/features/snippet.feature +0 -23
  147. data/features/snippets_when_using_star_keyword.feature +0 -36
  148. data/features/step_definitions/extra_steps.rb +0 -2
  149. data/features/step_definitions/simplest_steps.rb +0 -3
  150. data/features/step_definitions/wire_steps.rb +0 -32
  151. data/features/support/env.rb.simplest +0 -7
  152. data/features/support/fake_wire_server.rb +0 -77
  153. data/features/table_diffing.feature +0 -45
  154. data/features/table_mapping.feature +0 -34
  155. data/features/tag_logic.feature +0 -258
  156. data/features/transform.feature +0 -245
  157. data/features/unicode_table.feature +0 -35
  158. data/features/usage_and_stepdefs_formatter.feature +0 -169
  159. data/features/wire_protocol.feature +0 -332
  160. data/features/wire_protocol_table_diffing.feature +0 -119
  161. data/features/wire_protocol_tags.feature +0 -87
  162. data/features/wire_protocol_timeouts.feature +0 -63
  163. data/features/work_in_progress.feature +0 -156
  164. data/fixtures/json/features/pystring.feature +0 -8
  165. data/fixtures/self_test/features/background/background_tagged_before_on_outline.feature +0 -12
  166. data/fixtures/self_test/features/background/background_with_name.feature +0 -7
  167. data/fixtures/self_test/features/background/failing_background.feature +0 -12
  168. data/fixtures/self_test/features/background/failing_background_after_success.feature +0 -11
  169. data/fixtures/self_test/features/background/multiline_args_background.feature +0 -32
  170. data/fixtures/self_test/features/background/passing_background.feature +0 -10
  171. data/fixtures/self_test/features/background/pending_background.feature +0 -10
  172. data/fixtures/self_test/features/background/scenario_outline_failing_background.feature +0 -16
  173. data/fixtures/self_test/features/background/scenario_outline_passing_background.feature +0 -16
  174. data/gem_tasks/features.rake +0 -14
  175. data/gem_tasks/sdoc.rake +0 -12
  176. data/lib/cucumber/ast/py_string.rb +0 -80
  177. data/lib/cucumber/formatter/color_io.rb +0 -23
  178. data/lib/cucumber/formatter/tag_cloud.rb +0 -35
  179. data/spec/cucumber/ast/py_string_spec.rb +0 -40
  180. data/spec/cucumber/formatter/color_io_spec.rb +0 -29
  181. data/spec/cucumber/step_mother_spec.rb +0 -302
@@ -1,152 +0,0 @@
1
- Feature: Rake task
2
- In order to ease the development process
3
- As a developer and CI server administrator
4
- Cucumber features should be executable via Rake
5
-
6
- Background:
7
- Given a standard Cucumber project directory structure
8
- And a file named "features/missing_step_definitions.feature" with:
9
- """
10
- Feature: Sample
11
-
12
- Scenario: Wanted
13
- Given I want to run this
14
-
15
- Scenario: Unwanted
16
- Given I don't want this ran
17
- """
18
-
19
-
20
- Scenario: rake task with a defined profile
21
- Given the following profile is defined:
22
- """
23
- foo: --quiet --no-color features/missing_step_definitions.feature:3
24
- """
25
- And a file named "Rakefile" with:
26
- """
27
- $LOAD_PATH.unshift(CUCUMBER_LIB)
28
- require 'cucumber/rake/task'
29
-
30
- Cucumber::Rake::Task.new do |t|
31
- t.profile = "foo"
32
- end
33
- """
34
- When I run rake cucumber
35
- Then it should pass
36
- And the output should contain
37
- """
38
- Feature: Sample
39
-
40
- Scenario: Wanted
41
- Given I want to run this
42
-
43
- 1 scenario (1 undefined)
44
- 1 step (1 undefined)
45
- """
46
-
47
- Scenario: rake task without a profile
48
- Given a file named "Rakefile" with:
49
- """
50
- $LOAD_PATH.unshift(CUCUMBER_LIB)
51
- require 'cucumber/rake/task'
52
-
53
- Cucumber::Rake::Task.new do |t|
54
- t.cucumber_opts = %w{--quiet --no-color}
55
- end
56
- """
57
- When I run rake cucumber
58
- Then it should pass
59
- And the output should contain
60
- """
61
- Feature: Sample
62
-
63
- Scenario: Wanted
64
- Given I want to run this
65
-
66
- Scenario: Unwanted
67
- Given I don't want this ran
68
-
69
- 2 scenarios (2 undefined)
70
- 2 steps (2 undefined)
71
- """
72
-
73
- Scenario: rake task with a defined profile and cucumber_opts
74
- Given the following profile is defined:
75
- """
76
- bar: ['features/missing_step_definitions.feature:3']
77
- """
78
- And a file named "Rakefile" with:
79
- """
80
- $LOAD_PATH.unshift(CUCUMBER_LIB)
81
- require 'cucumber/rake/task'
82
-
83
- Cucumber::Rake::Task.new do |t|
84
- t.profile = "bar"
85
- t.cucumber_opts = %w{--quiet --no-color}
86
- end
87
- """
88
- When I run rake cucumber
89
- Then it should pass
90
- And the output should contain
91
- """
92
- Feature: Sample
93
-
94
- Scenario: Wanted
95
- Given I want to run this
96
-
97
- 1 scenario (1 undefined)
98
- 1 step (1 undefined)
99
- """
100
-
101
- Scenario: respect requires
102
- Given a file named "features/support/env.rb"
103
- And a file named "features/support/dont_require_me.rb"
104
- And the following profile is defined:
105
- """
106
- no_bomb: features/missing_step_definitions.feature:3 --require features/support/env.rb --verbose
107
- """
108
- And a file named "Rakefile" with:
109
- """
110
- $LOAD_PATH.unshift(CUCUMBER_LIB)
111
- require 'cucumber/rake/task'
112
-
113
- Cucumber::Rake::Task.new do |t|
114
- t.profile = "no_bomb"
115
- t.cucumber_opts = %w{--quiet --no-color}
116
- end
117
- """
118
-
119
- When I run rake cucumber
120
- Then it should pass
121
- And the output should not contain
122
- """
123
- * features/support/dont_require_me.rb
124
- """
125
-
126
- Scenario: feature files with spaces
127
- Given a file named "features/spaces are nasty.feature" with:
128
- """
129
- Feature: The futures green
130
-
131
- Scenario: Orange
132
- Given this is missing
133
- """
134
- And a file named "Rakefile" with:
135
- """
136
- $LOAD_PATH.unshift(CUCUMBER_LIB)
137
- require 'cucumber/rake/task'
138
-
139
- Cucumber::Rake::Task.new do |t|
140
- t.cucumber_opts = %w{--quiet --no-color}
141
- end
142
- """
143
- When I run rake cucumber
144
- Then it should pass
145
- And the output should contain
146
- """
147
- Feature: The futures green
148
-
149
- Scenario: Orange
150
- Given this is missing
151
-
152
- """
@@ -1,34 +0,0 @@
1
- Feature: Cucumber command line
2
- In order to find out what step definitions need to be implemented
3
- Developers should always see what step definition is missing
4
-
5
- Scenario: Get info at arbitrary levels of nesting
6
- When I run cucumber features/call_undefined_step_from_step_def.feature
7
- Then it should pass with
8
- """
9
- Feature: Calling undefined step
10
-
11
- Scenario: Call directly # features/call_undefined_step_from_step_def.feature:3
12
- Given a step definition that calls an undefined step # features/step_definitions/sample_steps.rb:19
13
- Undefined step: "this does not exist" (Cucumber::Undefined)
14
- ./features/step_definitions/sample_steps.rb:19:in `/^a step definition that calls an undefined step$/'
15
- features/call_undefined_step_from_step_def.feature:4:in `Given a step definition that calls an undefined step'
16
-
17
- Scenario: Call via another # features/call_undefined_step_from_step_def.feature:6
18
- Given call step "a step definition that calls an undefined step" # features/step_definitions/sample_steps.rb:23
19
- Undefined step: "this does not exist" (Cucumber::Undefined)
20
- ./features/step_definitions/sample_steps.rb:19:in `/^a step definition that calls an undefined step$/'
21
- features/call_undefined_step_from_step_def.feature:7:in `Given call step "a step definition that calls an undefined step"'
22
-
23
- 2 scenarios (2 undefined)
24
- 2 steps (2 undefined)
25
-
26
- You can implement step definitions for undefined steps with these snippets:
27
-
28
- Given /^this does not exist$/ do
29
- pending # express the regexp above with the code you wish you had
30
- end
31
-
32
-
33
- """
34
-
@@ -1,45 +0,0 @@
1
- Feature: Rerun Debugger
2
- In order to save time
3
- I want to run *only* failed, pending and missing features from previous runs
4
- (with the help of a smart cucumber.yml)
5
-
6
- Background:
7
- Given a standard Cucumber project directory structure
8
-
9
- Scenario: title
10
- Given a file named "features/sample.feature" with:
11
- """
12
- Feature: Rerun
13
-
14
- Scenario: Failing
15
- Given failing
16
-
17
- Scenario: Missing
18
- Given missing
19
-
20
- Scenario: Pending
21
- Given pending
22
-
23
- Scenario: Passing
24
- Given passing
25
- """
26
- And a file named "features/step_definitions/steps.rb" with:
27
- """
28
- Given /failing/ do
29
- raise 'FAIL'
30
- end
31
-
32
- Given /pending/ do
33
- pending
34
- end
35
-
36
- Given /passing/ do
37
- end
38
- """
39
-
40
- When I run cucumber -f rerun features/sample.feature
41
- Then it should fail with
42
- """
43
- features/sample.feature:3:6:9
44
-
45
- """
@@ -1,11 +0,0 @@
1
- Feature: Sample
2
-
3
- Background:
4
- Given this step works
5
-
6
- Scenario: Run a good step
7
- Given this step works
8
-
9
-
10
-
11
-
@@ -1,23 +0,0 @@
1
- Feature: Snippets
2
- In order to help speed up writing step definitions
3
- As a feature editor
4
- I want snippet suggestions for undefined step definitions
5
-
6
- Scenario: Snippet for undefined step with a pystring
7
- When I run cucumber features/undefined_multiline_args.feature:3 -s
8
- Then the output should contain
9
- """
10
- Given /^a pystring$/ do |string|
11
- pending # express the regexp above with the code you wish you had
12
- end
13
- """
14
-
15
- Scenario: Snippet for undefined step with a step table
16
- When I run cucumber features/undefined_multiline_args.feature:9 -s
17
- Then the output should contain
18
- """
19
- Given /^a table$/ do |table|
20
- # table is a Cucumber::Ast::Table
21
- pending # express the regexp above with the code you wish you had
22
- end
23
- """
@@ -1,36 +0,0 @@
1
- Feature: Use * keywords and still get snippets
2
- In order to make it possible to use * instead of
3
- Given/When/Then, I should not get an exception
4
- when I have undefined steps
5
-
6
- Scenario: Use some *
7
- Given a standard Cucumber project directory structure
8
- And a file named "features/f.feature" with:
9
- """
10
- Feature: F
11
- Scenario: S
12
- * I have some cukes
13
- """
14
- When I run cucumber features/f.feature
15
- Then STDERR should be empty
16
- And it should pass with
17
- """
18
- Feature: F
19
-
20
- Scenario: S # features/f.feature:2
21
- * I have some cukes # features/f.feature:3
22
-
23
- 1 scenario (1 undefined)
24
- 1 step (1 undefined)
25
-
26
- You can implement step definitions for undefined steps with these snippets:
27
-
28
- Given /^I have some cukes$/ do
29
- pending # express the regexp above with the code you wish you had
30
- end
31
-
32
- If you want snippets in a different programming language, just make sure a file
33
- with the appropriate file extension exists where cucumber looks for step definitions.
34
-
35
-
36
- """
@@ -1,2 +0,0 @@
1
- Given /^missing$/ do
2
- end
@@ -1,3 +0,0 @@
1
- Given /^this step works$/ do
2
- end
3
-
@@ -1,32 +0,0 @@
1
- Given /^there is a wire server (running |)on port (\d+) which understands the following protocol:$/ do |running, port, table|
2
- protocol = table.hashes
3
- @server = FakeWireServer.new(port.to_i, protocol)
4
- start_wire_server if running.strip == "running"
5
- end
6
-
7
- Given /^the wire server takes (.*) seconds to respond to the invoke message$/ do |timeout|
8
- @server.delay_response(:invoke, timeout.to_f)
9
- start_wire_server
10
- end
11
-
12
- module WireHelper
13
- def start_wire_server
14
- @wire_pid = fork do
15
- @server.run
16
- end
17
- end
18
-
19
- def stop_wire_server
20
- return unless @wire_pid
21
- Process.kill('KILL', @wire_pid)
22
- Process.wait
23
- end
24
- end
25
-
26
- Before('@wire') do
27
- extend(WireHelper)
28
- end
29
-
30
- After('@wire') do
31
- stop_wire_server
32
- end
@@ -1,7 +0,0 @@
1
- require 'rubygems'
2
-
3
- class SomeException < Exception; end
4
-
5
- Before do
6
- raise SomeException.new("I cannot even start this scenario")
7
- end
@@ -1,77 +0,0 @@
1
- require 'socket'
2
- require 'json'
3
-
4
- class FakeWireServer
5
- def initialize(port, protocol_table)
6
- @port, @protocol_table = port, protocol_table
7
- @delays = {}
8
- end
9
-
10
- def run
11
- @server = TCPServer.open(@port)
12
- loop { handle_connections }
13
- end
14
-
15
- def delay_response(message, delay)
16
- @delays[message] = delay
17
- end
18
-
19
- private
20
-
21
- def handle_connections
22
- Thread.start(@server.accept) { |socket| open_session_on socket }
23
- end
24
-
25
- def open_session_on(socket)
26
- begin
27
- SocketSession.new(socket, @protocol_table, @delays).start
28
- rescue Exception => e
29
- raise e
30
- ensure
31
- socket.close
32
- end
33
- end
34
-
35
- class SocketSession
36
- def initialize(socket, protocol, delays)
37
- @socket = socket
38
- @protocol = protocol
39
- @delays = delays
40
- end
41
-
42
- def start
43
- while message = @socket.gets
44
- handle(message)
45
- end
46
- end
47
-
48
- private
49
-
50
- def handle(data)
51
- if protocol_entry = response_to(data.strip)
52
- sleep delay(data)
53
- send_response(protocol_entry['response'])
54
- else
55
- serialized_exception = { :message => "Not understood: #{data}", :backtrace => [] }
56
- send_response(['fail', serialized_exception ].to_json)
57
- end
58
- rescue => e
59
- send_response(['fail', { :message => e.message, :backtrace => e.backtrace, :exception => e.class } ].to_json)
60
- end
61
-
62
- def response_to(data)
63
- @protocol.detect do |entry|
64
- JSON.parse(entry['request']) == JSON.parse(data)
65
- end
66
- end
67
-
68
- def send_response(response)
69
- @socket.puts response + "\n"
70
- end
71
-
72
- def delay(data)
73
- message = JSON.parse(data.strip)[0]
74
- @delays[message.to_sym] || 0
75
- end
76
- end
77
- end
@@ -1,45 +0,0 @@
1
- Feature: Table diffing
2
- In order to more easily compare data in tables
3
- step definition writers should be able to diff
4
- a table with expected data and see the diff inline
5
-
6
- Scenario: Extra row
7
- Given a standard Cucumber project directory structure
8
- And a file named "features/tables.feature" with:
9
- """
10
- Feature: Tables
11
- Scenario: Extra row
12
- Then the table should be:
13
- | x | y |
14
- | a | b |
15
- """
16
- And a file named "features/step_definitions/table_steps.rb" with:
17
- """
18
- Then /the table should be:/ do |expected| x=1
19
- expected.diff!(table(%{
20
- | x | y |
21
- | a | c |
22
- }))
23
- end
24
- """
25
- When I run cucumber -i features/tables.feature
26
- Then it should fail with
27
- """
28
- Feature: Tables
29
-
30
- Scenario: Extra row # features/tables.feature:2
31
- Then the table should be: # features/step_definitions/table_steps.rb:1
32
- | x | y |
33
- | a | b |
34
- | a | c |
35
- Tables were not identical (Cucumber::Ast::Table::Different)
36
- ./features/step_definitions/table_steps.rb:2:in `/the table should be:/'
37
- features/tables.feature:3:in `Then the table should be:'
38
-
39
- Failing Scenarios:
40
- cucumber features/tables.feature:2 # Scenario: Extra row
41
-
42
- 1 scenario (1 failed)
43
- 1 step (1 failed)
44
-
45
- """