roo 2.7.0 → 2.8.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (75) hide show
  1. checksums.yaml +5 -5
  2. data/.github/issue_template.md +16 -0
  3. data/.github/pull_request_template.md +14 -0
  4. data/.rubocop.yml +186 -0
  5. data/.travis.yml +12 -7
  6. data/CHANGELOG.md +53 -2
  7. data/LICENSE +2 -0
  8. data/README.md +29 -13
  9. data/lib/roo/base.rb +69 -61
  10. data/lib/roo/constants.rb +5 -3
  11. data/lib/roo/csv.rb +20 -12
  12. data/lib/roo/excelx/cell/base.rb +26 -12
  13. data/lib/roo/excelx/cell/boolean.rb +9 -6
  14. data/lib/roo/excelx/cell/date.rb +7 -7
  15. data/lib/roo/excelx/cell/datetime.rb +14 -18
  16. data/lib/roo/excelx/cell/empty.rb +3 -2
  17. data/lib/roo/excelx/cell/number.rb +35 -34
  18. data/lib/roo/excelx/cell/string.rb +3 -3
  19. data/lib/roo/excelx/cell/time.rb +4 -3
  20. data/lib/roo/excelx/cell.rb +10 -6
  21. data/lib/roo/excelx/comments.rb +3 -3
  22. data/lib/roo/excelx/coordinate.rb +11 -4
  23. data/lib/roo/excelx/extractor.rb +21 -3
  24. data/lib/roo/excelx/format.rb +38 -31
  25. data/lib/roo/excelx/images.rb +26 -0
  26. data/lib/roo/excelx/relationships.rb +12 -4
  27. data/lib/roo/excelx/shared.rb +10 -3
  28. data/lib/roo/excelx/shared_strings.rb +9 -15
  29. data/lib/roo/excelx/sheet.rb +49 -10
  30. data/lib/roo/excelx/sheet_doc.rb +89 -48
  31. data/lib/roo/excelx/styles.rb +3 -3
  32. data/lib/roo/excelx/workbook.rb +7 -3
  33. data/lib/roo/excelx.rb +42 -16
  34. data/lib/roo/helpers/default_attr_reader.rb +20 -0
  35. data/lib/roo/helpers/weak_instance_cache.rb +41 -0
  36. data/lib/roo/open_office.rb +8 -6
  37. data/lib/roo/spreadsheet.rb +1 -1
  38. data/lib/roo/utils.rb +70 -20
  39. data/lib/roo/version.rb +1 -1
  40. data/lib/roo.rb +4 -1
  41. data/roo.gemspec +13 -11
  42. data/spec/lib/roo/base_spec.rb +45 -3
  43. data/spec/lib/roo/excelx/relationships_spec.rb +43 -0
  44. data/spec/lib/roo/excelx/sheet_doc_spec.rb +11 -0
  45. data/spec/lib/roo/excelx_spec.rb +150 -31
  46. data/spec/lib/roo/strict_spec.rb +43 -0
  47. data/spec/lib/roo/utils_spec.rb +25 -3
  48. data/spec/lib/roo/weak_instance_cache_spec.rb +92 -0
  49. data/spec/lib/roo_spec.rb +0 -0
  50. data/spec/spec_helper.rb +1 -1
  51. data/test/excelx/cell/test_attr_reader_default.rb +72 -0
  52. data/test/excelx/cell/test_base.rb +5 -0
  53. data/test/excelx/cell/test_datetime.rb +6 -6
  54. data/test/excelx/cell/test_empty.rb +11 -0
  55. data/test/excelx/cell/test_number.rb +9 -0
  56. data/test/excelx/cell/test_string.rb +20 -0
  57. data/test/excelx/cell/test_time.rb +4 -4
  58. data/test/excelx/test_coordinate.rb +51 -0
  59. data/test/formatters/test_csv.rb +19 -2
  60. data/test/formatters/test_xml.rb +13 -9
  61. data/test/helpers/test_accessing_files.rb +60 -0
  62. data/test/helpers/test_comments.rb +43 -0
  63. data/test/helpers/test_formulas.rb +9 -0
  64. data/test/helpers/test_labels.rb +103 -0
  65. data/test/helpers/test_sheets.rb +55 -0
  66. data/test/helpers/test_styles.rb +62 -0
  67. data/test/roo/test_base.rb +182 -0
  68. data/test/roo/test_csv.rb +37 -1
  69. data/test/roo/test_excelx.rb +157 -13
  70. data/test/roo/test_open_office.rb +196 -33
  71. data/test/test_helper.rb +66 -22
  72. data/test/test_roo.rb +32 -881
  73. metadata +32 -14
  74. data/.github/ISSUE_TEMPLATE +0 -10
  75. data/Gemfile_ruby2 +0 -30
