cucumber 2.0.2 → 2.1.0

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.
Files changed (85) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +0 -6
  3. data/CONTRIBUTING.md +3 -1
  4. data/Gemfile +1 -1
  5. data/History.md +17 -0
  6. data/README.md +3 -3
  7. data/bin/cucumber +1 -2
  8. data/cucumber.gemspec +2 -2
  9. data/examples/i18n/ht/features/adisyon.feature +7 -7
  10. data/features/docs/api/listen_for_events.feature +58 -0
  11. data/features/docs/cli/fail_fast.feature +46 -0
  12. data/features/docs/defining_steps/nested_steps_with_second_arg.feature +3 -22
  13. data/features/docs/extending_cucumber/custom_formatter.feature +40 -4
  14. data/features/docs/gherkin/doc_strings.feature +5 -5
  15. data/features/docs/gherkin/language_help.feature +15 -15
  16. data/features/docs/gherkin/using_descriptions.feature +0 -5
  17. data/lib/cucumber/cli/configuration.rb +10 -92
  18. data/lib/cucumber/cli/main.rb +1 -7
  19. data/lib/cucumber/cli/options.rb +47 -12
  20. data/lib/cucumber/configuration.rb +195 -7
  21. data/lib/cucumber/events.rb +20 -0
  22. data/lib/cucumber/events/after_test_case.rb +25 -0
  23. data/lib/cucumber/events/after_test_step.rb +30 -0
  24. data/lib/cucumber/events/before_test_case.rb +18 -0
  25. data/lib/cucumber/events/before_test_step.rb +23 -0
  26. data/lib/cucumber/events/bus.rb +86 -0
  27. data/lib/cucumber/events/step_match.rb +23 -0
  28. data/lib/cucumber/filters/prepare_world.rb +2 -2
  29. data/lib/cucumber/formatter/backtrace_filter.rb +9 -8
  30. data/lib/cucumber/formatter/console.rb +1 -1
  31. data/lib/cucumber/formatter/event_bus_report.rb +37 -0
  32. data/lib/cucumber/formatter/fail_fast.rb +18 -0
  33. data/lib/cucumber/formatter/html.rb +1 -1
  34. data/lib/cucumber/formatter/io.rb +3 -1
  35. data/lib/cucumber/formatter/json.rb +19 -1
  36. data/lib/cucumber/formatter/legacy_api/adapter.rb +5 -13
  37. data/lib/cucumber/formatter/legacy_api/ast.rb +2 -2
  38. data/lib/cucumber/formatter/legacy_api/runtime_facade.rb +3 -1
  39. data/lib/cucumber/formatter/pretty.rb +5 -7
  40. data/lib/cucumber/formatter/progress.rb +1 -1
  41. data/lib/cucumber/formatter/rerun.rb +1 -1
  42. data/lib/cucumber/formatter/steps.rb +1 -1
  43. data/lib/cucumber/formatter/usage.rb +12 -8
  44. data/lib/cucumber/gherkin/data_table_parser.rb +23 -0
  45. data/lib/cucumber/gherkin/formatter/ansi_escapes.rb +99 -0
  46. data/lib/cucumber/gherkin/formatter/argument.rb +17 -0
  47. data/lib/cucumber/gherkin/formatter/escaping.rb +17 -0
  48. data/lib/cucumber/gherkin/formatter/hashable.rb +27 -0
  49. data/lib/cucumber/gherkin/i18n.rb +15 -0
  50. data/lib/cucumber/gherkin/steps_parser.rb +41 -0
  51. data/lib/cucumber/language_support/language_methods.rb +6 -5
  52. data/lib/cucumber/multiline_argument.rb +0 -3
  53. data/lib/cucumber/multiline_argument/data_table.rb +6 -5
  54. data/lib/cucumber/multiline_argument/doc_string.rb +1 -2
  55. data/lib/cucumber/platform.rb +1 -1
  56. data/lib/cucumber/rake/task.rb +2 -2
  57. data/lib/cucumber/rb_support/rb_hook.rb +1 -6
  58. data/lib/cucumber/rb_support/rb_language.rb +15 -5
  59. data/lib/cucumber/rb_support/rb_step_definition.rb +11 -17
  60. data/lib/cucumber/rb_support/rb_world.rb +6 -4
  61. data/lib/cucumber/rb_support/regexp_argument_matcher.rb +2 -2
  62. data/lib/cucumber/runtime.rb +36 -16
  63. data/lib/cucumber/runtime/support_code.rb +19 -15
  64. data/lib/cucumber/step_definition_light.rb +5 -5
  65. data/lib/cucumber/step_definitions.rb +2 -2
  66. data/lib/cucumber/step_match.rb +11 -2
  67. data/lib/cucumber/wire_support/wire_protocol/requests.rb +2 -2
  68. data/lib/cucumber/wire_support/wire_step_definition.rb +4 -2
  69. data/{spec → lib}/simplecov_setup.rb +0 -0
  70. data/spec/cucumber/cli/configuration_spec.rb +2 -104
  71. data/spec/cucumber/cli/main_spec.rb +0 -22
  72. data/spec/cucumber/cli/options_spec.rb +3 -1
  73. data/spec/cucumber/configuration_spec.rb +123 -0
  74. data/spec/cucumber/events/bus_spec.rb +94 -0
  75. data/spec/cucumber/formatter/event_bus_report_spec.rb +79 -0
  76. data/spec/cucumber/formatter/fail_fast_spec.rb +88 -0
  77. data/spec/cucumber/formatter/json_spec.rb +43 -1
  78. data/spec/cucumber/formatter/rerun_spec.rb +4 -20
  79. data/spec/cucumber/rb_support/rb_step_definition_spec.rb +29 -0
  80. data/spec/cucumber/runtime_spec.rb +2 -28
  81. data/spec/spec_helper.rb +1 -1
  82. data/spec/support/standard_step_actions.rb +18 -0
  83. metadata +37 -13
  84. data/lib/cucumber/core_ext/proc.rb +0 -36
  85. data/spec/cucumber/core_ext/proc_spec.rb +0 -69
