cucumber 2.0.0.rc.1 → 2.0.0.rc.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 8832bd36266bffbfaa4d3fd708361d72485d0f70
4
- data.tar.gz: 1f310aac04ddfedf7e2e7ddd7a53f6adb88aaa8a
3
+ metadata.gz: 0985b78183dd2c31d3b7671da6d567042ea9eb6d
4
+ data.tar.gz: 6237bcc06c38dba04dea5bbbf5b3bdc05c50420a
5
5
  SHA512:
6
- metadata.gz: fd8670734a46685cde551f37ec2f2d9a35f19d0b280c48ee6c86aa4fca9c7144dc538229add49ec8a48b5169b09e387a134960d3984f39c93ec467c4b147e7ce
7
- data.tar.gz: f672204acf7aaa53c92ef59699d9d8b37fb24ad4f5e423fea79de82a9e002184218e45d3a228cb1032341893a1f1d7f4da6e7527aa155a8c318c6d567ea09f7f
6
+ metadata.gz: 6af997a1ae5f1f41dab2088c00a850ad103c54a256060d2a5db82edd192e51012c8725afe4208a56932f92df907f1eae4e42d6fdd9e79ec023c959838b046c52
7
+ data.tar.gz: 2215dffd827dca1de84a88d14375e3540a0d6ff797a59951054dcf341e27bf3baddbebaee8359ae84c6a5b64d0649079105ffdf5770013c85b6d07ee3bbaffc7
data/History.md CHANGED
@@ -1,5 +1,9 @@
1
1
  ## [In Git](https://github.com/cucumber/cucumber/compare/v2.0.0.rc.1...master)
2
2
 
3
+ ### Bugfixes
4
+
5
+ * World#table no longer creates invalid table objects when using an Array (@tooky, @mattwynne)
6
+
3
7
  ## [v2.0.0.rc.1](https://github.com/cucumber/cucumber/compare/v2.0.0.beta.5...v2.0.0.rc.1)
4
8
 
5
9
  ### Removed Features
@@ -46,34 +46,50 @@ module Cucumber
46
46
 
47
47
  include Enumerable
48
48
  include Core::Ast::DescribesItself
49
+ extend Forwardable
49
50
 
50
51
  NULL_CONVERSIONS = Hash.new({ :strict => false, :proc => lambda{ |cell_value| cell_value } }).freeze
51
52
 
52
53
  attr_accessor :file
54
+ def_delegator :@ast_table, :location
53
55
 
54
56
  def self.default_arg_name #:nodoc:
55
57
  "table"
56
58
  end
57
59
 
58
- def self.parse(text, uri, offset)
59
- builder = Builder.new
60
- lexer = Gherkin::Lexer::I18nLexer.new(builder)
61
- lexer.scan(text)
62
- new(builder.rows)
60
+ class << self
61
+ def from(data, location = Core::Ast::Location.of_caller)
62
+ case data
63
+ when Array
64
+ from_array(data, location)
65
+ when String
66
+ parse(data, location)
67
+ else
68
+ raise ArgumentError, "expected data to be a String or an Array."
69
+ end
70
+ end
71
+
72
+ private
73
+ def parse(text, location = Core::Ast::Location.of_caller)
74
+ builder = Builder.new
75
+ lexer = Gherkin::Lexer::I18nLexer.new(builder)
76
+ lexer.scan(text)
77
+ from_array(builder.rows, location)
78
+ end
79
+
80
+ def from_array(data, location = Core::Ast::Location.of_caller)
81
+ new Core::Ast::DataTable.new(data, location)
82
+ end
63
83
  end
64
84
 
65
- # Creates a new instance. +raw+ should be an Array of Array of String
66
- # or an Array of Hash (similar to what #hashes returns).
67
- # You don't typically create your own Table objects - Cucumber will do
68
- # it internally and pass them to your Step Definitions.
69
- #
85
+
86
+ # @param data [Core::Ast::DataTable] the data for the table
87
+ # @param conversion_procs [Hash] see map_columns!
88
+ # @param header_mappings [Hash] see map_headers!
89
+ # @param header_conversion_proc [Proc] see map_headers!
70
90
  def initialize(data, conversion_procs = NULL_CONVERSIONS.dup, header_mappings = {}, header_conversion_proc = nil)
