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.
- data/.rspec +1 -1
- data/LICENSE +1 -1
- data/Rakefile +5 -51
- data/bin/cucumber +7 -1
- data/cucumber.gemspec +463 -679
- 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 +4 -7
- 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 +2 -5
- data/examples/v8/features/fibonacci.feature +1 -1
- data/examples/watir/features/step_definitions/search_steps.rb +1 -1
- data/features/background.feature +284 -95
- data/features/custom_formatter.feature +3 -73
- data/features/json_formatter.feature +160 -245
- data/features/step_definitions/cucumber_steps.rb +7 -153
- data/features/support/env.rb +18 -140
- data/fixtures/junit/features/pending.feature +3 -1
- data/fixtures/self_test/features/support/env.rb +8 -0
- data/fixtures/tickets/features.html +1 -1
- data/gem_tasks/examples.rake +1 -1
- data/lib/cucumber.rb +12 -0
- data/lib/cucumber/ast.rb +1 -1
- data/lib/cucumber/ast/background.rb +21 -5
- data/lib/cucumber/ast/examples.rb +12 -4
- data/lib/cucumber/ast/feature.rb +13 -5
- data/lib/cucumber/ast/feature_element.rb +9 -4
- data/lib/cucumber/ast/outline_table.rb +4 -4
- data/lib/cucumber/ast/scenario.rb +7 -5
- data/lib/cucumber/ast/scenario_outline.rb +23 -15
- data/lib/cucumber/ast/step.rb +5 -0
- data/lib/cucumber/ast/step_invocation.rb +21 -15
- data/lib/cucumber/ast/table.rb +14 -8
- data/lib/cucumber/ast/tree_walker.rb +10 -48
- data/lib/cucumber/cli/configuration.rb +33 -8
- data/lib/cucumber/cli/main.rb +20 -35
- data/lib/cucumber/cli/options.rb +8 -7
- data/lib/cucumber/cli/profile_loader.rb +2 -0
- data/lib/cucumber/core_ext/proc.rb +2 -1
- data/lib/cucumber/feature_file.rb +47 -15
- data/lib/cucumber/formatter/ansicolor.rb +3 -5
- data/lib/cucumber/formatter/console.rb +27 -23
- data/lib/cucumber/formatter/cucumber.css +34 -17
- data/lib/cucumber/formatter/cucumber.sass +173 -182
- data/lib/cucumber/formatter/html.rb +46 -11
- data/lib/cucumber/formatter/io.rb +2 -4
- data/lib/cucumber/formatter/json.rb +15 -152
- data/lib/cucumber/formatter/json_pretty.rb +5 -6
- data/lib/cucumber/formatter/junit.rb +28 -22
- data/lib/cucumber/formatter/pdf.rb +6 -6
- data/lib/cucumber/formatter/pretty.rb +5 -5
- data/lib/cucumber/formatter/rerun.rb +22 -11
- data/lib/cucumber/formatter/unicode.rb +41 -20
- data/lib/cucumber/js_support/js_dsl.js +4 -4
- data/lib/cucumber/js_support/js_language.rb +9 -5
- 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 +35 -30
- data/lib/cucumber/platform.rb +8 -8
- data/lib/cucumber/py_support/py_language.rb +2 -2
- data/lib/cucumber/rake/task.rb +80 -31
- data/lib/cucumber/rb_support/rb_dsl.rb +1 -0
- data/lib/cucumber/rb_support/rb_language.rb +10 -8
- data/lib/cucumber/rb_support/rb_step_definition.rb +8 -0
- data/lib/cucumber/rb_support/rb_transform.rb +17 -0
- data/lib/cucumber/rb_support/rb_world.rb +26 -18
- data/lib/cucumber/rspec/doubles.rb +3 -3
- data/lib/cucumber/step_match.rb +6 -2
- data/lib/cucumber/step_mother.rb +6 -427
- data/lib/cucumber/wire_support/configuration.rb +4 -1
- data/lib/cucumber/wire_support/wire_language.rb +3 -10
- data/spec/cucumber/ast/background_spec.rb +68 -6
- data/spec/cucumber/ast/feature_factory.rb +5 -4
- data/spec/cucumber/ast/feature_spec.rb +4 -4
- data/spec/cucumber/ast/outline_table_spec.rb +1 -1
- data/spec/cucumber/ast/scenario_outline_spec.rb +15 -11
- 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 +38 -2
- 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 +32 -6
- data/spec/cucumber/cli/drb_client_spec.rb +2 -3
- data/spec/cucumber/cli/main_spec.rb +43 -43
- data/spec/cucumber/cli/options_spec.rb +28 -1
- 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/duration_spec.rb +1 -1
- data/spec/cucumber/formatter/html_spec.rb +3 -5
- data/spec/cucumber/formatter/junit_spec.rb +16 -2
- data/spec/cucumber/formatter/progress_spec.rb +1 -1
- data/spec/cucumber/formatter/spec_helper.rb +11 -12
- data/spec/cucumber/rb_support/rb_language_spec.rb +241 -28
- data/spec/cucumber/rb_support/rb_step_definition_spec.rb +33 -28
- data/spec/cucumber/rb_support/regexp_argument_matcher_spec.rb +1 -1
- data/spec/cucumber/step_match_spec.rb +11 -9
- 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 +13 -20
- metadata +11 -222
- data/.gitignore +0 -20
- data/Caliper.yml +0 -4
- data/History.txt +0 -1552
- data/README.rdoc +0 -26
- data/VERSION.yml +0 -5
- data/examples/i18n/ro/features/suma.feature +0 -11
- data/features/announce.feature +0 -164
- data/features/around_hooks.feature +0 -232
- data/features/bug_371.feature +0 -32
- data/features/bug_464.feature +0 -16
- data/features/bug_475.feature +0 -42
- data/features/bug_585_tab_indentation.feature +0 -22
- data/features/bug_600.feature +0 -67
- data/features/call_steps_from_stepdefs.feature +0 -154
- data/features/cucumber_cli.feature +0 -591
- data/features/cucumber_cli_outlines.feature +0 -117
- data/features/default_snippets.feature +0 -42
- data/features/diffing.feature +0 -25
- data/features/drb_server_integration.feature +0 -174
- data/features/exception_in_after_block.feature +0 -127
- data/features/exception_in_after_step_block.feature +0 -104
- data/features/exception_in_before_block.feature +0 -98
- data/features/exclude_files.feature +0 -20
- data/features/expand.feature +0 -60
- data/features/html_formatter.feature +0 -8
- data/features/html_formatter/a.html +0 -582
- data/features/junit_formatter.feature +0 -88
- data/features/language_from_header.feature +0 -30
- data/features/language_help.feature +0 -78
- data/features/listener_debugger_formatter.feature +0 -42
- data/features/multiline_names.feature +0 -44
- data/features/negative_tagged_hooks.feature +0 -60
- data/features/post_configuration_hook.feature +0 -37
- data/features/profiles.feature +0 -126
- data/features/rake_task.feature +0 -152
- data/features/report_called_undefined_steps.feature +0 -34
- data/features/rerun_formatter.feature +0 -45
- data/features/simplest.feature +0 -11
- data/features/snippet.feature +0 -23
- data/features/snippets_when_using_star_keyword.feature +0 -36
- data/features/step_definitions/extra_steps.rb +0 -2
- data/features/step_definitions/simplest_steps.rb +0 -3
- data/features/step_definitions/wire_steps.rb +0 -32
- data/features/support/env.rb.simplest +0 -7
- data/features/support/fake_wire_server.rb +0 -77
- data/features/table_diffing.feature +0 -45
- data/features/table_mapping.feature +0 -34
- data/features/tag_logic.feature +0 -258
- data/features/transform.feature +0 -245
- data/features/unicode_table.feature +0 -35
- data/features/usage_and_stepdefs_formatter.feature +0 -169
- data/features/wire_protocol.feature +0 -332
- data/features/wire_protocol_table_diffing.feature +0 -119
- data/features/wire_protocol_tags.feature +0 -87
- data/features/wire_protocol_timeouts.feature +0 -63
- data/features/work_in_progress.feature +0 -156
- data/fixtures/json/features/pystring.feature +0 -8
- data/fixtures/self_test/features/background/background_tagged_before_on_outline.feature +0 -12
- data/fixtures/self_test/features/background/background_with_name.feature +0 -7
- data/fixtures/self_test/features/background/failing_background.feature +0 -12
- data/fixtures/self_test/features/background/failing_background_after_success.feature +0 -11
- data/fixtures/self_test/features/background/multiline_args_background.feature +0 -32
- data/fixtures/self_test/features/background/passing_background.feature +0 -10
- data/fixtures/self_test/features/background/pending_background.feature +0 -10
- data/fixtures/self_test/features/background/scenario_outline_failing_background.feature +0 -16
- data/fixtures/self_test/features/background/scenario_outline_passing_background.feature +0 -16
- data/gem_tasks/features.rake +0 -14
- data/gem_tasks/sdoc.rake +0 -12
- data/lib/cucumber/ast/py_string.rb +0 -80
- data/lib/cucumber/formatter/color_io.rb +0 -23
- data/lib/cucumber/formatter/tag_cloud.rb +0 -35
- data/spec/cucumber/ast/py_string_spec.rb +0 -40
- data/spec/cucumber/formatter/color_io_spec.rb +0 -29
- data/spec/cucumber/step_mother_spec.rb +0 -302
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
Feature: Failing background after previously successful background sample
|
|
2
|
-
|
|
3
|
-
Background:
|
|
4
|
-
Given passing without a table
|
|
5
|
-
And '10' global cukes
|
|
6
|
-
|
|
7
|
-
Scenario: passing background
|
|
8
|
-
Then I should have '10' global cukes
|
|
9
|
-
|
|
10
|
-
Scenario: failing background
|
|
11
|
-
Then I should have '10' global cukes
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
Feature: Passing background with multiline args
|
|
2
|
-
|
|
3
|
-
Background:
|
|
4
|
-
Given table
|
|
5
|
-
|a|b|
|
|
6
|
-
|c|d|
|
|
7
|
-
And multiline string
|
|
8
|
-
"""
|
|
9
|
-
I'm a cucumber and I'm okay.
|
|
10
|
-
I sleep all night and I test all day
|
|
11
|
-
"""
|
|
12
|
-
|
|
13
|
-
Scenario: passing background
|
|
14
|
-
Then the table should be
|
|
15
|
-
|a|b|
|
|
16
|
-
|c|d|
|
|
17
|
-
Then the multiline string should be
|
|
18
|
-
"""
|
|
19
|
-
I'm a cucumber and I'm okay.
|
|
20
|
-
I sleep all night and I test all day
|
|
21
|
-
"""
|
|
22
|
-
|
|
23
|
-
Scenario: another passing background
|
|
24
|
-
Then the table should be
|
|
25
|
-
|a|b|
|
|
26
|
-
|c|d|
|
|
27
|
-
Then the multiline string should be
|
|
28
|
-
"""
|
|
29
|
-
I'm a cucumber and I'm okay.
|
|
30
|
-
I sleep all night and I test all day
|
|
31
|
-
"""
|
|
32
|
-
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
Feature: Failing background with scenario outlines sample
|
|
2
|
-
|
|
3
|
-
Background:
|
|
4
|
-
Given failing without a table
|
|
5
|
-
|
|
6
|
-
Scenario Outline: failing background
|
|
7
|
-
Then I should have '<count>' cukes
|
|
8
|
-
Examples:
|
|
9
|
-
|count|
|
|
10
|
-
| 10 |
|
|
11
|
-
|
|
12
|
-
Scenario Outline: another failing background
|
|
13
|
-
Then I should have '<count>' cukes
|
|
14
|
-
Examples:
|
|
15
|
-
|count|
|
|
16
|
-
| 10 |
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
Feature: Passing background with scenario outlines sample
|
|
2
|
-
|
|
3
|
-
Background:
|
|
4
|
-
Given '10' cukes
|
|
5
|
-
|
|
6
|
-
Scenario Outline: passing background
|
|
7
|
-
Then I should have '<count>' cukes
|
|
8
|
-
Examples:
|
|
9
|
-
|count|
|
|
10
|
-
| 10 |
|
|
11
|
-
|
|
12
|
-
Scenario Outline: another passing background
|
|
13
|
-
Then I should have '<count>' cukes
|
|
14
|
-
Examples:
|
|
15
|
-
|count|
|
|
16
|
-
| 10 |
|
data/gem_tasks/features.rake
DELETED
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
$:.unshift(File.dirname(__FILE__) + '/../lib')
|
|
2
|
-
require 'cucumber/rake/task'
|
|
3
|
-
require 'cucumber/platform'
|
|
4
|
-
|
|
5
|
-
Cucumber::Rake::Task.new do |t|
|
|
6
|
-
if(Cucumber::JRUBY)
|
|
7
|
-
t.profile = Cucumber::WINDOWS ? 'jruby_win' : 'jruby'
|
|
8
|
-
elsif(Cucumber::WINDOWS_MRI)
|
|
9
|
-
t.profile = 'windows_mri'
|
|
10
|
-
elsif(Cucumber::RUBY_1_9)
|
|
11
|
-
t.profile = 'ruby_1_9'
|
|
12
|
-
end
|
|
13
|
-
t.rcov = ENV['RCOV']
|
|
14
|
-
end
|
data/gem_tasks/sdoc.rake
DELETED
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
begin
|
|
2
|
-
require 'rake/rdoctask'
|
|
3
|
-
require 'sdoc' # and use your RDoc task the same way you used it before
|
|
4
|
-
|
|
5
|
-
Rake::RDocTask.new(:sdoc) do |rdoc|
|
|
6
|
-
rdoc.rdoc_dir = 'doc/sdoc'
|
|
7
|
-
rdoc.title = "Cucumber"
|
|
8
|
-
rdoc.options += %w{--fmt shtml -N --webcvs=http://github.com/aslakhellesoy/cucumber/blob/v0.3.96/%s --title "Cucumber API" --threads 4 --main README --exclude cucumber/parser lib}
|
|
9
|
-
rdoc.template = 'direct' # lighter template used on railsapi.com
|
|
10
|
-
end
|
|
11
|
-
rescue LoadError => ignore
|
|
12
|
-
end
|
|
@@ -1,80 +0,0 @@
|
|
|
1
|
-
module Cucumber
|
|
2
|
-
module Ast
|
|
3
|
-
# Represents an inline argument in a step. Example:
|
|
4
|
-
#
|
|
5
|
-
# Given the message
|
|
6
|
-
# """
|
|
7
|
-
# I like
|
|
8
|
-
# Cucumber sandwich
|
|
9
|
-
# """
|
|
10
|
-
#
|
|
11
|
-
# The text between the pair of <tt>"""</tt> is stored inside a PyString,
|
|
12
|
-
# which is yielded to the StepDefinition block as the last argument.
|
|
13
|
-
#
|
|
14
|
-
# The StepDefinition can then access the String via the #to_s method. In the
|
|
15
|
-
# example above, that would return: <tt>"I like\nCucumber sandwich"</tt>
|
|
16
|
-
#
|
|
17
|
-
# Note how the indentation from the source is stripped away.
|
|
18
|
-
#
|
|
19
|
-
class PyString #:nodoc:
|
|
20
|
-
class Builder
|
|
21
|
-
attr_reader :string
|
|
22
|
-
|
|
23
|
-
def initialize
|
|
24
|
-
@string = ''
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
def py_string(string, line_number)
|
|
28
|
-
@string = string
|
|
29
|
-
end
|
|
30
|
-
|
|
31
|
-
def eof
|
|
32
|
-
end
|
|
33
|
-
end
|
|
34
|
-
|
|
35
|
-
attr_accessor :file
|
|
36
|
-
|
|
37
|
-
def self.default_arg_name
|
|
38
|
-
"string"
|
|
39
|
-
end
|
|
40
|
-
|
|
41
|
-
def self.parse(text)
|
|
42
|
-
builder = Builder.new
|
|
43
|
-
lexer = Gherkin::I18nLexer.new(builder)
|
|
44
|
-
lexer.scan(text)
|
|
45
|
-
new(builder.string)
|
|
46
|
-
end
|
|
47
|
-
|
|
48
|
-
def initialize(string)
|
|
49
|
-
@string = string
|
|
50
|
-
end
|
|
51
|
-
|
|
52
|
-
def to_step_definition_arg
|
|
53
|
-
@string
|
|
54
|
-
end
|
|
55
|
-
|
|
56
|
-
def accept(visitor)
|
|
57
|
-
return if Cucumber.wants_to_quit
|
|
58
|
-
visitor.visit_py_string(@string)
|
|
59
|
-
end
|
|
60
|
-
|
|
61
|
-
def arguments_replaced(arguments) #:nodoc:
|
|
62
|
-
string = @string
|
|
63
|
-
arguments.each do |name, value|
|
|
64
|
-
value ||= ''
|
|
65
|
-
string = string.gsub(name, value)
|
|
66
|
-
end
|
|
67
|
-
PyString.new(string)
|
|
68
|
-
end
|
|
69
|
-
|
|
70
|
-
def has_text?(text)
|
|
71
|
-
@string.index(text)
|
|
72
|
-
end
|
|
73
|
-
|
|
74
|
-
# For testing only
|
|
75
|
-
def to_sexp #:nodoc:
|
|
76
|
-
[:py_string, to_step_definition_arg]
|
|
77
|
-
end
|
|
78
|
-
end
|
|
79
|
-
end
|
|
80
|
-
end
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
require 'forwardable'
|
|
2
|
-
|
|
3
|
-
module Cucumber
|
|
4
|
-
module Formatter
|
|
5
|
-
# Adapter to make #puts/#print/#flush work with win32console
|
|
6
|
-
class ColorIO #:nodoc:
|
|
7
|
-
extend Forwardable
|
|
8
|
-
def_delegators :@kernel, :puts, :print # win32console colours only work when sent to Kernel
|
|
9
|
-
def_delegators :@stdout, :flush, :tty?, :write, :close
|
|
10
|
-
|
|
11
|
-
def initialize(kernel, stdout)
|
|
12
|
-
@kernel = kernel
|
|
13
|
-
@stdout = stdout
|
|
14
|
-
end
|
|
15
|
-
|
|
16
|
-
# Ensure using << still gets colours in win32console
|
|
17
|
-
def <<(output)
|
|
18
|
-
print(output)
|
|
19
|
-
self
|
|
20
|
-
end
|
|
21
|
-
end
|
|
22
|
-
end
|
|
23
|
-
end
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
require 'cucumber/formatter/io'
|
|
2
|
-
require 'cucumber/formatter/pretty'
|
|
3
|
-
|
|
4
|
-
module Cucumber
|
|
5
|
-
module Formatter
|
|
6
|
-
# The formatter used for <tt>--format tag_cloud</tt>
|
|
7
|
-
# Custom formatter that prints a tag cloud as a table.
|
|
8
|
-
class TagCloud
|
|
9
|
-
include Io
|
|
10
|
-
|
|
11
|
-
def initialize(step_mother, path_or_io, options)
|
|
12
|
-
@io = ensure_io(path_or_io, "tag_cloud")
|
|
13
|
-
@options = options
|
|
14
|
-
@counts = Hash.new{|h,k| h[k] = 0}
|
|
15
|
-
end
|
|
16
|
-
|
|
17
|
-
def after_features(features)
|
|
18
|
-
print_summary(features)
|
|
19
|
-
end
|
|
20
|
-
|
|
21
|
-
def tag_name(tag_name)
|
|
22
|
-
@counts[tag_name] += 1
|
|
23
|
-
end
|
|
24
|
-
|
|
25
|
-
private
|
|
26
|
-
|
|
27
|
-
def print_summary(features)
|
|
28
|
-
matrix = @counts.to_a.sort{|paira, pairb| paira[0] <=> pairb[0]}.transpose
|
|
29
|
-
table = Cucumber::Ast::Table.new(matrix)
|
|
30
|
-
formatter = Cucumber::Formatter::Pretty.new(@step_mother, @io, {})
|
|
31
|
-
Cucumber::Ast::TreeWalker.new(@step_mother, [formatter], {}).visit_multiline_arg(table)
|
|
32
|
-
end
|
|
33
|
-
end
|
|
34
|
-
end
|
|
35
|
-
end
|
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
|
|
2
|
-
require 'cucumber/ast/py_string'
|
|
3
|
-
|
|
4
|
-
module Cucumber
|
|
5
|
-
module Ast
|
|
6
|
-
describe PyString do
|
|
7
|
-
describe "replacing arguments" do
|
|
8
|
-
|
|
9
|
-
before(:each) do
|
|
10
|
-
@ps = PyString.new("<book>\n<qty>\n")
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
it "should return a new py_string with arguments replaced with values" do
|
|
14
|
-
py_string_with_replaced_arg = @ps.arguments_replaced({'<book>' => 'Life is elsewhere', '<qty>' => '5'})
|
|
15
|
-
|
|
16
|
-
py_string_with_replaced_arg.to_step_definition_arg.should == "Life is elsewhere\n5\n"
|
|
17
|
-
end
|
|
18
|
-
|
|
19
|
-
it "should not change the original py_string" do
|
|
20
|
-
py_string_with_replaced_arg = @ps.arguments_replaced({'<book>' => 'Life is elsewhere'})
|
|
21
|
-
|
|
22
|
-
@ps.to_s.should_not include("Life is elsewhere")
|
|
23
|
-
end
|
|
24
|
-
|
|
25
|
-
it "should replaced nil with empty string" do
|
|
26
|
-
ps = PyString.new("'<book>'")
|
|
27
|
-
py_string_with_replaced_arg = ps.arguments_replaced({'<book>' => nil})
|
|
28
|
-
|
|
29
|
-
py_string_with_replaced_arg.to_step_definition_arg.should == "''"
|
|
30
|
-
end
|
|
31
|
-
|
|
32
|
-
it "should recognise when just a subset of a cell is delimited" do
|
|
33
|
-
@ps.should have_text('<qty>')
|
|
34
|
-
end
|
|
35
|
-
|
|
36
|
-
end
|
|
37
|
-
|
|
38
|
-
end
|
|
39
|
-
end
|
|
40
|
-
end
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
|
|
2
|
-
require 'cucumber/formatter/color_io'
|
|
3
|
-
|
|
4
|
-
module Cucumber
|
|
5
|
-
module Formatter
|
|
6
|
-
describe ColorIO do
|
|
7
|
-
describe "<<" do
|
|
8
|
-
it "should convert to a print using kernel" do
|
|
9
|
-
kernel = mock('Kernel')
|
|
10
|
-
color_io = ColorIO.new(kernel, nil)
|
|
11
|
-
|
|
12
|
-
kernel.should_receive(:print).with("monkeys")
|
|
13
|
-
|
|
14
|
-
color_io << "monkeys"
|
|
15
|
-
end
|
|
16
|
-
|
|
17
|
-
it "should allow chained <<" do
|
|
18
|
-
kernel = mock('Kernel')
|
|
19
|
-
color_io = ColorIO.new(kernel, nil)
|
|
20
|
-
|
|
21
|
-
kernel.should_receive(:print).with("monkeys")
|
|
22
|
-
kernel.should_receive(:print).with(" are tasty")
|
|
23
|
-
|
|
24
|
-
color_io << "monkeys" << " are tasty"
|
|
25
|
-
end
|
|
26
|
-
end
|
|
27
|
-
end
|
|
28
|
-
end
|
|
29
|
-
end
|
|
@@ -1,302 +0,0 @@
|
|
|
1
|
-
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
|
|
2
|
-
|
|
3
|
-
require 'cucumber'
|
|
4
|
-
require 'cucumber/rb_support/rb_language'
|
|
5
|
-
|
|
6
|
-
module Cucumber
|
|
7
|
-
describe StepMother do
|
|
8
|
-
before do
|
|
9
|
-
@dsl = Object.new
|
|
10
|
-
@dsl.extend(RbSupport::RbDsl)
|
|
11
|
-
|
|
12
|
-
@step_mother = StepMother.new
|
|
13
|
-
|
|
14
|
-
@rb = @step_mother.load_programming_language('rb')
|
|
15
|
-
|
|
16
|
-
@visitor = mock('Visitor')
|
|
17
|
-
end
|
|
18
|
-
|
|
19
|
-
it "should format step names" do
|
|
20
|
-
@dsl.Given(/it (.*) in (.*)/) do |what, month|
|
|
21
|
-
end
|
|
22
|
-
@dsl.Given(/nope something else/) do |what, month|
|
|
23
|
-
end
|
|
24
|
-
|
|
25
|
-
format = @step_mother.step_match("it snows in april").format_args("[%s]")
|
|
26
|
-
format.should == "it [snows] in [april]"
|
|
27
|
-
end
|
|
28
|
-
|
|
29
|
-
it "should raise Ambiguous error with guess hint when multiple step definitions match" do
|
|
30
|
-
@dsl.Given(/Three (.*) mice/) {|disability|}
|
|
31
|
-
@dsl.Given(/Three blind (.*)/) {|animal|}
|
|
32
|
-
|
|
33
|
-
lambda do
|
|
34
|
-
@step_mother.step_match("Three blind mice")
|
|
35
|
-
end.should raise_error(Ambiguous, %{Ambiguous match of "Three blind mice":
|
|
36
|
-
|
|
37
|
-
spec/cucumber/step_mother_spec.rb:30:in `/Three (.*) mice/'
|
|
38
|
-
spec/cucumber/step_mother_spec.rb:31:in `/Three blind (.*)/'
|
|
39
|
-
|
|
40
|
-
You can run again with --guess to make Cucumber be more smart about it
|
|
41
|
-
})
|
|
42
|
-
end
|
|
43
|
-
|
|
44
|
-
it "should not show --guess hint when --guess is used" do
|
|
45
|
-
@step_mother.options = {:guess => true}
|
|
46
|
-
|
|
47
|
-
@dsl.Given(/Three (.*) mice/) {|disability|}
|
|
48
|
-
@dsl.Given(/Three cute (.*)/) {|animal|}
|
|
49
|
-
|
|
50
|
-
lambda do
|
|
51
|
-
@step_mother.step_match("Three cute mice")
|
|
52
|
-
end.should raise_error(Ambiguous, %{Ambiguous match of "Three cute mice":
|
|
53
|
-
|
|
54
|
-
spec/cucumber/step_mother_spec.rb:47:in `/Three (.*) mice/'
|
|
55
|
-
spec/cucumber/step_mother_spec.rb:48:in `/Three cute (.*)/'
|
|
56
|
-
|
|
57
|
-
})
|
|
58
|
-
end
|
|
59
|
-
|
|
60
|
-
it "should not raise Ambiguous error when multiple step definitions match, but --guess is enabled" do
|
|
61
|
-
@step_mother.options = {:guess => true}
|
|
62
|
-
@dsl.Given(/Three (.*) mice/) {|disability|}
|
|
63
|
-
@dsl.Given(/Three (.*)/) {|animal|}
|
|
64
|
-
|
|
65
|
-
lambda do
|
|
66
|
-
@step_mother.step_match("Three blind mice")
|
|
67
|
-
end.should_not raise_error
|
|
68
|
-
end
|
|
69
|
-
|
|
70
|
-
it "should not raise NoMethodError when guessing from multiple step definitions with nil fields" do
|
|
71
|
-
@step_mother.options = {:guess => true}
|
|
72
|
-
@dsl.Given(/Three (.*) mice( cannot find food)?/) {|disability, is_disastrous|}
|
|
73
|
-
@dsl.Given(/Three (.*)?/) {|animal|}
|
|
74
|
-
|
|
75
|
-
lambda do
|
|
76
|
-
@step_mother.step_match("Three blind mice")
|
|
77
|
-
end.should_not raise_error
|
|
78
|
-
end
|
|
79
|
-
|
|
80
|
-
it "should pick right step definition when --guess is enabled and equal number of capture groups" do
|
|
81
|
-
@step_mother.options = {:guess => true}
|
|
82
|
-
right = @dsl.Given(/Three (.*) mice/) {|disability|}
|
|
83
|
-
wrong = @dsl.Given(/Three (.*)/) {|animal|}
|
|
84
|
-
|
|
85
|
-
@step_mother.step_match("Three blind mice").step_definition.should == right
|
|
86
|
-
end
|
|
87
|
-
|
|
88
|
-
it "should pick right step definition when --guess is enabled and unequal number of capture groups" do
|
|
89
|
-
@step_mother.options = {:guess => true}
|
|
90
|
-
right = @dsl.Given(/Three (.*) mice ran (.*)/) {|disability|}
|
|
91
|
-
wrong = @dsl.Given(/Three (.*)/) {|animal|}
|
|
92
|
-
|
|
93
|
-
@step_mother.step_match("Three blind mice ran far").step_definition.should == right
|
|
94
|
-
end
|
|
95
|
-
|
|
96
|
-
it "should pick most specific step definition when --guess is enabled and unequal number of capture groups" do
|
|
97
|
-
@step_mother.options = {:guess => true}
|
|
98
|
-
general = @dsl.Given(/Three (.*) mice ran (.*)/) {|disability|}
|
|
99
|
-
specific = @dsl.Given(/Three blind mice ran far/) do; end
|
|
100
|
-
more_specific = @dsl.Given(/^Three blind mice ran far$/) do; end
|
|
101
|
-
|
|
102
|
-
@step_mother.step_match("Three blind mice ran far").step_definition.should == more_specific
|
|
103
|
-
end
|
|
104
|
-
|
|
105
|
-
it "should raise Undefined error when no step definitions match" do
|
|
106
|
-
lambda do
|
|
107
|
-
@step_mother.step_match("Three blind mice")
|
|
108
|
-
end.should raise_error(Undefined)
|
|
109
|
-
end
|
|
110
|
-
|
|
111
|
-
# http://railsforum.com/viewtopic.php?pid=93881
|
|
112
|
-
it "should not raise Redundant unless it's really redundant" do
|
|
113
|
-
@dsl.Given(/^(.*) (.*) user named '(.*)'$/) {|a,b,c|}
|
|
114
|
-
@dsl.Given(/^there is no (.*) user named '(.*)'$/) {|a,b|}
|
|
115
|
-
end
|
|
116
|
-
|
|
117
|
-
it "should raise an error if the world is nil" do
|
|
118
|
-
@dsl.World {}
|
|
119
|
-
|
|
120
|
-
begin
|
|
121
|
-
@step_mother.before_and_after(nil) do; end
|
|
122
|
-
raise "Should fail"
|
|
123
|
-
rescue RbSupport::NilWorld => e
|
|
124
|
-
e.message.should == "World procs should never return nil"
|
|
125
|
-
e.backtrace.should == ["spec/cucumber/step_mother_spec.rb:118:in `World'"]
|
|
126
|
-
end
|
|
127
|
-
end
|
|
128
|
-
|
|
129
|
-
module ModuleOne
|
|
130
|
-
end
|
|
131
|
-
|
|
132
|
-
module ModuleTwo
|
|
133
|
-
end
|
|
134
|
-
|
|
135
|
-
class ClassOne
|
|
136
|
-
end
|
|
137
|
-
|
|
138
|
-
it "should implicitly extend world with modules" do
|
|
139
|
-
@dsl.World(ModuleOne, ModuleTwo)
|
|
140
|
-
@step_mother.before(mock('scenario').as_null_object)
|
|
141
|
-
class << @rb.current_world
|
|
142
|
-
included_modules.inspect.should =~ /ModuleOne/ # Workaround for RSpec/Ruby 1.9 issue with namespaces
|
|
143
|
-
included_modules.inspect.should =~ /ModuleTwo/
|
|
144
|
-
end
|
|
145
|
-
@rb.current_world.class.should == Object
|
|
146
|
-
end
|
|
147
|
-
|
|
148
|
-
it "should raise error when we try to register more than one World proc" do
|
|
149
|
-
@dsl.World { Hash.new }
|
|
150
|
-
lambda do
|
|
151
|
-
@dsl.World { Array.new }
|
|
152
|
-
end.should raise_error(RbSupport::MultipleWorld, %{You can only pass a proc to #World once, but it's happening
|
|
153
|
-
in 2 places:
|
|
154
|
-
|
|
155
|
-
spec/cucumber/step_mother_spec.rb:149:in `World'
|
|
156
|
-
spec/cucumber/step_mother_spec.rb:151:in `World'
|
|
157
|
-
|
|
158
|
-
Use Ruby modules instead to extend your worlds. See the Cucumber::RbSupport::RbDsl#World RDoc
|
|
159
|
-
or http://wiki.github.com/aslakhellesoy/cucumber/a-whole-new-world.
|
|
160
|
-
|
|
161
|
-
})
|
|
162
|
-
end
|
|
163
|
-
|
|
164
|
-
it "should find before hooks" do
|
|
165
|
-
fish = @dsl.Before('@fish'){}
|
|
166
|
-
meat = @dsl.Before('@meat'){}
|
|
167
|
-
|
|
168
|
-
scenario = mock('Scenario')
|
|
169
|
-
scenario.should_receive(:accept_hook?).with(fish).and_return(true)
|
|
170
|
-
scenario.should_receive(:accept_hook?).with(meat).and_return(false)
|
|
171
|
-
|
|
172
|
-
@rb.hooks_for(:before, scenario).should == [fish]
|
|
173
|
-
end
|
|
174
|
-
|
|
175
|
-
it "should find around hooks" do
|
|
176
|
-
a = @dsl.Around do |scenario, block|
|
|
177
|
-
end
|
|
178
|
-
|
|
179
|
-
b = @dsl.Around('@tag') do |scenario, block|
|
|
180
|
-
end
|
|
181
|
-
|
|
182
|
-
scenario = mock('Scenario')
|
|
183
|
-
scenario.should_receive(:accept_hook?).with(a).and_return(true)
|
|
184
|
-
scenario.should_receive(:accept_hook?).with(b).and_return(false)
|
|
185
|
-
|
|
186
|
-
@rb.hooks_for(:around, scenario).should == [a]
|
|
187
|
-
end
|
|
188
|
-
end
|
|
189
|
-
|
|
190
|
-
describe StepMother, "step argument transformations" do
|
|
191
|
-
before do
|
|
192
|
-
@dsl = Object.new
|
|
193
|
-
@dsl.extend(RbSupport::RbDsl)
|
|
194
|
-
|
|
195
|
-
@step_mother = StepMother.new
|
|
196
|
-
|
|
197
|
-
@rb = @step_mother.load_programming_language('rb')
|
|
198
|
-
end
|
|
199
|
-
|
|
200
|
-
describe "without capture groups" do
|
|
201
|
-
it "complains when registering with a with no transform block" do
|
|
202
|
-
lambda do
|
|
203
|
-
@dsl.Transform('^abc$')
|
|
204
|
-
end.should raise_error(Cucumber::RbSupport::RbTransform::MissingProc)
|
|
205
|
-
end
|
|
206
|
-
|
|
207
|
-
it "complains when registering with a zero-arg transform block" do
|
|
208
|
-
lambda do
|
|
209
|
-
@dsl.Transform('^abc$') {42}
|
|
210
|
-
end.should raise_error(Cucumber::RbSupport::RbTransform::MissingProc)
|
|
211
|
-
end
|
|
212
|
-
|
|
213
|
-
it "complains when registering with a splat-arg transform block" do
|
|
214
|
-
lambda do
|
|
215
|
-
@dsl.Transform('^abc$') {|*splat| 42 }
|
|
216
|
-
end.should raise_error(Cucumber::RbSupport::RbTransform::MissingProc)
|
|
217
|
-
end
|
|
218
|
-
|
|
219
|
-
it "complains when transforming with an arity mismatch" do
|
|
220
|
-
lambda do
|
|
221
|
-
@dsl.Transform('^abc$') {|one, two| 42 }
|
|
222
|
-
@rb.execute_transforms(['abc'])
|
|
223
|
-
end.should raise_error(Cucumber::ArityMismatchError)
|
|
224
|
-
end
|
|
225
|
-
|
|
226
|
-
it "allows registering a regexp pattern that yields the step_arg matched" do
|
|
227
|
-
@dsl.Transform(/^ab*c$/) {|arg| 42}
|
|
228
|
-
@rb.execute_transforms(['ab']).should == ['ab']
|
|
229
|
-
@rb.execute_transforms(['ac']).should == [42]
|
|
230
|
-
@rb.execute_transforms(['abc']).should == [42]
|
|
231
|
-
@rb.execute_transforms(['abbc']).should == [42]
|
|
232
|
-
end
|
|
233
|
-
end
|
|
234
|
-
|
|
235
|
-
describe "with capture groups" do
|
|
236
|
-
it "complains when registering with a with no transform block" do
|
|
237
|
-
lambda do
|
|
238
|
-
@dsl.Transform('^a(.)c$')
|
|
239
|
-
end.should raise_error(Cucumber::RbSupport::RbTransform::MissingProc)
|
|
240
|
-
end
|
|
241
|
-
|
|
242
|
-
it "complains when registering with a zero-arg transform block" do
|
|
243
|
-
lambda do
|
|
244
|
-
@dsl.Transform('^a(.)c$') { 42 }
|
|
245
|
-
end.should raise_error(Cucumber::RbSupport::RbTransform::MissingProc)
|
|
246
|
-
end
|
|
247
|
-
|
|
248
|
-
it "complains when registering with a splat-arg transform block" do
|
|
249
|
-
lambda do
|
|
250
|
-
@dsl.Transform('^a(.)c$') {|*splat| 42 }
|
|
251
|
-
end.should raise_error(Cucumber::RbSupport::RbTransform::MissingProc)
|
|
252
|
-
end
|
|
253
|
-
|
|
254
|
-
it "complains when transforming with an arity mismatch" do
|
|
255
|
-
lambda do
|
|
256
|
-
@dsl.Transform('^a(.)c$') {|one, two| 42 }
|
|
257
|
-
@rb.execute_transforms(['abc'])
|
|
258
|
-
end.should raise_error(Cucumber::ArityMismatchError)
|
|
259
|
-
end
|
|
260
|
-
|
|
261
|
-
it "allows registering a regexp pattern that yields capture groups" do
|
|
262
|
-
@dsl.Transform(/^shape: (.+), color: (.+)$/) do |shape, color|
|
|
263
|
-
{shape.to_sym => color.to_sym}
|
|
264
|
-
end
|
|
265
|
-
@rb.execute_transforms(['shape: circle, color: blue']).should == [{:circle => :blue}]
|
|
266
|
-
@rb.execute_transforms(['shape: square, color: red']).should == [{:square => :red}]
|
|
267
|
-
@rb.execute_transforms(['not shape: square, not color: red']).should == ['not shape: square, not color: red']
|
|
268
|
-
end
|
|
269
|
-
end
|
|
270
|
-
|
|
271
|
-
it "allows registering a string pattern" do
|
|
272
|
-
@dsl.Transform('^ab*c$') {|arg| 42}
|
|
273
|
-
@rb.execute_transforms(['ab']).should == ['ab']
|
|
274
|
-
@rb.execute_transforms(['ac']).should == [42]
|
|
275
|
-
@rb.execute_transforms(['abc']).should == [42]
|
|
276
|
-
@rb.execute_transforms(['abbc']).should == [42]
|
|
277
|
-
end
|
|
278
|
-
|
|
279
|
-
it "gives match priority to transforms defined last" do
|
|
280
|
-
@dsl.Transform(/^transform_me$/) {|arg| :foo }
|
|
281
|
-
@dsl.Transform(/^transform_me$/) {|arg| :bar }
|
|
282
|
-
@dsl.Transform(/^transform_me$/) {|arg| :baz }
|
|
283
|
-
@rb.execute_transforms(['transform_me']).should == [:baz]
|
|
284
|
-
end
|
|
285
|
-
|
|
286
|
-
it "allows registering a transform which returns nil" do
|
|
287
|
-
@dsl.Transform('^ac$') {|arg| nil}
|
|
288
|
-
@rb.execute_transforms(['ab']).should == ['ab']
|
|
289
|
-
@rb.execute_transforms(['ac']).should == [nil]
|
|
290
|
-
end
|
|
291
|
-
end
|
|
292
|
-
|
|
293
|
-
end
|
|
294
|
-
|
|
295
|
-
module ModuleOne
|
|
296
|
-
end
|
|
297
|
-
|
|
298
|
-
module ModuleTwo
|
|
299
|
-
end
|
|
300
|
-
|
|
301
|
-
class ClassOne
|
|
302
|
-
end
|