square-cucumber 0.3.12.2 → 0.3.93.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (91) hide show
  1. data/History.txt +117 -4
  2. data/Manifest.txt +11 -0
  3. data/Rakefile +1 -1
  4. data/config/hoe.rb +3 -2
  5. data/cucumber.yml +2 -2
  6. data/examples/i18n/ko/features/addition.feature +5 -5
  7. data/examples/i18n/ko/features/step_definitons/calculator_steps.rb +1 -1
  8. data/examples/i18n/no/features/step_definitons/kalkulator_steps.rb +1 -1
  9. data/examples/i18n/pt/features/adicao.feature +4 -4
  10. data/examples/self_test/features/support/env.rb +2 -1
  11. data/examples/sinatra/features/support/env.rb +7 -1
  12. data/examples/steps_library/features/step_definitions/steps_lib1.rb +8 -0
  13. data/examples/steps_library/features/step_definitions/steps_lib2.rb +8 -0
  14. data/examples/tickets/features/step_definitons/tickets_steps.rb +15 -0
  15. data/examples/tickets/features/table_diffing.feature +13 -0
  16. data/examples/watir/features/step_definitons/search_steps.rb +5 -1
  17. data/features/cucumber_cli_diff_disabled.feature +2 -1
  18. data/features/html_formatter/a.html +5 -7
  19. data/features/junit_formatter.feature +21 -14
  20. data/features/profiles.feature +99 -0
  21. data/features/rake_task.feature +28 -0
  22. data/features/step_definitions/cucumber_steps.rb +28 -15
  23. data/features/steps_formatter.feature +25 -0
  24. data/features/support/env.rb +9 -5
  25. data/features/table_diffing.feature +45 -0
  26. data/features/unicode_table.feature +35 -0
  27. data/features/work_in_progress.feature +1 -0
  28. data/gem_tasks/contributors.rake +4 -0
  29. data/lib/cucumber/ast/background.rb +1 -0
  30. data/lib/cucumber/ast/comment.rb +1 -0
  31. data/lib/cucumber/ast/examples.rb +1 -0
  32. data/lib/cucumber/ast/feature.rb +10 -0
  33. data/lib/cucumber/ast/features.rb +6 -1
  34. data/lib/cucumber/ast/outline_table.rb +4 -1
  35. data/lib/cucumber/ast/py_string.rb +1 -1
  36. data/lib/cucumber/ast/scenario.rb +1 -0
  37. data/lib/cucumber/ast/scenario_outline.rb +2 -0
  38. data/lib/cucumber/ast/step.rb +5 -1
  39. data/lib/cucumber/ast/step_collection.rb +1 -0
  40. data/lib/cucumber/ast/step_invocation.rb +1 -0
  41. data/lib/cucumber/ast/table.rb +306 -52
  42. data/lib/cucumber/ast/tags.rb +1 -0
  43. data/lib/cucumber/ast/visitor.rb +2 -1
  44. data/lib/cucumber/cli/configuration.rb +28 -278
  45. data/lib/cucumber/cli/drb_client.rb +3 -1
  46. data/lib/cucumber/cli/language_help_formatter.rb +9 -7
  47. data/lib/cucumber/cli/main.rb +16 -2
  48. data/lib/cucumber/cli/options.rb +370 -0
  49. data/lib/cucumber/cli/profile_loader.rb +65 -0
  50. data/lib/cucumber/core_ext/instance_exec.rb +8 -5
  51. data/lib/cucumber/feature_file.rb +7 -1
  52. data/lib/cucumber/filter.rb +2 -2
  53. data/lib/cucumber/formatter/ansicolor.rb +42 -9
  54. data/lib/cucumber/formatter/console.rb +1 -1
  55. data/lib/cucumber/formatter/html.rb +12 -10
  56. data/lib/cucumber/formatter/junit.rb +63 -26
  57. data/lib/cucumber/formatter/pretty.rb +20 -5
  58. data/lib/cucumber/formatter/progress.rb +1 -1
  59. data/lib/cucumber/formatter/steps.rb +49 -0
  60. data/lib/cucumber/languages.yml +6 -6
  61. data/lib/cucumber/parser/feature.rb +90 -63
  62. data/lib/cucumber/parser/feature.tt +28 -1
  63. data/lib/cucumber/parser/i18n/language.rb +12 -5
  64. data/lib/cucumber/parser/table.rb +25 -25
  65. data/lib/cucumber/rake/task.rb +9 -3
  66. data/lib/cucumber/step_definition.rb +1 -1
  67. data/lib/cucumber/step_match.rb +1 -1
  68. data/lib/cucumber/step_mother.rb +3 -1
  69. data/lib/cucumber/version.rb +2 -2
  70. data/lib/cucumber/webrat/table_locator.rb +66 -0
  71. data/rails_generators/cucumber/cucumber_generator.rb +5 -1
  72. data/rails_generators/cucumber/templates/cucumber +3 -2
  73. data/rails_generators/cucumber/templates/cucumber.rake +18 -6
  74. data/rails_generators/cucumber/templates/cucumber_environment.rb +7 -4
  75. data/rails_generators/cucumber/templates/env.rb +1 -0
  76. data/rails_generators/cucumber/templates/spork_env.rb +1 -0
  77. data/rails_generators/cucumber/templates/webrat_steps.rb +22 -0
  78. data/rails_generators/feature/templates/feature.erb +1 -1
  79. data/rails_generators/feature/templates/steps.erb +2 -8
  80. data/spec/cucumber/ast/table_spec.rb +169 -0
  81. data/spec/cucumber/cli/configuration_spec.rb +144 -101
  82. data/spec/cucumber/cli/main_spec.rb +14 -5
  83. data/spec/cucumber/cli/options_spec.rb +311 -0
  84. data/spec/cucumber/cli/profile_loader_spec.rb +10 -0
  85. data/spec/cucumber/core_ext/proc_spec.rb +16 -2
  86. data/spec/cucumber/formatter/html_spec.rb +18 -0
  87. data/spec/cucumber/formatter/progress_spec.rb +2 -2
  88. data/spec/cucumber/parser/table_parser_spec.rb +1 -1
  89. data/spec/spec.opts +3 -1
  90. metadata +18 -4
  91. data/lib/cucumber/webrat/mechanize_world.rb +0 -82
