diff options
Diffstat (limited to 'test/csv/interface/test_write.rb')
-rw-r--r-- | test/csv/interface/test_write.rb | 174 |
1 files changed, 174 insertions, 0 deletions
diff --git a/test/csv/interface/test_write.rb b/test/csv/interface/test_write.rb new file mode 100644 index 0000000000..8511204ef0 --- /dev/null +++ b/test/csv/interface/test_write.rb @@ -0,0 +1,174 @@ +# frozen_string_literal: false + +require_relative "../helper" + +class TestCSVInterfaceWrite < Test::Unit::TestCase + extend DifferentOFS + + def setup + super + @output = Tempfile.new(["interface-write", ".csv"]) + end + + def teardown + @output.close(true) + super + end + + def test_generate_default + csv_text = CSV.generate do |csv| + csv << [1, 2, 3] << [4, nil, 5] + end + assert_equal(<<-CSV, csv_text) +1,2,3 +4,,5 + CSV + end + + def test_generate_append + csv_text = <<-CSV +1,2,3 +4,,5 + CSV + CSV.generate(csv_text) do |csv| + csv << ["last", %Q{"row"}] + end + assert_equal(<<-CSV, csv_text) +1,2,3 +4,,5 +last,"""row""" + CSV + end + + def test_generate_no_new_line + csv_text = CSV.generate("test") do |csv| + csv << ["row"] + end + assert_equal(<<-CSV, csv_text) +testrow + CSV + end + + def test_generate_line_col_sep + line = CSV.generate_line(["1", "2", "3"], col_sep: ";") + assert_equal(<<-LINE, line) +1;2;3 + LINE + end + + def test_generate_line_row_sep + line = CSV.generate_line(["1", "2"], row_sep: nil) + assert_equal(<<-LINE.chomp, line) +1,2 + LINE + end + + def test_generate_line_shortcut + line = ["1", "2", "3"].to_csv(col_sep: ";") + assert_equal(<<-LINE, line) +1;2;3 + LINE + end + + def test_headers_detection + headers = ["a", "b", "c"] + CSV.open(@output.path, "w", headers: true) do |csv| + csv << headers + csv << ["1", "2", "3"] + assert_equal(headers, csv.headers) + end + end + + def test_lineno + CSV.open(@output.path, "w") do |csv| + n_lines = 20 + n_lines.times do + csv << ["a", "b", "c"] + end + assert_equal(n_lines, csv.lineno) + end + end + + def test_append_row + CSV.open(@output.path, "wb") do |csv| + csv << + CSV::Row.new([], ["1", "2", "3"]) << + CSV::Row.new([], ["a", "b", "c"]) + end + assert_equal(<<-CSV, File.read(@output.path, mode: "rb")) +1,2,3 +a,b,c + CSV + end + + def test_append_hash + CSV.open(@output.path, "wb", headers: true) do |csv| + csv << [:a, :b, :c] + csv << {a: 1, b: 2, c: 3} + csv << {a: 4, b: 5, c: 6} + end + assert_equal(<<-CSV, File.read(@output.path, mode: "rb")) +a,b,c +1,2,3 +4,5,6 + CSV + end + + def test_append_hash_headers_array + CSV.open(@output.path, "wb", headers: [:b, :a, :c]) do |csv| + csv << {a: 1, b: 2, c: 3} + csv << {a: 4, b: 5, c: 6} + end + assert_equal(<<-CSV, File.read(@output.path, mode: "rb")) +2,1,3 +5,4,6 + CSV + end + + def test_append_hash_headers_string + CSV.open(@output.path, "wb", headers: "b|a|c", col_sep: "|") do |csv| + csv << {"a" => 1, "b" => 2, "c" => 3} + csv << {"a" => 4, "b" => 5, "c" => 6} + end + assert_equal(<<-CSV, File.read(@output.path, mode: "rb")) +2|1|3 +5|4|6 + CSV + end + + def test_write_headers + CSV.open(@output.path, + "wb", + headers: "b|a|c", + write_headers: true, + col_sep: "|" ) do |csv| + csv << {"a" => 1, "b" => 2, "c" => 3} + csv << {"a" => 4, "b" => 5, "c" => 6} + end + assert_equal(<<-CSV, File.read(@output.path, mode: "rb")) +b|a|c +2|1|3 +5|4|6 + CSV + end + + def test_write_headers_empty + CSV.open(@output.path, + "wb", + headers: "b|a|c", + write_headers: true, + col_sep: "|" ) do |csv| + end + assert_equal(<<-CSV, File.read(@output.path, mode: "rb")) +b|a|c + CSV + end + + def test_options_not_modified + options = {}.freeze + CSV.generate(options) {} + CSV.generate_line([], options) + CSV.filter("", "", options) + CSV.instance("", options) + end +end |