@@ -0,0 +1,62 @@
1
+ module TestStyles
2
+ def test_cell_styles
3
+ # styles only valid in excel spreadsheets?
4
+ # TODO: what todo with other spreadsheet types
5
+ with_each_spreadsheet(name: "style", format: [:excelx]) do |oo|
6
+ # bold
7
+ assert_equal true, oo.font(1, 1).bold?
8
+ assert_equal false, oo.font(1, 1).italic?
9
+ assert_equal false, oo.font(1, 1).underline?
10
+
11
+ # italic
12
+ assert_equal false, oo.font(2, 1).bold?
13
+ assert_equal true, oo.font(2, 1).italic?
14
+ assert_equal false, oo.font(2, 1).underline?
15
+
16
+ # normal
17
+ assert_equal false, oo.font(3, 1).bold?
18
+ assert_equal false, oo.font(3, 1).italic?
19
+ assert_equal false, oo.font(3, 1).underline?
20
+
21
+ # underline
22
+ assert_equal false, oo.font(4, 1).bold?
23
+ assert_equal false, oo.font(4, 1).italic?
24
+ assert_equal true, oo.font(4, 1).underline?
25
+
26
+ # bold italic
27
+ assert_equal true, oo.font(5, 1).bold?
28
+ assert_equal true, oo.font(5, 1).italic?
29
+ assert_equal false, oo.font(5, 1).underline?
30
+
31
+ # bold underline
32
+ assert_equal true, oo.font(6, 1).bold?
33
+ assert_equal false, oo.font(6, 1).italic?
34
+ assert_equal true, oo.font(6, 1).underline?
35
+
36
+ # italic underline
37
+ assert_equal false, oo.font(7, 1).bold?
38
+ assert_equal true, oo.font(7, 1).italic?
39
+ assert_equal true, oo.font(7, 1).underline?
40
+
41
+ # bolded row
42
+ assert_equal true, oo.font(8, 1).bold?
43
+ assert_equal false, oo.font(8, 1).italic?
44
+ assert_equal false, oo.font(8, 1).underline?
45
+
46
+ # bolded col
47
+ assert_equal true, oo.font(9, 2).bold?
48
+ assert_equal false, oo.font(9, 2).italic?
49
+ assert_equal false, oo.font(9, 2).underline?
50
+
51
+ # bolded row, italic col
52
+ assert_equal true, oo.font(10, 3).bold?
53
+ assert_equal true, oo.font(10, 3).italic?
54
+ assert_equal false, oo.font(10, 3).underline?
55
+
56
+ # normal
57
+ assert_equal false, oo.font(11, 4).bold?
58
+ assert_equal false, oo.font(11, 4).italic?
59
+ assert_equal false, oo.font(11, 4).underline?
60
+ end
61
+ end
62
+ end
@@ -0,0 +1,182 @@
1
+ require "test_helper"
2
+
3
+ class TestRooBase < Minitest::Test
4
+ def test_info
5
+ # NOTE: unfortunately, the ods and xlsx versions of numbers1 are not
6
+ # identical, so this test fails for Open Office.
7
+ expected_templ = File.read("#{TESTDIR}/expected_results/numbers_info.yml")
8
+ with_each_spreadsheet(name: "numbers1", format: [:excelx]) do |workbook|
9
+ ext = get_extension(workbook)
10
+ expected = Kernel.format(expected_templ, ext)
11
+ assert_equal expected.strip, workbook.info.strip
12
+ end
13
+ end
14
+
15
+ def test_column
16
+ with_each_spreadsheet(name: "numbers1") do |workbook|
17
+ expected = [1.0, 5.0, nil, 10.0, Date.new(1961, 11, 21), "tata", nil, nil, nil, nil, "thisisa11", 41.0, nil, nil, 41.0, "einundvierzig", nil, Date.new(2007, 5, 31)]
18
+ assert_equal expected, workbook.column(1)
19
+ assert_equal expected, workbook.column("a")
20
+ end
21
+ end
22
+
23
+ def test_column_huge_document
24
+ skip_long_test
25
+ with_each_spreadsheet(name: "Bibelbund", format: [:openoffice, :excelx]) do |workbook|
26
+ workbook.default_sheet = workbook.sheets.first
27
+ assert_equal 3735, workbook.column("a").size
28
+ end
29
+ end
30
+
31
+ def test_simple_spreadsheet_find_by_condition
32
+ with_each_spreadsheet(name: "simple_spreadsheet") do |workbook|
33
+ workbook.header_line = 3
34
+ results = workbook.find(:all, conditions: { "Comment" => "Task 1" })
35
+ assert_equal Date.new(2007, 05, 07), results[1]["Date"]
36
+ assert_equal 10.75, results[1]["Start time"]
37
+ assert_equal 12.50, results[1]["End time"]
38
+ assert_equal 0, results[1]["Pause"]
39
+ assert_equal 1.75, results[1]["Sum"]
40
+ assert_equal "Task 1", results[1]["Comment"]
41
+ end
42
+ end
43
+
44
+ def test_bug_bbu
45
+ expected_templ = File.read("#{TESTDIR}/expected_results/bbu_info.txt")
46
+ with_each_spreadsheet(name: "bbu", format: [:openoffice, :excelx]) do |workbook|
47
+ ext = get_extension(workbook)
48
+ expected_result = Kernel.format(expected_templ, ext)
49
+ assert_equal expected_result.strip, workbook.info.strip
50
+
51
+ workbook.default_sheet = workbook.sheets[1] # empty sheet
52
+ assert_nil workbook.first_row
53
+ assert_nil workbook.last_row
54
+ assert_nil workbook.first_column
55
+ assert_nil workbook.last_column
56
+ end
57
+ end
58
+
59
+ def test_find_by_row_huge_document
60
+ skip_long_test
61
+ options = { name: "Bibelbund", format: [:openoffice, :excelx] }
62
+ with_each_spreadsheet(options) do |workbook|
63
+ workbook.default_sheet = workbook.sheets.first
64
+ result = workbook.find 20
65
+ assert result
66
+ assert_equal "Brief aus dem Sekretariat", result[0]
67
+
68
+ result = workbook.find 22
69
+ assert result
70
+ assert_equal "Brief aus dem Skretariat. Tagung in Amberg/Opf.", result[0]
71
+ end
72
+ end
73
+
74
+ def test_find_by_row
75
+ with_each_spreadsheet(name: "numbers1") do |workbook|
76
+ workbook.header_line = nil
77
+ result = workbook.find 16
78
+ assert result
79
+ assert_nil workbook.header_line
80
+ # keine Headerlines in diesem Beispiel definiert
81
+ assert_equal "einundvierzig", result[0]
82
+ # assert_equal false, results
83
+ result = workbook.find 15
84
+ assert result
85
+ assert_equal 41, result[0]
86
+ end
87
+ end
88
+
89
+ def test_find_by_row_if_header_line_is_not_nil
90
+ with_each_spreadsheet(name: "numbers1") do |workbook|
91
+ workbook.header_line = 2
92
+ refute_nil workbook.header_line
93
+ results = workbook.find 1
94
+ assert results
95
+ assert_equal 5, results[0]
96
+ assert_equal 6, results[1]
97
+ results = workbook.find 15
98
+ assert results
99
+ assert_equal "einundvierzig", results[0]
100
+ end
101
+ end
102
+
103
+ def test_find_by_conditions
104
+ skip_long_test
105
+ expected_results = [
106
+ {
107
+ "VERFASSER" => "Almassy, Annelene von",
108
+ "INTERNET" => nil,
109
+ "SEITE" => 316.0,
110
+ "KENNUNG" => "Aus dem Bibelbund",
111
+ "OBJEKT" => "Bibel+Gem",
112
+ "PC" => "#C:\\Bibelbund\\reprint\\BuG1982-3.pdf#",
113
+ "NUMMER" => "1982-3",
114
+ "TITEL" => "Brief aus dem Sekretariat"
115
+ },
116
+ {
117
+ "VERFASSER" => "Almassy, Annelene von",
118
+ "INTERNET" => nil,
119
+ "SEITE" => 222.0,
120
+ "KENNUNG" => "Aus dem Bibelbund",
121
+ "OBJEKT" => "Bibel+Gem",
122
+ "PC" => "#C:\\Bibelbund\\reprint\\BuG1983-2.pdf#",
123
+ "NUMMER" => "1983-2",
124
+ "TITEL" => "Brief aus dem Sekretariat"
125
+ }
126
+ ]
127
+
128
+ expected_results_size = 2
129
+ options = { name: "Bibelbund", format: [:openoffice, :excelx] }
130
+ with_each_spreadsheet(options) do |workbook|
131
+ results = workbook.find(:all, conditions: { "TITEL" => "Brief aus dem Sekretariat" })
132
+ assert_equal expected_results_size, results.size
133
+ assert_equal expected_results, results
134
+
135
+ conditions = {
136
+ "TITEL" => "Brief aus dem Sekretariat",
137
+ "VERFASSER" => "Almassy, Annelene von"
138
+ }
139
+ results = workbook.find(:all, conditions: conditions)
140
+ assert_equal expected_results, results
141
+ assert_equal expected_results_size, results.size
142
+
143
+ results = workbook.find(:all, conditions: { "VERFASSER" => "Almassy, Annelene von" })
144
+ assert_equal 13, results.size
145
+ end
146
+ end
147
+
148
+ def test_find_by_conditions_with_array_option
149
+ expected_results = [
150
+ [
151
+ "Brief aus dem Sekretariat",
152
+ "Almassy, Annelene von",
153
+ "Bibel+Gem",
154
+ "1982-3",
155
+ 316.0,
156
+ nil,
157
+ "#C:\\Bibelbund\\reprint\\BuG1982-3.pdf#",
158
+ "Aus dem Bibelbund",
159
+ ],
160
+ [
161
+ "Brief aus dem Sekretariat",
162
+ "Almassy, Annelene von",
163
+ "Bibel+Gem",
164
+ "1983-2",
165
+ 222.0,
166
+ nil,
167
+ "#C:\\Bibelbund\\reprint\\BuG1983-2.pdf#",
168
+ "Aus dem Bibelbund",
169
+ ]
170
+ ]
171
+ options = { name: "Bibelbund", format: [:openoffice, :excelx] }
172
+ with_each_spreadsheet(options) do |workbook|
173
+ conditions = {
174
+ "TITEL" => "Brief aus dem Sekretariat",
175
+ "VERFASSER" => "Almassy, Annelene von"
176
+ }
177
+ results = workbook.find(:all, conditions: conditions, array: true)
178
+ assert_equal 2, results.size
179
+ assert_equal expected_results, results
180
+ end
181
+ end
182
+ end
data/test/roo/test_csv.rb CHANGED
@@ -1,4 +1,4 @@
1
- require 'test_helper'
1
+ require "test_helper"
2
2
 