@@ -16,6 +16,7 @@ module Cucumber
16
16
  end
17
17
 
18
18
  def accept(visitor)
19
+ return if $cucumber_interrupted
19
20
  @tag_names.each do |tag_name|
20
21
  visitor.visit_tag_name(tag_name)
21
22
  end
@@ -64,6 +64,7 @@ module Cucumber
64
64
  end
65
65
 
66
66
  def visit_outline_table(outline_table)
67
+ @table = outline_table
67
68
  outline_table.accept(self)
68
69
  end
69
70
 
@@ -105,7 +106,7 @@ module Cucumber
105
106
  table_cell.accept(self)
106
107
  end
107
108
 
108
- def visit_table_cell_value(value, width, status)
109
+ def visit_table_cell_value(value, status)
109
110
  end
110
111
 
111
112
  def announce(announcement)
@@ -1,198 +1,29 @@
1
+ require 'cucumber/cli/options'
2
+
1
3
  module Cucumber
2
4
  module Cli
3
5
  class YmlLoadError < StandardError; end
6
+ class ProfilesNotDefinedError < YmlLoadError; end
7
+ class ProfileNotFound < StandardError; end
4
8
 
5
9
  class Configuration
6
- BUILTIN_FORMATS = {
7
- 'html' => 'Cucumber::Formatter::Html',
8
- 'pretty' => 'Cucumber::Formatter::Pretty',
9
- 'profile' => 'Cucumber::Formatter::Profile',
10
- 'progress' => 'Cucumber::Formatter::Progress',
11
- 'rerun' => 'Cucumber::Formatter::Rerun',
12
- 'usage' => 'Cucumber::Formatter::Usage',
13
- 'junit' => 'Cucumber::Formatter::Junit',
14
- 'tag_cloud' => 'Cucumber::Formatter::TagCloud',
15
- 'steps' => 'Cucumber::Formatter::Steps'
16
- }
17
- DRB_FLAG = '--drb'
18
- PROFILE_SHORT_FLAG = '-p'
19
- PROFILE_LONG_FLAG = '--profile'
20
-
21
- attr_reader :paths
22
10
  attr_reader :options
23
11
 
24
12
  def initialize(out_stream = STDOUT, error_stream = STDERR)
25
13
  @out_stream = out_stream
26
14
  @error_stream = error_stream
27
-
28
- @paths = []
29
- @options = default_options
15
+ @options = Options.new(@out_stream, @error_stream, :default_profile => 'default')
30
16
  end
31
17
 
32
18
  def parse!(args)