71
- ast_table = case data
72
- when Core::Ast::DataTable
73
- data
74
- when Array
75
- Core::Ast::DataTable.new(data, Core::Ast::Location.of_caller)
76
- end
91
+ raise ArgumentError, "data must be a Core::Ast::DataTable" unless data.kind_of? Core::Ast::DataTable
92
+ ast_table = data
77
93
  # Verify that it's square
78
94
  ast_table.transpose
79
95
  @cell_matrix = create_cell_matrix(ast_table)
@@ -95,7 +111,7 @@ module Cucumber
95
111
  # registered with #map_column! and #map_headers!.
96
112
  #
97
113
  def dup
98
- self.class.new(raw.dup, @conversion_procs.dup, @header_mappings.dup, @header_conversion_proc)
114
+ self.class.new(Core::Ast::DataTable.new(raw, location), @conversion_procs.dup, @header_mappings.dup, @header_conversion_proc)
99
115
  end
100
116
 
101
117
  # Returns a new, transposed table. Example:
@@ -110,7 +126,7 @@ module Cucumber
110
126
  # | 4 | 2 |
111
127
  #
112
128
  def transpose
113
- self.class.new(raw.transpose, @conversion_procs.dup, @header_mappings.dup, @header_conversion_proc)
129
+ self.class.new(Core::Ast::DataTable.new(raw.transpose, location), @conversion_procs.dup, @header_mappings.dup, @header_conversion_proc)
114
130
  end
115
131
 
116
132
  # Converts this table into an Array of Hash where the keys of each
@@ -237,7 +253,7 @@ module Cucumber
237
253
 
238
254
  # Returns a new Table where the headers are redefined. See #map_headers!
239
255
  def map_headers(mappings={}, &block)
240
- self.class.new raw.dup, @conversion_procs.dup, mappings, block
256
+ self.class.new(Core::Ast::DataTable.new(raw, location), @conversion_procs.dup, mappings, block)
241
257
  end
242
258
 
243
259
  # Change how #hashes converts column values. The +column_name+ argument identifies the column
@@ -262,7 +278,7 @@ module Cucumber
262
278
  def map_column(column_name, strict=true, &conversion_proc)
263
279
  conversion_procs = @conversion_procs.dup
264
280
  conversion_procs[column_name.to_s] = { :strict => strict, :proc => conversion_proc }
265
- self.class.new(raw.dup, conversion_procs, @header_mappings.dup, @header_conversion_proc)
281
+ self.class.new(Core::Ast::DataTable.new(raw, location), conversion_procs, @header_mappings.dup, @header_conversion_proc)
266
282
  end
267
283
 
268
284
  # Compares +other_table+ to self. If +other_table+ contains columns
@@ -444,10 +460,6 @@ module Cucumber
444
460
  s
445
461
  end
446
462
 
447
- def location
448
- @ast_table.location
449
- end
450
-
451
463
  def description_for_visitors
452
464
  :legacy_table
453
465
  end
@@ -4,7 +4,7 @@ require 'rbconfig'
4
4
 
5
5
  module Cucumber
6
6
  unless defined?(Cucumber::VERSION)
7
- VERSION = '2.0.0.rc.1'
7
+ VERSION = '2.0.0.rc.2'
8
8
  BINARY = File.expand_path(File.dirname(__FILE__) + '/../../bin/cucumber')
9
9
  LIBDIR = File.expand_path(File.dirname(__FILE__) + '/../../lib')
10
10
  JRUBY = defined?(JRUBY_VERSION)
@@ -44,17 +44,13 @@ module Cucumber
44
44
  # %w{ CUC-101 Peeler 22 }
45
45
  # ])
46
46
  #
47
- def table(text_or_table, file=nil, line_offset=0)
47
+ def table(text_or_table, file=nil, line=0)
48
48
  if !file
49
49
  location = Core::Ast::Location.of_caller
50
50
  else
51
51
  location = Core::Ast::Location.new(file, line)
52
52
  end
53
- if Array === text_or_table
54
- MultilineArgument::DataTable.new(text_or_table, location)
55
- else
56
- MultilineArgument::DataTable.parse(text_or_table, file, location)
57
- end
53
+ MultilineArgument::DataTable.from(text_or_table, location)
58
54
  end
59
55
 
60
56
  # Returns a Cucumber::MultilineArgument::DocString for +body+.