3
3
  class TestRooCSV < Minitest::Test
4
4
  def test_sheets
@@ -13,6 +13,34 @@ class TestRooCSV < Minitest::Test
13
13
  end
14
14
  end
15
15
 
16
+ def test_download_uri_with_query_string
17
+ file = filename("simple_spreadsheet")
18
+ port = 12_347
19
+ url = "#{local_server(port)}/#{file}?query-param=value"
20
+
21
+ start_local_server(file, port) do
22
+ csv = roo_class.new(url)
23
+ assert_equal "Task 1", csv.cell("f", 4)
24
+ assert_equal 1, csv.first_row
25
+ assert_equal 13, csv.last_row
26
+ assert_equal 1, csv.first_column
27
+ assert_equal 6, csv.last_column
28
+ end
29
+ end
30
+
31
+ def test_open_stream
32
+ file = filename("Bibelbund")
33
+ file_contents = File.read File.join(TESTDIR, file)
34
+ stream = StringIO.new(file_contents)
35
+ csv = roo_class.new(stream)
36
+
37
+ assert_equal "Aktuelle Seite", csv.cell("h", 12)
38
+ assert_equal 1, csv.first_row
39
+ assert_equal 3735, csv.last_row
40
+ assert_equal 1, csv.first_column
41
+ assert_equal 8, csv.last_column
42
+ end
43
+
16
44
  def test_nil_rows_and_lines_csv