@@ -104,7 +104,7 @@ module Cucumber
104
104
  :embeddings) do
105
105
  extend Forwardable
106
106
 
107
- def_delegators :step, :keyword, :name, :multiline_arg, :location, :gherkin_statement
107
+ def_delegators :step, :keyword, :name, :multiline_arg, :location
108
108
 
109
109
  def accept(formatter)
110
110
  formatter.before_step(self)
@@ -252,7 +252,7 @@ module Cucumber
252
252
  def keyword
253
253
  # This method is only called when used for the scenario name line with
254
254
  # the expand option, and on that line the keyword is "Scenario"
255
- language.keywords('scenario')[0]
255
+ language.scenario_keywords[0]
256
256
  end
257
257
  end
258
258
 
@@ -1,3 +1,5 @@
1
+ require 'cucumber/gherkin/i18n'
2
+
1
3
  module Cucumber
2
4
  module Formatter
3
5
  module LegacyApi
@@ -9,7 +11,7 @@ module Cucumber
9
11
  end
10
12
 
11
13
  def snippet_text(step_keyword, step_name, multiline_arg) #:nodoc:
12
- support_code.snippet_text(::Gherkin::I18n.code_keyword_for(step_keyword), step_name, multiline_arg)
14
+ support_code.snippet_text(Cucumber::Gherkin::I18n.code_keyword_for(step_keyword).strip, step_name, multiline_arg)
13
15
  end
14
16
 
15
17
  def unknown_programming_language?
@@ -1,7 +1,7 @@
1
1
  require 'fileutils'
2
2
  require 'cucumber/formatter/console'
3
3
  require 'cucumber/formatter/io'
4
- require 'gherkin/formatter/escaping'
4
+ require 'cucumber/gherkin/formatter/escaping'
5
5
 
6
6
  module Cucumber
7
7
  module Formatter
@@ -16,12 +16,12 @@ module Cucumber
16
16
  include FileUtils
17
17
  include Console
18
18
  include Io
19
- include Gherkin::Formatter::Escaping
19
+ include Cucumber::Gherkin::Formatter::Escaping
20
20
  attr_writer :indent
21
21
  attr_reader :runtime
22
22
 
23
23
  def initialize(runtime, path_or_io, options)
24
- @runtime, @io, @options = runtime, ensure_io(path_or_io, "pretty"), options
24
+ @runtime, @io, @options = runtime, ensure_io(path_or_io), options
25
25
  @exceptions = []