33
- args.concat(%w{--profile default}) if args.empty?
34
19
  @args = args
35
- expand_profiles_into_args
36
- return if parse_drb
20
+ @options.parse!(args)
21
+ raise("You can't use both --strict and --wip") if strict? && wip?
37
22
 
38
- @args.each do |arg|
39
- if arg =~ /^(\w+)=(.*)$/
40
- ENV[$1] = $2
41
- @args.delete(arg)
42
- end
43
- end
44
-
45
- @args.extend(::OptionParser::Arguable)
46
-
47
- @args.options do |opts|
48
- opts.banner = ["Usage: cucumber [options] [ [FILE|DIR|URL][:LINE[:LINE]*] ]+", "",
49
- "Examples:",
50
- "cucumber examples/i18n/en/features",
51
- "cucumber --language it examples/i18n/it/features/somma.feature:6:98:113",
52
- "cucumber -s -i http://rubyurl.com/eeCl", "", "",
53
- ].join("\n")
54
- opts.on("-r LIBRARY|DIR", "--require LIBRARY|DIR",
55
- "Require files before executing the features. If this",
56
- "option is not specified, all *.rb files that are",
57
- "siblings or below the features will be loaded auto-",
58
- "matically. Automatic loading is disabled when this",
59
- "option is specified, and all loading becomes explicit.",
60
- "Files under directories named \"support\" are always",
61
- "loaded first.",
62
- "This option can be specified multiple times.") do |v|
63
- @options[:require] ||= []
64
- @options[:require] << v
65
- end
66
- opts.on("-l LANG", "--language LANG",
67
- "Specify language for features (Default: #{@options[:lang]})",
68
- %{Run with "--language help" to see all languages},
69
- %{Run with "--language LANG help" to list keywords for LANG}) do |v|
70
- if v == 'help'
71
- list_languages_and_exit
72
- elsif args==['help']
73
- list_keywords_and_exit(v)
74
- else
75
- @options[:lang] = v
76
- end
77
- end
78
- opts.on("-f FORMAT", "--format FORMAT",
79
- "How to format features (Default: pretty)",
80
- "Available formats: #{BUILTIN_FORMATS.keys.sort.join(", ")}",
81
- "FORMAT can also be the fully qualified class name of",
82
- "your own custom formatter. If the class isn't loaded,",
83
- "Cucumber will attempt to require a file with a relative",
84
- "file name that is the underscore name of the class name.",
85
- "Example: --format Foo::BarZap -> Cucumber will look for",
86
- "foo/bar_zap.rb. You can place the file with this relative",
87
- "path underneath your features/support directory or anywhere",
88
- "on Ruby's LOAD_PATH, for example in a Ruby gem.") do |v|
89
- @options[:formats] << [v, @out_stream]
90
- @active_format = v
91
- end
92
- opts.on("-o", "--out [FILE|DIR]",
93
- "Write output to a file/directory instead of STDOUT. This option",
94
- "applies to the previously specified --format, or the",
95
- "default format if no format is specified. Check the specific",
96
- "formatter's docs to see whether to pass a file or a dir.") do |v|
97
- @options[:formats] << ['pretty', nil] if @options[:formats].empty?
98
- @options[:formats][-1][1] = v
99
- end
100
- opts.on("-t TAGS", "--tags TAGS",
101
- "Only execute the features or scenarios with the specified tags.",
102
- "TAGS must be comma-separated without spaces. Prefix tags with ~ to",
103
- "exclude features or scenarios having that tag. Tags can be specified",
104
- "with or without the @ prefix.") do |v|
105
- @options[:include_tags], @options[:exclude_tags] = *parse_tags(v)
106
- end
107
- opts.on("-n NAME", "--name NAME",
108
- "Only execute the feature elements which match part of the given name.",
109
- "If this option is given more than once, it will match against all the",
110
- "given names.") do |v|
111
- @options[:name_regexps] << /#{v}/
112
- end
113
- opts.on("-e", "--exclude PATTERN", "Don't run feature files or require ruby files matching PATTERN") do |v|
114
- @options[:excludes] << Regexp.new(v)
115
- end
116
- opts.on(PROFILE_SHORT_FLAG, "#{PROFILE_LONG_FLAG} PROFILE", "Pull commandline arguments from cucumber.yml.") do |v|
117
- # Processing of this is done previsouly so that the DRb flag can be detected within profiles.
118
- end
119
- opts.on("-c", "--[no-]color",
120
- "Whether or not to use ANSI color in the output. Cucumber decides",
121
- "based on your platform and the output destination if not specified.") do |v|
122
- Term::ANSIColor.coloring = v
123
- end
124
- opts.on("-d", "--dry-run", "Invokes formatters without executing the steps.",
125
- "This also omits the loading of your support/env.rb file if it exists.",
126
- "Implies --quiet.") do
127
- @options[:dry_run] = true
128
- @quiet = true
129
- end
130
- opts.on("-a", "--autoformat DIRECTORY",
131
- "Reformats (pretty prints) feature files and write them to DIRECTORY.",
132
- "Be careful if you choose to overwrite the originals.",
133
- "Implies --dry-run --formatter pretty.") do |directory|
134
- @options[:autoformat] = directory
135
- Term::ANSIColor.coloring = false
136
- @options[:dry_run] = true
137
- @quiet = true
138
- end
139
- opts.on("-m", "--no-multiline",
140
- "Don't print multiline strings and tables under steps.") do
141
- @options[:no_multiline] = true
142
- end
143
- opts.on("-s", "--no-source",
144
- "Don't print the file and line of the step definition with the steps.") do
145
- @options[:source] = false
146
- end
147
- opts.on("-i", "--no-snippets", "Don't print snippets for pending steps.") do
148
- @options[:snippets] = false
149
- end
150
- opts.on("-q", "--quiet", "Alias for --no-snippets --no-source.") do
151
- @quiet = true
152
- end
153
- opts.on("-b", "--backtrace", "Show full backtrace for all errors.") do
154
- Exception.cucumber_full_backtrace = true
155
- end
156
- opts.on("-S", "--strict", "Fail if there are any undefined steps.") do
157
- @options[:strict] = true
158
- end
159
- opts.on("-w", "--wip", "Fail if there are any passing scenarios.") do
160
- @options[:wip] = true
161
- end
162
- opts.on("-v", "--verbose", "Show the files and features loaded.") do
163
- @options[:verbose] = true
164
- end
165
- opts.on("-g", "--guess", "Guess best match for Ambiguous steps.") do
166
- @options[:guess] = true
167
- end
168
- opts.on("-x", "--expand", "Expand Scenario Outline Tables in output.") do
169
- @options[:expand] = true
170
- end
171
- opts.on("--no-diff", "Disable diff output on failing expectations.") do
172
- @options[:diff_enabled] = false
173
- end
174
- opts.on(DRB_FLAG, "Run features against a DRb server. (i.e. with the spork gem)") do
175
- # Processing of this is done previsouly in order to short circuit args from being lost.
176
- end
177
- opts.on_tail("--version", "Show version.") do
178
- @out_stream.puts VERSION::STRING
179
- Kernel.exit
180
- end
181
- opts.on_tail("-h", "--help", "You're looking at it.") do
182
- @out_stream.puts opts.help
183
- Kernel.exit
184
- end
185
- end.parse!
23
+ return @args.replace(@options.expanded_args_without_drb) if drb?
186
24
 
