aboutsummaryrefslogtreecommitdiffstats
path: root/test/formatters/test_csv.rb
diff options
context:
space:
mode:
Diffstat (limited to 'test/formatters/test_csv.rb')
-rw-r--r--test/formatters/test_csv.rb119
1 files changed, 119 insertions, 0 deletions
diff --git a/test/formatters/test_csv.rb b/test/formatters/test_csv.rb
new file mode 100644
index 0000000..a4443f4
--- /dev/null
+++ b/test/formatters/test_csv.rb
@@ -0,0 +1,119 @@
+require "test_helper"
+
+class TestRooFormatterCSV < Minitest::Test
+ def test_date_time_to_csv
+ with_each_spreadsheet(name: "time-test") do |workbook|
+ Dir.mktmpdir do |tempdir|
+ csv_output = File.join(tempdir, "time_test.csv")
+ assert workbook.to_csv(csv_output)
+ assert File.exist?(csv_output)
+ assert_equal "", `diff --strip-trailing-cr #{TESTDIR}/time-test.csv #{csv_output}`
+ # --strip-trailing-cr is needed because the test-file use 0A and
+ # the test on an windows box generates 0D 0A as line endings
+ end
+ end
+ end
+
+ def test_boolean_to_csv
+ with_each_spreadsheet(name: "boolean") do |workbook|
+ Dir.mktmpdir do |tempdir|
+ csv_output = File.join(tempdir,"boolean.csv")
+ assert workbook.to_csv(csv_output)
+ assert File.exist?(csv_output)
+ assert_equal "", `diff --strip-trailing-cr #{TESTDIR}/boolean.csv #{csv_output}`
+ # --strip-trailing-cr is needed because the test-file use 0A and
+ # the test on an windows box generates 0D 0A as line endings
+ end
+ end
+ end
+
+ def test_link_to_csv
+ with_each_spreadsheet(name: "link", format: :excelx) do |workbook|
+ Dir.mktmpdir do |tempdir|
+ csv_output = File.join(tempdir, "link.csv")
+ assert workbook.to_csv(csv_output)
+ assert File.exist?(csv_output)
+ assert_equal "", `diff --strip-trailing-cr #{TESTDIR}/link.csv #{csv_output}`
+ # --strip-trailing-cr is needed because the test-file use 0A and
+ # the test on an windows box generates 0D 0A as line endings
+ end
+ end
+ end
+
+ # "/tmp/xxxx" darf man unter Windows nicht verwenden, weil das nicht erkannt
+ # wird.
+ # Besser: Methode um temporaeres Dir. portabel zu bestimmen
+ def test_huge_document_to_csv
+ skip_long_test
+
+ original_csv_path = File.join(TESTDIR, "Bibelbund.csv")
+ with_each_spreadsheet(name: "Bibelbund", format: [:openoffice, :excelx]) do |workbook|
+ Dir.mktmpdir do |tempdir|
+ new_csv_path = File.join(tempdir, "Bibelbund.csv")
+ assert_equal "Tagebuch des Sekret\303\244rs. Letzte Tagung 15./16.11.75 Schweiz", workbook.cell(45, "A")
+ assert_equal "Tagebuch des Sekret\303\244rs. Nachrichten aus Chile", workbook.cell(46, "A")
+ assert_equal "Tagebuch aus Chile Juli 1977", workbook.cell(55, "A")
+ assert workbook.to_csv(new_csv_path)
+ assert File.exist?(new_csv_path)
+ assert FileUtils.identical?(original_csv_path, new_csv_path), "error in class #{workbook.class}"
+ end
+ end
+ end
+
+ def test_bug_empty_sheet
+ with_each_spreadsheet(name: "formula", format: [:openoffice, :excelx]) do |workbook|
+ workbook.default_sheet = "Sheet3" # is an empty sheet
+ Dir.mktmpdir do |tempdir|
+ workbook.to_csv(File.join(tempdir, "emptysheet.csv"))
+ assert_equal "", `cat #{File.join(tempdir, "emptysheet.csv")}`
+ end
+ end
+ end
+
+ def test_bug_quotes_excelx
+ skip_long_test
+ # TODO: run this test with a much smaller document
+ with_each_spreadsheet(name: "Bibelbund", format: [:openoffice, :excelx]) do |workbook|
+ workbook.default_sheet = workbook.sheets.first
+ assert_equal(
+ 'Einflüsse der neuen Theologie in "de gereformeerde Kerken van Nederland"',
+ workbook.cell("A", 76)
+ )
+ workbook.to_csv("csv#{$$}")
+ assert_equal(
+ 'Einflüsse der neuen Theologie in "de gereformeerde Kerken van Nederland"',
+ workbook.cell("A", 78)
+ )
+ File.delete_if_exist("csv#{$$}")
+ end
+ end
+
+ def test_bug_datetime_to_csv
+ with_each_spreadsheet(name: "datetime") do |workbook|
+ Dir.mktmpdir do |tempdir|
+ datetime_csv_file = File.join(tempdir, "datetime.csv")
+
+ assert workbook.to_csv(datetime_csv_file)
+ assert File.exist?(datetime_csv_file)
+ assert_equal "", file_diff("#{TESTDIR}/so_datetime.csv", datetime_csv_file)
+ end
+ end
+ end
+
+ def test_true_class
+ assert_equal "true", cell_to_csv(1, 1)
+ end
+
+ def test_false_class
+ assert_equal "false", cell_to_csv(2, 1)
+ end
+
+ def test_date_class
+ assert_equal "2017-01-01", cell_to_csv(3, 1)
+ end
+
+ def cell_to_csv(row, col)
+ filename = File.join(TESTDIR, "formula_cell_types.xlsx")
+ Roo::Spreadsheet.open(filename).send("cell_to_csv", row, col, "Sheet1")
+ end
+end