17
45
  # x_123
18
46
  oo = Roo::CSV.new(File.join(TESTDIR,'Bibelbund.csv'))
@@ -42,6 +70,14 @@ class TestRooCSV < Minitest::Test
42
70
  assert_equal headers, parsed[1].keys
43
71
  end
44
72
 
73
+ def test_iso_8859_1
74
+ file = File.open(File.join(TESTDIR, "iso_8859_1.csv"))
75
+ options = { csv_options: { col_sep: ";", encoding: Encoding::ISO_8859_1 } }
76
+ workbook = Roo::CSV.new(file.path, options)
77
+ result = workbook.last_column
78
+ assert_equal(19, result)
79
+ end
80
+
45
81
  def roo_class
46
82
  Roo::CSV
47
83
  end
@@ -1,9 +1,9 @@
1
1
  require "test_helper"
2
2
 
3
- class TestRooExcelx < Minitest::Test
3
+ class TestRworkbookExcelx < Minitest::Test
4
4
  def test_download_uri_with_invalid_host
5
5
  assert_raises(RuntimeError) do
6
- Roo::Excelx.new("http://example.com/file.xlsx")
6
+ Roo::Excelx.new("http://examples.com/file.xlsx")
7
7
  end
8
8
  end
9
9
 
@@ -20,20 +20,20 @@ class TestRooExcelx < Minitest::Test
20
20
 