25
+ set_environment_variables
187
26
  arrange_formats
188
-
189
- @options[:snippets] = true if !@quiet && @options[:snippets].nil?
190
- @options[:source] = true if !@quiet && @options[:source].nil?
191
-
192
- raise("You can't use both --strict and --wip") if @options[:strict] && @options[:wip]
193
-
194
- # Whatever is left after option parsing is the FILE arguments
195
- @paths += @args
196
27
  end
197
28
 
198
29
  def verbose?
@@ -216,18 +47,11 @@ module Cucumber
216
47
  end
217
48
 
218
49
  def drb?
219
- @drb
50
+ @options[:drb]
220
51
  end
221
52
 
222
- def parse_tags(tag_string)
223
- tag_names = tag_string.split(",")
224
- excludes, includes = tag_names.partition{|tag| tag =~ /^~/}
225
- excludes = excludes.map{|tag| tag[1..-1]}
226
-
227
- # Strip @
228
- includes = includes.map{|tag| Ast::Tags.strip_prefix(tag)}
229
- excludes = excludes.map{|tag| Ast::Tags.strip_prefix(tag)}
230
- [includes, excludes]
53
+ def paths
54
+ @options[:paths]
231
55
  end
232
56
 
233
57
  def build_formatter_broadcaster(step_mother)
@@ -260,15 +84,15 @@ module Cucumber
260
84
  end
261
85
 
262
86
  def formatter_class(format)