26
26
  @indent = 0
27
27
  @prefixes = options[:prefixes] || {}
@@ -105,9 +105,7 @@ module Cucumber
105
105
  def examples_name(keyword, name)
106
106
  @io.puts unless @visiting_first_example_name
107
107
  @visiting_first_example_name = false
108
- names = name.strip.empty? ? [name.strip] : name.split("\n")
109
- @io.puts(" #{keyword}: #{names[0]}")
110
- names[1..-1].each {|s| @io.puts " #{s}" } unless names.empty?
108
+ @io.puts(" #{keyword}: #{name}")
111
109
  @io.flush
112
110
  @indent = 6
113
111
  @scenario_indent = 6
@@ -231,7 +229,7 @@ module Cucumber
231
229
  @io.print(format_string(line_comment, :comment))
232
230
  end
233
231
  @io.puts
234
- names[1..-1].each {|s| @io.puts " #{s}"}
232
+ names[1..-1].each {|s| @io.puts "#{s}"}
235
233
  @io.flush
236
234
  end
237
235
 
@@ -12,7 +12,7 @@ module Cucumber
12
12
  attr_reader :runtime
13
13
 
14
14
  def initialize(runtime, path_or_io, options)
15
- @runtime, @io, @options = runtime, ensure_io(path_or_io, "progress"), options
15
+ @runtime, @io, @options = runtime, ensure_io(path_or_io), options
16
16
  @previous_step_keyword = nil
17
17
  @snippets_input = []
18
18
  @total_duration = 0
@@ -6,7 +6,7 @@ module Cucumber
6
6
  include Formatter::Io
7
7
 
8
8
  def initialize(runtime, path_or_io, options)
9
- @io = ensure_io(path_or_io, "rerun")
9
+ @io = ensure_io(path_or_io)
10
10
  @failures = {}
11
11
  @options = options
12
12
  end
@@ -4,7 +4,7 @@ module Cucumber
4
4
  class Steps
5
5
 
6
6
  def initialize(runtime, path_or_io, options)
7
- @io = ensure_io(path_or_io, "steps")
7
+ @io = ensure_io(path_or_io)
8
8
  @options = options
9
9
  @step_definition_files = collect_steps(runtime)
10
10
  end
@@ -12,26 +12,30 @@ module Cucumber
12
12
 
13
13
  def initialize(runtime, path_or_io, options)
14
14
  @runtime = runtime
15
- @io = ensure_io(path_or_io, "usage")
15
+ @io = ensure_io(path_or_io)
16
16
  @options = options
17
17
  @stepdef_to_match = Hash.new { |h, stepdef_key| h[stepdef_key] = [] }
18
18
  @total_duration = 0
19
+ @matches = {}
20
+ runtime.configuration.on_event :step_match do |event|
21
+ @matches[event.test_step.source] = event.step_match
22
+ end
19
23
  end
20
24
 
21
25
  def after_test_step(test_step, result)
22
26
  return if HookQueryVisitor.new(test_step).hook?
23
27
 
24
- step_match = @runtime.step_match(test_step.source.last.name)
28
+ step_match = @matches[test_step.source]
25
29
  step_definition = step_match.step_definition
26
- stepdef_key = StepDefKey.new(step_definition.regexp_source, step_definition.file_colon_line)
27
- unless @stepdef_to_match[stepdef_key].map { |key| key[:file_colon_line] }.include? test_step.location
30
+ stepdef_key = StepDefKey.new(step_definition.regexp_source, step_definition.location)
31
+ unless @stepdef_to_match[stepdef_key].map { |key| key[:location] }.include? test_step.location
28
32
  duration = DurationExtractor.new(result).result_duration
29
33
 
30
34
  @stepdef_to_match[stepdef_key] << {
31
35
  keyword: test_step.source.last.keyword,
32
36
  step_match: step_match,
33
37
  status: result.to_sym,
34
- file_colon_line: test_step.location,
38
+ location: test_step.location,
35
39
  duration: duration
36
40
  }
37
41
  end
@@ -68,7 +72,7 @@ module Cucumber
68
72
  @io.print format_string(stepdef_key.regexp_source, stepdef_key.status)
69
73
  if @options[:source]
70
74
  indent = max_length - stepdef_key.regexp_source.unpack('U*').length
