aboutsummaryrefslogtreecommitdiffstats
path: root/test/formatters/test_csv.rb
blob: a4443f41375d0502be8fead683c9b2ba1d144f42 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
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