263
- if(builtin = BUILTIN_FORMATS[format])
264
- constantize(builtin)
87
+ if(builtin = Options::BUILTIN_FORMATS[format])
88
+ constantize(builtin[0])
265
89
  else
266
90
  constantize(format)
267
91
  end
268
92
  end
269
93
 
270
94
  def files_to_require
271
- requires = @options[:require] || feature_dirs
95
+ requires = @options[:require].empty? ? require_dirs : @options[:require]
272
96
  files = requires.map do |path|
273
97
  path = path.gsub(/\\/, '/') # In case we're on windows. Globs don't work with backslashes.
274
98
  path = path.gsub(/\/$/, '') # Strip trailing slash.
@@ -283,7 +107,7 @@ module Cucumber
283
107
  end
284
108
 
285
109
  def feature_files
286
- potential_feature_files = @paths.map do |path|
110
+ potential_feature_files = @options[:paths].map do |path|
287
111
  path = path.gsub(/\\/, '/') # In case we're on windows. Globs don't work with backslashes.
288
112
  path = path.chomp('/')
289
113
  File.directory?(path) ? Dir["#{path}/**/*.feature"] : path
@@ -292,7 +116,13 @@ module Cucumber
292
116
  potential_feature_files
293
117
  end
294
118
 
295
- protected
119
+ private
120
+
121
+ def set_environment_variables
122
+ @options[:env_vars].each do |var, value|
123
+ ENV[var] = value
124
+ end
125
+ end
296
126
 
297
127
  def arrange_formats
298
128
  @options[:formats] << ['pretty', @out_stream] if @options[:formats].empty?
@@ -307,7 +137,11 @@ module Cucumber
307
137
  end
308
138
 
309
139
  def feature_dirs
310
- @paths.map { |f| File.directory?(f) ? f : File.dirname(f) }.uniq
140
+ paths.map { |f| File.directory?(f) ? f : File.dirname(f) }.uniq
141
+ end
142
+
143
+ def require_dirs
144
+ feature_dirs + Dir['vendor/{gems,plugins}/*/cucumber']
311
145
  end
312
146
 
313
147
  def constantize(camel_cased_word)
@@ -335,90 +169,6 @@ module Cucumber
335
169
  downcase
336
170
  end
337
171
 
338
- def expand_profiles_into_args
339
- while (profile_index = @args.index(PROFILE_SHORT_FLAG) || @args.index(PROFILE_LONG_FLAG)) do
340
- @args.delete_at(profile_index)
341
- @args[profile_index] = args_from_profile(@args[profile_index])
342
- @args.flatten!
343
- end
344
- end
345
-
346
- def args_from_profile(profile)
347
- unless cucumber_yml.has_key?(profile)
348
- raise(<<-END_OF_ERROR)
349
- Could not find profile: '#{profile}'
350
-
351
- Defined profiles in cucumber.yml:
352
- * #{cucumber_yml.keys.join("\n * ")}
353
- END_OF_ERROR
354
- end
355
-
356
- args_from_yml = cucumber_yml[profile] || ''
357
-
358
- case(args_from_yml)
359
- when String
360
- raise "The '#{profile}' profile in cucumber.yml was blank. Please define the command line arguments for the '#{profile}' profile in cucumber.yml.\n" if args_from_yml =~ /^\s*$/
361
- args_from_yml = args_from_yml.split(' ')
362
- when Array
363
- raise "The '#{profile}' profile in cucumber.yml was empty. Please define the command line arguments for the '#{profile}' profile in cucumber.yml.\n" if args_from_yml.empty?
364
- else
365
- raise "The '#{profile}' profile in cucumber.yml was a #{args_from_yml.class}. It must be a String or Array"
366
- end
367
- args_from_yml
368
- end
369
-
370
- def cucumber_yml
371
- return @cucumber_yml if @cucumber_yml
372
- unless File.exist?('cucumber.yml')
373
- raise(YmlLoadError,"cucumber.yml was not found. Please refer to cucumber's documentation on defining profiles in cucumber.yml. You must define a 'default' profile to use the cucumber command without any arguments.\nType 'cucumber --help' for usage.\n")
374
- end
375
-
376
- require 'yaml'
377
- begin
378
- @cucumber_yml = YAML::load(IO.read('cucumber.yml'))
379
- rescue StandardError => e
380
- raise(YmlLoadError,"cucumber.yml was found, but could not be parsed. Please refer to cucumber's documentation on correct profile usage.\n")
381
- end
382
-
383
- if @cucumber_yml.nil? || !@cucumber_yml.is_a?(Hash)
384
- raise(YmlLoadError,"cucumber.yml was found, but was blank or malformed. Please refer to cucumber's documentation on correct profile usage.\n")
385
- end
386
-
387
- return @cucumber_yml
388
- end
389
-
390
- # TODO: Move to Language
391
- def list_keywords_and_exit(lang)
392
- unless Cucumber::LANGUAGES[lang]
393
- raise("No language with key #{lang}")
394
- end
395
- LanguageHelpFormatter.list_keywords(@out_stream, lang)
396
- Kernel.exit
397
- end
398
-
399
- def list_languages_and_exit
400
- LanguageHelpFormatter.list_languages(@out_stream)
401
- Kernel.exit
402
- end
403
-
404
- def parse_drb
405
- @drb = @args.delete(DRB_FLAG) ? true : false
406
- end
407
-
408
- def default_options
409
- {
410
- :strict => false,
411
- :require => nil,
412
- :lang => nil,
413
- :dry_run => false,
414
- :formats => [],
415
- :excludes => [],
416
- :include_tags => [],
417
- :exclude_tags => [],
418
- :name_regexps => [],
419
- :diff_enabled => true
420
- }
421
- end
422
172
  end