71
- line_comment = " # #{stepdef_key.file_colon_line}".indent(indent)
75
+ line_comment = " # #{stepdef_key.location}".indent(indent)
72
76
  @io.print(format_string(line_comment, :comment))
73
77
  end
74
78
  @io.puts
@@ -81,7 +85,7 @@ module Cucumber
81
85
  @io.print format_step(step[:keyword], step[:step_match], step[:status], nil)
82
86
  if @options[:source]
83
87
  indent = max_length - (step[:keyword].unpack('U*').length + step[:step_match].format_args.unpack('U*').length)
84
- line_comment = " # #{step[:file_colon_line]}".indent(indent)
88
+ line_comment = " # #{step[:location]}".indent(indent)
85
89
  @io.print(format_string(line_comment, :comment))
86
90
  end
87
91
  @io.puts
@@ -123,7 +127,7 @@ module Cucumber
123
127
 
124
128
  def add_unused_stepdefs
125
129
  @runtime.unmatched_step_definitions.each do |step_definition|
126
- stepdef_key = StepDefKey.new(step_definition.regexp_source, step_definition.file_colon_line)
130
+ stepdef_key = StepDefKey.new(step_definition.regexp_source, step_definition.location)
127
131
  @stepdef_to_match[stepdef_key] = []
128
132
  end
129
133
  end
