summaryrefslogtreecommitdiff
path: root/test/csv
diff options
context:
space:
mode:
authorktsj <ktsj@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2016-09-07 06:06:09 +0000
committerktsj <ktsj@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2016-09-07 06:06:09 +0000
commitb425d4f19ad9efaefcb1a767a6ea26e6d40e3985 (patch)
tree203abbebd3964eb0c682b1ba0a7ab88ee04a6f08 /test/csv
parentf60caf13f9d2a54a7879c80b2df4829800798608 (diff)
* lib/csv.rb (CSV::{Row,Table}#{each,delete_if}): returns an enumerator
if no block is given. [ruby-core:75346] [Feature #11058] * test/csv/test_row.rb: add test for above. * test/csv/test_table.rb: ditto. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@56083 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'test/csv')
-rwxr-xr-xtest/csv/test_row.rb25
-rwxr-xr-xtest/csv/test_table.rb59
2 files changed, 82 insertions, 2 deletions
diff --git a/test/csv/test_row.rb b/test/csv/test_row.rb
index 1fa15d392a..1cb851b027 100755
--- a/test/csv/test_row.rb
+++ b/test/csv/test_row.rb
@@ -209,9 +209,20 @@ class TestCSV::Row < TestCSV
# by header
assert_equal(["C", 3], @row.delete("C"))
- # using a block
+ end
+
+ def test_delete_if
assert_equal(@row, @row.delete_if { |h, f| h == "A" and not f.nil? })
- assert_equal([["A", nil]], @row.to_a)
+ assert_equal([["B", 2], ["C", 3], ["A", nil]], @row.to_a)
+ end
+
+ def test_delete_if_without_block
+ enum = @row.delete_if
+ assert_instance_of(Enumerator, enum)
+ assert_equal(@row.size, enum.size)
+
+ assert_equal(@row, enum.each { |h, f| h == "A" and not f.nil? })
+ assert_equal([["B", 2], ["C", 3], ["A", nil]], @row.to_a)
end
def test_fields
@@ -281,6 +292,16 @@ class TestCSV::Row < TestCSV
# verify that we can chain the call
assert_equal(@row, @row.each { })
+
+ # without block
+ ary = @row.to_a
+ enum = @row.each
+ assert_instance_of(Enumerator, enum)
+ assert_equal(@row.size, enum.size)
+ enum.each do |pair|
+ assert_equal(ary.first.first, pair.first)
+ assert_equal(ary.shift.last, pair.last)
+ end
end
def test_enumerable
diff --git a/test/csv/test_table.rb b/test/csv/test_table.rb
index 80e553e83f..25ef11a772 100755
--- a/test/csv/test_table.rb
+++ b/test/csv/test_table.rb
@@ -220,6 +220,17 @@ class TestCSV::Table < TestCSV
# verify that we can chain the call
assert_equal(@table, @table.each { })
+ # without block
+ enum = @table.each
+ assert_instance_of(Enumerator, enum)
+ assert_equal(@table.size, enum.size)
+
+ i = 0
+ enum.each do |row|
+ assert_equal(@rows[i], row)
+ i += 1
+ end
+
###################
### Column Mode ###
###################
@@ -231,6 +242,17 @@ class TestCSV::Table < TestCSV
assert_equal(@table[header], column)
end
+ # without block
+ enum = @table.each
+ assert_instance_of(Enumerator, enum)
+ assert_equal(@table.headers.size, enum.size)
+
+ headers = @table.headers
+ enum.each do |header, column|
+ assert_equal(headers.shift, header)
+ assert_equal(@table[header], column)
+ end
+
############################
### One Shot Mode Change ###
############################
@@ -363,6 +385,24 @@ class TestCSV::Table < TestCSV
END_RESULT
end
+ def test_delete_if_row_without_block
+ ######################
+ ### Mixed/Row Mode ###
+ ######################
+ enum = @table.delete_if
+ assert_instance_of(Enumerator, enum)
+ assert_equal(@table.size, enum.size)
+
+ # verify that we can chain the call
+ assert_equal(@table, enum.each { |row| (row["B"] % 2).zero? })
+
+ # verify resulting table
+ assert_equal(<<-END_RESULT.gsub(/^\s+/, ""), @table.to_csv)
+ A,B,C
+ 4,5,6
+ END_RESULT
+ end
+
def test_delete_if_column
###################
### Column Mode ###
@@ -378,6 +418,25 @@ class TestCSV::Table < TestCSV
END_RESULT
end
+ def test_delete_if_column_without_block
+ ###################
+ ### Column Mode ###
+ ###################
+ @table.by_col!
+
+ enum = @table.delete_if
+ assert_instance_of(Enumerator, enum)
+ assert_equal(@table.headers.size, enum.size)
+
+ assert_equal(@table, enum.each { |h, v| h > "A" })
+ assert_equal(<<-END_RESULT.gsub(/^\s+/, ""), @table.to_csv)
+ A
+ 1
+ 4
+ 7
+ END_RESULT
+ end
+
def test_values_at
##################
### Mixed Mode ###