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
@@ -36,10 +36,10 @@ module Cucumber
|
|
36
36
|
case pipe
|
37
37
|
when :stdout
|
38
38
|
wrapped = $stdout
|
39
|
-
$stdout = wrapped.unwrap!
|
39
|
+
$stdout = wrapped.unwrap! if $stdout.respond_to?(:unwrap!)
|
40
40
|
when :stderr
|
41
41
|
wrapped = $stderr
|
42
|
-
$stderr = wrapped.unwrap!
|
42
|
+
$stderr = wrapped.unwrap! if $stderr.respond_to?(:unwrap!)
|
43
43
|
end
|
44
44
|
wrapped
|
45
45
|
end
|
@@ -1,3 +1,4 @@
|
|
1
|
+
require 'multi_json'
|
1
2
|
require 'cucumber/formatter/json'
|
2
3
|
|
3
4
|
module Cucumber
|
@@ -5,7 +6,7 @@ module Cucumber
|
|
5
6
|
# The formatter used for <tt>--format json_pretty</tt>
|
6
7
|
class JsonPretty < Json
|
7
8
|
def after_features(features)
|
8
|
-
@io.write(
|
9
|
+
@io.write(MultiJson.dump(@obj, :pretty => true))
|
9
10
|
end
|
10
11
|
end
|
11
12
|
end
|
@@ -18,10 +18,10 @@ module Cucumber
|
|
18
18
|
include Io
|
19
19
|
include Gherkin::Formatter::Escaping
|
20
20
|
attr_writer :indent
|
21
|
-
attr_reader :
|
21
|
+
attr_reader :runtime
|
22
22
|
|
23
|
-
def initialize(
|
24
|
-
@
|
23
|
+
def initialize(runtime, path_or_io, options)
|
24
|
+
@runtime, @io, @options = runtime, ensure_io(path_or_io, "pretty"), options
|
25
25
|
@exceptions = []
|
26
26
|
@indent = 0
|
27
27
|
@prefixes = options[:prefixes] || {}
|
@@ -42,7 +42,7 @@ module Cucumber
|
|
42
42
|
@io = ensure_file(file, "pretty")
|
43
43
|
end
|
44
44
|
end
|
45
|
-
|
45
|
+
|
46
46
|
def comment_line(comment_line)
|
47
47
|
@io.puts(comment_line.indent(@indent))
|
48
48
|
@io.flush
|
@@ -72,7 +72,7 @@ module Cucumber
|
|
72
72
|
@indent = 2
|
73
73
|
@scenario_indent = 2
|
74
74
|
end
|
75
|
-
|
75
|
+
|
76
76
|
def after_feature_element(feature_element)
|
77
77
|
@io.puts
|
78
78
|
@io.flush
|
@@ -90,7 +90,7 @@ module Cucumber
|
|
90
90
|
@io.flush
|
91
91
|
end
|
92
92
|
|
93
|
-
def background_name(keyword, name, file_colon_line, source_indent)
|
93
|
+
def background_name(keyword, name, file_colon_line, source_indent)
|
94
94
|
print_feature_element_name(keyword, name, file_colon_line, source_indent)
|
95
95
|
end
|
96
96
|
|
@@ -99,7 +99,7 @@ module Cucumber
|
|
99
99
|
@io.puts
|
100
100
|
@visiting_first_example_name = true
|
101
101
|
end
|
102
|
-
|
102
|
+
|
103
103
|
def examples_name(keyword, name)
|
104
104
|
@io.puts unless @visiting_first_example_name
|
105
105
|
@visiting_first_example_name = false
|
@@ -110,7 +110,7 @@ module Cucumber
|
|
110
110
|
@indent = 6
|
111
111
|
@scenario_indent = 6
|
112
112
|
end
|
113
|
-
|
113
|
+
|
114
114
|
def before_outline_table(outline_table)
|
115
115
|
@table = outline_table
|
116
116
|
end
|
@@ -119,7 +119,7 @@ module Cucumber
|
|
119
119
|
@table = nil
|
120
120
|
@indent = 4
|
121
121
|
end
|
122
|
-
|
122
|
+
|
123
123
|
def scenario_name(keyword, name, file_colon_line, source_indent)
|
124
124
|
print_feature_element_name(keyword, name, file_colon_line, source_indent)
|
125
125
|
end
|
@@ -171,7 +171,7 @@ module Cucumber
|
|
171
171
|
return if @options[:no_multiline] || @hide_this_step
|
172
172
|
@table = multiline_arg
|
173
173
|
end
|
174
|
-
|
174
|
+
|
175
175
|
def after_multiline_arg(multiline_arg)
|
176
176
|
@table = nil
|
177
177
|
end
|
@@ -208,7 +208,7 @@ module Cucumber
|
|
208
208
|
end
|
209
209
|
|
210
210
|
private
|
211
|
-
|
211
|
+
|
212
212
|
def print_feature_element_name(keyword, name, file_colon_line, source_indent)
|
213
213
|
@io.puts if @scenario_indent == 6
|
214
214
|
names = name.empty? ? [name] : name.split("\n")
|
@@ -220,7 +220,7 @@ module Cucumber
|
|
220
220
|
end
|
221
221
|
@io.puts
|
222
222
|
names[1..-1].each {|s| @io.puts " #{s}"}
|
223
|
-
@io.flush
|
223
|
+
@io.flush
|
224
224
|
end
|
225
225
|
|
226
226
|
def cell_prefix(status)
|
@@ -7,10 +7,10 @@ module Cucumber
|
|
7
7
|
class Progress
|
8
8
|
include Console
|
9
9
|
include Io
|
10
|
-
attr_reader :
|
10
|
+
attr_reader :runtime
|
11
11
|
|
12
|
-
def initialize(
|
13
|
-
@
|
12
|
+
def initialize(runtime, path_or_io, options)
|
13
|
+
@runtime, @io, @options = runtime, ensure_io(path_or_io, "progress"), options
|
14
14
|
end
|
15
15
|
|
16
16
|
def after_features(features)
|
@@ -24,12 +24,12 @@ module Cucumber
|
|
24
24
|
end
|
25
25
|
|
26
26
|
def after_feature_element(*args)
|
27
|
-
progress(:failed) if @exception_raised
|
27
|
+
progress(:failed) if (defined? @exception_raised) and (@exception_raised)
|
28
28
|
@exception_raised = false
|
29
29
|
end
|
30
30
|
|
31
31
|
def before_steps(*args)
|
32
|
-
progress(:failed) if @exception_raised
|
32
|
+
progress(:failed) if (defined? @exception_raised) and (@exception_raised)
|
33
33
|
@exception_raised = false
|
34
34
|
end
|
35
35
|
|
@@ -15,18 +15,18 @@ module Cucumber
|
|
15
15
|
class Rerun
|
16
16
|
include Io
|
17
17
|
|
18
|
-
def initialize(
|
18
|
+
def initialize(runtime, path_or_io, options)
|
19
19
|
@io = ensure_io(path_or_io, "rerun")
|
20
20
|
@options = options
|
21
21
|
@file_names = []
|
22
22
|
@file_colon_lines = Hash.new{|h,k| h[k] = []}
|
23
23
|
end
|
24
|
-
|
24
|
+
|
25
25
|
def before_feature(feature_element)
|
26
26
|
@lines = []
|
27
27
|
@file = feature_element.file
|
28
28
|
end
|
29
|
-
|
29
|
+
|
30
30
|
def after_feature(*)
|
31
31
|
unless @lines.empty?
|
32
32
|
after_first_time do
|
@@ -67,7 +67,7 @@ module Cucumber
|
|
67
67
|
@header_row = true
|
68
68
|
@in_examples = true
|
69
69
|
end
|
70
|
-
|
70
|
+
|
71
71
|
def after_examples(*args)
|
72
72
|
@in_examples = false
|
73
73
|
end
|
@@ -81,7 +81,7 @@ module Cucumber
|
|
81
81
|
end
|
82
82
|
|
83
83
|
private
|
84
|
-
|
84
|
+
|
85
85
|
def after_first_time
|
86
86
|
yield if @not_first_time
|
87
87
|
@not_first_time = true
|
@@ -3,10 +3,10 @@ module Cucumber
|
|
3
3
|
# The formatter used for <tt>--format steps</tt>
|
4
4
|
class Steps
|
5
5
|
|
6
|
-
def initialize(
|
6
|
+
def initialize(runtime, path_or_io, options)
|
7
7
|
@io = ensure_io(path_or_io, "steps")
|
8
8
|
@options = options
|
9
|
-
@step_definition_files = collect_steps(
|
9
|
+
@step_definition_files = collect_steps(runtime)
|
10
10
|
end
|
11
11
|
|
12
12
|
def after_features(features)
|
@@ -19,7 +19,7 @@ module Cucumber
|
|
19
19
|
count = 0
|
20
20
|
@step_definition_files.keys.sort.each do |step_definition_file|
|
21
21
|
@io.puts step_definition_file
|
22
|
-
|
22
|
+
|
23
23
|
sources = @step_definition_files[step_definition_file]
|
24
24
|
source_indent = source_indent(sources)
|
25
25
|
sources.sort.each do |file_colon_line, regexp_source|
|
@@ -33,8 +33,8 @@ module Cucumber
|
|
33
33
|
@io.puts "#{count} step definition(s) in #{@step_definition_files.size} source file(s)."
|
34
34
|
end
|
35
35
|
|
36
|
-
def collect_steps(
|
37
|
-
|
36
|
+
def collect_steps(runtime)
|
37
|
+
runtime.step_definitions.inject({}) do |step_definitions, step_definition|
|
38
38
|
step_definitions[step_definition.file] ||= []
|
39
39
|
step_definitions[step_definition.file] << [ step_definition.file_colon_line, step_definition.regexp_source ]
|
40
40
|
step_definitions
|
@@ -46,4 +46,4 @@ module Cucumber
|
|
46
46
|
end
|
47
47
|
end
|
48
48
|
end
|
49
|
-
end
|
49
|
+
end
|
@@ -2,14 +2,14 @@ module Cucumber
|
|
2
2
|
module Formatter
|
3
3
|
module Summary
|
4
4
|
|
5
|
-
def scenario_summary(
|
6
|
-
scenarios_proc = lambda{|status|
|
7
|
-
dump_count(
|
5
|
+
def scenario_summary(runtime, &block)
|
6
|
+
scenarios_proc = lambda{|status| runtime.scenarios(status)}
|
7
|
+
dump_count(runtime.scenarios.length, "scenario") + dump_status_counts(scenarios_proc, &block)
|
8
8
|
end
|
9
9
|
|
10
|
-
def step_summary(
|
11
|
-
steps_proc = lambda{|status|
|
12
|
-
dump_count(
|
10
|
+
def step_summary(runtime, &block)
|
11
|
+
steps_proc = lambda{|status| runtime.steps(status)}
|
12
|
+
dump_count(runtime.steps.length, "step") + dump_status_counts(steps_proc, &block)
|
13
13
|
end
|
14
14
|
|
15
15
|
private
|
@@ -2,10 +2,10 @@
|
|
2
2
|
# Tips for improvement - esp. ruby 1.9: http://www.ruby-forum.com/topic/184730
|
3
3
|
require 'cucumber/platform'
|
4
4
|
require 'cucumber/formatter/ansicolor'
|
5
|
-
$KCODE='u'
|
5
|
+
$KCODE='u' if Cucumber::RUBY_1_8_7
|
6
6
|
|
7
7
|
if Cucumber::WINDOWS
|
8
|
-
require 'iconv'
|
8
|
+
require 'iconv' if Cucumber::RUBY_1_8_7
|
9
9
|
|
10
10
|
if ENV['CUCUMBER_OUTPUT_ENCODING']
|
11
11
|
Cucumber::CODEPAGE = ENV['CUCUMBER_OUTPUT_ENCODING']
|
@@ -27,14 +27,7 @@ if Cucumber::WINDOWS
|
|
27
27
|
o.instance_eval do
|
28
28
|
alias cucumber_print print
|
29
29
|
def print(*a)
|
30
|
-
if Cucumber::
|
31
|
-
begin
|
32
|
-
cucumber_print(*a.map{|arg| arg.to_s.encode(Encoding.default_external)})
|
33
|
-
rescue Encoding::UndefinedConversionError => e
|
34
|
-
STDERR.cucumber_puts("WARNING: #{e.message}")
|
35
|
-
cucumber_print(*a)
|
36
|
-
end
|
37
|
-
else
|
30
|
+
if Cucumber::RUBY_1_8_7
|
38
31
|
begin
|
39
32
|
cucumber_print(*Iconv.iconv(Cucumber::CODEPAGE, "UTF-8", *a.map{|a|a.to_s}))
|
40
33
|
rescue Iconv::InvalidEncoding => e
|
@@ -44,19 +37,19 @@ if Cucumber::WINDOWS
|
|
44
37
|
STDERR.cucumber_puts("WARNING: #{e.message}")
|
45
38
|
cucumber_print(*a)
|
46
39
|
end
|
40
|
+
else
|
41
|
+
begin
|
42
|
+
cucumber_print(*a.map{|arg| arg.to_s.encode(Encoding.default_external)})
|
43
|
+
rescue Encoding::UndefinedConversionError => e
|
44
|
+
STDERR.cucumber_puts("WARNING: #{e.message}")
|
45
|
+
cucumber_print(*a)
|
46
|
+
end
|
47
47
|
end
|
48
48
|
end
|
49
49
|
|
50
50
|
alias cucumber_puts puts
|
51
51
|
def puts(*a)
|
52
|
-
if Cucumber::
|
53
|
-
begin
|
54
|
-
cucumber_puts(*a.map{|arg| arg.to_s.encode(Encoding.default_external)})
|
55
|
-
rescue Encoding::UndefinedConversionError => e
|
56
|
-
STDERR.cucumber_puts("WARNING: #{e.message}")
|
57
|
-
cucumber_puts(*a)
|
58
|
-
end
|
59
|
-
else
|
52
|
+
if Cucumber::RUBY_1_8_7
|
60
53
|
begin
|
61
54
|
cucumber_puts(*Iconv.iconv(Cucumber::CODEPAGE, "UTF-8", *a.map{|a|a.to_s}))
|
62
55
|
rescue Iconv::InvalidEncoding => e
|
@@ -66,6 +59,13 @@ if Cucumber::WINDOWS
|
|
66
59
|
STDERR.cucumber_puts("WARNING: #{e.message}")
|
67
60
|
cucumber_puts(*a)
|
68
61
|
end
|
62
|
+
else
|
63
|
+
begin
|
64
|
+
cucumber_puts(*a.map{|arg| arg.to_s.encode(Encoding.default_external)})
|
65
|
+
rescue Encoding::UndefinedConversionError => e
|
66
|
+
STDERR.cucumber_puts("WARNING: #{e.message}")
|
67
|
+
cucumber_puts(*a)
|
68
|
+
end
|
69
69
|
end
|
70
70
|
end
|
71
71
|
end
|
@@ -10,8 +10,8 @@ module Cucumber
|
|
10
10
|
attr_accessor :mean_duration, :status
|
11
11
|
end
|
12
12
|
|
13
|
-
def initialize(
|
14
|
-
@
|
13
|
+
def initialize(runtime, path_or_io, options)
|
14
|
+
@runtime = runtime
|
15
15
|
@io = ensure_io(path_or_io, "usage")
|
16
16
|
@options = options
|
17
17
|
@stepdef_to_match = Hash.new{|h,stepdef_key| h[stepdef_key] = []}
|
@@ -31,9 +31,9 @@ module Cucumber
|
|
31
31
|
stepdef_key = StepDefKey.new(step_match.step_definition.regexp_source, step_match.step_definition.file_colon_line)
|
32
32
|
|
33
33
|
@stepdef_to_match[stepdef_key] << {
|
34
|
-
:keyword => keyword,
|
35
|
-
:step_match => step_match,
|
36
|
-
:status => status,
|
34
|
+
:keyword => keyword,
|
35
|
+
:step_match => step_match,
|
36
|
+
:status => status,
|
37
37
|
:file_colon_line => @step.file_colon_line,
|
38
38
|
:duration => @duration
|
39
39
|
}
|
@@ -117,11 +117,11 @@ module Cucumber
|
|
117
117
|
end
|
118
118
|
|
119
119
|
def add_unused_stepdefs
|
120
|
-
@
|
120
|
+
@runtime.unmatched_step_definitions.each do |step_definition|
|
121
121
|
stepdef_key = StepDefKey.new(step_definition.regexp_source, step_definition.file_colon_line)
|
122
122
|
@stepdef_to_match[stepdef_key] = []
|
123
123
|
end
|
124
124
|
end
|
125
125
|
end
|
126
126
|
end
|
127
|
-
end
|
127
|
+
end
|
@@ -16,8 +16,8 @@ module Cucumber
|
|
16
16
|
|
17
17
|
def feature(feature)
|
18
18
|
@feature = Ast::Feature.new(
|
19
|
-
nil,
|
20
|
-
Ast::Comment.new(feature.comments.map{|comment| comment.value}.join("\n")),
|
19
|
+
nil,
|
20
|
+
Ast::Comment.new(feature.comments.map{|comment| comment.value}.join("\n")),
|
21
21
|
Ast::Tags.new(nil, feature.tags),
|
22
22
|
feature.keyword,
|
23
23
|
feature.name.lstrip,
|
@@ -30,12 +30,12 @@ module Cucumber
|
|
30
30
|
|
31
31
|
def background(background)
|
32
32
|
@background = Ast::Background.new(
|
33
|
-
Ast::Comment.new(background.comments.map{|comment| comment.value}.join("\n")),
|
34
|
-
background.line,
|
35
|
-
background.keyword,
|
36
|
-
background.name,
|
33
|
+
Ast::Comment.new(background.comments.map{|comment| comment.value}.join("\n")),
|
34
|
+
background.line,
|
35
|
+
background.keyword,
|
36
|
+
background.name,
|
37
37
|
background.description,
|
38
|
-
|
38
|
+
[]
|
39
39
|
)
|
40
40
|
@feature.background = @background
|
41
41
|
@background.feature = @feature
|
@@ -45,14 +45,14 @@ module Cucumber
|
|
45
45
|
|
46
46
|
def scenario(statement)
|
47
47
|
scenario = Ast::Scenario.new(
|
48
|
-
@background,
|
49
|
-
Ast::Comment.new(statement.comments.map{|comment| comment.value}.join("\n")),
|
50
|
-
Ast::Tags.new(nil, statement.tags),
|
51
|
-
statement.line,
|
52
|
-
statement.keyword,
|
48
|
+
@background,
|
49
|
+
Ast::Comment.new(statement.comments.map{|comment| comment.value}.join("\n")),
|
50
|
+
Ast::Tags.new(nil, statement.tags),
|
51
|
+
statement.line,
|
52
|
+
statement.keyword,
|
53
53
|
statement.name,
|
54
|
-
statement.description,
|
55
|
-
|
54
|
+
statement.description,
|
55
|
+
[]
|
56
56
|
)
|
57
57
|
@feature.add_feature_element(scenario)
|
58
58
|
@background.feature_elements << scenario if @background
|
@@ -62,15 +62,15 @@ module Cucumber
|
|
62
62
|
|
63
63
|
def scenario_outline(statement)
|
64
64
|
scenario_outline = Ast::ScenarioOutline.new(
|
65
|
-
@background,
|
66
|
-
Ast::Comment.new(statement.comments.map{|comment| comment.value}.join("\n")),
|
67
|
-
Ast::Tags.new(nil, statement.tags),
|
68
|
-
statement.line,
|
69
|
-
statement.keyword,
|
70
|
-
statement.name,
|
71
|
-
statement.description,
|
72
|
-
|
73
|
-
|
65
|
+
@background,
|
66
|
+
Ast::Comment.new(statement.comments.map{|comment| comment.value}.join("\n")),
|
67
|
+
Ast::Tags.new(nil, statement.tags),
|
68
|
+
statement.line,
|
69
|
+
statement.keyword,
|
70
|
+
statement.name,
|
71
|
+
statement.description,
|
72
|
+
[],
|
73
|
+
[]
|
74
74
|
)
|
75
75
|
@feature.add_feature_element(scenario_outline)
|
76
76
|
if @background
|
@@ -83,11 +83,11 @@ module Cucumber
|
|
83
83
|
|
84
84
|
def examples(examples)
|
85
85
|
examples_fields = [
|
86
|
-
Ast::Comment.new(examples.comments.map{|comment| comment.value}.join("\n")),
|
87
|
-
examples.line,
|
88
|
-
examples.keyword,
|
89
|
-
examples.name,
|
90
|
-
examples.description,
|
86
|
+
Ast::Comment.new(examples.comments.map{|comment| comment.value}.join("\n")),
|
87
|
+
examples.line,
|
88
|
+
examples.keyword,
|
89
|
+
examples.name,
|
90
|
+
examples.description,
|
91
91
|
matrix(examples.rows)
|
92
92
|
]
|
93
93
|
@step_container.add_examples(examples_fields, examples)
|
@@ -95,9 +95,9 @@ module Cucumber
|
|
95
95
|
|
96
96
|
def step(gherkin_step)
|
97
97
|
step = Ast::Step.new(
|
98
|
-
gherkin_step.line,
|
99
|
-
gherkin_step.keyword,
|
100
|
-
gherkin_step.name,
|
98
|
+
gherkin_step.line,
|
99
|
+
gherkin_step.keyword,
|
100
|
+
gherkin_step.name,
|
101
101
|
Ast::MultilineArgument.from(gherkin_step.doc_string || gherkin_step.rows)
|
102
102
|
)
|
103
103
|
step.gherkin_statement(gherkin_step)
|
@@ -110,9 +110,9 @@ module Cucumber
|
|
110
110
|
def syntax_error(state, event, legal_events, line)
|
111
111
|
# raise "SYNTAX ERROR"
|
112
112
|
end
|
113
|
-
|
113
|
+
|
114
114
|
private
|
115
|
-
|
115
|
+
|
116
116
|
def matrix(gherkin_table)
|
117
117
|
gherkin_table.map do |gherkin_row|
|
118
118
|
row = gherkin_row.cells
|