@@ -0,0 +1,23 @@
1
+ require 'gherkin3/token_scanner'
2
+ require 'gherkin3/token_matcher'
3
+
4
+ module Cucumber
5
+ module Gherkin
6
+ class DataTableParser
7
+ def initialize(builder)
8
+ @builder = builder
9
+ end
10
+ def parse(text)
11
+ scanner = ::Gherkin3::TokenScanner.new(text)
12
+ matcher = ::Gherkin3::TokenMatcher.new
13
+ token = scanner.read
14
+ until matcher.match_EOF(token) do
15
+ if matcher.match_TableRow(token)
16
+ @builder.row(token.matched_items.map { |cell_item| cell_item.text })
17
+ end
18
+ token = scanner.read
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,99 @@
1
+ module Cucumber
2
+ module Gherkin
3
+ module Formatter
4
+ # Defines aliases for ANSI coloured output. Default colours can be overridden by defining
5
+ # a <tt>GHERKIN_COLORS</tt> variable in your shell, very much like how you can
6
+ # tweak the familiar POSIX command <tt>ls</tt> with
7
+ # $LSCOLORS: http://linux-sxs.org/housekeeping/lscolors.html
8
+ #
9
+ # The colours that you can change are:
10
+ #
11
+ # <tt>undefined</tt>:: defaults to <tt>yellow</tt>
12
+ # <tt>pending</tt>:: defaults to <tt>yellow</tt>
13
+ # <tt>pending_arg</tt>:: defaults to <tt>yellow,bold</tt>
14
+ # <tt>executing</tt>:: defaults to <tt>grey</tt>
15
+ # <tt>executing_arg</tt>:: defaults to <tt>grey,bold</tt>
16
+ # <tt>failed</tt>:: defaults to <tt>red</tt>
17
+ # <tt>failed_arg</tt>:: defaults to <tt>red,bold</tt>
18
+ # <tt>passed</tt>:: defaults to <tt>green</tt>
19
+ # <tt>passed_arg</tt>:: defaults to <tt>green,bold</tt>
20
+ # <tt>outline</tt>:: defaults to <tt>cyan</tt>
21
+ # <tt>outline_arg</tt>:: defaults to <tt>cyan,bold</tt>
22
+ # <tt>skipped</tt>:: defaults to <tt>cyan</tt>
23
+ # <tt>skipped_arg</tt>:: defaults to <tt>cyan,bold</tt>
24
+ # <tt>comment</tt>:: defaults to <tt>grey</tt>
25
+ # <tt>tag</tt>:: defaults to <tt>cyan</tt>
26
+ #
27
+ # For instance, if your shell has a black background and a green font (like the
28
+ # "Homebrew" settings for OS X' Terminal.app), you may want to override passed
29
+ # steps to be white instead of green. Examples:
30
+ #
31
+ # export GHERKIN_COLORS="passed=white"
32
+ # export GHERKIN_COLORS="passed=white,bold:passed_arg=white,bold,underline"
33
+ #
34
+ # (If you're on Windows, use SET instead of export).
35
+ # To see what colours and effects are available, just run this in your shell:
36
+ #
37
+ # ruby -e "require 'rubygems'; require 'term/ansicolor'; puts Term::ANSIColor.attributes"
38
+ #
39
+ # Although not listed, you can also use <tt>grey</tt>
40
+ module AnsiEscapes
41
+ COLORS = {
42
+ 'black' => "\e[30m",
43
+ 'red' => "\e[31m",
44
+ 'green' => "\e[32m",
45
+ 'yellow' => "\e[33m",
46
+ 'blue' => "\e[34m",
47
+ 'magenta' => "\e[35m",
48
+ 'cyan' => "\e[36m",
49
+ 'white' => "\e[37m",
50
+ 'grey' => "\e[90m",
51
+ 'bold' => "\e[1m"
52
+ }
53
+
54
+ ALIASES = Hash.new do |h,k|
55
+ if k.to_s =~ /(.*)_arg/
56
+ h[$1] + ',bold'
57
+ end
58
+ end.merge({
59
+ 'undefined' => 'yellow',
60
+ 'pending' => 'yellow',
61
+ 'executing' => 'grey',
62
+ 'failed' => 'red',
63
+ 'passed' => 'green',
64
+ 'outline' => 'cyan',
65
+ 'skipped' => 'cyan',
66
+ 'comments' => 'grey',
67
+ 'tag' => 'cyan'
68
+ })
69
+
70
+ if ENV['GHERKIN_COLORS'] # Example: export GHERKIN_COLORS="passed=red:failed=yellow"
71
+ ENV['GHERKIN_COLORS'].split(':').each do |pair|
72
+ a = pair.split('=')
73
+ ALIASES[a[0]] = a[1]
74
+ end
75
+ end
76
+
77
+ ALIASES.keys.each do |key|
78
+ define_method(key) do
79
+ ALIASES[key].split(',').map{|color| COLORS[color]}.join('')
80
+ end
81
+
82
+ define_method("#{key}_arg") do
83
+ ALIASES["#{key}_arg"].split(',').map{|color| COLORS[color]}.join('')
84
+ end
85
+ end
86
+
87
+ def reset
88
+ "\e[0m"
89
+ end
90
+
91
+ def up(n)
92
+ "\e[#{n}A"
93
+ end
94
+
95
+ extend self
96
+ end
97
+ end
98
+ end
99
+ end
@@ -0,0 +1,17 @@
1
+ require 'cucumber/gherkin/formatter/hashable'
2
+
3
+ module Cucumber
4
+ module Gherkin
5
+ module Formatter
6
+ class Argument < Hashable
7
+ #native_impl('gherkin')
8
+ attr_reader :offset, :val
9
+
10
+ # Creates a new Argument that starts at character offset +offset+ with value +val+
11
+ def initialize(offset, val)
12
+ @offset, @val = offset, val
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,17 @@
1
+ module Cucumber
2
+ module Gherkin
3
+ module Formatter
4
+ module Escaping
5
+ # Escapes a pipes and backslashes:
6
+ #
7
+ # * | becomes \|
8
+ # * \ becomes \\
9
+ #
10
+ # This is used in the pretty formatter.
11
+ def escape_cell(s)
12
+ s.gsub(/\\(?!\|)/, "\\\\\\\\").gsub(/\n/, "\\n").gsub(/\|/, "\\|")
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,27 @@
1
+ module Cucumber
2
+ module Gherkin
3
+ module Formatter
4
+ class Hashable
5
+ def to_hash
6
+ ivars = instance_variables
7
+ # When tests are runn with therubyracer (JavaScript), an extra field might
8
+ # exist - added by Ref::WeakReference
9
+ # https://github.com/bdurand/ref/blob/master/lib/ref/weak_reference/pure_ruby.rb
10
+ # Remove it - we don't want it in the JSON.
11
+ ivars.delete(:@__weak_backreferences__)
12
+ ivars.inject({}) do |hash, ivar|
13
+ value = instance_variable_get(ivar)
14
+ value = value.to_hash if value.respond_to?(:to_hash)
15
+ if Array === value
16
+ value = value.map do |e|
17
+ e.respond_to?(:to_hash) ? e.to_hash : e
18
+ end
19
+ end
20
+ hash[ivar[1..-1]] = value unless [[], nil].index(value)
21
+ hash
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,15 @@
1
+ module Cucumber
2
+ module Gherkin
3
+ module I18n
4
+ class << self
5
+ def code_keyword_for(gherkin_keyword)
6
+ gherkin_keyword.gsub(/[\s',!]/, '').strip
7
+ end
8
+
9
+ def code_keywords_for(gherkin_keywords)
10
+ gherkin_keywords.reject { |kw| kw == '* ' }.map { |kw| code_keyword_for(kw) }
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,41 @@
1
+ require 'gherkin3/token_scanner'
2
+ require 'gherkin3/token_matcher'
3
+ require 'gherkin3/ast_builder'
4
+ require 'gherkin3/parser'
5
+
6
+ module Cucumber
7
+ module Gherkin
8
+ class StepsParser
9
+ def initialize(builder, language)
10
+ @builder = builder
11
+ @language = language
12
+ end
13
+ def parse(text)
14
+ ast_builder = ::Gherkin3::AstBuilder.new
15
+ token_matcher = ::Gherkin3::TokenMatcher.new
16
+ token_matcher.send(:change_dialect, @language, nil) unless @language == 'en'
17
+ context = ::Gherkin3::ParserContext.new(
18
+ ::Gherkin3::TokenScanner.new(text),
19
+ token_matcher,
20
+ [],
21
+ []
22
+ )
23
+ parser = ::Gherkin3::Parser.new(ast_builder)
24
+
25
+ parser.start_rule(context, :ScenarioDefinition)
26
+ parser.start_rule(context, :Scenario)
27
+ scenario = ast_builder.current_node
28
+ state = 12
29
+ token = nil
30
+ begin
31
+ token = parser.read_token(context)
32
+ state = parser.match_token(state, token, context)
33
+ end until(token.eof?)
34
+
35
+ raise CompositeParserException.new(context.errors) if context.errors.any?
36
+
37
+ @builder.steps(ast_builder.get_steps(scenario))
38
+ end
39
+ end
40
+ end
41
+ end
@@ -5,7 +5,8 @@ module Cucumber
5
5
  module LanguageSupport
6
6
  module LanguageMethods
7
7
 
8
- def after_configuration(configuration)
8
+ def after_configuration(cli_configuration)
9
+ configuration = Configuration.new(cli_configuration)
9
10
  hooks[:after_configuration].each do |hook|
10
11
  hook.invoke('AfterConfiguration', configuration)
11
12
  end
@@ -40,12 +41,12 @@ module Cucumber
40
41
  available_step_definition_hash.keys - invoked_step_definition_hash.keys
41
42
  end
42
43
 
43
- def available_step_definition(regexp_source, file_colon_line)
44
- available_step_definition_hash[StepDefinitionLight.new(regexp_source, file_colon_line)] = nil
44
+ def available_step_definition(regexp_source, location)
45
+ available_step_definition_hash[StepDefinitionLight.new(regexp_source, location)] = nil
45
46
  end
46
47
 
47
- def invoked_step_definition(regexp_source, file_colon_line)
48
- invoked_step_definition_hash[StepDefinitionLight.new(regexp_source, file_colon_line)] = nil
48
+ def invoked_step_definition(regexp_source, location)
49
+ invoked_step_definition_hash[StepDefinitionLight.new(regexp_source, location)] = nil
49
50
  end
50
51
 
51
52
  private
@@ -1,11 +1,9 @@
1
1
  require 'delegate'
2
2
  require 'cucumber/multiline_argument/data_table'
3
3
  require 'cucumber/multiline_argument/doc_string'
4
- require 'gherkin/rubify'
5
4
 
6
5
  module Cucumber
7
6
  module MultilineArgument
8
- extend Gherkin::Rubify
9
7
 
10
8
  class << self
11
9
  def from_core(node)
@@ -14,7 +12,6 @@ module Cucumber
14
12
 
15
13
  def from(argument, location=nil)
16
14
  location ||= Core::Ast::Location.of_caller
17
- argument = rubify(argument)
18
15
  case argument
19
16
  when String
20
17
  doc_string(argument, 'text/plain', location)