@@ -6,7 +6,7 @@ module Cucumber
6
6
  module MultilineArgument
7
7
  describe DataTable do
8
8
  before do
9
- @table = DataTable.new([
9
+ @table = DataTable.from([
10
10
  %w{one four seven},
11
11
  %w{4444 55555 666666}
12
12
  ])
@@ -48,7 +48,7 @@ module Cucumber
48
48
  it "applies the block once to each value" do
49
49
  headers = ['header']
50
50
  rows = ['value']
51
- table = DataTable.new [headers, rows]
51
+ table = DataTable.from [headers, rows]
52
52
  count = 0
53
53
  table.map_column!('header') { |value| count +=1 }
54
54
  table.rows
@@ -94,7 +94,7 @@ module Cucumber
94
94
  it "applies the block once to each value" do
95
95
  headers = ['header']
96
96
  rows = ['value']
97
- table = DataTable.new [headers, rows]
97
+ table = DataTable.from [headers, rows]
98
98
  count = 0
99
99
  new_table = table.map_column('header') { |value| count +=1 }
100
100
  new_table.rows
@@ -133,7 +133,7 @@ module Cucumber
133
133
 
134
134
  describe "#match" do
135
135
  before(:each) do
136
- @table = DataTable.new([
136
+ @table = DataTable.from([
137
137
  %w{one four seven},
138
138
  %w{4444 55555 666666}
139
139
  ])
@@ -152,7 +152,7 @@ module Cucumber
152
152
 
153
153
  describe "#transpose" do
154
154
  before(:each) do
155
- @table = DataTable.new([
155
+ @table = DataTable.from([
156
156
  %w{one 1111},
157
157
  %w{two 22222}
158
158
  ])
@@ -166,7 +166,7 @@ module Cucumber
166
166
  describe "#rows_hash" do
167
167
 
168
168
  it "should return a hash of the rows" do
169
- table = DataTable.new([
169
+ table = DataTable.from([
170
170
  %w{one 1111},
171
171
  %w{two 22222}
172
172
  ])
@@ -174,7 +174,7 @@ module Cucumber
174
174
  end
175
175
 
176
176
  it "should fail if the table doesn't have two columns" do
177
- faulty_table = DataTable.new([
177
+ faulty_table = DataTable.from([
178
178
  %w{one 1111 abc},
179
179
  %w{two 22222 def}
180
180
  ])
@@ -184,7 +184,7 @@ module Cucumber
184
184
  end
185
185
 
186
186
  it "should support header and column mapping" do
187
- table = DataTable.new([
187
+ table = DataTable.from([
188
188
  %w{one 1111},
189
189
  %w{two 22222}
190
190
  ])
@@ -196,7 +196,7 @@ module Cucumber
196
196
 
197
197
  describe '#map_headers!' do
198
198
  let(:table) do
199
- DataTable.new([
199
+ DataTable.from([
200
200
  %w{HELLO WORLD},
201
201
  %w{4444 55555}
202
202
  ])
@@ -236,7 +236,7 @@ module Cucumber
236
236
 
237
237
  describe '#map_headers' do
238
238
  let(:table) do
239
- DataTable.new([
239
+ DataTable.from([
240
240
  %w{HELLO WORLD},
241
241
  %w{4444 55555}
242
242
  ])
@@ -277,20 +277,20 @@ module Cucumber
277
277
 
278
278
  describe "diff!" do
279
279
  it "should detect a complex diff" do
280
- t1 = table(%{
280
+ t1 = DataTable.from(%{
281
281
  | 1 | 22 | 333 | 4444 |
282
282
  | 55555 | 666666 | 7777777 | 88888888 |
283
283
  | 999999999 | 0000000000 | 01010101010 | 121212121212 |
284
284
  | 4000 | ABC | DEF | 50000 |
285
- }, __FILE__, __LINE__)
285
+ })
286
286
 
287
- t2 = table(%{
287
+ t2 = DataTable.from(%{
288
288
  | a | 4444 | 1 |
289
289
  | bb | 88888888 | 55555 |
290
290
  | ccc | xxxxxxxx | 999999999 |
291
291
  | dddd | 4000 | 300 |
292
292
  | e | 50000 | 4000 |
293
- }, __FILE__, __LINE__)
293
+ })
294
294
  expect { t1.diff!(t2) }.to raise_error
295
295
  expect( t1.to_s(:indent => 12, :color => false) ).to eq %{
296
296
  | 1 | (-) 22 | (-) 333 | 4444 | (+) a |
@@ -303,11 +303,11 @@ module Cucumber
303
303
  end
304
304
 
305
305
  it "should not change table when diffed with identical" do
306
- t = table(%{
306
+ t = DataTable.from(%{
307
307
  |a|b|c|
308
308
  |d|e|f|
309
309
  |g|h|i|
310
- }, __FILE__, __LINE__)
310
+ })
311
311
  t.diff!(t.dup)
312
312
  expect( t.to_s(:indent => 12, :color => false) ).to eq %{
313
313
  | a | b | c |
@@ -317,11 +317,11 @@ module Cucumber
317
317
  end
318
318
 
319
319
  it "should inspect missing and surplus cells" do
320
- t1 = DataTable.new([
320
+ t1 = DataTable.from([
321
321
  ['name', 'male', 'lastname', 'swedish'],
322
322
  ['aslak', 'true', 'hellesøy', 'false']
323
323
  ])
324
- t2 = DataTable.new([
324
+ t2 = DataTable.from([
325
325
  ['name', 'male', 'lastname', 'swedish'],
326
326
  ['aslak', true, 'hellesøy', false]
327
327
  ])
@@ -335,12 +335,12 @@ module Cucumber
335
335
  end
336
336
 
337
337
  it "should allow column mapping of target before diffing" do
338
- t1 = DataTable.new([
338
+ t1 = DataTable.from([
339
339
  ['name', 'male'],
340
340
  ['aslak', 'true']
341
341
  ])
342
342
  t1.map_column!('male') { |m| m == 'true' }
343
- t2 = DataTable.new([
343
+ t2 = DataTable.from([
344
344
  ['name', 'male'],
345
345
  ['aslak', true]
346
346
  ])
@@ -352,14 +352,14 @@ module Cucumber
352
352
  end
353
353
 
354
354
  it "should allow column mapping of argument before diffing" do
355
- t1 = DataTable.new([
355
+ t1 = DataTable.from([
356
356
  ['name', 'male'],
357
357
  ['aslak', true]
358
358
  ])
359
359
  t1.map_column!('male') {
360
360
  'true'
361
361
  }
362
- t2 = DataTable.new([
362
+ t2 = DataTable.from([
363
363
  ['name', 'male'],
364
364
  ['aslak', 'true']
365
365
  ])
@@ -371,13 +371,13 @@ module Cucumber
371
371
  end
372
372
 
373
373
  it "should allow header mapping before diffing" do
374
- t1 = DataTable.new([
374
+ t1 = DataTable.from([
375
375
  ['Name', 'Male'],
376
376
  ['aslak', 'true']
377
377
  ])
378
378
  t1.map_headers!('Name' => 'name', 'Male' => 'male')
379
379
  t1.map_column!('male') { |m| m == 'true' }
380
- t2 = DataTable.new([
380
+ t2 = DataTable.from([
381
381
  ['name', 'male'],
382
382
  ['aslak', true]
383
383
  ])
@@ -389,11 +389,11 @@ module Cucumber
389
389
  end
390
390
 
391
391
  it "should detect seemingly identical tables as different" do
392
- t1 = DataTable.new([
392
+ t1 = DataTable.from([
393
393
  ['X', 'Y'],
394
394
  ['2', '1']
395
395
  ])
396
- t2 = DataTable.new([
396
+ t2 = DataTable.from([
397
397
  ['X', 'Y'],
398
398
  [2, 1]
399
399
  ])
@@ -406,7 +406,7 @@ module Cucumber
406
406
  end
407
407
 
408
408
  it "should not allow mappings that match more than 1 column" do
409
- t1 = DataTable.new([
409
+ t1 = DataTable.from([
410
410
  ['Cuke', 'Duke'],
411
411
  ['Foo', 'Bar']
412
412
  ])
@@ -418,85 +418,82 @@ module Cucumber
418
418
 
419
419
  describe "raising" do
420
420
  before do
421
- @t = table(%{
421
+ @t = DataTable.from(%{
422
422
  | a | b |
423
423
  | c | d |
424
- }, __FILE__, __LINE__)
424
+ })
425
425
  expect( @t ).not_to eq nil
426
426
  end
427
427
 
428
428
  it "should raise on missing rows" do
429
- t = table(%{
429
+ t = DataTable.from(%{
430
430
  | a | b |
431
- }, __FILE__, __LINE__)
431
+ })
432
432
  expect( lambda { @t.dup.diff!(t) } ).to raise_error
433
433
  expect { @t.dup.diff!(t, :missing_row => false) }.not_to raise_error
434
434
  end
435
435
 
436
436
  it "should not raise on surplus rows when surplus is at the end" do
437
- t = table(%{
437
+ t = DataTable.from(%{
438
438
  | a | b |
439
439
  | c | d |
440
440
  | e | f |
441
- }, __FILE__, __LINE__)
441
+ })
442
442
  expect { @t.dup.diff!(t) }.to raise_error
443
443
  expect { @t.dup.diff!(t, :surplus_row => false) }.not_to raise_error
444
444
  end
445
445
 
446
446
  it "should not raise on surplus rows when surplus is interleaved" do
447
- t1 = table(%{
447
+ t1 = DataTable.from(%{
448
448
  | row_1 | row_2 |
449
449
  | four | 4 |
450
- }, __FILE__, __LINE__)
451
- t2 = table(%{
450
+ })
451
+ t2 = DataTable.from(%{
452
452
  | row_1 | row_2 |
453
453
  | one | 1 |
454
454
  | two | 2 |
455
455
  | three | 3 |
456
456
  | four | 4 |
457
457
  | five | 5 |
458
- }, __FILE__, __LINE__)
458
+ })
459
459
  expect { t1.dup.diff!(t2) }.to raise_error
460
460
 
461
461
  expect { t1.dup.diff!(t2, :surplus_row => false) }.not_to raise_error
462
462
  end
463
463
 
464
464
  it "should raise on missing columns" do
465
- t = table(%{
465
+ t = DataTable.from(%{
466
466
  | a |
467
467
  | c |
468
- }, __FILE__, __LINE__)
468
+ })
469
469
  expect { @t.dup.diff!(t) }.to raise_error
470
470
  expect { @t.dup.diff!(t, :missing_col => false) }.not_to raise_error
471
471
  end
472
472
 
473
473
  it "should not raise on surplus columns" do
474
- t = table(%{
474
+ t = DataTable.from(%{
475
475
  | a | b | x |
476
476
  | c | d | y |
477
- }, __FILE__, __LINE__)
477
+ })
478
478
  expect { @t.dup.diff!(t) }.not_to raise_error
479
479
  expect { @t.dup.diff!(t, :surplus_col => true) }.to raise_error
480
480
  end
481
481
 
482
482
  it "should not raise on misplaced columns" do
483
- t = table(%{
483
+ t = DataTable.from(%{
484
484
  | b | a |
485
485
  | d | c |
486
- }, __FILE__, __LINE__)
486
+ })
487
487
  expect { @t.dup.diff!(t) }.not_to raise_error
488
488
  expect { @t.dup.diff!(t, :misplaced_col => true) }.to raise_error
489
489
  end
490
490
  end
491
491
 
492
- def table(text, file, offset)
493
- DataTable.parse(text, file, offset)
494
- end
495
492
  end
496
493
 
497
- describe "#new" do
494
+ describe "#from" do
498
495
  it "should allow Array of Hash" do
499
- t1 = DataTable.new([{'name' => 'aslak', 'male' => 'true'}])
496
+ t1 = DataTable.from([{'name' => 'aslak', 'male' => 'true'}])
500
497
  expect( t1.to_s(:indent => 12, :color => false) ).to eq %{
501
498
  | male | name |
502
499
  | true | aslak |
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cucumber
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.0.rc.1
4
+ version: 2.0.0.rc.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Aslak Hellesøy
@@ -818,7 +818,7 @@ rubyforge_project:
818
818
  rubygems_version: 2.2.2
819
819
  signing_key:
820
820
  specification_version: 4
821
- summary: cucumber-2.0.0.rc.1
821
+ summary: cucumber-2.0.0.rc.2
822
822
  test_files:
823
823
  - features/docs/api/list_step_defs_as_json.feature
824
824
  - features/docs/api/run_cli_main_with_existing_runtime.feature