cucumber 0.8.6 → 0.8.7
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/.rspec +1 -1
- data/Caliper.yml +4 -0
- data/History.txt +1557 -0
- data/LICENSE +1 -1
- data/README.rdoc +26 -0
- data/Rakefile +51 -5
- data/VERSION.yml +5 -0
- data/bin/cucumber +1 -7
- data/cucumber.gemspec +77 -3
- data/examples/i18n/ar/features/step_definitons/calculator_steps.rb +1 -1
- data/examples/i18n/he/features/step_definitons/calculator_steps.rb +1 -1
- data/examples/i18n/ro/features/step_definitons/calculator_steps.rb +7 -4
- data/examples/i18n/ro/features/suma.feature +11 -0
- data/examples/i18n/ru/features/division.feature +2 -2
- data/examples/i18n/tr/features/step_definitons/hesap_makinesi_adimlari.rb +3 -3
- data/examples/sinatra/features/support/env.rb +5 -2
- data/examples/v8/features/fibonacci.feature +1 -1
- data/examples/watir/features/step_definitions/search_steps.rb +1 -1
- data/features/announce.feature +164 -0
- data/features/around_hooks.feature +232 -0
- data/features/background.feature +95 -284
- data/features/bug_371.feature +32 -0
- data/features/bug_464.feature +16 -0
- data/features/bug_475.feature +42 -0
- data/features/bug_585_tab_indentation.feature +22 -0
- data/features/bug_600.feature +67 -0
- data/features/call_steps_from_stepdefs.feature +154 -0
- data/features/cucumber_cli.feature +591 -0
- data/features/cucumber_cli_outlines.feature +117 -0
- data/features/custom_formatter.feature +73 -3
- data/features/default_snippets.feature +42 -0
- data/features/diffing.feature +25 -0
- data/features/drb_server_integration.feature +174 -0
- data/features/exception_in_after_block.feature +127 -0
- data/features/exception_in_after_step_block.feature +104 -0
- data/features/exception_in_before_block.feature +98 -0
- data/features/exclude_files.feature +20 -0
- data/features/expand.feature +60 -0
- data/features/html_formatter.feature +8 -0
- data/features/html_formatter/a.html +582 -0
- data/features/json_formatter.feature +245 -160
- data/features/junit_formatter.feature +88 -0
- data/features/language_from_header.feature +30 -0
- data/features/language_help.feature +78 -0
- data/features/listener_debugger_formatter.feature +42 -0
- data/features/multiline_names.feature +44 -0
- data/features/negative_tagged_hooks.feature +60 -0
- data/features/post_configuration_hook.feature +37 -0
- data/features/profiles.feature +126 -0
- data/features/rake_task.feature +152 -0
- data/features/report_called_undefined_steps.feature +34 -0
- data/features/rerun_formatter.feature +45 -0
- data/features/simplest.feature +11 -0
- data/features/snippet.feature +23 -0
- data/features/snippets_when_using_star_keyword.feature +36 -0
- data/features/step_definitions/cucumber_steps.rb +153 -7
- data/features/step_definitions/extra_steps.rb +2 -0
- data/features/step_definitions/simplest_steps.rb +3 -0
- data/features/step_definitions/wire_steps.rb +32 -0
- data/features/support/env.rb +140 -18
- data/features/support/env.rb.simplest +7 -0
- data/features/support/fake_wire_server.rb +77 -0
- data/features/table_diffing.feature +45 -0
- data/features/table_mapping.feature +34 -0
- data/features/tag_logic.feature +258 -0
- data/features/transform.feature +245 -0
- data/features/unicode_table.feature +35 -0
- data/features/usage_and_stepdefs_formatter.feature +169 -0
- data/features/wire_protocol.feature +332 -0
- data/features/wire_protocol_table_diffing.feature +119 -0
- data/features/wire_protocol_tags.feature +87 -0
- data/features/wire_protocol_timeouts.feature +63 -0
- data/features/work_in_progress.feature +156 -0
- data/fixtures/json/features/pystring.feature +8 -0
- data/fixtures/junit/features/pending.feature +1 -3
- data/fixtures/self_test/features/background/background_tagged_before_on_outline.feature +12 -0
- data/fixtures/self_test/features/background/background_with_name.feature +7 -0
- data/fixtures/self_test/features/background/failing_background.feature +12 -0
- data/fixtures/self_test/features/background/failing_background_after_success.feature +11 -0
- data/fixtures/self_test/features/background/multiline_args_background.feature +32 -0
- data/fixtures/self_test/features/background/passing_background.feature +10 -0
- data/fixtures/self_test/features/background/pending_background.feature +10 -0
- data/fixtures/self_test/features/background/scenario_outline_failing_background.feature +16 -0
- data/fixtures/self_test/features/background/scenario_outline_passing_background.feature +16 -0
- data/fixtures/self_test/features/support/env.rb +0 -8
- data/fixtures/tickets/features.html +1 -1
- data/gem_tasks/examples.rake +1 -1
- data/gem_tasks/features.rake +14 -0
- data/gem_tasks/sdoc.rake +12 -0
- data/lib/cucumber.rb +0 -12
- data/lib/cucumber/ast.rb +1 -1
- data/lib/cucumber/ast/background.rb +5 -21
- data/lib/cucumber/ast/examples.rb +4 -12
- data/lib/cucumber/ast/feature.rb +5 -13
- data/lib/cucumber/ast/feature_element.rb +4 -9
- data/lib/cucumber/ast/outline_table.rb +4 -4
- data/lib/cucumber/ast/py_string.rb +80 -0
- data/lib/cucumber/ast/scenario.rb +5 -7
- data/lib/cucumber/ast/scenario_outline.rb +15 -23
- data/lib/cucumber/ast/step.rb +0 -5
- data/lib/cucumber/ast/step_invocation.rb +15 -21
- data/lib/cucumber/ast/table.rb +8 -14
- data/lib/cucumber/ast/tree_walker.rb +48 -10
- data/lib/cucumber/cli/configuration.rb +8 -33
- data/lib/cucumber/cli/main.rb +35 -20
- data/lib/cucumber/cli/options.rb +7 -8
- data/lib/cucumber/cli/profile_loader.rb +0 -2
- data/lib/cucumber/core_ext/proc.rb +1 -2
- data/lib/cucumber/feature_file.rb +15 -47
- data/lib/cucumber/formatter/ansicolor.rb +5 -3
- data/lib/cucumber/formatter/color_io.rb +23 -0
- data/lib/cucumber/formatter/console.rb +23 -27
- data/lib/cucumber/formatter/cucumber.css +17 -34
- data/lib/cucumber/formatter/cucumber.sass +182 -173
- data/lib/cucumber/formatter/html.rb +11 -46
- data/lib/cucumber/formatter/io.rb +4 -2
- data/lib/cucumber/formatter/json.rb +152 -15
- data/lib/cucumber/formatter/json_pretty.rb +6 -5
- data/lib/cucumber/formatter/junit.rb +22 -28
- data/lib/cucumber/formatter/pdf.rb +6 -6
- data/lib/cucumber/formatter/pretty.rb +5 -5
- data/lib/cucumber/formatter/rerun.rb +11 -22
- data/lib/cucumber/formatter/tag_cloud.rb +35 -0
- data/lib/cucumber/formatter/unicode.rb +20 -41
- data/lib/cucumber/js_support/js_dsl.js +4 -4
- data/lib/cucumber/js_support/js_language.rb +5 -9
- data/lib/cucumber/js_support/js_snippets.rb +2 -2
- data/lib/cucumber/language_support.rb +2 -2
- data/lib/cucumber/parser/gherkin_builder.rb +30 -35
- data/lib/cucumber/platform.rb +8 -8
- data/lib/cucumber/py_support/py_language.rb +2 -2
- data/lib/cucumber/rake/task.rb +31 -74
- data/lib/cucumber/rb_support/rb_dsl.rb +0 -1
- data/lib/cucumber/rb_support/rb_language.rb +8 -10
- data/lib/cucumber/rb_support/rb_step_definition.rb +0 -8
- data/lib/cucumber/rb_support/rb_transform.rb +0 -17
- data/lib/cucumber/rb_support/rb_world.rb +18 -26
- data/lib/cucumber/rspec/doubles.rb +3 -3
- data/lib/cucumber/step_match.rb +2 -6
- data/lib/cucumber/step_mother.rb +427 -6
- data/lib/cucumber/wire_support/configuration.rb +1 -4
- data/lib/cucumber/wire_support/wire_language.rb +10 -3
- data/spec/cucumber/ast/background_spec.rb +6 -68
- data/spec/cucumber/ast/feature_factory.rb +4 -5
- data/spec/cucumber/ast/feature_spec.rb +4 -4
- data/spec/cucumber/ast/outline_table_spec.rb +1 -1
- data/spec/cucumber/ast/py_string_spec.rb +40 -0
- data/spec/cucumber/ast/scenario_outline_spec.rb +11 -15
- data/spec/cucumber/ast/scenario_spec.rb +4 -4
- data/spec/cucumber/ast/step_spec.rb +3 -3
- data/spec/cucumber/ast/table_spec.rb +2 -38
- data/spec/cucumber/ast/tree_walker_spec.rb +2 -2
- data/spec/cucumber/broadcaster_spec.rb +1 -1
- data/spec/cucumber/cli/configuration_spec.rb +6 -32
- data/spec/cucumber/cli/drb_client_spec.rb +3 -2
- data/spec/cucumber/cli/main_spec.rb +43 -43
- data/spec/cucumber/cli/options_spec.rb +1 -28
- data/spec/cucumber/cli/profile_loader_spec.rb +1 -1
- data/spec/cucumber/core_ext/proc_spec.rb +1 -1
- data/spec/cucumber/formatter/ansicolor_spec.rb +1 -1
- data/spec/cucumber/formatter/color_io_spec.rb +29 -0
- data/spec/cucumber/formatter/duration_spec.rb +1 -1
- data/spec/cucumber/formatter/html_spec.rb +5 -3
- data/spec/cucumber/formatter/junit_spec.rb +2 -16
- data/spec/cucumber/formatter/progress_spec.rb +1 -1
- data/spec/cucumber/formatter/spec_helper.rb +12 -11
- data/spec/cucumber/rb_support/rb_language_spec.rb +28 -241
- data/spec/cucumber/rb_support/rb_step_definition_spec.rb +28 -33
- data/spec/cucumber/rb_support/regexp_argument_matcher_spec.rb +1 -1
- data/spec/cucumber/step_match_spec.rb +9 -11
- data/spec/cucumber/step_mother_spec.rb +302 -0
- data/spec/cucumber/wire_support/configuration_spec.rb +1 -1
- data/spec/cucumber/wire_support/connection_spec.rb +1 -1
- data/spec/cucumber/wire_support/wire_exception_spec.rb +1 -1
- data/spec/cucumber/wire_support/wire_language_spec.rb +1 -1
- data/spec/cucumber/wire_support/wire_packet_spec.rb +1 -1
- data/spec/cucumber/wire_support/wire_step_definition_spec.rb +1 -1
- data/spec/cucumber/world/pending_spec.rb +2 -2
- data/spec/spec_helper.rb +20 -13
- metadata +78 -4
|
@@ -1,282 +1,69 @@
|
|
|
1
|
-
require 'spec_helper'
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
|
|
2
|
+
|
|
2
3
|
require 'cucumber/step_mother'
|
|
3
4
|
require 'cucumber/rb_support/rb_language'
|
|
4
5
|
|
|
5
6
|
module Cucumber
|
|
6
7
|
module RbSupport
|
|
7
8
|
describe RbStepDefinition do
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
Cucumber::Runtime::SupportCode.new(user_interface, {})
|
|
12
|
-
end
|
|
13
|
-
let(:dsl) do
|
|
14
|
-
rb
|
|
15
|
-
Object.new.extend(RbSupport::RbDsl)
|
|
9
|
+
before do
|
|
10
|
+
@step_mother = Cucumber::StepMother.new
|
|
11
|
+
@rb = @step_mother.load_programming_language('rb')
|
|
16
12
|
end
|
|
17
13
|
|
|
18
14
|
def unindented(s)
|
|
19
15
|
s.split("\n")[1..-2].join("\n").indent(-10)
|
|
20
16
|
end
|
|
21
|
-
|
|
22
|
-
describe "snippets" do
|
|
23
17
|
|
|
24
|
-
|
|
25
|
-
|
|
18
|
+
it "should recognise numbers in name and make according regexp" do
|
|
19
|
+
@rb.snippet_text('Given', 'Cloud 9 yeah', nil).should == unindented(%{
|
|
26
20
|
Given /^Cloud (\\d+) yeah$/ do |arg1|
|
|
27
21
|
pending # express the regexp above with the code you wish you had
|
|
28
22
|
end
|
|
29
|
-
|
|
30
|
-
|
|
23
|
+
})
|
|
24
|
+
end
|
|
31
25
|
|
|
32
|
-
|
|
33
|
-
|
|
26
|
+
it "should recognise a mix of ints, strings and why not a table too" do
|
|
27
|
+
@rb.snippet_text('Given', 'I have 9 "awesome" cukes in 37 "boxes"', Cucumber::Ast::Table).should == unindented(%{
|
|
34
28
|
Given /^I have (\\d+) "([^"]*)" cukes in (\\d+) "([^"]*)"$/ do |arg1, arg2, arg3, arg4, table|
|
|
35
29
|
# table is a Cucumber::Ast::Table
|
|
36
30
|
pending # express the regexp above with the code you wish you had
|
|
37
31
|
end
|
|
38
|
-
|
|
39
|
-
|
|
32
|
+
})
|
|
33
|
+
end
|
|
40
34
|
|
|
41
|
-
|
|
42
|
-
|
|
35
|
+
it "should recognise quotes in name and make according regexp" do
|
|
36
|
+
@rb.snippet_text('Given', 'A "first" arg', nil).should == unindented(%{
|
|
43
37
|
Given /^A "([^"]*)" arg$/ do |arg1|
|
|
44
38
|
pending # express the regexp above with the code you wish you had
|
|
45
39
|
end
|
|
46
|
-
|
|
47
|
-
|
|
40
|
+
})
|
|
41
|
+
end
|
|
48
42
|
|
|
49
|
-
|
|
50
|
-
|
|
43
|
+
it "should recognise several quoted words in name and make according regexp and args" do
|
|
44
|
+
@rb.snippet_text('Given', 'A "first" and "second" arg', nil).should == unindented(%{
|
|
51
45
|
Given /^A "([^"]*)" and "([^"]*)" arg$/ do |arg1, arg2|
|
|
52
46
|
pending # express the regexp above with the code you wish you had
|
|
53
47
|
end
|
|
54
|
-
|
|
55
|
-
|
|
48
|
+
})
|
|
49
|
+
end
|
|
56
50
|
|
|
57
|
-
|
|
58
|
-
|
|
51
|
+
it "should not use quote group when there are no quotes" do
|
|
52
|
+
@rb.snippet_text('Given', 'A first arg', nil).should == unindented(%{
|
|
59
53
|
Given /^A first arg$/ do
|
|
60
54
|
pending # express the regexp above with the code you wish you had
|
|
61
55
|
end
|
|
62
|
-
|
|
63
|
-
|
|
56
|
+
})
|
|
57
|
+
end
|
|
64
58
|
|
|
65
|
-
|
|
66
|
-
|
|
59
|
+
it "should be helpful with tables" do
|
|
60
|
+
@rb.snippet_text('Given', 'A "first" arg', Cucumber::Ast::Table).should == unindented(%{
|
|
67
61
|
Given /^A "([^"]*)" arg$/ do |arg1, table|
|
|
68
62
|
# table is a Cucumber::Ast::Table
|
|
69
63
|
pending # express the regexp above with the code you wish you had
|
|
70
64
|
end
|
|
71
|
-
|
|
72
|
-
end
|
|
73
|
-
|
|
74
|
-
end
|
|
75
|
-
|
|
76
|
-
describe "#load_code_file" do
|
|
77
|
-
after do
|
|
78
|
-
FileUtils.rm_rf('tmp.rb')
|
|
79
|
-
end
|
|
80
|
-
|
|
81
|
-
def a_file_called(name)
|
|
82
|
-
File.open('tmp.rb', 'w') do |f|
|
|
83
|
-
f.puts yield
|
|
84
|
-
end
|
|
85
|
-
end
|
|
86
|
-
|
|
87
|
-
it "re-loads the file when called multiple times" do
|
|
88
|
-
a_file_called('tmp.rb') do
|
|
89
|
-
"$foo = 1"
|
|
90
|
-
end
|
|
91
|
-
|
|
92
|
-
rb.load_code_file('tmp.rb')
|
|
93
|
-
$foo.should == 1
|
|
94
|
-
|
|
95
|
-
a_file_called('tmp.rb') do
|
|
96
|
-
"$foo = 2"
|
|
97
|
-
end
|
|
98
|
-
|
|
99
|
-
rb.load_code_file('tmp.rb')
|
|
100
|
-
$foo.should == 2
|
|
101
|
-
end
|
|
102
|
-
end
|
|
103
|
-
|
|
104
|
-
describe "Handling the World" do
|
|
105
|
-
|
|
106
|
-
it "should raise an error if the world is nil" do
|
|
107
|
-
dsl.World {}
|
|
108
|
-
|
|
109
|
-
begin
|
|
110
|
-
rb.before(nil)
|
|
111
|
-
raise "Should fail"
|
|
112
|
-
rescue RbSupport::NilWorld => e
|
|
113
|
-
e.message.should == "World procs should never return nil"
|
|
114
|
-
e.backtrace.length.should == 1
|
|
115
|
-
e.backtrace[0].should =~ /spec\/cucumber\/rb_support\/rb_language_spec\.rb\:\d+\:in `World'/
|
|
116
|
-
end
|
|
117
|
-
end
|
|
118
|
-
|
|
119
|
-
module ModuleOne
|
|
120
|
-
end
|
|
121
|
-
|
|
122
|
-
module ModuleTwo
|
|
123
|
-
end
|
|
124
|
-
|
|
125
|
-
class ClassOne
|
|
126
|
-
end
|
|
127
|
-
|
|
128
|
-
it "should implicitly extend world with modules" do
|
|
129
|
-
dsl.World(ModuleOne, ModuleTwo)
|
|
130
|
-
rb.before(mock('scenario').as_null_object)
|
|
131
|
-
class << rb.current_world
|
|
132
|
-
included_modules.inspect.should =~ /ModuleOne/ # Workaround for RSpec/Ruby 1.9 issue with namespaces
|
|
133
|
-
included_modules.inspect.should =~ /ModuleTwo/
|
|
134
|
-
end
|
|
135
|
-
rb.current_world.class.should == Object
|
|
136
|
-
end
|
|
137
|
-
|
|
138
|
-
it "should raise error when we try to register more than one World proc" do
|
|
139
|
-
expected_error = %{You can only pass a proc to #World once, but it's happening
|
|
140
|
-
in 2 places:
|
|
141
|
-
|
|
142
|
-
spec/cucumber/rb_support/rb_language_spec.rb:\\d+:in `World'
|
|
143
|
-
spec/cucumber/rb_support/rb_language_spec.rb:\\d+:in `World'
|
|
144
|
-
|
|
145
|
-
Use Ruby modules instead to extend your worlds. See the Cucumber::RbSupport::RbDsl#World RDoc
|
|
146
|
-
or http://wiki.github.com/cucumber/cucumber/a-whole-new-world.
|
|
147
|
-
|
|
148
|
-
}
|
|
149
|
-
dsl.World { Hash.new }
|
|
150
|
-
lambda do
|
|
151
|
-
dsl.World { Array.new }
|
|
152
|
-
end.should raise_error(RbSupport::MultipleWorld, /#{expected_error}/)
|
|
153
|
-
|
|
154
|
-
end
|
|
155
|
-
end
|
|
156
|
-
|
|
157
|
-
describe "step argument transformations" do
|
|
158
|
-
|
|
159
|
-
describe "without capture groups" do
|
|
160
|
-
it "complains when registering with a with no transform block" do
|
|
161
|
-
lambda do
|
|
162
|
-
dsl.Transform('^abc$')
|
|
163
|
-
end.should raise_error(Cucumber::RbSupport::RbTransform::MissingProc)
|
|
164
|
-
end
|
|
165
|
-
|
|
166
|
-
it "complains when registering with a zero-arg transform block" do
|
|
167
|
-
lambda do
|
|
168
|
-
dsl.Transform('^abc$') {42}
|
|
169
|
-
end.should raise_error(Cucumber::RbSupport::RbTransform::MissingProc)
|
|
170
|
-
end
|
|
171
|
-
|
|
172
|
-
it "complains when registering with a splat-arg transform block" do
|
|
173
|
-
lambda do
|
|
174
|
-
dsl.Transform('^abc$') {|*splat| 42 }
|
|
175
|
-
end.should raise_error(Cucumber::RbSupport::RbTransform::MissingProc)
|
|
176
|
-
end
|
|
177
|
-
|
|
178
|
-
it "complains when transforming with an arity mismatch" do
|
|
179
|
-
lambda do
|
|
180
|
-
dsl.Transform('^abc$') {|one, two| 42 }
|
|
181
|
-
rb.execute_transforms(['abc'])
|
|
182
|
-
end.should raise_error(Cucumber::ArityMismatchError)
|
|
183
|
-
end
|
|
184
|
-
|
|
185
|
-
it "allows registering a regexp pattern that yields the step_arg matched" do
|
|
186
|
-
dsl.Transform(/^ab*c$/) {|arg| 42}
|
|
187
|
-
rb.execute_transforms(['ab']).should == ['ab']
|
|
188
|
-
rb.execute_transforms(['ac']).should == [42]
|
|
189
|
-
rb.execute_transforms(['abc']).should == [42]
|
|
190
|
-
rb.execute_transforms(['abbc']).should == [42]
|
|
191
|
-
end
|
|
192
|
-
end
|
|
193
|
-
|
|
194
|
-
describe "with capture groups" do
|
|
195
|
-
it "complains when registering with a with no transform block" do
|
|
196
|
-
lambda do
|
|
197
|
-
dsl.Transform('^a(.)c$')
|
|
198
|
-
end.should raise_error(Cucumber::RbSupport::RbTransform::MissingProc)
|
|
199
|
-
end
|
|
200
|
-
|
|
201
|
-
it "complains when registering with a zero-arg transform block" do
|
|
202
|
-
lambda do
|
|
203
|
-
dsl.Transform('^a(.)c$') { 42 }
|
|
204
|
-
end.should raise_error(Cucumber::RbSupport::RbTransform::MissingProc)
|
|
205
|
-
end
|
|
206
|
-
|
|
207
|
-
it "complains when registering with a splat-arg transform block" do
|
|
208
|
-
lambda do
|
|
209
|
-
dsl.Transform('^a(.)c$') {|*splat| 42 }
|
|
210
|
-
end.should raise_error(Cucumber::RbSupport::RbTransform::MissingProc)
|
|
211
|
-
end
|
|
212
|
-
|
|
213
|
-
it "complains when transforming with an arity mismatch" do
|
|
214
|
-
lambda do
|
|
215
|
-
dsl.Transform('^a(.)c$') {|one, two| 42 }
|
|
216
|
-
rb.execute_transforms(['abc'])
|
|
217
|
-
end.should raise_error(Cucumber::ArityMismatchError)
|
|
218
|
-
end
|
|
219
|
-
|
|
220
|
-
it "allows registering a regexp pattern that yields capture groups" do
|
|
221
|
-
dsl.Transform(/^shape: (.+), color: (.+)$/) do |shape, color|
|
|
222
|
-
{shape.to_sym => color.to_sym}
|
|
223
|
-
end
|
|
224
|
-
rb.execute_transforms(['shape: circle, color: blue']).should == [{:circle => :blue}]
|
|
225
|
-
rb.execute_transforms(['shape: square, color: red']).should == [{:square => :red}]
|
|
226
|
-
rb.execute_transforms(['not shape: square, not color: red']).should == ['not shape: square, not color: red']
|
|
227
|
-
end
|
|
228
|
-
end
|
|
229
|
-
|
|
230
|
-
it "allows registering a string pattern" do
|
|
231
|
-
dsl.Transform('^ab*c$') {|arg| 42}
|
|
232
|
-
rb.execute_transforms(['ab']).should == ['ab']
|
|
233
|
-
rb.execute_transforms(['ac']).should == [42]
|
|
234
|
-
rb.execute_transforms(['abc']).should == [42]
|
|
235
|
-
rb.execute_transforms(['abbc']).should == [42]
|
|
236
|
-
end
|
|
237
|
-
|
|
238
|
-
it "gives match priority to transforms defined last" do
|
|
239
|
-
dsl.Transform(/^transform_me$/) {|arg| :foo }
|
|
240
|
-
dsl.Transform(/^transform_me$/) {|arg| :bar }
|
|
241
|
-
dsl.Transform(/^transform_me$/) {|arg| :baz }
|
|
242
|
-
rb.execute_transforms(['transform_me']).should == [:baz]
|
|
243
|
-
end
|
|
244
|
-
|
|
245
|
-
it "allows registering a transform which returns nil" do
|
|
246
|
-
dsl.Transform('^ac$') {|arg| nil}
|
|
247
|
-
rb.execute_transforms(['ab']).should == ['ab']
|
|
248
|
-
rb.execute_transforms(['ac']).should == [nil]
|
|
249
|
-
end
|
|
250
|
-
end
|
|
251
|
-
|
|
252
|
-
describe "hooks" do
|
|
253
|
-
|
|
254
|
-
it "should find before hooks" do
|
|
255
|
-
fish = dsl.Before('@fish'){}
|
|
256
|
-
meat = dsl.Before('@meat'){}
|
|
257
|
-
|
|
258
|
-
scenario = mock('Scenario')
|
|
259
|
-
scenario.should_receive(:accept_hook?).with(fish).and_return(true)
|
|
260
|
-
scenario.should_receive(:accept_hook?).with(meat).and_return(false)
|
|
261
|
-
|
|
262
|
-
rb.hooks_for(:before, scenario).should == [fish]
|
|
263
|
-
end
|
|
264
|
-
|
|
265
|
-
it "should find around hooks" do
|
|
266
|
-
a = dsl.Around do |scenario, block|
|
|
267
|
-
end
|
|
268
|
-
|
|
269
|
-
b = dsl.Around('@tag') do |scenario, block|
|
|
270
|
-
end
|
|
271
|
-
|
|
272
|
-
scenario = mock('Scenario')
|
|
273
|
-
scenario.should_receive(:accept_hook?).with(a).and_return(true)
|
|
274
|
-
scenario.should_receive(:accept_hook?).with(b).and_return(false)
|
|
275
|
-
|
|
276
|
-
rb.hooks_for(:around, scenario).should == [a]
|
|
277
|
-
end
|
|
65
|
+
})
|
|
278
66
|
end
|
|
279
|
-
|
|
280
67
|
end
|
|
281
68
|
end
|
|
282
69
|
end
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
require 'spec_helper'
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
|
|
2
|
+
|
|
2
3
|
require 'cucumber/ast'
|
|
3
4
|
require 'cucumber/step_mother'
|
|
4
5
|
require 'cucumber/rb_support/rb_language'
|
|
@@ -6,92 +7,86 @@ require 'cucumber/rb_support/rb_language'
|
|
|
6
7
|
module Cucumber
|
|
7
8
|
module RbSupport
|
|
8
9
|
describe RbStepDefinition do
|
|
9
|
-
let(:user_interface) { double('user interface') }
|
|
10
|
-
let(:support_code) { Cucumber::Runtime::SupportCode.new(user_interface) }
|
|
11
|
-
let(:rb) { support_code.load_programming_language('rb')}
|
|
12
|
-
let(:dsl) do
|
|
13
|
-
rb
|
|
14
|
-
Object.new.extend(Cucumber::RbSupport::RbDsl)
|
|
15
|
-
end
|
|
16
|
-
|
|
17
10
|
before do
|
|
18
|
-
|
|
11
|
+
@step_mother = Cucumber::StepMother.new
|
|
12
|
+
@rb = @step_mother.load_programming_language('rb')
|
|
13
|
+
@dsl = Object.new
|
|
14
|
+
@dsl.extend Cucumber::RbSupport::RbDsl
|
|
15
|
+
@step_mother.before(mock('scenario').as_null_object)
|
|
19
16
|
|
|
20
17
|
$inside = nil
|
|
21
18
|
end
|
|
22
19
|
|
|
23
20
|
it "should allow calling of other steps" do
|
|
24
|
-
dsl.Given /Outside/ do
|
|
21
|
+
@dsl.Given /Outside/ do
|
|
25
22
|
Given "Inside"
|
|
26
23
|
end
|
|
27
|
-
dsl.Given /Inside/ do
|
|
24
|
+
@dsl.Given /Inside/ do
|
|
28
25
|
$inside = true
|
|
29
26
|
end
|
|
30
27
|
|
|
31
|
-
|
|
28
|
+
@step_mother.step_match("Outside").invoke(nil)
|
|
32
29
|
$inside.should == true
|
|
33
30
|
end
|
|
34
31
|
|
|
35
32
|
it "should allow calling of other steps with inline arg" do
|
|
36
|
-
dsl.Given /Outside/ do
|
|
33
|
+
@dsl.Given /Outside/ do
|
|
37
34
|
Given "Inside", Cucumber::Ast::Table.new([['inside']])
|
|
38
35
|
end
|
|
39
|
-
dsl.Given /Inside/ do |table|
|
|
36
|
+
@dsl.Given /Inside/ do |table|
|
|
40
37
|
$inside = table.raw[0][0]
|
|
41
38
|
end
|
|
42
39
|
|
|
43
|
-
|
|
40
|
+
@step_mother.step_match("Outside").invoke(nil)
|
|
44
41
|
$inside.should == 'inside'
|
|
45
42
|
end
|
|
46
43
|
|
|
47
44
|
it "should raise Undefined when inside step is not defined" do
|
|
48
|
-
dsl.Given /Outside/ do
|
|
45
|
+
@dsl.Given /Outside/ do
|
|
49
46
|
Given 'Inside'
|
|
50
47
|
end
|
|
51
48
|
|
|
52
49
|
lambda do
|
|
53
|
-
|
|
50
|
+
@step_mother.step_match('Outside').invoke(nil)
|
|
54
51
|
end.should raise_error(Cucumber::Undefined, 'Undefined step: "Inside"')
|
|
55
52
|
end
|
|
56
53
|
|
|
57
54
|
it "should allow forced pending" do
|
|
58
|
-
dsl.Given /Outside/ do
|
|
55
|
+
@dsl.Given /Outside/ do
|
|
59
56
|
pending("Do me!")
|
|
60
57
|
end
|
|
61
58
|
|
|
62
59
|
lambda do
|
|
63
|
-
|
|
60
|
+
@step_mother.step_match("Outside").invoke(nil)
|
|
64
61
|
end.should raise_error(Cucumber::Pending, "Do me!")
|
|
65
62
|
end
|
|
66
63
|
|
|
67
64
|
it "should raise ArityMismatchError when the number of capture groups differs from the number of step arguments" do
|
|
68
|
-
dsl.Given /No group: \w+/ do |arg|
|
|
65
|
+
@dsl.Given /No group: \w+/ do |arg|
|
|
69
66
|
end
|
|
70
67
|
|
|
71
68
|
lambda do
|
|
72
|
-
|
|
69
|
+
@step_mother.step_match("No group: arg").invoke(nil)
|
|
73
70
|
end.should raise_error(Cucumber::ArityMismatchError)
|
|
74
71
|
end
|
|
75
72
|
|
|
76
|
-
it "should allow
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
73
|
+
it "should allow announce" do
|
|
74
|
+
v = mock('visitor')
|
|
75
|
+
v.should_receive(:announce).with('wasup')
|
|
76
|
+
@step_mother.visitor = v
|
|
77
|
+
@dsl.Given /Loud/ do
|
|
78
|
+
announce 'wasup'
|
|
80
79
|
end
|
|
81
80
|
|
|
82
|
-
|
|
81
|
+
@step_mother.step_match("Loud").invoke(nil)
|
|
83
82
|
end
|
|
84
83
|
|
|
85
84
|
it "should recognize $arg style captures" do
|
|
86
|
-
dsl.Given "capture this: $arg" do |arg|
|
|
85
|
+
@dsl.Given "capture this: $arg" do |arg|
|
|
87
86
|
arg.should == 'this'
|
|
88
87
|
end
|
|
89
88
|
|
|
90
|
-
|
|
91
|
-
end
|
|
92
|
-
|
|
93
|
-
it "should have a JSON representation of the signature" do
|
|
94
|
-
RbStepDefinition.new(rb, /I CAN HAZ (\d+) CUKES/i, lambda{}).to_hash.should == {'source' => "I CAN HAZ (\\d+) CUKES", 'flags' => 'i'}
|
|
89
|
+
@step_mother.step_match('capture this: this').invoke(nil)
|
|
95
90
|
end
|
|
96
91
|
end
|
|
97
92
|
end
|
|
@@ -1,12 +1,10 @@
|
|
|
1
1
|
# encoding: utf-8
|
|
2
|
-
require 'spec_helper'
|
|
2
|
+
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
|
|
3
3
|
require 'cucumber/rb_support/rb_step_definition'
|
|
4
4
|
require 'cucumber/rb_support/rb_language'
|
|
5
5
|
|
|
6
6
|
module Cucumber
|
|
7
7
|
describe StepMatch do
|
|
8
|
-
WORD = Cucumber::RUBY_1_9 ? '[[:word:]]' : '\w'
|
|
9
|
-
|
|
10
8
|
before do
|
|
11
9
|
@rb_language = RbSupport::RbLanguage.new(nil)
|
|
12
10
|
end
|
|
@@ -21,38 +19,38 @@ module Cucumber
|
|
|
21
19
|
end
|
|
22
20
|
|
|
23
21
|
it "should format one group when we use Unicode" do
|
|
24
|
-
m = step_match(/I (
|
|
22
|
+
m = step_match(/I (\w+) ok/, "I æøåÆØÅæøåÆØÅæøåÆØÅæøåÆØÅ ok")
|
|
25
23
|
m.format_args("<span>%s</span>").should == "I <span>æøåÆØÅæøåÆØÅæøåÆØÅæøåÆØÅ</span> ok"
|
|
26
24
|
end
|
|
27
25
|
|
|
28
26
|
it "should format several groups when we use Unicode" do
|
|
29
|
-
m = step_match(/I (
|
|
27
|
+
m = step_match(/I (\w+) (\w+) (\w+) this (\w+)/, "I ate æøåÆØÅæøåÆØÅæøåÆØÅæøåÆØÅ egg this morning")
|
|
30
28
|
m.format_args("<span>%s</span>").should == "I <span>ate</span> <span>æøåÆØÅæøåÆØÅæøåÆØÅæøåÆØÅ</span> <span>egg</span> this <span>morning</span>"
|
|
31
29
|
end
|
|
32
30
|
|
|
33
31
|
it "should deal with Unicode both inside and outside arguments" do
|
|
34
|
-
"Jæ vø ålsker døtte løndet".should =~ /Jæ (
|
|
35
|
-
m = step_match(/Jæ (
|
|
32
|
+
"Jæ vø ålsker døtte løndet".should =~ /Jæ (\w+) ålsker (\w+) løndet/
|
|
33
|
+
m = step_match(/Jæ (\w+) ålsker (\w+) løndet/, "Jæ vø ålsker døtte løndet")
|
|
36
34
|
m.format_args("<span>%s</span>").should == "Jæ <span>vø</span> ålsker <span>døtte</span> løndet"
|
|
37
35
|
end
|
|
38
36
|
|
|
39
37
|
it "should format groups with format string" do
|
|
40
|
-
m = step_match(/I (
|
|
38
|
+
m = step_match(/I (\w+) (\d+) (\w+) this (\w+)/, "I ate 1 egg this morning")
|
|
41
39
|
m.format_args("<span>%s</span>").should == "I <span>ate</span> <span>1</span> <span>egg</span> this <span>morning</span>"
|
|
42
40
|
end
|
|
43
41
|
|
|
44
42
|
it "should format groups with format string when there are dupes" do
|
|
45
|
-
m = step_match(/I (
|
|
43
|
+
m = step_match(/I (\w+) (\d+) (\w+) this (\w+)/, "I bob 1 bo this bobs")
|
|
46
44
|
m.format_args("<span>%s</span>").should == "I <span>bob</span> <span>1</span> <span>bo</span> this <span>bobs</span>"
|
|
47
45
|
end
|
|
48
46
|
|
|
49
47
|
it "should format groups with block" do
|
|
50
|
-
m = step_match(/I (
|
|
48
|
+
m = step_match(/I (\w+) (\d+) (\w+) this (\w+)/, "I ate 1 egg this morning")
|
|
51
49
|
m.format_args(&lambda{|m| "<span>#{m}</span>"}).should == "I <span>ate</span> <span>1</span> <span>egg</span> this <span>morning</span>"
|
|
52
50
|
end
|
|
53
51
|
|
|
54
52
|
it "should format groups with proc object" do
|
|
55
|
-
m = step_match(/I (
|
|
53
|
+
m = step_match(/I (\w+) (\d+) (\w+) this (\w+)/, "I ate 1 egg this morning")
|
|
56
54
|
m.format_args(lambda{|m| "<span>#{m}</span>"}).should == "I <span>ate</span> <span>1</span> <span>egg</span> this <span>morning</span>"
|
|
57
55
|
end
|
|
58
56
|
|