1#!/usr/bin/env ruby -w 2# encoding: UTF-8 3 4# tc_csv_writing.rb 5# 6# Created by James Edward Gray II on 2005-10-31. 7# Copyright 2005 James Edward Gray II. You can redistribute or modify this code 8# under the terms of Ruby's license. 9 10require_relative "base" 11 12class TestCSV::Writing < TestCSV 13 extend DifferentOFS 14 15 def test_writing 16 [ ["\t", ["\t"]], 17 ["foo,\"\"\"\"\"\",baz", ["foo", "\"\"", "baz"]], 18 ["foo,\"\"\"bar\"\"\",baz", ["foo", "\"bar\"", "baz"]], 19 ["\"\"\"\n\",\"\"\"\n\"", ["\"\n", "\"\n"]], 20 ["foo,\"\r\n\",baz", ["foo", "\r\n", "baz"]], 21 ["\"\"", [""]], 22 ["foo,\"\"\"\",baz", ["foo", "\"", "baz"]], 23 ["foo,\"\r.\n\",baz", ["foo", "\r.\n", "baz"]], 24 ["foo,\"\r\",baz", ["foo", "\r", "baz"]], 25 ["foo,\"\",baz", ["foo", "", "baz"]], 26 ["\",\"", [","]], 27 ["foo", ["foo"]], 28 [",,", [nil, nil, nil]], 29 [",", [nil, nil]], 30 ["foo,\"\n\",baz", ["foo", "\n", "baz"]], 31 ["foo,,baz", ["foo", nil, "baz"]], 32 ["\"\"\"\r\",\"\"\"\r\"", ["\"\r", "\"\r"]], 33 ["\",\",\",\"", [",", ","]], 34 ["foo,bar,", ["foo", "bar", nil]], 35 [",foo,bar", [nil, "foo", "bar"]], 36 ["foo,bar", ["foo", "bar"]], 37 [";", [";"]], 38 ["\t,\t", ["\t", "\t"]], 39 ["foo,\"\r\n\r\",baz", ["foo", "\r\n\r", "baz"]], 40 ["foo,\"\r\n\n\",baz", ["foo", "\r\n\n", "baz"]], 41 ["foo,\"foo,bar\",baz", ["foo", "foo,bar", "baz"]], 42 [";,;", [";", ";"]], 43 ["foo,\"\"\"\"\"\",baz", ["foo", "\"\"", "baz"]], 44 ["foo,\"\"\"bar\"\"\",baz", ["foo", "\"bar\"", "baz"]], 45 ["foo,\"\r\n\",baz", ["foo", "\r\n", "baz"]], 46 ["\"\"", [""]], 47 ["foo,\"\"\"\",baz", ["foo", "\"", "baz"]], 48 ["foo,\"\r.\n\",baz", ["foo", "\r.\n", "baz"]], 49 ["foo,\"\r\",baz", ["foo", "\r", "baz"]], 50 ["foo,\"\",baz", ["foo", "", "baz"]], 51 ["foo", ["foo"]], 52 [",,", [nil, nil, nil]], 53 [",", [nil, nil]], 54 ["foo,\"\n\",baz", ["foo", "\n", "baz"]], 55 ["foo,,baz", ["foo", nil, "baz"]], 56 ["foo,bar", ["foo", "bar"]], 57 ["foo,\"\r\n\n\",baz", ["foo", "\r\n\n", "baz"]], 58 ["foo,\"foo,bar\",baz", ["foo", "foo,bar", "baz"]], 59 [%Q{a,b}, ["a", "b"]], 60 [%Q{a,"""b"""}, ["a", "\"b\""]], 61 [%Q{a,"""b"}, ["a", "\"b"]], 62 [%Q{a,"b"""}, ["a", "b\""]], 63 [%Q{a,"\nb"""}, ["a", "\nb\""]], 64 [%Q{a,"""\nb"}, ["a", "\"\nb"]], 65 [%Q{a,"""\nb\n"""}, ["a", "\"\nb\n\""]], 66 [%Q{a,"""\nb\n""",}, ["a", "\"\nb\n\"", nil]], 67 [%Q{a,,,}, ["a", nil, nil, nil]], 68 [%Q{,}, [nil, nil]], 69 [%Q{"",""}, ["", ""]], 70 [%Q{""""}, ["\""]], 71 [%Q{"""",""}, ["\"",""]], 72 [%Q{,""}, [nil,""]], 73 [%Q{,"\r"}, [nil,"\r"]], 74 [%Q{"\r\n,"}, ["\r\n,"]], 75 [%Q{"\r\n,",}, ["\r\n,", nil]] ].each do |test_case| 76 assert_equal(test_case.first + $/, CSV.generate_line(test_case.last)) 77 end 78 end 79 80 def test_col_sep 81 assert_equal( "a;b;;c\n", CSV.generate_line( ["a", "b", nil, "c"], 82 col_sep: ";" ) ) 83 assert_equal( "a\tb\t\tc\n", CSV.generate_line( ["a", "b", nil, "c"], 84 col_sep: "\t" ) ) 85 end 86 87 def test_row_sep 88 assert_equal( "a,b,,c\r\n", CSV.generate_line( ["a", "b", nil, "c"], 89 row_sep: "\r\n" ) ) 90 end 91 92 def test_force_quotes 93 assert_equal( %Q{"1","b","","already ""quoted"""\n}, 94 CSV.generate_line( [1, "b", nil, %Q{already "quoted"}], 95 force_quotes: true ) ) 96 end 97end 98