21
21
  def test_should_raise_file_not_found_error
22
22
  assert_raises(IOError) do
23
- Roo::Excelx.new(File.join("testnichtvorhanden", "Bibelbund.xlsx"))
23
+ roo_class.new(File.join("testnichtvorhanden", "Bibelbund.xlsx"))
24
24
  end
25
25
  end
26
26
 
27
27
  def test_file_warning_default
28
- assert_raises(TypeError) { Roo::Excelx.new(File.join(TESTDIR, "numbers1.ods")) }
29
- assert_raises(TypeError) { Roo::Excelx.new(File.join(TESTDIR, "numbers1.xls")) }
28
+ assert_raises(TypeError) { roo_class.new(File.join(TESTDIR, "numbers1.ods")) }
29
+ assert_raises(TypeError) { roo_class.new(File.join(TESTDIR, "numbers1.xls")) }
30
30
  end
31
31
 
32
32
  def test_file_warning_error
33
33
  %w(ods xls).each do |extension|
34
34
  assert_raises(TypeError) do
35
35
  options = { packed: false, file_warning: :error }
36
- Roo::Excelx.new(File.join(TESTDIR, "numbers1. #{extension}"), options)
36
+ roo_class.new(File.join(TESTDIR, "numbers1. #{extension}"), options)
37
37
  end