423
173
 
424
174
  end
@@ -11,7 +11,9 @@ module Cucumber
11
11
  # See http://redmine.ruby-lang.org/issues/show/496 as to why we specify localhost:0
12
12
  DRb.start_service("druby://localhost:0")
13
13
  feature_server = DRbObject.new_with_uri("druby://127.0.0.1:8990")
14
- feature_server.run(args, error_stream, out_stream)
14
+ cloned_args = [] # I have no idea why this is needed, but if the regular args are sent then DRb magically transforms it into a DRb object - not an array
15
+ args.each { |arg| cloned_args << arg }
16
+ feature_server.run(cloned_args, error_stream, out_stream)
15
17
  rescue DRb::DRbConnError
16
18
  raise DRbClientError, "No DRb server is running."
17
19
  end
@@ -1,4 +1,5 @@
1
1
  require 'cucumber/formatter/pretty'
2
+ require 'cucumber/parser/i18n/language'
2
3
 
3
4
  module Cucumber
4
5
  module Cli
@@ -18,15 +19,16 @@ http://wiki.github.com/aslakhellesoy/cucumber/spoken-languages
18
19
  [lang, Cucumber::LANGUAGES[lang]['name'], Cucumber::LANGUAGES[lang]['native']]
19
20
  end
20
21
  table = Ast::Table.new(raw)
21
- new(nil, io, {:check_lang=>true}, '').visit_multiline_arg(table)
22
+ new(nil, io, {:check_lang=>true}).visit_multiline_arg(table)
22
23
  end
23
24
 
24
25
  def self.list_keywords(io, lang)
25
- raw = Cucumber::KEYWORD_KEYS.map do |key|
26
- [key, Cucumber::LANGUAGES[lang][key]]
26
+ language = Parser::I18n::Language[lang]
27
+ raw = Parser::I18n::Language::KEYWORD_KEYS.map do |key|
28
+ [key, language.keywords(key)]
27
29
  end
28
30
  table = Ast::Table.new(raw)
29
- new(nil, io, {:incomplete => Cucumber.language_incomplete?(lang)}, '').visit_multiline_arg(table)
31
+ new(nil, io, {:incomplete => language.incomplete?}).visit_multiline_arg(table)
30
32
  end
31
33
 
32
34
  def visit_multiline_arg(table)
@@ -41,10 +43,10 @@ http://wiki.github.com/aslakhellesoy/cucumber/spoken-languages
41
43
  super
42
44
  end
43
45
 
44
- def visit_table_cell_value(value, width, status)
46
+ def visit_table_cell_value(value, status)
45
47
  if @col == 1
46
48
  if(@options[:check_lang])
47
- @incomplete = Cucumber.language_incomplete?(value)
49
+ @incomplete = Parser::I18n::Language[value].incomplete?
48
50
  end
49
51
  status = :comment
50
52
  elsif @incomplete
@@ -52,7 +54,7 @@ http://wiki.github.com/aslakhellesoy/cucumber/spoken-languages
52
54
  end
53
55
 
54
56
  @col += 1
55
- super(value, width, status)
57
+ super(value, status)
56
58
  end
57
59
  end
58
60
  end