cucumber 0.3.99 → 0.3.100
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.
- data/History.txt +21 -9
- data/Manifest.txt +12 -2
- data/examples/i18n/uz/Rakefile +6 -0
- data/examples/i18n/uz/features/addition.feature +10 -0
- data/examples/i18n/uz/features/consecutive_calculations.feature +17 -0
- data/examples/i18n/uz/features/division.feature +17 -0
- data/examples/i18n/uz/features/step_definitons/calculator_steps.rb +19 -0
- data/examples/i18n/uz/features/support/env.rb +6 -0
- data/examples/i18n/uz/features/support/world.rb +8 -0
- data/examples/i18n/uz/lib/calculator.rb +24 -0
- data/examples/self_test/list-of-features.txt +1 -0
- data/features/cucumber_cli.feature +20 -0
- data/features/{after_block_exceptions.feature → exception_in_after_block.feature} +17 -17
- data/features/{after_step_block_exceptions.feature → exception_in_after_step_block.feature} +9 -9
- data/features/exception_in_before_block.feature +47 -0
- data/lib/cucumber/ast/scenario.rb +42 -18
- data/lib/cucumber/ast/step_invocation.rb +12 -6
- data/lib/cucumber/cli/configuration.rb +23 -1
- data/lib/cucumber/cli/main.rb +1 -16
- data/lib/cucumber/cli/options.rb +4 -1
- data/lib/cucumber/languages.yml +14 -0
- data/lib/cucumber/step_mother.rb +0 -1
- data/lib/cucumber/version.rb +1 -1
- data/spec/cucumber/rb_support/rb_step_definition_spec.rb +9 -0
- metadata +15 -4
data/History.txt
CHANGED
@@ -1,3 +1,15 @@
|
|
1
|
+
== 0.3.100 2009-09-09
|
2
|
+
|
3
|
+
The JavaZone release!
|
4
|
+
|
5
|
+
=== New Features
|
6
|
+
* Added support for Uzbek (msarvar)
|
7
|
+
* The file argument on the cucumber command line will replace contents of file on cli if file is prefixed with @ (Tero Tilus)
|
8
|
+
|
9
|
+
=== Bugfixes
|
10
|
+
* Backtraces on JRuby are handled in a cleaner way when the exception comes from Java (NativeException). (Aslak Hellesøy)
|
11
|
+
* When exceptions occur in a Before block the rest of the scenario is now skipped (#331 Matt Wynne)
|
12
|
+
|
1
13
|
== 0.3.99 2009-09-03
|
2
14
|
|
3
15
|
=== New Features
|
@@ -63,7 +75,7 @@ data in your HTML with a Cucumber table using Cucumber::Ast::Table#diff!
|
|
63
75
|
This release also fixes several bugs related to --drb (Spork) and profiles (cucumber.yml)
|
64
76
|
|
65
77
|
=== Bug Fixes
|
66
|
-
* --guess will always prefer the longest regexp with no groups if they exist.
|
78
|
+
* --guess will always prefer the longest regexp with no groups if they exist.
|
67
79
|
* Prevent delays if a NoMethodError is raise in a step definition. Define a light #inspect in World. (#374 Aslak Hellesøy)
|
68
80
|
* Restore 'features' as the default feature running path. (#412 Ben Mabey)
|
69
81
|
* --drb degrades gracefully when no drb server is running and no formatter is provided. (#410 Ben Mabey)
|
@@ -71,7 +83,7 @@ This release also fixes several bugs related to --drb (Spork) and profiles (cucu
|
|
71
83
|
* Resolved infinite loop problem when --drb was defined in a profile. (#408 Ben Mabey)
|
72
84
|
|
73
85
|
=== New Features
|
74
|
-
* Cucumber::World#table has been overloaded to work with 2D Array in addition to a table String to be parsed.
|
86
|
+
* Cucumber::World#table has been overloaded to work with 2D Array in addition to a table String to be parsed.
|
75
87
|
* New When /^I fill in the following:$/ step definition for Webrat. Useful for filling out a form with a Table. (Aslak Hellesøy)
|
76
88
|
* The object returned by element_at (Webrat::Element) has a #to_table that works for table, dl, ol and ul. (Aslak Hellesøy)
|
77
89
|
* An explanation of why failures are ok is printed when --wip is used. (Aslak Hellesøy)
|
@@ -99,7 +111,7 @@ So upgrade today and get into the habit of tagging new features with @wip (or in
|
|
99
111
|
You'll achieve better flow this way.
|
100
112
|
|
101
113
|
=== New features
|
102
|
-
* Support limiting the number of feature elements with certain tags (#353 Joseph Wilk)
|
114
|
+
* Support limiting the number of feature elements with certain tags (#353 Joseph Wilk)
|
103
115
|
* script/generate cucumber sets up 'cucumber:ok' and 'cucumber:wip' tasks and deprecates 'features'. More Kanban love. (#344 Aslak Hellesøy)
|
104
116
|
* Better JUnit formatter: feature->testsuite, scenario->testcase. Better timing and support for background and scenario outline. (Mads Buus Westmark)
|
105
117
|
* Added examples/python that uses rubypython. (Aslak Hellesøy)
|
@@ -122,8 +134,8 @@ Highlights in this release: Improved profile handling (cucumber.yml) and a fix f
|
|
122
134
|
* click_link_within(parent, link) webrat step (Joakim Kolsjö)
|
123
135
|
|
124
136
|
=== Bugfixes
|
125
|
-
* script/cucumber correctly loads the gem's binary if the plugin isn't installed.
|
126
|
-
* Cucumber hangs waiting for Ctrl+C if an Error is raised. (#374 Aslak Hellesøy)
|
137
|
+
* script/cucumber correctly loads the gem's binary if the plugin isn't installed.
|
138
|
+
* Cucumber hangs waiting for Ctrl+C if an Error is raised. (#374 Aslak Hellesøy)
|
127
139
|
|
128
140
|
== 0.3.92 2009-07-29
|
129
141
|
|
@@ -197,7 +209,7 @@ or simply another Ast::Table object. Here is a simple example:
|
|
197
209
|
expected_cukes_table.diff!(actual_table)
|
198
210
|
end
|
199
211
|
|
200
|
-
As an extra bonus we provide Webrat users with a new #table_at(selector) method that you can use to transform
|
212
|
+
As an extra bonus we provide Webrat users with a new #table_at(selector) method that you can use to transform
|
201
213
|
an HTML table into an Array of Array, so that you can easily compare the contents of your HTML table to
|
202
214
|
expected data passed to a step. Here is an example:
|
203
215
|
|
@@ -206,7 +218,7 @@ expected data passed to a step. Here is an example:
|
|
206
218
|
end
|
207
219
|
|
208
220
|
You can do the same trick to compare data from a Rails ActiveRecord table (although this is not a
|
209
|
-
recommended practice - your Then steps should compare against what users *see*, not what's in the
|
221
|
+
recommended practice - your Then steps should compare against what users *see*, not what's in the
|
210
222
|
database):
|
211
223
|
|
212
224
|
# This requires that you use the column names in the header of the plain text expected table
|
@@ -243,7 +255,7 @@ This release also has several bugfixes related to --format and Before/After hook
|
|
243
255
|
=== New Features
|
244
256
|
* I should see should support regexes (#382 John Ferlito)
|
245
257
|
* Access to scenario outline name from After hook scenario parameter (#342 Aslak Hellesøy)
|
246
|
-
* Allow multiple --tags switches to be passed
|
258
|
+
* Allow multiple --tags switches to be passed
|
247
259
|
* Load step definitions from vendored gems and plugins (#388 Mike Burns)
|
248
260
|
* New --format steps formatter. Variant of the usage formatter that lists available step definitions (Demetrius Nunes)
|
249
261
|
* Possibility to specify scenario language as part of the .feature file (#345 Aslak Hellesøy)
|
@@ -907,7 +919,7 @@ spaces removed too.
|
|
907
919
|
== 0.1.8 2008-10-18
|
908
920
|
|
909
921
|
This release extends the support for tables. PLEASE NOTE THAT TABLES ARE STILL EXPERIMENTAL.
|
910
|
-
In previous releases it has been possible to use tables to define "more examples" of a scenario in
|
922
|
+
In previous releases it has been possible to use tables to define "more examples" of a scenario in
|
911
923
|
a FIT-style column fixture kind of way. Now you can also use tables as arguments to steps.
|
912
924
|
|
913
925
|
Tables used to define more examples after a scenario must now be prefixed. In English it looks like this:
|
data/Manifest.txt
CHANGED
@@ -147,6 +147,14 @@ examples/i18n/sk/features/addition.feature
|
|
147
147
|
examples/i18n/sk/features/division.feature
|
148
148
|
examples/i18n/sk/features/step_definitons/calculator_steps.rb
|
149
149
|
examples/i18n/sk/lib/calculator.rb
|
150
|
+
examples/i18n/uz/Rakefile
|
151
|
+
examples/i18n/uz/features/addition.feature
|
152
|
+
examples/i18n/uz/features/consecutive_calculations.feature
|
153
|
+
examples/i18n/uz/features/division.feature
|
154
|
+
examples/i18n/uz/features/step_definitons/calculator_steps.rb
|
155
|
+
examples/i18n/uz/features/support/env.rb
|
156
|
+
examples/i18n/uz/features/support/world.rb
|
157
|
+
examples/i18n/uz/lib/calculator.rb
|
150
158
|
examples/i18n/zh-CN/Rakefile
|
151
159
|
examples/i18n/zh-CN/features/addition.feature
|
152
160
|
examples/i18n/zh-CN/features/step_definitons/calculator_steps.rb
|
@@ -204,6 +212,7 @@ examples/self_test/features/support/env.rb
|
|
204
212
|
examples/self_test/features/tags_sample.feature
|
205
213
|
examples/self_test/features/tons_of_cukes.feature
|
206
214
|
examples/self_test/features/undefined_multiline_args.feature
|
215
|
+
examples/self_test/list-of-features.txt
|
207
216
|
examples/sinatra/README.textile
|
208
217
|
examples/sinatra/Rakefile
|
209
218
|
examples/sinatra/app.rb
|
@@ -253,8 +262,6 @@ examples/watir/Rakefile
|
|
253
262
|
examples/watir/features/search.feature
|
254
263
|
examples/watir/features/step_definitons/search_steps.rb
|
255
264
|
examples/watir/features/support/env.rb
|
256
|
-
features/after_block_exceptions.feature
|
257
|
-
features/after_step_block_exceptions.feature
|
258
265
|
features/background.feature
|
259
266
|
features/bug_371.feature
|
260
267
|
features/cucumber_cli.feature
|
@@ -262,6 +269,9 @@ features/cucumber_cli_diff_disabled.feature
|
|
262
269
|
features/cucumber_cli_outlines.feature
|
263
270
|
features/custom_formatter.feature
|
264
271
|
features/drb_server_integration.feature
|
272
|
+
features/exception_in_after_block.feature
|
273
|
+
features/exception_in_after_step_block.feature
|
274
|
+
features/exception_in_before_block.feature
|
265
275
|
features/exclude_files.feature
|
266
276
|
features/expand.feature
|
267
277
|
features/html_formatter.feature
|
@@ -0,0 +1,10 @@
|
|
1
|
+
# language: uz
|
2
|
+
Функционал: Сонларни кушиш
|
3
|
+
Хаелда кушмаслик учун
|
4
|
+
Купчилик сонларни атомат равищда кушишни истайди
|
5
|
+
|
6
|
+
Сценарий: Икки бутун сонни кушиш
|
7
|
+
Агар 50 сонини киритсам
|
8
|
+
Ва ундан сунг 70 сонини киритсам
|
9
|
+
Агар "+" боссам
|
10
|
+
Унда жавоб 120 сони булиши керак
|
@@ -0,0 +1,17 @@
|
|
1
|
+
# language: uz
|
2
|
+
Функционал: Кетма кет хисобот
|
3
|
+
Мураккаб амалларни хисоблаш учун
|
4
|
+
Ишлатувчилар олдинги жавоблар устидан амаллар бажармокчилардыдущей операций
|
5
|
+
|
6
|
+
Тарих:
|
7
|
+
Агар 3 ва 5 сонини кушсам
|
8
|
+
|
9
|
+
Сценарий: охирги жавоб билан кушиш амали
|
10
|
+
Агар 4 сонини киритсам
|
11
|
+
Ва "+"ни боссам
|
12
|
+
Унда жавоб 12 сони булиши керак
|
13
|
+
|
14
|
+
Сценарий: охирги жавобни булиш
|
15
|
+
Агар 2 сонини киритсам
|
16
|
+
Ва "/"ни боссам
|
17
|
+
Унда жавоб 4 сони булиши керак
|
@@ -0,0 +1,17 @@
|
|
1
|
+
# language: uz
|
2
|
+
Функционал: Сонларни булиш
|
3
|
+
Булиш кийин амал булганлиги сабабли
|
4
|
+
Одамларга бу амални калькуляторда килишни имконини бериш керак
|
5
|
+
|
6
|
+
Сценарий структураси: Бутун сонли булиш
|
7
|
+
Агар ман <булинувчи> сонини киритсам
|
8
|
+
Ва унда сунг <булувчи> сонини киритсам
|
9
|
+
Агар "/"ни боссам
|
10
|
+
Унда жавоб <булинма> сони булиши керак
|
11
|
+
|
12
|
+
Мисоллар:
|
13
|
+
| булинувчи | булувчи | булинма |
|
14
|
+
| 100 | 2 | 50 |
|
15
|
+
| 28 | 7 | 4 |
|
16
|
+
| 0 | 5 | 0 |
|
17
|
+
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
Агар /(\d+) сонини киритсам/ do |сон|
|
4
|
+
calc.push сон.to_i
|
5
|
+
end
|
6
|
+
|
7
|
+
Ва /"(.*)"(.*) боссам/ do |операция, _|
|
8
|
+
calc.send операция
|
9
|
+
end
|
10
|
+
|
11
|
+
Унда /жавоб (\d+) сони булиши керак/ do |жавоб|
|
12
|
+
calc.result.should == жавоб.to_f
|
13
|
+
end
|
14
|
+
|
15
|
+
Агар /(\d+) ва (\d+) сонини кушсам/ do |кушилувчи1, кушилувчи2|
|
16
|
+
Агар %{#{кушилувчи1} сонини киритсам}
|
17
|
+
Агар %{ундан сунг #{кушилувчи2} сонини киритсам}
|
18
|
+
Агар %{"+"ни боссам}
|
19
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
class Calculator
|
4
|
+
def initialize
|
5
|
+
@stack = []
|
6
|
+
end
|
7
|
+
|
8
|
+
def push(arg)
|
9
|
+
@stack.push arg
|
10
|
+
end
|
11
|
+
|
12
|
+
def result
|
13
|
+
@stack.last
|
14
|
+
end
|
15
|
+
|
16
|
+
def +
|
17
|
+
@stack.push @stack.pop + @stack.pop
|
18
|
+
end
|
19
|
+
|
20
|
+
def /
|
21
|
+
divisor, dividend = [@stack.pop, @stack.pop] # Hm, @stack.pop(2) doesn't work
|
22
|
+
@stack.push dividend / divisor
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
features/sample.feature:12
|
@@ -127,6 +127,26 @@ Feature: Cucumber command line
|
|
127
127
|
|
128
128
|
"""
|
129
129
|
|
130
|
+
Scenario: Use @-notation to specify a file containing feature file list
|
131
|
+
When I run cucumber -q @list-of-features.txt
|
132
|
+
Then it should pass with
|
133
|
+
"""
|
134
|
+
# Feature comment
|
135
|
+
@one
|
136
|
+
Feature: Sample
|
137
|
+
|
138
|
+
# Scenario comment
|
139
|
+
@three
|
140
|
+
Scenario: Passing
|
141
|
+
Given passing
|
142
|
+
| a | b |
|
143
|
+
| c | d |
|
144
|
+
|
145
|
+
1 scenario (1 passed)
|
146
|
+
1 step (1 passed)
|
147
|
+
|
148
|
+
"""
|
149
|
+
|
130
150
|
@mri186
|
131
151
|
Scenario: Run all with progress formatter
|
132
152
|
When I run cucumber -q --format progress features/sample.feature
|
@@ -1,8 +1,8 @@
|
|
1
|
-
Feature: After Block
|
1
|
+
Feature: Exception in After Block
|
2
2
|
In order to use custom assertions at the end of each scenario
|
3
3
|
As a developer
|
4
4
|
I want exceptions raised in After blocks to be handled gracefully and reported by the formatters
|
5
|
-
|
5
|
+
|
6
6
|
Background:
|
7
7
|
Given a standard Cucumber project directory structure
|
8
8
|
And a file named "features/step_definitions/steps.rb" with:
|
@@ -11,7 +11,7 @@ Feature: After Block Exceptions
|
|
11
11
|
@naughty = true
|
12
12
|
end
|
13
13
|
|
14
|
-
Given /^this step works$/ do
|
14
|
+
Given /^this step works$/ do
|
15
15
|
end
|
16
16
|
"""
|
17
17
|
And a file named "features/support/env.rb" with:
|
@@ -37,10 +37,10 @@ Feature: After Block Exceptions
|
|
37
37
|
Given this step works
|
38
38
|
"""
|
39
39
|
When I run cucumber features
|
40
|
-
Then it should fail with
|
40
|
+
Then it should fail with
|
41
41
|
"""
|
42
42
|
Feature: Sample
|
43
|
-
|
43
|
+
|
44
44
|
Scenario: Naughty Step # features/naughty_step_in_scenario.feature:3
|
45
45
|
Given this step does something naughty # features/step_definitions/steps.rb:1
|
46
46
|
This scenario has been very very naughty (NaughtyScenarioException)
|
@@ -48,13 +48,13 @@ Feature: After Block Exceptions
|
|
48
48
|
|
49
49
|
Scenario: Success # features/naughty_step_in_scenario.feature:6
|
50
50
|
Given this step works # features/step_definitions/steps.rb:5
|
51
|
-
|
51
|
+
|
52
52
|
Failing Scenarios:
|
53
53
|
cucumber features/naughty_step_in_scenario.feature:3 # Scenario: Naughty Step
|
54
|
-
|
54
|
+
|
55
55
|
2 scenarios (1 failed, 1 passed)
|
56
56
|
2 steps (2 passed)
|
57
|
-
|
57
|
+
|
58
58
|
"""
|
59
59
|
|
60
60
|
@mri186
|
@@ -65,7 +65,7 @@ Feature: After Block Exceptions
|
|
65
65
|
|
66
66
|
Scenario Outline: Naughty Step
|
67
67
|
Given this step <Might Work>
|
68
|
-
|
68
|
+
|
69
69
|
Examples:
|
70
70
|
| Might Work |
|
71
71
|
| works |
|
@@ -74,16 +74,16 @@ Feature: After Block Exceptions
|
|
74
74
|
|
75
75
|
Scenario: Success
|
76
76
|
Given this step works
|
77
|
-
|
77
|
+
|
78
78
|
"""
|
79
79
|
When I run cucumber features
|
80
|
-
Then it should fail with
|
80
|
+
Then it should fail with
|
81
81
|
"""
|
82
82
|
Feature: Sample
|
83
|
-
|
83
|
+
|
84
84
|
Scenario Outline: Naughty Step # features/naughty_step_in_scenario_outline.feature:3
|
85
85
|
Given this step <Might Work> # features/step_definitions/steps.rb:5
|
86
|
-
|
86
|
+
|
87
87
|
Examples:
|
88
88
|
| Might Work |
|
89
89
|
| works |
|
@@ -91,12 +91,12 @@ Feature: After Block Exceptions
|
|
91
91
|
This scenario has been very very naughty (NaughtyScenarioException)
|
92
92
|
./features/support/env.rb:4:in `After'
|
93
93
|
| works |
|
94
|
-
|
94
|
+
|
95
95
|
Scenario: Success # features/naughty_step_in_scenario_outline.feature:12
|
96
96
|
Given this step works # features/step_definitions/steps.rb:5
|
97
|
-
|
97
|
+
|
98
98
|
4 scenarios (1 failed, 3 passed)
|
99
99
|
4 steps (4 passed)
|
100
|
-
|
100
|
+
|
101
101
|
"""
|
102
|
-
|
102
|
+
|
@@ -1,8 +1,8 @@
|
|
1
|
-
Feature: AfterStep Block
|
1
|
+
Feature: Exception in AfterStep Block
|
2
2
|
In order to use custom assertions at the end of each step
|
3
3
|
As a developer
|
4
4
|
I want exceptions raised in AfterStep blocks to be handled gracefully and reported by the formatters
|
5
|
-
|
5
|
+
|
6
6
|
Background:
|
7
7
|
Given a standard Cucumber project directory structure
|
8
8
|
And a file named "features/step_definitions/steps.rb" with:
|
@@ -11,7 +11,7 @@ Feature: AfterStep Block Exceptions
|
|
11
11
|
@naughty = true
|
12
12
|
end
|
13
13
|
|
14
|
-
Given /^this step works$/ do
|
14
|
+
Given /^this step works$/ do
|
15
15
|
end
|
16
16
|
"""
|
17
17
|
And a file named "features/support/env.rb" with:
|
@@ -37,10 +37,10 @@ Feature: AfterStep Block Exceptions
|
|
37
37
|
Given this step works
|
38
38
|
"""
|
39
39
|
When I run cucumber features
|
40
|
-
Then it should fail with
|
40
|
+
Then it should fail with
|
41
41
|
"""
|
42
42
|
Feature: Sample
|
43
|
-
|
43
|
+
|
44
44
|
Scenario: Naughty Step # features/naughty_step_in_scenario.feature:3
|
45
45
|
Given this step does something naughty # features/step_definitions/steps.rb:1
|
46
46
|
This step has been very very naughty (NaughtyStepException)
|
@@ -49,13 +49,13 @@ Feature: AfterStep Block Exceptions
|
|
49
49
|
|
50
50
|
Scenario: Success # features/naughty_step_in_scenario.feature:6
|
51
51
|
Given this step works # features/step_definitions/steps.rb:5
|
52
|
-
|
52
|
+
|
53
53
|
Failing Scenarios:
|
54
54
|
cucumber features/naughty_step_in_scenario.feature:3 # Scenario: Naughty Step
|
55
|
-
|
55
|
+
|
56
56
|
2 scenarios (1 failed, 1 passed)
|
57
57
|
2 steps (1 failed, 1 passed)
|
58
|
-
|
58
|
+
|
59
59
|
"""
|
60
60
|
|
61
61
|
@mri186
|
@@ -78,7 +78,7 @@ Feature: AfterStep Block Exceptions
|
|
78
78
|
|
79
79
|
"""
|
80
80
|
When I run cucumber features
|
81
|
-
Then it should fail with
|
81
|
+
Then it should fail with
|
82
82
|
"""
|
83
83
|
Feature: Sample
|
84
84
|
|
@@ -0,0 +1,47 @@
|
|
1
|
+
Feature: Exception in Before Block
|
2
|
+
In order to know with confidence that my before blocks have run OK
|
3
|
+
As a developer
|
4
|
+
I want exceptions raised in Before blocks to be handled gracefully and reported by the formatters
|
5
|
+
|
6
|
+
Background:
|
7
|
+
Given a standard Cucumber project directory structure
|
8
|
+
And a file named "features/step_definitions/steps.rb" with:
|
9
|
+
"""
|
10
|
+
Given /^this step works$/ do
|
11
|
+
end
|
12
|
+
"""
|
13
|
+
And a file named "features/support/env.rb" with:
|
14
|
+
"""
|
15
|
+
class SomeSetupException < Exception; end
|
16
|
+
class BadStepException < Exception; end
|
17
|
+
Before do
|
18
|
+
raise SomeSetupException.new("I cannot even start this scenario")
|
19
|
+
end
|
20
|
+
"""
|
21
|
+
|
22
|
+
@mri186
|
23
|
+
Scenario: Handle Exception in standard scenario step and carry on
|
24
|
+
Given a file named "features/naughty_step_in_scenario.feature" with:
|
25
|
+
"""
|
26
|
+
Feature: Sample
|
27
|
+
|
28
|
+
Scenario: Run a good step
|
29
|
+
Given this step works
|
30
|
+
"""
|
31
|
+
When I run cucumber features
|
32
|
+
Then it should fail with
|
33
|
+
"""
|
34
|
+
Feature: Sample
|
35
|
+
|
36
|
+
Scenario: Run a good step # features/naughty_step_in_scenario.feature:3
|
37
|
+
I cannot even start this scenario (SomeSetupException)
|
38
|
+
./features/support/env.rb:4:in `Before'
|
39
|
+
Given this step works # features/step_definitions/steps.rb:1
|
40
|
+
|
41
|
+
Failing Scenarios:
|
42
|
+
cucumber features/naughty_step_in_scenario.feature:3 # Scenario: Run a good step
|
43
|
+
|
44
|
+
1 scenario (1 failed)
|
45
|
+
1 step (1 skipped)
|
46
|
+
|
47
|
+
"""
|
@@ -7,33 +7,45 @@ module Cucumber
|
|
7
7
|
|
8
8
|
attr_reader :name, :line
|
9
9
|
|
10
|
+
class EmptyBackground
|
11
|
+
def failed?
|
12
|
+
false
|
13
|
+
end
|
14
|
+
|
15
|
+
def feature_elements
|
16
|
+
[]
|
17
|
+
end
|
18
|
+
|
19
|
+
def step_collection(step_invocations)
|
20
|
+
StepCollection.new(step_invocations)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
10
24
|
def initialize(background, comment, tags, line, keyword, name, steps)
|
11
|
-
@background
|
25
|
+
@background = background || EmptyBackground.new
|
26
|
+
@comment, @tags, @line, @keyword, @name = comment, tags, line, keyword, name
|
12
27
|
attach_steps(steps)
|
13
28
|
|
14
29
|
step_invocations = steps.map{|step| step.step_invocation}
|
15
|
-
|
16
|
-
|
17
|
-
@background.feature_elements << self
|
18
|
-
else
|
19
|
-
@steps = StepCollection.new(step_invocations)
|
20
|
-
end
|
30
|
+
@steps = @background.step_collection(step_invocations)
|
31
|
+
@background.feature_elements << self
|
21
32
|
end
|
22
33
|
|
23
34
|
def accept(visitor)
|
24
35
|
return if $cucumber_interrupted
|
25
|
-
|
26
|
-
visitor
|
27
|
-
|
36
|
+
|
37
|
+
with_visitor(visitor) do
|
38
|
+
visitor.visit_comment(@comment) unless @comment.empty?
|
39
|
+
visitor.visit_tags(@tags)
|
40
|
+
visitor.visit_scenario_name(@keyword, @name, file_colon_line(@line), source_indent(first_line_length))
|
28
41
|
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
42
|
+
skip_invoke! if @background.failed?
|
43
|
+
visitor.step_mother.before_and_after(self, skip_hooks?) do
|
44
|
+
skip_invoke! if failed?
|
45
|
+
visitor.visit_steps(@steps)
|
46
|
+
end
|
47
|
+
@executed = true
|
34
48
|
end
|
35
|
-
visitor.visit_exception(@exception, :failed) if @exception
|
36
|
-
@executed = true
|
37
49
|
end
|
38
50
|
|
39
51
|
# Returns true if one or more steps failed
|
@@ -43,6 +55,7 @@ module Cucumber
|
|
43
55
|
|
44
56
|
def fail!(exception)
|
45
57
|
@exception = exception
|
58
|
+
@current_visitor.visit_exception(@exception, :failed)
|
46
59
|
end
|
47
60
|
|
48
61
|
# Returns true if all steps passed
|
@@ -78,7 +91,18 @@ module Cucumber
|
|
78
91
|
sexp += steps if steps.any?
|
79
92
|
sexp
|
80
93
|
end
|
81
|
-
|
94
|
+
|
95
|
+
private
|
96
|
+
|
97
|
+
def with_visitor(visitor)
|
98
|
+
@current_visitor = visitor
|
99
|
+
yield
|
100
|
+
@current_visitor = nil
|
101
|
+
end
|
102
|
+
|
103
|
+
def skip_hooks?
|
104
|
+
@background.failed? || @executed
|
105
|
+
end
|
82
106
|
end
|
83
107
|
end
|
84
108
|
end
|
@@ -89,12 +89,18 @@ module Cucumber
|
|
89
89
|
BACKTRACE_FILTER_PATTERNS.detect { |p| line =~ p }
|
90
90
|
end
|
91
91
|
|
92
|
-
if Cucumber::JRUBY
|
93
|
-
#
|
94
|
-
#
|
95
|
-
|
96
|
-
|
97
|
-
|
92
|
+
if Cucumber::JRUBY && e.class.name == 'NativeException'
|
93
|
+
# JRuby's NativeException ignores #set_backtrace.
|
94
|
+
# We're fixing it.
|
95
|
+
e.instance_eval do
|
96
|
+
def set_backtrace(backtrace)
|
97
|
+
@backtrace = backtrace
|
98
|
+
end
|
99
|
+
|
100
|
+
def backtrace
|
101
|
+
@backtrace
|
102
|
+
end
|
103
|
+
end
|
98
104
|
end
|
99
105
|
e.set_backtrace(filtered)
|
100
106
|
e
|
@@ -1,3 +1,4 @@
|
|
1
|
+
require 'logger'
|
1
2
|
require 'cucumber/cli/options'
|
2
3
|
require 'cucumber/constantize'
|
3
4
|
|
@@ -123,7 +124,14 @@ module Cucumber
|
|
123
124
|
potential_feature_files = paths.map do |path|
|
124
125
|
path = path.gsub(/\\/, '/') # In case we're on windows. Globs don't work with backslashes.
|
125
126
|
path = path.chomp('/')
|
126
|
-
File.directory?(path)
|
127
|
+
if File.directory?(path)
|
128
|
+
Dir["#{path}/**/*.feature"]
|
129
|
+
elsif path[0..0] == '@' and # @listfile.txt
|
130
|
+
File.file?(path[1..-1]) # listfile.txt is a file
|
131
|
+
IO.read(path[1..-1]).split
|
132
|
+
else
|
133
|
+
path
|
134
|
+
end
|
127
135
|
end.flatten.uniq
|
128
136
|
remove_excluded_files_from(potential_feature_files)
|
129
137
|
potential_feature_files
|
@@ -133,8 +141,22 @@ module Cucumber
|
|
133
141
|
paths.map { |f| File.directory?(f) ? f : File.dirname(f) }.uniq
|
134
142
|
end
|
135
143
|
|
144
|
+
def log
|
145
|
+
logger = Logger.new(@out_stream)
|
146
|
+
logger.formatter = LogFormatter.new
|
147
|
+
logger.level = Logger::INFO
|
148
|
+
logger.level = Logger::DEBUG if self.verbose?
|
149
|
+
logger
|
150
|
+
end
|
151
|
+
|
136
152
|
private
|
137
153
|
|
154
|
+
class LogFormatter < ::Logger::Formatter
|
155
|
+
def call(severity, time, progname, msg)
|
156
|
+
msg
|
157
|
+
end
|
158
|
+
end
|
159
|
+
|
138
160
|
def paths
|
139
161
|
@options[:paths].empty? ? ['features'] : @options[:paths]
|
140
162
|
end
|
data/lib/cucumber/cli/main.rb
CHANGED
@@ -14,12 +14,6 @@ module Cucumber
|
|
14
14
|
class Main
|
15
15
|
FAILURE = 1
|
16
16
|
|
17
|
-
class LogFormatter < ::Logger::Formatter
|
18
|
-
def call(severity, time, progname, msg)
|
19
|
-
msg
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
17
|
class << self
|
24
18
|
def step_mother
|
25
19
|
@step_mother ||= StepMother.new
|
@@ -46,12 +40,7 @@ module Cucumber
|
|
46
40
|
end
|
47
41
|
end
|
48
42
|
step_mother.options = configuration.options
|
49
|
-
|
50
|
-
logger = Logger.new(@out_stream)
|
51
|
-
logger.formatter = LogFormatter.new
|
52
|
-
logger.level = Logger::INFO
|
53
|
-
logger.level = Logger::DEBUG if configuration.verbose?
|
54
|
-
step_mother.log = logger
|
43
|
+
step_mother.log = configuration.log
|
55
44
|
|
56
45
|
step_mother.load_code_files(configuration.support_to_load)
|
57
46
|
step_mother.after_configuration(configuration)
|
@@ -97,10 +86,6 @@ module Cucumber
|
|
97
86
|
@configuration
|
98
87
|
end
|
99
88
|
|
100
|
-
def verbose_log(string)
|
101
|
-
@out_stream.puts(string) if configuration.verbose?
|
102
|
-
end
|
103
|
-
|
104
89
|
private
|
105
90
|
|
106
91
|
def enable_diffing
|
data/lib/cucumber/cli/options.rb
CHANGED
@@ -17,7 +17,9 @@ module Cucumber
|
|
17
17
|
max = BUILTIN_FORMATS.keys.map{|s| s.length}.max
|
18
18
|
FORMAT_HELP = (BUILTIN_FORMATS.keys.sort.map do |key|
|
19
19
|
" #{key}#{' ' * (max - key.length)} : #{BUILTIN_FORMATS[key][1]}"
|
20
|
-
end) + ["
|
20
|
+
end) + ["Use --format rerun --out features.txt to rerun failing",
|
21
|
+
"failing features in a new run with cucumber @features.txt.",
|
22
|
+
"FORMAT can also be the fully qualified class name of",
|
21
23
|
"your own custom formatter. If the class isn't loaded,",
|
22
24
|
"Cucumber will attempt to require a file with a relative",
|
23
25
|
"file name that is the underscore name of the class name.",
|
@@ -87,6 +89,7 @@ module Cucumber
|
|
87
89
|
opts.banner = ["Usage: cucumber [options] [ [FILE|DIR|URL][:LINE[:LINE]*] ]+", "",
|
88
90
|
"Examples:",
|
89
91
|
"cucumber examples/i18n/en/features",
|
92
|
+
"cucumber @features.txt (See --format rerun)",
|
90
93
|
"cucumber --language it examples/i18n/it/features/somma.feature:6:98:113",
|
91
94
|
"cucumber -s -i http://rubyurl.com/eeCl", "", "",
|
92
95
|
].join("\n")
|
data/lib/cucumber/languages.yml
CHANGED
@@ -500,6 +500,20 @@
|
|
500
500
|
and: A
|
501
501
|
but: Ale
|
502
502
|
space_after_keyword: true
|
503
|
+
"uz":
|
504
|
+
name: Uzbek
|
505
|
+
native: Узбекча
|
506
|
+
encoding: UTF-8
|
507
|
+
feature: Функционал
|
508
|
+
background: Тарих
|
509
|
+
scenario: Сценарий
|
510
|
+
scenario_outline: Сценарий структураси
|
511
|
+
examples: Мисоллар
|
512
|
+
given: Агар
|
513
|
+
when: Агар
|
514
|
+
then: Унда
|
515
|
+
and: Ва
|
516
|
+
but: Лекин|Бирок|Аммо
|
503
517
|
"vi":
|
504
518
|
name: Vietnamese
|
505
519
|
native: Tiếng Việt
|
data/lib/cucumber/step_mother.rb
CHANGED
data/lib/cucumber/version.rb
CHANGED
@@ -109,6 +109,15 @@ module Cucumber
|
|
109
109
|
end
|
110
110
|
})
|
111
111
|
end
|
112
|
+
|
113
|
+
it "should be helpful with tables" do
|
114
|
+
@rb.snippet_text('Given', 'A "first" arg', Cucumber::Ast::Table).should == unindented(%{
|
115
|
+
Given /^A "([^\\"]*)" arg$/ do |arg1, table|
|
116
|
+
# table is a Cucumber::Ast::Table
|
117
|
+
pending
|
118
|
+
end
|
119
|
+
})
|
120
|
+
end
|
112
121
|
end
|
113
122
|
end
|
114
123
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cucumber
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.100
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- "Aslak Helles\xC3\xB8y"
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-09-
|
12
|
+
date: 2009-09-09 00:00:00 +02:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -74,6 +74,7 @@ extra_rdoc_files:
|
|
74
74
|
- License.txt
|
75
75
|
- Manifest.txt
|
76
76
|
- README.txt
|
77
|
+
- examples/self_test/list-of-features.txt
|
77
78
|
files:
|
78
79
|
- History.txt
|
79
80
|
- License.txt
|
@@ -224,6 +225,14 @@ files:
|
|
224
225
|
- examples/i18n/sk/features/division.feature
|
225
226
|
- examples/i18n/sk/features/step_definitons/calculator_steps.rb
|
226
227
|
- examples/i18n/sk/lib/calculator.rb
|
228
|
+
- examples/i18n/uz/Rakefile
|
229
|
+
- examples/i18n/uz/features/addition.feature
|
230
|
+
- examples/i18n/uz/features/consecutive_calculations.feature
|
231
|
+
- examples/i18n/uz/features/division.feature
|
232
|
+
- examples/i18n/uz/features/step_definitons/calculator_steps.rb
|
233
|
+
- examples/i18n/uz/features/support/env.rb
|
234
|
+
- examples/i18n/uz/features/support/world.rb
|
235
|
+
- examples/i18n/uz/lib/calculator.rb
|
227
236
|
- examples/i18n/zh-CN/Rakefile
|
228
237
|
- examples/i18n/zh-CN/features/addition.feature
|
229
238
|
- examples/i18n/zh-CN/features/step_definitons/calculator_steps.rb
|
@@ -281,6 +290,7 @@ files:
|
|
281
290
|
- examples/self_test/features/tags_sample.feature
|
282
291
|
- examples/self_test/features/tons_of_cukes.feature
|
283
292
|
- examples/self_test/features/undefined_multiline_args.feature
|
293
|
+
- examples/self_test/list-of-features.txt
|
284
294
|
- examples/sinatra/README.textile
|
285
295
|
- examples/sinatra/Rakefile
|
286
296
|
- examples/sinatra/app.rb
|
@@ -330,8 +340,6 @@ files:
|
|
330
340
|
- examples/watir/features/search.feature
|
331
341
|
- examples/watir/features/step_definitons/search_steps.rb
|
332
342
|
- examples/watir/features/support/env.rb
|
333
|
-
- features/after_block_exceptions.feature
|
334
|
-
- features/after_step_block_exceptions.feature
|
335
343
|
- features/background.feature
|
336
344
|
- features/bug_371.feature
|
337
345
|
- features/cucumber_cli.feature
|
@@ -339,6 +347,9 @@ files:
|
|
339
347
|
- features/cucumber_cli_outlines.feature
|
340
348
|
- features/custom_formatter.feature
|
341
349
|
- features/drb_server_integration.feature
|
350
|
+
- features/exception_in_after_block.feature
|
351
|
+
- features/exception_in_after_step_block.feature
|
352
|
+
- features/exception_in_before_block.feature
|
342
353
|
- features/exclude_files.feature
|
343
354
|
- features/expand.feature
|
344
355
|
- features/html_formatter.feature
|