38
38
  end
39
39
  end
@@ -41,13 +41,13 @@ class TestRooExcelx < Minitest::Test
41
41
  def test_file_warning_warning
42
42
  options = { packed: false, file_warning: :warning }
43
43
  assert_raises(ArgumentError) do
44
- Roo::Excelx.new(File.join(TESTDIR, "numbers1.ods"), options)
44
+ roo_class.new(File.join(TESTDIR, "numbers1.ods"), options)
45
45
  end
46
46
  end
47
47
 
48
48
  def test_file_warning_ignore
49
49
  options = { packed: false, file_warning: :ignore }
50
- sheet = Roo::Excelx.new(File.join(TESTDIR, "type_excelx.ods"), options)
50
+ sheet = roo_class.new(File.join(TESTDIR, "type_excelx.ods"), options)
51
51
  assert sheet, "Should not throw an error"
52
52
  end
53
53
 
@@ -66,13 +66,13 @@ class TestRooExcelx < Minitest::Test
66
66
  # where the expected result is
67
67
  # "A: TestString"
68
68
  # "B: TestString"
69
- xlsx = Roo::Excelx.new(File.join(TESTDIR, "formula_string_error.xlsx"))
69
+ xlsx = roo_class.new(File.join(TESTDIR, "formula_string_error.xlsx"))
70
70
  assert_equal "Teststring", xlsx.cell("a", 1)
71
71
  assert_equal "Teststring", xlsx.cell("a", 2)
72
72
  end
73
73
 
74
74
  def test_parsing_xslx_from_numbers
75
- xlsx = Roo::Excelx.new(File.join(TESTDIR, "numbers-export.xlsx"))
75
+ xlsx = roo_class.new(File.join(TESTDIR, "numbers-export.xlsx"))
76
76
 
77
77
  xlsx.default_sheet = xlsx.sheets.first
78
78
  assert_equal "Sheet 1", xlsx.cell("a", 1)
@@ -100,7 +100,7 @@ class TestRooExcelx < Minitest::Test
100
100
 
101
101
  def test_expand_merged_range
102
102
  options = { expand_merged_ranges: true }
103
- xlsx = Roo::Excelx.new(File.join(TESTDIR, "merged_ranges.xlsx"), options)
103
+ xlsx = roo_class.new(File.join(TESTDIR, "merged_ranges.xlsx"), options)
104
104
 
