cucumber 1.2.1 → 1.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.rvmrc +1 -1
- data/.travis.yml +3 -2
- data/DEVELOPERS.md +48 -0
- data/History.md +22 -3
- data/README.md +13 -31
- data/Rakefile +1 -0
- data/cucumber.gemspec +18 -17
- data/cucumber.yml +3 -2
- data/examples/i18n/cs/Rakefile +6 -0
- data/examples/i18n/cs/features/addition.feature +17 -0
- data/examples/i18n/cs/features/division.feature +11 -0
- data/examples/i18n/cs/features/step_definitons/calculator_steps.rb +24 -0
- data/examples/i18n/cs/lib/calculator.rb +14 -0
- data/examples/i18n/hi/Rakefile +6 -0
- data/examples/i18n/hi/features/addition.feature +16 -0
- data/examples/i18n/hi/features/division.feature +10 -0
- data/examples/i18n/hi/features/step_definitons/calculator_steps.rb +24 -0
- data/examples/i18n/hi/lib/calculator.rb +15 -0
- data/examples/python/README.textile +2 -1
- data/examples/ruby2python/README.textile +2 -1
- data/features/.cucumber/stepdefs.json +1688 -445
- data/features/assertions.feature +69 -0
- data/features/formatter_callbacks.feature +189 -0
- data/features/html_formatter.feature +19 -0
- data/features/json_formatter.feature +8 -4
- data/features/nested_steps_with_second_arg.feature +73 -0
- data/features/step_definitions.feature +65 -0
- data/features/step_definitions/cucumber_steps.rb +18 -3
- data/fixtures/self_test/features/support/env.rb +1 -1
- data/gem_tasks/cucumber.rake +5 -3
- data/gem_tasks/downloads.rb +3 -3
- data/gem_tasks/stats +4 -2
- data/gem_tasks/yard.rake +31 -13
- data/legacy_features/default_snippets.feature +3 -3
- data/legacy_features/language_help.feature +4 -0
- data/legacy_features/report_called_undefined_steps.feature +1 -1
- data/legacy_features/snippet.feature +3 -3
- data/legacy_features/snippets_when_using_star_keyword.feature +1 -1
- data/legacy_features/step_definitions/cucumber_steps.rb +4 -3
- data/legacy_features/support/env.rb +1 -1
- data/legacy_features/support/fake_wire_server.rb +9 -9
- data/lib/autotest/cucumber_mixin.rb +14 -14
- data/lib/autotest/discover.rb +2 -0
- data/lib/cucumber.rb +2 -2
- data/lib/cucumber/ast.rb +1 -1
- data/lib/cucumber/ast/background.rb +11 -7
- data/lib/cucumber/ast/comment.rb +2 -2
- data/lib/cucumber/ast/doc_string.rb +1 -1
- data/lib/cucumber/ast/examples.rb +1 -1
- data/lib/cucumber/ast/feature.rb +2 -2
- data/lib/cucumber/ast/feature_element.rb +1 -1
- data/lib/cucumber/ast/multiline_argument.rb +2 -2
- data/lib/cucumber/ast/names.rb +2 -2
- data/lib/cucumber/ast/outline_table.rb +4 -5
- data/lib/cucumber/ast/scenario.rb +14 -14
- data/lib/cucumber/ast/scenario_outline.rb +4 -4
- data/lib/cucumber/ast/step.rb +3 -3
- data/lib/cucumber/ast/step_collection.rb +5 -5
- data/lib/cucumber/ast/step_invocation.rb +8 -8
- data/lib/cucumber/ast/table.rb +40 -27
- data/lib/cucumber/ast/tree_walker.rb +9 -8
- data/lib/cucumber/ast/visitor.rb +1 -1
- data/lib/cucumber/cli/configuration.rb +10 -10
- data/lib/cucumber/cli/drb_client.rb +1 -1
- data/lib/cucumber/cli/main.rb +3 -3
- data/lib/cucumber/cli/options.rb +3 -2
- data/lib/cucumber/cli/profile_loader.rb +1 -1
- data/lib/cucumber/configuration.rb +12 -12
- data/lib/cucumber/constantize.rb +11 -2
- data/lib/cucumber/core_ext/disable_mini_and_test_unit_autorun.rb +1 -1
- data/lib/cucumber/core_ext/instance_exec.rb +4 -4
- data/lib/cucumber/core_ext/proc.rb +3 -3
- data/lib/cucumber/errors.rb +1 -1
- data/lib/cucumber/feature_file.rb +1 -1
- data/lib/cucumber/formatter/ansicolor.rb +36 -23
- data/lib/cucumber/formatter/console.rb +45 -25
- data/lib/cucumber/formatter/debug.rb +7 -7
- data/lib/cucumber/formatter/duration.rb +1 -1
- data/lib/cucumber/formatter/gherkin_formatter_adapter.rb +7 -0
- data/lib/cucumber/formatter/gpretty.rb +1 -1
- data/lib/cucumber/formatter/html.rb +52 -53
- data/lib/cucumber/formatter/interceptor.rb +2 -2
- data/lib/cucumber/formatter/json.rb +1 -1
- data/lib/cucumber/formatter/json_pretty.rb +2 -1
- data/lib/cucumber/formatter/junit.rb +1 -1
- data/lib/cucumber/formatter/ordered_xml_markup.rb +1 -1
- data/lib/cucumber/formatter/pretty.rb +12 -12
- data/lib/cucumber/formatter/progress.rb +5 -5
- data/lib/cucumber/formatter/rerun.rb +5 -5
- data/lib/cucumber/formatter/stepdefs.rb +1 -1
- data/lib/cucumber/formatter/steps.rb +6 -6
- data/lib/cucumber/formatter/summary.rb +6 -6
- data/lib/cucumber/formatter/unicode.rb +18 -18
- data/lib/cucumber/formatter/usage.rb +7 -7
- data/lib/cucumber/js_support/js_dsl.js +1 -1
- data/lib/cucumber/language_support.rb +1 -1
- data/lib/cucumber/parser/gherkin_builder.rb +33 -33
- data/lib/cucumber/platform.rb +3 -2
- data/lib/cucumber/py_support/py_dsl.py +2 -2
- data/lib/cucumber/py_support/py_language.py +2 -2
- data/lib/cucumber/py_support/py_language.rb +2 -2
- data/lib/cucumber/rake/task.rb +4 -3
- data/lib/cucumber/rb_support/rb_dsl.rb +10 -10
- data/lib/cucumber/rb_support/rb_language.rb +27 -19
- data/lib/cucumber/rb_support/rb_step_definition.rb +39 -11
- data/lib/cucumber/rb_support/rb_transform.rb +3 -3
- data/lib/cucumber/rb_support/rb_world.rb +15 -15
- data/lib/cucumber/rb_support/regexp_argument_matcher.rb +1 -1
- data/lib/cucumber/rspec/disable_option_parser.rb +1 -1
- data/lib/cucumber/rspec/doubles.rb +1 -1
- data/lib/cucumber/runtime.rb +11 -10
- data/lib/cucumber/runtime/features_loader.rb +6 -6
- data/lib/cucumber/runtime/for_programming_languages.rb +8 -15
- data/lib/cucumber/runtime/results.rb +6 -6
- data/lib/cucumber/runtime/support_code.rb +37 -28
- data/lib/cucumber/runtime/user_interface.rb +4 -4
- data/lib/cucumber/step_definition_light.rb +4 -4
- data/lib/cucumber/step_definitions.rb +2 -3
- data/lib/cucumber/step_match.rb +6 -6
- data/lib/cucumber/step_mother.rb +1 -1
- data/lib/cucumber/term/ansicolor.rb +22 -22
- data/lib/cucumber/wire_support/configuration.rb +11 -14
- data/lib/cucumber/wire_support/connection.rb +10 -9
- data/lib/cucumber/wire_support/request_handler.rb +3 -3
- data/lib/cucumber/wire_support/wire_exception.rb +3 -3
- data/lib/cucumber/wire_support/wire_language.rb +11 -11
- data/lib/cucumber/wire_support/wire_packet.rb +7 -5
- data/lib/cucumber/wire_support/wire_protocol.rb +6 -6
- data/lib/cucumber/wire_support/wire_protocol/requests.rb +20 -20
- data/lib/cucumber/wire_support/wire_step_definition.rb +4 -4
- data/spec/cucumber/ast/background_spec.rb +4 -4
- data/spec/cucumber/ast/doc_string_spec.rb +8 -8
- data/spec/cucumber/ast/feature_factory.rb +4 -4
- data/spec/cucumber/ast/feature_spec.rb +18 -18
- data/spec/cucumber/ast/outline_table_spec.rb +3 -3
- data/spec/cucumber/ast/step_spec.rb +4 -4
- data/spec/cucumber/ast/table_spec.rb +50 -29
- data/spec/cucumber/ast/tree_walker_spec.rb +12 -4
- data/spec/cucumber/broadcaster_spec.rb +1 -1
- data/spec/cucumber/cli/configuration_spec.rb +10 -4
- data/spec/cucumber/cli/drb_client_spec.rb +1 -1
- data/spec/cucumber/cli/main_spec.rb +28 -7
- data/spec/cucumber/cli/options_spec.rb +3 -3
- data/spec/cucumber/configuration_spec.rb +4 -4
- data/spec/cucumber/constantize_spec.rb +2 -0
- data/spec/cucumber/core_ext/proc_spec.rb +7 -7
- data/spec/cucumber/formatter/ansicolor_spec.rb +2 -2
- data/spec/cucumber/formatter/duration_spec.rb +2 -2
- data/spec/cucumber/formatter/html_spec.rb +31 -31
- data/spec/cucumber/formatter/interceptor_spec.rb +10 -0
- data/spec/cucumber/formatter/progress_spec.rb +1 -1
- data/spec/cucumber/formatter/spec_helper.rb +7 -7
- data/spec/cucumber/rake/forked_spec.rb +15 -2
- data/spec/cucumber/rake/rcov_spec.rb +2 -2
- data/spec/cucumber/rb_support/rb_language_spec.rb +34 -17
- data/spec/cucumber/rb_support/rb_step_definition_spec.rb +45 -35
- data/spec/cucumber/rb_support/rb_transform_spec.rb +3 -3
- data/spec/cucumber/runtime/for_programming_languages_spec.rb +31 -0
- data/spec/cucumber/runtime/results_spec.rb +5 -5
- data/spec/cucumber/runtime/support_code_spec.rb +13 -2
- data/spec/cucumber/runtime_spec.rb +7 -7
- data/spec/cucumber/step_match_spec.rb +2 -2
- data/spec/cucumber/wire_support/configuration_spec.rb +16 -6
- data/spec/cucumber/wire_support/connection_spec.rb +25 -11
- data/spec/cucumber/wire_support/wire_exception_spec.rb +3 -3
- data/spec/cucumber/wire_support/wire_language_spec.rb +3 -3
- data/spec/cucumber/wire_support/wire_packet_spec.rb +4 -4
- data/spec/cucumber/wire_support/wire_step_definition_spec.rb +1 -1
- data/spec/spec_helper.rb +2 -2
- metadata +98 -128
- data/legacy_features/html_formatter.feature +0 -8
- data/legacy_features/html_formatter/a.html +0 -561
@@ -2,25 +2,25 @@ module Cucumber
|
|
2
2
|
module WireSupport
|
3
3
|
class WireStepDefinition
|
4
4
|
attr_reader :regexp_source, :file_colon_line
|
5
|
-
|
5
|
+
|
6
6
|
def initialize(connection, data)
|
7
7
|
@connection = connection
|
8
8
|
@id = data['id']
|
9
9
|
@regexp_source = data['regexp'] || "Unknown"
|
10
10
|
@file_colon_line = data['source'] || "Unknown"
|
11
11
|
end
|
12
|
-
|
12
|
+
|
13
13
|
def invoke(args)
|
14
14
|
prepared_args = args.map{ |arg| prepare(arg) }
|
15
15
|
@connection.invoke(@id, prepared_args)
|
16
16
|
end
|
17
17
|
|
18
18
|
private
|
19
|
-
|
19
|
+
|
20
20
|
def prepare(arg)
|
21
21
|
return arg unless arg.is_a?(Cucumber::Ast::Table)
|
22
22
|
arg.raw
|
23
23
|
end
|
24
24
|
end
|
25
25
|
end
|
26
|
-
end
|
26
|
+
end
|
@@ -28,7 +28,7 @@ module Cucumber
|
|
28
28
|
background = Background.new(
|
29
29
|
comment=Comment.new(''),
|
30
30
|
line=2,
|
31
|
-
keyword="",
|
31
|
+
keyword="",
|
32
32
|
title="",
|
33
33
|
description="",
|
34
34
|
steps=[
|
@@ -37,10 +37,10 @@ module Cucumber
|
|
37
37
|
|
38
38
|
scenario = Scenario.new(
|
39
39
|
background,
|
40
|
-
comment=Comment.new(""),
|
40
|
+
comment=Comment.new(""),
|
41
41
|
tags=Tags.new(98,[]),
|
42
42
|
line=99,
|
43
|
-
keyword="",
|
43
|
+
keyword="",
|
44
44
|
title="",
|
45
45
|
description="",
|
46
46
|
steps=[]
|
@@ -110,6 +110,6 @@ module Cucumber
|
|
110
110
|
|
111
111
|
end
|
112
112
|
end
|
113
|
-
|
113
|
+
|
114
114
|
end
|
115
115
|
end
|
@@ -9,23 +9,23 @@ module Cucumber
|
|
9
9
|
before(:each) do
|
10
10
|
@ps = DocString.new("<book>\n<qty>\n", '')
|
11
11
|
end
|
12
|
-
|
12
|
+
|
13
13
|
it "should return a new doc_string with arguments replaced with values" do
|
14
14
|
doc_string_with_replaced_arg = @ps.arguments_replaced({'<book>' => 'Life is elsewhere', '<qty>' => '5'})
|
15
|
-
|
15
|
+
|
16
16
|
doc_string_with_replaced_arg.to_step_definition_arg.should == "Life is elsewhere\n5\n"
|
17
17
|
end
|
18
|
-
|
18
|
+
|
19
19
|
it "should not change the original doc_string" do
|
20
20
|
doc_string_with_replaced_arg = @ps.arguments_replaced({'<book>' => 'Life is elsewhere'})
|
21
|
-
|
21
|
+
|
22
22
|
@ps.to_s.should_not include("Life is elsewhere")
|
23
23
|
end
|
24
24
|
|
25
25
|
it "should replaced nil with empty string" do
|
26
26
|
ps = DocString.new("'<book>'", '')
|
27
|
-
doc_string_with_replaced_arg = ps.arguments_replaced({'<book>' => nil})
|
28
|
-
|
27
|
+
doc_string_with_replaced_arg = ps.arguments_replaced({'<book>' => nil})
|
28
|
+
|
29
29
|
doc_string_with_replaced_arg.to_step_definition_arg.should == "''"
|
30
30
|
end
|
31
31
|
|
@@ -34,7 +34,7 @@ module Cucumber
|
|
34
34
|
end
|
35
35
|
|
36
36
|
end
|
37
|
-
|
37
|
+
|
38
38
|
end
|
39
39
|
end
|
40
|
-
end
|
40
|
+
end
|
@@ -10,7 +10,7 @@ module Cucumber
|
|
10
10
|
raise "I flunked"
|
11
11
|
end
|
12
12
|
end
|
13
|
-
|
13
|
+
|
14
14
|
def create_feature(dsl)
|
15
15
|
dsl.Given /^a (.*) step with an inline arg:$/ do |what, table|
|
16
16
|
end
|
@@ -26,13 +26,13 @@ module Cucumber
|
|
26
26
|
%w{4444 55555 666666}
|
27
27
|
])
|
28
28
|
doc_string = Ast::DocString.new(%{\n I like\nCucumber sandwich\n}, '')
|
29
|
-
|
29
|
+
|
30
30
|
background = Ast::Background.new(Ast::Comment.new(""), 2, "Background:", "", "",
|
31
31
|
[
|
32
32
|
Step.new(3, "Given", "a passing step")
|
33
33
|
]
|
34
34
|
)
|
35
|
-
|
35
|
+
|
36
36
|
f = Ast::Feature.new(
|
37
37
|
background,
|
38
38
|
Ast::Comment.new("# My feature comment\n"),
|
@@ -59,4 +59,4 @@ module Cucumber
|
|
59
59
|
end
|
60
60
|
end
|
61
61
|
end
|
62
|
-
end
|
62
|
+
end
|
@@ -9,7 +9,7 @@ module Cucumber
|
|
9
9
|
it "should convert to sexp" do
|
10
10
|
step_mother = Cucumber::Runtime.new
|
11
11
|
step_mother.load_programming_language('rb')
|
12
|
-
dsl = Object.new
|
12
|
+
dsl = Object.new
|
13
13
|
dsl.extend Cucumber::RbSupport::RbDsl
|
14
14
|
|
15
15
|
feature = create_feature(dsl)
|
@@ -18,36 +18,36 @@ module Cucumber
|
|
18
18
|
else
|
19
19
|
feature_file_path = "features/pretty_printing.feature"
|
20
20
|
end
|
21
|
-
feature.to_sexp.should ==
|
21
|
+
feature.to_sexp.should ==
|
22
22
|
[:feature,
|
23
23
|
feature_file_path,
|
24
|
-
"Pretty printing",
|
25
|
-
[:comment, "# My feature comment\n"],
|
26
|
-
[:tag, "one"],
|
27
|
-
[:tag, "two"],
|
24
|
+
"Pretty printing",
|
25
|
+
[:comment, "# My feature comment\n"],
|
26
|
+
[:tag, "one"],
|
27
|
+
[:tag, "two"],
|
28
28
|
[:background, 2, 'Background:',
|
29
29
|
[:step, 3, "Given", "a passing step"]],
|
30
|
-
[:scenario, 9, "Scenario:",
|
31
|
-
"A Scenario",
|
32
|
-
[:comment, " # My scenario comment \n# On two lines \n"],
|
33
|
-
[:tag, "three"],
|
30
|
+
[:scenario, 9, "Scenario:",
|
31
|
+
"A Scenario",
|
32
|
+
[:comment, " # My scenario comment \n# On two lines \n"],
|
33
|
+
[:tag, "three"],
|
34
34
|
[:tag, "four"],
|
35
35
|
[:step_invocation, 3, "Given", "a passing step"], # From the background
|
36
36
|
[:step_invocation, 10, "Given", "a passing step with an inline arg:",
|
37
|
-
[:table,
|
37
|
+
[:table,
|
38
38
|
[:row, -1,
|
39
|
-
[:cell, "1"], [:cell, "22"], [:cell, "333"]],
|
39
|
+
[:cell, "1"], [:cell, "22"], [:cell, "333"]],
|
40
40
|
[:row, -1,
|
41
|
-
[:cell, "4444"], [:cell, "55555"], [:cell, "666666"]]]],
|
42
|
-
[:step_invocation, 11, "Given", "a happy step with an inline arg:",
|
43
|
-
[:doc_string, "\n I like\nCucumber sandwich\n"]],
|
44
|
-
[:step_invocation, 12, "Given", "a failing step"]]]
|
41
|
+
[:cell, "4444"], [:cell, "55555"], [:cell, "666666"]]]],
|
42
|
+
[:step_invocation, 11, "Given", "a happy step with an inline arg:",
|
43
|
+
[:doc_string, "\n I like\nCucumber sandwich\n"]],
|
44
|
+
[:step_invocation, 12, "Given", "a failing step"]]]
|
45
45
|
end
|
46
46
|
|
47
47
|
it "should store OS specific file paths" do
|
48
48
|
step_mother = Cucumber::Runtime.new
|
49
49
|
step_mother.load_programming_language('rb')
|
50
|
-
dsl = Object.new
|
50
|
+
dsl = Object.new
|
51
51
|
dsl.extend Cucumber::RbSupport::RbDsl
|
52
52
|
feature = create_feature(dsl)
|
53
53
|
|
@@ -55,7 +55,7 @@ module Cucumber
|
|
55
55
|
feature.file.should == 'features\pretty_printing.feature'
|
56
56
|
else
|
57
57
|
feature.file.should == 'features/pretty_printing.feature'
|
58
|
-
end
|
58
|
+
end
|
59
59
|
end
|
60
60
|
|
61
61
|
end
|
@@ -6,11 +6,11 @@ module Cucumber::Ast
|
|
6
6
|
describe "a header row" do
|
7
7
|
before(:each) do
|
8
8
|
@row = OutlineTable::ExampleRow.new(
|
9
|
-
mock('table', :index => 0),
|
9
|
+
mock('table', :index => 0),
|
10
10
|
[mock('cell', :status= => nil)]
|
11
11
|
)
|
12
12
|
end
|
13
|
-
|
13
|
+
|
14
14
|
it "should raise an error if you try to call #failed?" do
|
15
15
|
@row.accept_plain mock('visitor', :visit_table_cell => nil)
|
16
16
|
lambda{ @row.failed? }.should raise_error(NoMethodError, /cannot pass or fail/)
|
@@ -18,4 +18,4 @@ module Cucumber::Ast
|
|
18
18
|
end
|
19
19
|
end
|
20
20
|
end
|
21
|
-
end
|
21
|
+
end
|
@@ -15,7 +15,7 @@ module Cucumber
|
|
15
15
|
])
|
16
16
|
cells = invocation_table.cells_rows[1]
|
17
17
|
step_invocation = step.step_invocation_from_cells(cells)
|
18
|
-
|
18
|
+
|
19
19
|
step_invocation.name.should == 'a green cucumber'
|
20
20
|
end
|
21
21
|
|
@@ -28,7 +28,7 @@ module Cucumber
|
|
28
28
|
])
|
29
29
|
cells = invocation_table.cells_rows[1]
|
30
30
|
step_invocation = step.step_invocation_from_cells(cells)
|
31
|
-
|
31
|
+
|
32
32
|
step_invocation.name.should == 'a cucumber'
|
33
33
|
end
|
34
34
|
|
@@ -43,7 +43,7 @@ module Cucumber
|
|
43
43
|
])
|
44
44
|
cells = invocation_table.cells_rows[1]
|
45
45
|
step_invocation = step.step_invocation_from_cells(cells)
|
46
|
-
|
46
|
+
|
47
47
|
step_invocation.instance_variable_get('@multiline_arg').raw.should == [%w{taste_juicy color_green}]
|
48
48
|
end
|
49
49
|
|
@@ -58,7 +58,7 @@ module Cucumber
|
|
58
58
|
])
|
59
59
|
cells = invocation_table.cells_rows[1]
|
60
60
|
step_invocation = step.step_invocation_from_cells(cells)
|
61
|
-
|
61
|
+
|
62
62
|
step_invocation.instance_variable_get('@multiline_arg').to_step_definition_arg.should == 'taste_juicy color_green'
|
63
63
|
end
|
64
64
|
end
|
@@ -54,7 +54,7 @@ module Cucumber
|
|
54
54
|
@table.map_column!('one') { |v| v.to_i }
|
55
55
|
@table.hashes.first['one'].should == 4444
|
56
56
|
end
|
57
|
-
|
57
|
+
|
58
58
|
it "applies the block once to each value" do
|
59
59
|
headers = ['header']
|
60
60
|
rows = ['value']
|
@@ -102,7 +102,7 @@ module Cucumber
|
|
102
102
|
%w{4444 55555 666666}
|
103
103
|
])
|
104
104
|
end
|
105
|
-
|
105
|
+
|
106
106
|
it "returns nil if headers do not match" do
|
107
107
|
@table.match('does,not,match').should be_nil
|
108
108
|
end
|
@@ -121,14 +121,14 @@ module Cucumber
|
|
121
121
|
%w{two 22222}
|
122
122
|
])
|
123
123
|
end
|
124
|
-
|
125
|
-
it "should be convertible in to an array where each row is a hash" do
|
124
|
+
|
125
|
+
it "should be convertible in to an array where each row is a hash" do
|
126
126
|
@table.transpose.hashes[0].should == {'one' => '1111', 'two' => '22222'}
|
127
127
|
end
|
128
128
|
end
|
129
|
-
|
129
|
+
|
130
130
|
describe "#rows_hash" do
|
131
|
-
|
131
|
+
|
132
132
|
it "should return a hash of the rows" do
|
133
133
|
table = Table.new([
|
134
134
|
%w{one 1111},
|
@@ -201,6 +201,33 @@ module Cucumber
|
|
201
201
|
table.hashes.first.keys.should =~ %w[hello foo]
|
202
202
|
end
|
203
203
|
|
204
|
+
it "should allow mapping of headers before table.hashes has been accessed" do
|
205
|
+
table = Table.new([
|
206
|
+
['HELLO', 'WORLD'],
|
207
|
+
%w{4444 55555}
|
208
|
+
])
|
209
|
+
|
210
|
+
table.map_headers! do |header|
|
211
|
+
header.downcase
|
212
|
+
end
|
213
|
+
|
214
|
+
table.hashes.first.keys.should =~ %w[hello world]
|
215
|
+
end
|
216
|
+
|
217
|
+
it "should allow mapping of headers after table.hashes has been accessed" do
|
218
|
+
table = Table.new([
|
219
|
+
['HELLO', 'WORLD'],
|
220
|
+
%w{4444 55555}
|
221
|
+
])
|
222
|
+
|
223
|
+
dev_null = table.hashes.size
|
224
|
+
|
225
|
+
table.map_headers! do |header|
|
226
|
+
header.downcase
|
227
|
+
end
|
228
|
+
|
229
|
+
table.hashes.first.keys.should =~ %w[hello world]
|
230
|
+
end
|
204
231
|
end
|
205
232
|
|
206
233
|
describe "replacing arguments" do
|
@@ -243,7 +270,7 @@ module Cucumber
|
|
243
270
|
%w{cat}
|
244
271
|
])
|
245
272
|
table_with_replaced_args = table.arguments_replaced({'<book>' => nil})
|
246
|
-
|
273
|
+
|
247
274
|
table_with_replaced_args.hashes[0]['book'].should == 'cat'
|
248
275
|
end
|
249
276
|
|
@@ -258,13 +285,13 @@ module Cucumber
|
|
258
285
|
['book', 'qty'],
|
259
286
|
['<book>', nil],
|
260
287
|
])
|
261
|
-
lambda{
|
288
|
+
lambda{
|
262
289
|
table.arguments_replaced({'<book>' => nil, '<qty>' => '5'})
|
263
290
|
}.should_not raise_error
|
264
291
|
end
|
265
292
|
|
266
293
|
end
|
267
|
-
|
294
|
+
|
268
295
|
describe "diff!" do
|
269
296
|
it "should detect a complex diff" do
|
270
297
|
t1 = table(%{
|
@@ -273,11 +300,11 @@ module Cucumber
|
|
273
300
|
| 999999999 | 0000000000 | 01010101010 | 121212121212 |
|
274
301
|
| 4000 | ABC | DEF | 50000 |
|
275
302
|
}, __FILE__, __LINE__)
|
276
|
-
|
303
|
+
|
277
304
|
t2 = table(%{
|
278
|
-
| a | 4444 | 1 |
|
279
|
-
| bb | 88888888 | 55555 |
|
280
|
-
| ccc | xxxxxxxx | 999999999 |
|
305
|
+
| a | 4444 | 1 |
|
306
|
+
| bb | 88888888 | 55555 |
|
307
|
+
| ccc | xxxxxxxx | 999999999 |
|
281
308
|
| dddd | 4000 | 300 |
|
282
309
|
| e | 50000 | 4000 |
|
283
310
|
}, __FILE__, __LINE__)
|
@@ -346,7 +373,7 @@ module Cucumber
|
|
346
373
|
['name', 'male'],
|
347
374
|
['aslak', true]
|
348
375
|
])
|
349
|
-
t1.map_column!('male') {
|
376
|
+
t1.map_column!('male') {
|
350
377
|
'true'
|
351
378
|
}
|
352
379
|
t2 = Table.new([
|
@@ -405,7 +432,7 @@ module Cucumber
|
|
405
432
|
t1.hashes
|
406
433
|
end.should raise_error(%{2 headers matched /uk/: ["Cuke", "Duke"]})
|
407
434
|
end
|
408
|
-
|
435
|
+
|
409
436
|
describe "raising" do
|
410
437
|
before do
|
411
438
|
@t = table(%{
|
@@ -414,7 +441,7 @@ module Cucumber
|
|
414
441
|
}, __FILE__, __LINE__)
|
415
442
|
@t.should_not == nil
|
416
443
|
end
|
417
|
-
|
444
|
+
|
418
445
|
it "should raise on missing rows" do
|
419
446
|
t = table(%{
|
420
447
|
| a | b |
|
@@ -448,13 +475,7 @@ module Cucumber
|
|
448
475
|
}, __FILE__, __LINE__)
|
449
476
|
lambda { t1.dup.diff!(t2) }.should raise_error
|
450
477
|
|
451
|
-
|
452
|
-
pending "http://groups.google.com/group/cukes/browse_thread/thread/5d96431c8245f05f" do
|
453
|
-
lambda { t1.dup.diff!(t2, :surplus_row => false) }.should_not raise_error
|
454
|
-
end
|
455
|
-
rescue => e
|
456
|
-
warn(e.message + " - see http://www.ruby-forum.com/topic/208508")
|
457
|
-
end
|
478
|
+
lambda { t1.dup.diff!(t2, :surplus_row => false) }.should_not raise_error
|
458
479
|
end
|
459
480
|
|
460
481
|
it "should raise on missing columns" do
|
@@ -494,22 +515,22 @@ module Cucumber
|
|
494
515
|
it "should allow Array of Hash" do
|
495
516
|
t1 = Table.new([{'name' => 'aslak', 'male' => 'true'}])
|
496
517
|
t1.to_s(:indent => 12, :color => false).should == %{
|
497
|
-
| name |
|
498
|
-
|
|
518
|
+
| male | name |
|
519
|
+
| true | aslak |
|
499
520
|
}
|
500
521
|
end
|
501
522
|
end
|
502
523
|
|
503
524
|
it "should convert to sexp" do
|
504
|
-
@table.to_sexp.should ==
|
505
|
-
[:table,
|
525
|
+
@table.to_sexp.should ==
|
526
|
+
[:table,
|
506
527
|
[:row, -1,
|
507
|
-
[:cell, "one"],
|
528
|
+
[:cell, "one"],
|
508
529
|
[:cell, "four"],
|
509
530
|
[:cell, "seven"]
|
510
531
|
],
|
511
532
|
[:row, -1,
|
512
|
-
[:cell, "4444"],
|
533
|
+
[:cell, "4444"],
|
513
534
|
[:cell, "55555"],
|
514
535
|
[:cell, "666666"]]]
|
515
536
|
end
|
@@ -2,10 +2,18 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
module Cucumber::Ast
|
4
4
|
describe TreeWalker do
|
5
|
+
let(:tree_walker) do
|
6
|
+
TreeWalker.new(nil, [mock('listener', :before_visit_features => nil)])
|
7
|
+
end
|
8
|
+
let(:features) { mock('features', :accept => nil) }
|
9
|
+
|
5
10
|
it "should visit features" do
|
6
|
-
|
7
|
-
|
8
|
-
|
11
|
+
tree_walker.should_not_receive(:warn)
|
12
|
+
tree_walker.visit_features(features)
|
13
|
+
end
|
14
|
+
|
15
|
+
it "should return self" do
|
16
|
+
tree_walker.visit_features(features).should == tree_walker
|
9
17
|
end
|
10
18
|
end
|
11
|
-
end
|
19
|
+
end
|