105
105
  [
106
106
  {
@@ -134,7 +134,7 @@ class TestRooExcelx < Minitest::Test
134
134
  end
135
135
 
136
136
  def test_noexpand_merged_range
137
- xlsx = Roo::Excelx.new(File.join(TESTDIR, "merged_ranges.xlsx"))
137
+ xlsx = roo_class.new(File.join(TESTDIR, "merged_ranges.xlsx"))
138
138
 
139
139
  [
140
140
  {
@@ -171,11 +171,155 @@ class TestRooExcelx < Minitest::Test
171
171
  file = filename(:numbers1)
172
172
  file_contents = File.read File.join(TESTDIR, file), encoding: "BINARY"
173
173
  stream = StringIO.new(file_contents)
174
- xlsx = Roo::Excelx.new(stream)
174
+ xlsx = roo_class.new(stream)
175
175
  expected_sheet_names = ["Tabelle1", "Name of Sheet 2", "Sheet3", "Sheet4", "Sheet5"]
176
176
  assert_equal expected_sheet_names, xlsx.sheets
177
177
  end
178
178
 
179
+ def test_header_offset
180
+ xlsx = roo_class.new(File.join(TESTDIR, "header_offset.xlsx"))
181
+ data = xlsx.parse(column_1: "Header A1", column_2: "Header B1")
182
+ assert_equal "Data A2", data[0][:column_1]
183
+ assert_equal "Data B2", data[0][:column_2]
184
+ end
185
+
186
+ def test_formula_excelx
187
+ with_each_spreadsheet(name: "formula", format: :excelx) do |workbook|
188
+ assert_equal 1, workbook.cell("A", 1)
189
+ assert_equal 2, workbook.cell("A", 2)
190
+ assert_equal 3, workbook.cell("A", 3)
191
+ assert_equal 4, workbook.cell("A", 4)
192
+ assert_equal 5, workbook.cell("A", 5)
193
+ assert_equal 6, workbook.cell("A", 6)
194
+ assert_equal 21, workbook.cell("A", 7)
195
+ assert_equal :formula, workbook.celltype("A", 7)
196
+ assert_nil workbook.formula("A", 6)
197
+
198
+ expected_result = [
199
+ [7, 1, "SUM(A1:A6)"],
200
+ [7, 2, "SUM($A$1:B6)"],
201
+ ]
202
+ assert_equal expected_result, workbook.formulas(workbook.sheets.first)
203
+
204
+ # setting a cell
205
+ workbook.set("A", 15, 41)
206
+ assert_equal 41, workbook.cell("A", 15)
207
+ workbook.set("A", 16, "41")
208
+ assert_equal "41", workbook.cell("A", 16)
209
+ workbook.set("A", 17, 42.5)
210
+ assert_equal 42.5, workbook.cell("A", 17)
211
+ end
212
+ end
213
+
214
+ # TODO: temporaerer Test
215
+ def test_seiten_als_date
216
+ skip_long_test
217
+
218
+ with_each_spreadsheet(name: "Bibelbund", format: :excelx) do |workbook|
219
+ assert_equal "Bericht aus dem Sekretariat", workbook.cell(13, 1)
220
+ assert_equal "1981-4", workbook.cell(13, "D")
221
+ assert_equal String, workbook.excelx_type(13, "E")[1].class
222
+ assert_equal [:numeric_or_formula, "General"], workbook.excelx_type(13, "E")
223
+ assert_equal "428", workbook.excelx_value(13, "E")
224
+ assert_equal 428.0, workbook.cell(13, "E")
225
+ end
226
+ end
227
+
228
+ def test_bug_simple_spreadsheet_time_bug
229
+ # really a bug? are cells really of type time?
230
+ # No! :float must be the correct type
231
+ with_each_spreadsheet(name: "simple_spreadsheet", format: :excelx) do |workbook|
232
+ # puts workbook.cell("B", 5).to_s
233
+ # assert_equal :time, workbook.celltype("B", 5)
234
+ assert_equal :float, workbook.celltype("B", 5)
235
+ assert_equal 10.75, workbook.cell("B", 5)
236
+ assert_equal 12.50, workbook.cell("C", 5)
237
+ assert_equal 0, workbook.cell("D", 5)
238
+ assert_equal 1.75, workbook.cell("E", 5)
239
+ assert_equal "Task 1", workbook.cell("F", 5)
240
+ assert_equal Date.new(2007, 5, 7), workbook.cell("A", 5)
241
+ end
242
+ end
243
+
244
+ def test_simple2_excelx
245
+ with_each_spreadsheet(name: "simple_spreadsheet", format: :excelx) do |workbook|
246
+ assert_equal [:numeric_or_formula, "yyyy\\-mm\\-dd"], workbook.excelx_type("A", 4)
247
+ assert_equal [:numeric_or_formula, "#,##0.00"], workbook.excelx_type("B", 4)
248
+ assert_equal [:numeric_or_formula, "#,##0.00"], workbook.excelx_type("c", 4)
249
+ assert_equal [:numeric_or_formula, "General"], workbook.excelx_type("d", 4)
250
+ assert_equal [:numeric_or_formula, "General"], workbook.excelx_type("e", 4)
251
+ assert_equal :string, workbook.excelx_type("f", 4)
252
+
253
+ assert_equal "39209", workbook.excelx_value("a", 4)
254
+ assert_equal "yyyy\\-mm\\-dd", workbook.excelx_format("a", 4)
255
+ assert_equal "9.25", workbook.excelx_value("b", 4)
256
+ assert_equal "10.25", workbook.excelx_value("c", 4)
257
+ assert_equal "0", workbook.excelx_value("d", 4)
258
+ # ... Sum-Spalte
259
+ # assert_equal "Task 1", workbook.excelx_value("f", 4)
260
+ assert_equal "Task 1", workbook.cell("f", 4)
261
+ assert_equal Date.new(2007, 05, 07), workbook.cell("a", 4)
262
+ assert_equal "9.25", workbook.excelx_value("b", 4)
263
+ assert_equal "#,##0.00", workbook.excelx_format("b", 4)
264
+ assert_equal 9.25, workbook.cell("b", 4)
265
+ assert_equal :float, workbook.celltype("b", 4)
266
+ assert_equal :float, workbook.celltype("d", 4)
267
+ assert_equal 0, workbook.cell("d", 4)
268
+ assert_equal :formula, workbook.celltype("e", 4)
269
+ assert_equal 1, workbook.cell("e", 4)
270
+ assert_equal "C4-B4-D4", workbook.formula("e", 4)
271
+ assert_equal :string, workbook.celltype("f", 4)
272
+ assert_equal "Task 1", workbook.cell("f", 4)
273
+ end
274
+ end
275
+
276
+ def test_bug_pfand_from_windows_phone_xlsx
277
+ # skip_jruby_incompatible_test
278
+ # TODO: Does JRUBY need to skip this test
279
+ return if defined? JRUBY_VERSION
280
+
281
+ options = { name: "Pfand_from_windows_phone", format: :excelx }
282
+ with_each_spreadsheet(options) do |workbook|
283
+ workbook.default_sheet = workbook.sheets.first
284
+ assert_equal ["Blatt1", "Blatt2", "Blatt3"], workbook.sheets
285
+ assert_equal "Summe", workbook.cell("b", 1)
286
+
287
+ assert_equal Date.new(2011, 9, 14), workbook.cell("a", 2)
288
+ assert_equal :date, workbook.celltype("a", 2)
289
+ assert_equal Date.new(2011, 9, 15), workbook.cell("a", 3)
290
+ assert_equal :date, workbook.celltype("a", 3)
291
+
292
+ assert_equal 3.81, workbook.cell("b", 2)
293
+ assert_equal "SUM(C2:L2)", workbook.formula("b", 2)
294
+ assert_equal 0.7, workbook.cell("c", 2)
295
+ end # each
296
+ end
297
+
298
+ def test_excelx_links
299
+ with_each_spreadsheet(name: "link", format: :excelx) do |workbook|
300
+ assert_equal "Google", workbook.cell(1, 1)
301
+ assert_equal "http://www.google.com", workbook.cell(1, 1).href
302
+ end
303
+ end
304
+
305
+ def test_handles_link_without_hyperlink
306
+ workbook = Roo::Spreadsheet.open(File.join(TESTDIR, "bad_link.xlsx"))
307
+ assert_equal "Test", workbook.cell(1, 1)
308
+ end
309
+
310
+ # Excel has two base date formats one from 1900 and the other from 1904.
311
+ # see #test_base_dates_in_excel
312
+ def test_base_dates_in_excelx
313
+ with_each_spreadsheet(name: "1900_base", format: :excelx) do |workbook|
314
+ assert_equal Date.new(2009, 06, 15), workbook.cell(1, 1)
315
+ assert_equal :date, workbook.celltype(1, 1)
316
+ end
317
+ with_each_spreadsheet(name: "1904_base", format: :excelx) do |workbook|
318
+ assert_equal Date.new(2009, 06, 15), workbook.cell(1, 1)
319
+ assert_equal :date, workbook.celltype(1, 1)
320
+ end
321
+ end
322
+
179
323
  def roo_class
180
324
  Roo::Excelx
181
325
  end