roo 2.6.0 → 2.7.0

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.
@@ -0,0 +1,9 @@
1
+ require "test_helper"
2
+
3
+ class TestRooOpenOffice < Minitest::Test
4
+ def test_libre_office
5
+ oo = Roo::LibreOffice.new(File.join(TESTDIR, "numbers1.ods"))
6
+ oo.default_sheet = oo.sheets.first
7
+ assert_equal 41, oo.cell("a", 12)
8
+ end
9
+ end
@@ -0,0 +1,126 @@
1
+ # encoding: utf-8
2
+ require "test_helper"
3
+
4
+ class TestRooOpenOffice < Minitest::Test
5
+ def test_openoffice_download_uri_and_zipped
6
+ port = 12_345
7
+ file = "rata.ods.zip"
8
+ start_local_server(file, port) do
9
+ url = "#{local_server(port)}/#{file}"
10
+
11
+ oo = roo_class.new(url, packed: :zip)
12
+ assert_in_delta 0.001, 505.14, oo.cell("c", 33).to_f
13
+ end
14
+ end
15
+
16
+ def test_download_uri_with_invalid_host
17
+ assert_raises(RuntimeError) do
18
+ roo_class.new("http://example.com/file.ods")
19
+ end
20
+ end
21
+
22
+ def test_download_uri_with_query_string
23
+ file = filename("simple_spreadsheet")
24
+ port = 12_346
25
+ url = "#{local_server(port)}/#{file}?query-param=value"
26
+ start_local_server(file, port) do
27
+ spreadsheet = roo_class.new(url)
28
+ assert_equal "Task 1", spreadsheet.cell("f", 4)
29
+ end
30
+ end
31
+
32
+ def test_openoffice_zipped
33
+ oo = roo_class.new(File.join(TESTDIR, "bode-v1.ods.zip"), packed: :zip)
34
+ assert oo
35
+ assert_equal 'ist "e" im Nenner von H(s)', oo.cell("b", 5)
36
+ end
37
+
38
+ def test_should_raise_file_not_found_error
39
+ assert_raises(IOError) do
40
+ roo_class.new(File.join("testnichtvorhanden", "Bibelbund.ods"))
41
+ end
42
+ end
43
+
44
+
45
+ def test_file_warning_default_is_error
46
+ expected_message = "test/files/numbers1.xls is not an openoffice spreadsheet"
47
+ assert_raises(TypeError, expected_message) do
48
+ roo_class.new(File.join(TESTDIR, "numbers1.xls"))
49
+ end
50
+
51
+ assert_raises(TypeError) do
52
+ roo_class.new(File.join(TESTDIR, "numbers1.xlsx"))
53
+ end
54
+ end
55
+
56
+ def test_file_warning_error
57
+ assert_raises(TypeError) do
58
+ roo_class.new(File.join(TESTDIR, "numbers1.xls"),
59
+ packed: false,
60
+ file_warning: :error
61
+ )
62
+ end
63
+
64
+ assert_raises(TypeError) do
65
+ roo_class.new(File.join(TESTDIR, "numbers1.xlsx"),
66
+ packed: false,
67
+ file_warning: :error)
68
+ end
69
+ end
70
+
71
+ def test_file_warning_warning
72
+ assert_raises(ArgumentError) do
73
+ roo_class.new(File.join(TESTDIR, "numbers1.xlsx"),
74
+ packed: false,
75
+ file_warning: :warning)
76
+ end
77
+ end
78
+
79
+ def test_file_warning_ignore
80
+ assert roo_class.new(File.join(TESTDIR, "type_openoffice.xlsx"),
81
+ packed: false,
82
+ file_warning: :ignore), "Should not throw an error"
83
+ end
84
+
85
+ def test_encrypted_file
86
+ oo = roo_class.new(File.join(TESTDIR, "encrypted-letmein.ods"), password: "letmein")
87
+ assert_equal "Hello World", oo.cell("a", 1)
88
+ end
89
+
90
+ def test_encrypted_file_requires_password
91
+ assert_raises(ArgumentError) { roo_class.new(File.join(TESTDIR, "encrypted-letmein.ods")) }
92
+ end
93
+
94
+ def test_encrypted_file_with_incorrect_password
95
+ assert_raises(ArgumentError) { roo_class.new(File.join(TESTDIR, "encrypted-letmein.ods"), password: "badpassword") }
96
+ end
97
+
98
+ # 2011-08-11
99
+ def test_bug_openoffice_formula_missing_letters
100
+ # NOTE: This document was created using LibreOffice. The formulas seem
101
+ # different from a document created using OpenOffice.
102
+ #
103
+ # TODO: translate
104
+ # Bei den OpenOffice-Dateien ist in diesem Feld in der XML-
105
+ # Datei of: als Prefix enthalten, waehrend in dieser Datei
106
+ # irgendetwas mit oooc: als Prefix verwendet wird.
107
+ oo = Roo::OpenOffice.new(File.join(TESTDIR,'dreimalvier.ods'))
108
+ assert_equal '=SUM([.A1:.D1])', oo.formula('e',1)
109
+ assert_equal '=SUM([.A2:.D2])', oo.formula('e',2)
110
+ assert_equal '=SUM([.A3:.D3])', oo.formula('e',3)
111
+ assert_equal [
112
+ [1,5,'=SUM([.A1:.D1])'],
113
+ [2,5,'=SUM([.A2:.D2])'],
114
+ [3,5,'=SUM([.A3:.D3])'],
115
+ ], oo.formulas
116
+
117
+ end
118
+
119
+ def roo_class
120
+ Roo::OpenOffice
121
+ end
122
+
123
+ def filename(name)
124
+ "#{name}.ods"
125
+ end
126
+ end
@@ -1,19 +1,21 @@
1
+ # encoding: utf-8
1
2
  require 'simplecov'
2
3
  # require deps
3
4
  require 'tmpdir'
4
5
  require 'fileutils'
5
6
  require 'minitest/autorun'
6
7
  require 'shoulda'
7
- require 'fileutils'
8
8
  require 'timeout'
9
9
  require 'logger'
10
10
  require 'date'
11
- require 'webmock/minitest'
12
11
 
13
12
  # require gem files
14
13
  require 'roo'
14
+ require "minitest/reporters"
15
+ Minitest::Reporters.use!([Minitest::Reporters::DefaultReporter.new,
16
+ Minitest::Reporters::SpecReporter.new]) unless defined? JRUBY_VERSION
15
17
 
16
- TESTDIR = File.join(File.dirname(__FILE__), 'files')
18
+ TESTDIR = File.join(File.dirname(__FILE__), 'files')
17
19
 
18
20
  # very simple diff implementation
19
21
  # output is an empty string if the files are equal
@@ -52,3 +54,72 @@ class File
52
54
  end
53
55
  end
54
56
  end
57
+
58
+ def local_server(port)
59
+ raise ArgumentError unless port.to_i > 0
60
+ "http://0.0.0.0:#{port}"
61
+ end
62
+
63
+ def start_local_server(filename, port = nil)
64
+ require "rack"
65
+ content_type = filename.split(".").last
66
+ port ||= TEST_RACK_PORT
67
+
68
+ web_server = Proc.new do |env|
69
+ [
70
+ "200",
71
+ { "Content-Type" => content_type },
72
+ [File.read("#{TESTDIR}/#{filename}")]
73
+ ]
74
+ end
75
+
76
+ t = Thread.new { Rack::Handler::WEBrick.run web_server, Host: '0.0.0.0', Port: port , Logger: WEBrick::BasicLog.new(nil,1) }
77
+ # give the app a chance to startup
78
+ sleep(0.2)
79
+
80
+ yield
81
+ ensure
82
+ t.kill
83
+ end
84
+
85
+ ROO_FORMATS = [
86
+ :excelx,
87
+ :excelxm,
88
+ :openoffice,
89
+ :libreoffice
90
+ ]
91
+
92
+ # call a block of code for each spreadsheet type
93
+ # and yield a reference to the roo object
94
+ def with_each_spreadsheet(options)
95
+ if options[:format]
96
+ formats = Array(options[:format])
97
+ invalid_formats = formats - ROO_FORMATS
98
+ unless invalid_formats.empty?
99
+ raise "invalid spreadsheet types: #{invalid_formats.join(', ')}"
100
+ end
101
+ else
102
+ formats = ROO_FORMATS
103
+ end
104
+ formats.each do |format|
105
+ begin
106
+ yield Roo::Spreadsheet.open(File.join(TESTDIR,
107
+ fixture_filename(options[:name], format)))
108
+ rescue => e
109
+ raise e, "#{e.message} for #{format}", e.backtrace unless options[:ignore_errors]
110
+ end
111
+ end
112
+ end
113
+
114
+ def fixture_filename(name, format)
115
+ case format
116
+ when :excelx
117
+ "#{name}.xlsx"
118
+ when :excelxm
119
+ "#{name}.xlsm"
120
+ when :openoffice, :libreoffice
121
+ "#{name}.ods"
122
+ else
123
+ raise ArgumentError, "unexpected format #{format}"
124
+ end
125
+ end
@@ -1,17 +1,4 @@
1
1
  # encoding: utf-8
2
- # damit keine falschen Vermutungen aufkommen: Ich habe religioes rein gar nichts
3
- # mit diesem Bibelbund zu tun, aber die hatten eine ziemlich grosse
4
- # Spreadsheet-Datei mit ca. 3500 Zeilen oeffentlich im Netz, die sich ganz gut
5
- # zum Testen eignete.
6
- #
7
- #--
8
- # these test cases were developed to run under Linux OS, some commands
9
- # (like 'diff') must be changed (or commented out ;-)) if you want to run
10
- # the tests under another OS
11
- #
12
-
13
- #TODO
14
- # Look at formulas in excel - does not work with date/time
15
2
 
16
3
  # Dump warnings that come from the test to open files
17
4
  # with the wrong spreadsheet class
@@ -23,69 +10,7 @@ require 'test_helper'
23
10
  require 'stringio'
24
11
 
25
12
  class TestRoo < Minitest::Test
26
-
27
- OPENOFFICE = true # do OpenOffice-Spreadsheet Tests? (.ods files)
28
- EXCELX = true # do Excelx Tests? (.xlsx files)
29
- LIBREOFFICE = true # do LibreOffice tests? (.ods files)
30
- CSV = true # do CSV tests? (.csv files)
31
-
32
- FORMATS = [
33
- :excelx,
34
- :excelxm,
35
- :openoffice,
36
- :libreoffice
37
- ]
38
-
39
- ONLINE = false
40
- LONG_RUN = false
41
-
42
- def fixture_filename(name, format)
43
- case format
44
- when :excelx
45
- "#{name}.xlsx"
46
- when :excelxm
47
- "#{name}.xlsm"
48
- when :openoffice, :libreoffice
49
- "#{name}.ods"
50
- else
51
- raise ArgumentError, "unexpected format #{format}"
52
- end
53
- end
54
-
55
- # call a block of code for each spreadsheet type
56
- # and yield a reference to the roo object
57
- def with_each_spreadsheet(options)
58
- if options[:format]
59
- formats = Array(options[:format])
60
- invalid_formats = formats - FORMATS
61
- unless invalid_formats.empty?
62
- raise "invalid spreadsheet types: #{invalid_formats.join(', ')}"
63
- end
64
- else
65
- formats = FORMATS
66
- end
67
- formats.each do |format|
68
- begin
69
- yield Roo::Spreadsheet.open(File.join(TESTDIR,
70
- fixture_filename(options[:name], format)))
71
- rescue => e
72
- raise e, "#{e.message} for #{format}", e.backtrace unless options[:ignore_errors]
73
- end
74
- end
75
- end
76
-
77
- def test_sheets_csv
78
- if CSV
79
- oo = Roo::CSV.new(File.join(TESTDIR,'numbers1.csv'))
80
- assert_equal ["default"], oo.sheets
81
- assert_raises(RangeError) { oo.default_sheet = "no_sheet" }
82
- assert_raises(TypeError) { oo.default_sheet = [1,2,3] }
83
- oo.sheets.each { |sh|
84
- oo.default_sheet = sh
85
- assert_equal sh, oo.default_sheet
86
- }
87
- end
88
- end
13
+ LONG_RUN = ENV["LONG_RUN"] ? true : false
89
14
 
90
15
  def test_sheets
91
16
  with_each_spreadsheet(:name=>'numbers1') do |oo|
@@ -168,14 +93,6 @@ class TestRoo < Minitest::Test
168
93
  end
169
94
  end
170
95
 
171
- def test_libre_office
172
- if LIBREOFFICE
173
- oo = Roo::LibreOffice.new(File.join(TESTDIR, "numbers1.ods"))
174
- oo.default_sheet = oo.sheets.first
175
- assert_equal 41, oo.cell('a',12)
176
- end
177
- end
178
-
179
96
  def test_sheetname
180
97
  with_each_spreadsheet(:name=>'numbers1') do |oo|
181
98
  oo.default_sheet = "Name of Sheet 2"
@@ -379,25 +296,6 @@ class TestRoo < Minitest::Test
379
296
  end
380
297
  end
381
298
 
382
- def test_openoffice_download_uri_and_zipped
383
- if OPENOFFICE
384
- if ONLINE
385
- url = 'http://spazioinwind.libero.it/s2/rata.ods.zip'
386
- sheet = Roo::OpenOffice.new(url, packed: :zip)
387
- #has been changed: assert_equal 'ist "e" im Nenner von H(s)', sheet.cell('b', 5)
388
- assert_in_delta 0.001, 505.14, sheet.cell('c', 33).to_f
389
- end
390
- end
391
- end
392
-
393
- def test_openoffice_zipped
394
- if OPENOFFICE
395
- oo = Roo::OpenOffice.new(File.join(TESTDIR,"bode-v1.ods.zip"), packed: :zip)
396
- assert oo
397
- assert_equal 'ist "e" im Nenner von H(s)', oo.cell('b', 5)
398
- end
399
- end
400
-
401
299
  def test_bug_ric
402
300
  with_each_spreadsheet(:name=>'ric', :format=>:openoffice) do |oo|
403
301
  assert oo.empty?('A',1)
@@ -447,51 +345,6 @@ class TestRoo < Minitest::Test
447
345
  with_each_spreadsheet(:name=>'Bibelbund1', :format=>:openoffice) do |oo|
448
346
  assert_equal "Tagebuch des Sekret\303\244rs. Letzte Tagung 15./16.11.75 Schweiz", oo.cell(45,'A')
449
347
  end
450
- #if EXCELX
451
- # #Datei gibt es noch nicht
452
- # oo = Roo::Excelx.new(File.join(TESTDIR,"Bibelbund1.xlsx"))
453
- # oo.default_sheet = oo.sheets.first
454
- # assert_equal "Tagebuch des Sekret\303\244rs. Letzte Tagung 15./16.11.75 Schweiz", oo.cell(45,'A')
455
- #end
456
- end
457
-
458
- # "/tmp/xxxx" darf man unter Windows nicht verwenden, weil das nicht erkannt
459
- # wird.
460
- # Besser: Methode um temporaeres Dir. portabel zu bestimmen
461
- def test_huge_document_to_csv
462
- if LONG_RUN
463
- with_each_spreadsheet(:name=>'Bibelbund', :format=>[
464
- :openoffice,
465
- :excelx
466
- # Google hier nicht, weil Google-Spreadsheets nicht so gross werden
467
- # duerfen
468
- ]) do |oo|
469
- Dir.mktmpdir do |tempdir|
470
- assert_equal "Tagebuch des Sekret\303\244rs. Letzte Tagung 15./16.11.75 Schweiz", oo.cell(45,'A')
471
- assert_equal "Tagebuch des Sekret\303\244rs. Nachrichten aus Chile", oo.cell(46,'A')
472
- assert_equal "Tagebuch aus Chile Juli 1977", oo.cell(55,'A')
473
- assert oo.to_csv(File.join(tempdir,"Bibelbund.csv"))
474
- assert File.exists?(File.join(tempdir,"Bibelbund.csv"))
475
- assert_equal "", file_diff(File.join(TESTDIR, "Bibelbund.csv"), File.join(tempdir,"Bibelbund.csv")),
476
- "error in class #{oo.class}"
477
- #end
478
- end
479
- end
480
- end
481
- end
482
-
483
- def test_bug_quotes_excelx
484
- if LONG_RUN
485
- with_each_spreadsheet(:name=>'Bibelbund', :format=>[:openoffice, :excelx]) do |oo|
486
- oo.default_sheet = oo.sheets.first
487
- assert_equal 'Einflüsse der neuen Theologie in "de gereformeerde Kerken van Nederland"',
488
- oo.cell('a',76)
489
- oo.to_csv("csv#{$$}")
490
- assert_equal 'Einflüsse der neuen Theologie in "de gereformeerde Kerken van Nederland"',
491
- oo.cell('a',78)
492
- File.delete_if_exist("csv#{$$}")
493
- end
494
- end
495
348
  end
496
349
 
497
350
  def test_bug_mehrere_datum
@@ -573,17 +426,6 @@ class TestRoo < Minitest::Test
573
426
  end
574
427
  end
575
428
 
576
-
577
- def test_bug_empty_sheet
578
- with_each_spreadsheet(:name=>'formula', :format=>[:openoffice, :excelx]) do |oo|
579
- oo.default_sheet = 'Sheet3' # is an empty sheet
580
- Dir.mktmpdir do |tempdir|
581
- oo.to_csv(File.join(tempdir,"emptysheet.csv"))
582
- assert_equal "", `cat #{File.join(tempdir,"emptysheet.csv")}`
583
- end
584
- end
585
- end
586
-
587
429
  def test_find_by_row_huge_document
588
430
  if LONG_RUN
589
431
  with_each_spreadsheet(:name=>'Bibelbund', :format=>[:openoffice, :excelx]) do |oo|
@@ -718,7 +560,6 @@ class TestRoo < Minitest::Test
718
560
  end
719
561
  end
720
562
 
721
-
722
563
  #TODO: temporaerer Test
723
564
  def test_seiten_als_date
724
565
  if LONG_RUN
@@ -827,19 +668,6 @@ class TestRoo < Minitest::Test
827
668
  end
828
669
  end
829
670
 
830
- def test_should_raise_file_not_found_error
831
- if OPENOFFICE
832
- assert_raises(IOError) {
833
- Roo::OpenOffice.new(File.join('testnichtvorhanden','Bibelbund.ods'))
834
- }
835
- end
836
- if EXCELX
837
- assert_raises(IOError) {
838
- Roo::Excelx.new(File.join('testnichtvorhanden','Bibelbund.xlsx'))
839
- }
840
- end
841
- end
842
-
843
671
  def test_bug_bbu
844
672
  with_each_spreadsheet(:name=>'bbu', :format=>[:openoffice, :excelx]) do |oo|
845
673
  assert_equal "File: bbu#{get_extension(oo)}
@@ -875,200 +703,6 @@ Sheet 3:
875
703
  end
876
704
  end
877
705
 
878
- def test_date_time_to_csv
879
- with_each_spreadsheet(:name=>'time-test') do |oo|
880
- Dir.mktmpdir do |tempdir|
881
- csv_output = File.join(tempdir,'time_test.csv')
882
- assert oo.to_csv(csv_output)
883
- assert File.exists?(csv_output)
884
- assert_equal "", `diff --strip-trailing-cr #{TESTDIR}/time-test.csv #{csv_output}`
885
- # --strip-trailing-cr is needed because the test-file use 0A and
886
- # the test on an windows box generates 0D 0A as line endings
887
- end
888
- end
889
- end
890
-
891
- def test_boolean_to_csv
892
- with_each_spreadsheet(:name=>'boolean') do |oo|
893
- Dir.mktmpdir do |tempdir|
894
- csv_output = File.join(tempdir,'boolean.csv')
895
- assert oo.to_csv(csv_output)
896
- assert File.exists?(csv_output)
897
- assert_equal "", `diff --strip-trailing-cr #{TESTDIR}/boolean.csv #{csv_output}`
898
- # --strip-trailing-cr is needed because the test-file use 0A and
899
- # the test on an windows box generates 0D 0A as line endings
900
- end
901
- end
902
- end
903
- def test_link_to_csv
904
- with_each_spreadsheet(:name=>'link',:format=>:excelx) do |oo|
905
- Dir.mktmpdir do |tempdir|
906
- csv_output = File.join(tempdir,'link.csv')
907
- assert oo.to_csv(csv_output)
908
- assert File.exists?(csv_output)
909
- assert_equal "", `diff --strip-trailing-cr #{TESTDIR}/link.csv #{csv_output}`
910
- # --strip-trailing-cr is needed because the test-file use 0A and
911
- # the test on an windows box generates 0D 0A as line endings
912
- end
913
- end
914
- end
915
- def test_date_time_yaml
916
- with_each_spreadsheet(:name=>'time-test') do |oo|
917
- expected =
918
- "--- \ncell_1_1: \n row: 1 \n col: 1 \n celltype: string \n value: Mittags: \ncell_1_2: \n row: 1 \n col: 2 \n celltype: time \n value: 12:13:14 \ncell_1_3: \n row: 1 \n col: 3 \n celltype: time \n value: 15:16:00 \ncell_1_4: \n row: 1 \n col: 4 \n celltype: time \n value: 23:00:00 \ncell_2_1: \n row: 2 \n col: 1 \n celltype: date \n value: 2007-11-21 \n"
919
- assert_equal expected, oo.to_yaml
920
- end
921
- end
922
-
923
- # Erstellt eine Liste aller Zellen im Spreadsheet. Dies ist nötig, weil ein einfacher
924
- # Textvergleich des XML-Outputs nicht funktioniert, da xml-builder die Attribute
925
- # nicht immer in der gleichen Reihenfolge erzeugt.
926
- def init_all_cells(oo,sheet)
927
- all = []
928
- oo.first_row(sheet).upto(oo.last_row(sheet)) do |row|
929
- oo.first_column(sheet).upto(oo.last_column(sheet)) do |col|
930
- unless oo.empty?(row,col,sheet)
931
- all << {:row => row.to_s,
932
- :column => col.to_s,
933
- :content => oo.cell(row,col,sheet).to_s,
934
- :type => oo.celltype(row,col,sheet).to_s,
935
- }
936
- end
937
- end
938
- end
939
- all
940
- end
941
-
942
- def test_to_xml
943
- with_each_spreadsheet(:name=>'numbers1', :encoding => 'utf8') do |oo|
944
- skip if defined? JRUBY_VERSION
945
- oo.to_xml
946
- sheetname = oo.sheets.first
947
- doc = Nokogiri::XML(oo.to_xml)
948
- sheet_count = 0
949
- doc.xpath('//spreadsheet/sheet').each {|tmpelem|
950
- sheet_count += 1
951
- }
952
- assert_equal 5, sheet_count
953
- doc.xpath('//spreadsheet/sheet').each { |xml_sheet|
954
- all_cells = init_all_cells(oo, sheetname)
955
- x = 0
956
- assert_equal sheetname, xml_sheet.attributes['name'].value
957
- xml_sheet.children.each {|cell|
958
- if cell.attributes['name']
959
- expected = [all_cells[x][:row],
960
- all_cells[x][:column],
961
- all_cells[x][:content],
962
- all_cells[x][:type],
963
- ]
964
- result = [
965
- cell.attributes['row'],
966
- cell.attributes['column'],
967
- cell.content,
968
- cell.attributes['type'],
969
- ]
970
- assert_equal expected, result
971
- x += 1
972
- end # if
973
- } # end of sheet
974
- sheetname = oo.sheets[oo.sheets.index(sheetname)+1]
975
- }
976
- end
977
- end
978
-
979
- def test_file_warning_default
980
- if OPENOFFICE
981
- assert_raises(TypeError, "test/files/numbers1.xls is not an openoffice spreadsheet") {
982
- Roo::OpenOffice.new(File.join(TESTDIR,"numbers1.xls"))
983
- }
984
- assert_raises(TypeError) { Roo::OpenOffice.new(File.join(TESTDIR,"numbers1.xlsx")) }
985
- end
986
- if EXCELX
987
- assert_raises(TypeError) { Roo::Excelx.new(File.join(TESTDIR,"numbers1.ods")) }
988
- assert_raises(TypeError) { Roo::Excelx.new(File.join(TESTDIR,"numbers1.xls")) }
989
- end
990
- end
991
-
992
- def test_file_warning_error
993
- if OPENOFFICE
994
- assert_raises(TypeError) {
995
- Roo::OpenOffice.new(File.join(TESTDIR,"numbers1.xls"),
996
- packed: false,
997
- file_warning: :error
998
- )
999
- }
1000
- assert_raises(TypeError) {
1001
- Roo::OpenOffice.new(File.join(TESTDIR,"numbers1.xlsx"),
1002
- packed: false,
1003
- file_warning: :error)
1004
- }
1005
- end
1006
- if EXCELX
1007
- assert_raises(TypeError) {
1008
- Roo::Excelx.new(File.join(TESTDIR,"numbers1.ods"),
1009
- packed: false,
1010
- file_warning: :error)
1011
- }
1012
- assert_raises(TypeError) {
1013
- Roo::Excelx.new(File.join(TESTDIR,"numbers1.xls"),
1014
- packed: false,
1015
- file_warning: :error)
1016
- }
1017
- end
1018
- end
1019
-
1020
- def test_file_warning_warning
1021
- if OPENOFFICE
1022
- assert_raises(ArgumentError) {
1023
- Roo::OpenOffice.new(File.join(TESTDIR,"numbers1.xlsx"),
1024
- packed: false,
1025
- file_warning: :warning)
1026
- }
1027
- end
1028
- if EXCELX
1029
- assert_raises(ArgumentError) {
1030
- Roo::Excelx.new(File.join(TESTDIR,"numbers1.ods"),
1031
- packed: false,
1032
- file_warning: :warning)
1033
- }
1034
- end
1035
- end
1036
-
1037
- def test_file_warning_ignore
1038
- if OPENOFFICE
1039
- # Files, die eigentlich OpenOffice-
1040
- # Files sind, aber die falsche Endung haben.
1041
- # Es soll ohne Fehlermeldung oder Warnung
1042
- # oder Abbruch die Datei geoffnet werden
1043
-
1044
- # xlsx
1045
- Roo::OpenOffice.new(File.join(TESTDIR,"type_openoffice.xlsx"),
1046
- packed: false,
1047
- file_warning: :ignore)
1048
- end
1049
- if EXCELX
1050
- Roo::Excelx.new(File.join(TESTDIR,"type_excelx.ods"),
1051
- packed: false,
1052
- file_warning: :ignore)
1053
- end
1054
- end
1055
-
1056
- def test_bug_to_xml_with_empty_sheets
1057
- with_each_spreadsheet(:name=>'emptysheets', :format=>[:openoffice, :excelx]) do |oo|
1058
- oo.sheets.each { |sheet|
1059
- assert_nil oo.first_row, "first_row not nil in sheet #{sheet}"
1060
- assert_nil oo.last_row, "last_row not nil in sheet #{sheet}"
1061
- assert_nil oo.first_column, "first_column not nil in sheet #{sheet}"
1062
- assert_nil oo.last_column, "last_column not nil in sheet #{sheet}"
1063
- assert_nil oo.first_row(sheet), "first_row not nil in sheet #{sheet}"
1064
- assert_nil oo.last_row(sheet), "last_row not nil in sheet #{sheet}"
1065
- assert_nil oo.first_column(sheet), "first_column not nil in sheet #{sheet}"
1066
- assert_nil oo.last_column(sheet), "last_column not nil in sheet #{sheet}"
1067
- }
1068
- oo.to_xml
1069
- end
1070
- end
1071
-
1072
706
  def test_bug_simple_spreadsheet_time_bug
1073
707
  # really a bug? are cells really of type time?
1074
708
  # No! :float must be the correct type
@@ -1324,7 +958,6 @@ Sheet 3:
1324
958
  end
1325
959
  end
1326
960
 
1327
-
1328
961
  # compare large spreadsheets
1329
962
  def test_compare_large_spreadsheets
1330
963
  # problematisch, weil Formeln in Excel nicht unterstützt werden
@@ -1446,95 +1079,6 @@ Sheet 3:
1446
1079
  end
1447
1080
  end
1448
1081
 
1449
- require 'matrix'
1450
- def test_matrix
1451
- with_each_spreadsheet(:name => 'matrix', :format => :openoffice) do |oo|
1452
- oo.default_sheet = oo.sheets.first
1453
- assert_equal Matrix[
1454
- [1.0, 2.0, 3.0],
1455
- [4.0, 5.0, 6.0],
1456
- [7.0, 8.0, 9.0] ], oo.to_matrix
1457
- end
1458
- end
1459
-
1460
- def test_matrix_selected_range
1461
- with_each_spreadsheet(:name => 'matrix', :format=>:openoffice) do |oo|
1462
- oo.default_sheet = 'Sheet2'
1463
- assert_equal Matrix[
1464
- [1.0, 2.0, 3.0],
1465
- [4.0, 5.0, 6.0],
1466
- [7.0, 8.0, 9.0] ], oo.to_matrix(3,4,5,6)
1467
- end
1468
- end
1469
-
1470
- def test_matrix_all_nil
1471
- with_each_spreadsheet(:name => 'matrix', :format=>:openoffice) do |oo|
1472
- oo.default_sheet = 'Sheet2'
1473
- assert_equal Matrix[
1474
- [nil, nil, nil],
1475
- [nil, nil, nil],
1476
- [nil, nil, nil] ], oo.to_matrix(10,10,12,12)
1477
- end
1478
- end
1479
-
1480
- def test_matrix_values_and_nil
1481
- with_each_spreadsheet(:name => 'matrix', :format=>:openoffice) do |oo|
1482
- oo.default_sheet = 'Sheet3'
1483
- assert_equal Matrix[
1484
- [1.0, nil, 3.0],
1485
- [4.0, 5.0, 6.0],
1486
- [7.0, 8.0, nil] ], oo.to_matrix(1,1,3,3)
1487
- end
1488
- end
1489
-
1490
- def test_matrix_specifying_sheet
1491
- with_each_spreadsheet(:name => 'matrix', :format => :openoffice) do |oo|
1492
- oo.default_sheet = oo.sheets.first
1493
- assert_equal Matrix[
1494
- [1.0, nil, 3.0],
1495
- [4.0, 5.0, 6.0],
1496
- [7.0, 8.0, nil] ], oo.to_matrix(nil, nil, nil, nil, 'Sheet3')
1497
- end
1498
- end
1499
-
1500
- # unter Windows soll es laut Bug-Reports nicht moeglich sein, eine Excel-Datei, die
1501
- # mit Excel.new geoeffnet wurde nach dem Processing anschliessend zu loeschen.
1502
- # Anmerkung: Das Spreadsheet-Gem erlaubt kein explizites Close von Spreadsheet-Dateien,
1503
- # was verhindern koennte, das die Datei geloescht werden kann.
1504
- # def test_bug_cannot_delete_opened_excel_sheet
1505
- # with_each_spreadsheet(:name=>'simple_spreadsheet') do |oo|
1506
- # 'kopiere nach temporaere Datei und versuche diese zu oeffnen und zu loeschen'
1507
- # end
1508
- # end
1509
-
1510
- def test_bug_xlsx_reference_cell
1511
-
1512
- if EXCELX
1513
- =begin
1514
- If cell A contains a string and cell B references cell A. When reading the value of cell B, the result will be
1515
- "0.0" instead of the value of cell A.
1516
-
1517
- With the attached test case, I ran the following code:
1518
- spreadsheet = Roo::Excelx.new('formula_string_error.xlsx')
1519
- spreadsheet.default_sheet = 'sheet1'
1520
- p "A: #{spreadsheet.cell(1, 1)}"
1521
- p "B: #{spreadsheet.cell(2, 1)}"
1522
-
1523
- with the following results
1524
- "A: TestString"
1525
- "B: 0.0"
1526
-
1527
- where the expected result is
1528
- "A: TestString"
1529
- "B: TestString"
1530
- =end
1531
- xlsx = Roo::Excelx.new(File.join(TESTDIR, "formula_string_error.xlsx"))
1532
- xlsx.default_sheet = xlsx.sheets.first
1533
- assert_equal 'Teststring', xlsx.cell('a',1)
1534
- assert_equal 'Teststring', xlsx.cell('a',2)
1535
- end
1536
- end
1537
-
1538
1082
  # #formulas of an empty sheet should return an empty array and not result in
1539
1083
  # an error message
1540
1084
  # 2011-06-24
@@ -1547,116 +1091,6 @@ where the expected result is
1547
1091
  end
1548
1092
  end
1549
1093
 
1550
- # #to_yaml of an empty sheet should return an empty string and not result in
1551
- # an error message
1552
- # 2011-06-24
1553
- def test_bug_to_yaml_empty_sheet
1554
- with_each_spreadsheet(:name =>'emptysheets',
1555
- :format=>[:openoffice,:excelx]) do |oo|
1556
- oo.default_sheet = oo.sheets.first
1557
- oo.to_yaml
1558
- assert_equal('', oo.to_yaml)
1559
- end
1560
- end
1561
-
1562
- # #to_matrix of an empty sheet should return an empty matrix and not result in
1563
- # an error message
1564
- # 2011-06-25
1565
- def test_bug_to_matrix_empty_sheet
1566
- with_each_spreadsheet(:name =>'emptysheets',
1567
- :format=>[:openoffice,:excelx]) do |oo|
1568
- oo.default_sheet = oo.sheets.first
1569
- oo.to_matrix
1570
- assert_equal(Matrix.empty(0,0), oo.to_matrix)
1571
- end
1572
- end
1573
-
1574
- # 2011-08-03
1575
- def test_bug_datetime_to_csv
1576
- with_each_spreadsheet(:name=>'datetime') do |oo|
1577
- Dir.mktmpdir do |tempdir|
1578
- datetime_csv_file = File.join(tempdir,"datetime.csv")
1579
-
1580
- assert oo.to_csv(datetime_csv_file)
1581
- assert File.exists?(datetime_csv_file)
1582
- assert_equal "", file_diff('test/files/so_datetime.csv', datetime_csv_file)
1583
- end
1584
- end
1585
- end
1586
-
1587
- # 2011-08-11
1588
- def test_bug_openoffice_formula_missing_letters
1589
- if LIBREOFFICE
1590
- # Dieses Dokument wurde mit LibreOffice angelegt.
1591
- # Keine Ahnung, ob es damit zusammenhaengt, das diese
1592
- # Formeln anders sind, als in der Datei formula.ods, welche
1593
- # mit OpenOffice angelegt wurde.
1594
- # Bei den OpenOffice-Dateien ist in diesem Feld in der XML-
1595
- # Datei of: als Prefix enthalten, waehrend in dieser Datei
1596
- # irgendetwas mit oooc: als Prefix verwendet wird.
1597
- oo = Roo::OpenOffice.new(File.join(TESTDIR,'dreimalvier.ods'))
1598
- oo.default_sheet = oo.sheets.first
1599
- assert_equal '=SUM([.A1:.D1])', oo.formula('e',1)
1600
- assert_equal '=SUM([.A2:.D2])', oo.formula('e',2)
1601
- assert_equal '=SUM([.A3:.D3])', oo.formula('e',3)
1602
- assert_equal [
1603
- [1,5,'=SUM([.A1:.D1])'],
1604
- [2,5,'=SUM([.A2:.D2])'],
1605
- [3,5,'=SUM([.A3:.D3])'],
1606
- ], oo.formulas
1607
-
1608
- end
1609
- end
1610
-
1611
- =begin
1612
- def test_postprocessing_and_types_in_csv
1613
- if CSV
1614
- oo = CSV.new(File.join(TESTDIR,'csvtypes.csv'))
1615
- oo.default_sheet = oo.sheets.first
1616
- assert_equal(1,oo.a1)
1617
- assert_equal(:float,oo.celltype('A',1))
1618
- assert_equal("2",oo.b1)
1619
- assert_equal(:string,oo.celltype('B',1))
1620
- assert_equal("Mayer",oo.c1)
1621
- assert_equal(:string,oo.celltype('C',1))
1622
- end
1623
- end
1624
- =end
1625
-
1626
- =begin
1627
- def test_postprocessing_with_callback_function
1628
- if CSV
1629
- oo = CSV.new(File.join(TESTDIR,'csvtypes.csv'))
1630
- oo.default_sheet = oo.sheets.first
1631
-
1632
- #
1633
- assert_equal(1, oo.last_column)
1634
- end
1635
- end
1636
- =end
1637
-
1638
- =begin
1639
- def x_123
1640
- class ::CSV
1641
- def cell_postprocessing(row,col,value)
1642
- if row < 3
1643
- return nil
1644
- end
1645
- return value
1646
- end
1647
- end
1648
- end
1649
- =end
1650
-
1651
- def test_nil_rows_and_lines_csv
1652
- # x_123
1653
- if CSV
1654
- oo = Roo::CSV.new(File.join(TESTDIR,'Bibelbund.csv'))
1655
- oo.default_sheet = oo.sheets.first
1656
- assert_equal 1, oo.first_row
1657
- end
1658
- end
1659
-
1660
1094
  def test_bug_pfand_from_windows_phone_xlsx
1661
1095
  return if defined? JRUBY_VERSION
1662
1096
  with_each_spreadsheet(:name=>'Pfand_from_windows_phone', :format=>:excelx) do |oo|
@@ -1707,50 +1141,6 @@ where the expected result is
1707
1141
  end
1708
1142
  end
1709
1143
 
1710
- ## PREVIOUSLY SKIPPED
1711
-
1712
- # don't have these test files so removing. We can easily add in
1713
- # by modifying with_each_spreadsheet
1714
- GNUMERIC_ODS = false # do gnumeric with ods files Tests?
1715
- OPENOFFICEWRITE = false # experimental: write access with OO-Documents
1716
-
1717
- def test_writeopenoffice
1718
- if OPENOFFICEWRITE
1719
- File.cp(File.join(TESTDIR,"numbers1.ods"),
1720
- File.join(TESTDIR,"numbers2.ods"))
1721
- File.cp(File.join(TESTDIR,"numbers2.ods"),
1722
- File.join(TESTDIR,"bak_numbers2.ods"))
1723
- oo = OpenOffice.new(File.join(TESTDIR,"numbers2.ods"))
1724
- oo.default_sheet = oo.sheets.first
1725
- oo.first_row.upto(oo.last_row) {|y|
1726
- oo.first_column.upto(oo.last_column) {|x|
1727
- unless oo.empty?(y,x)
1728
- # oo.set(y, x, oo.cell(y,x) + 7) if oo.celltype(y,x) == "float"
1729
- oo.set(y, x, oo.cell(y,x) + 7) if oo.celltype(y,x) == :float
1730
- end
1731
- }
1732
- }
1733
- oo.save
1734
-
1735
- oo1 = Roo::OpenOffice.new(File.join(TESTDIR,"numbers2.ods"))
1736
- oo2 = Roo::OpenOffice.new(File.join(TESTDIR,"bak_numbers2.ods"))
1737
- #p oo2.to_s
1738
- assert_equal 999, oo2.cell('a',1), oo2.cell('a',1)
1739
- assert_equal oo2.cell('a',1) + 7, oo1.cell('a',1)
1740
- assert_equal oo2.cell('b',1)+7, oo1.cell('b',1)
1741
- assert_equal oo2.cell('c',1)+7, oo1.cell('c',1)
1742
- assert_equal oo2.cell('d',1)+7, oo1.cell('d',1)
1743
- assert_equal oo2.cell('a',2)+7, oo1.cell('a',2)
1744
- assert_equal oo2.cell('b',2)+7, oo1.cell('b',2)
1745
- assert_equal oo2.cell('c',2)+7, oo1.cell('c',2)
1746
- assert_equal oo2.cell('d',2)+7, oo1.cell('d',2)
1747
- assert_equal oo2.cell('e',2)+7, oo1.cell('e',2)
1748
-
1749
- File.cp(File.join(TESTDIR,"bak_numbers2.ods"),
1750
- File.join(TESTDIR,"numbers2.ods"))
1751
- end
1752
- end
1753
-
1754
1144
  def common_possible_bug_snowboard_cells(ss)
1755
1145
  assert_equal "A.", ss.cell(13,'A'), ss.class
1756
1146
  assert_equal 147, ss.cell(13,'f'), ss.class
@@ -1766,323 +1156,12 @@ where the expected result is
1766
1156
  assert_equal "168W", ss.cell(13,'o'), ss.class
1767
1157
  end
1768
1158
 
1769
- # def test_false_encoding
1770
- # ex = Roo::Excel.new(File.join(TESTDIR,'false_encoding.xls'))
1771
- # ex.default_sheet = ex.sheets.first
1772
- # assert_equal "Sheet1", ex.sheets.first
1773
- # ex.first_row.upto(ex.last_row) do |row|
1774
- # ex.first_column.upto(ex.last_column) do |col|
1775
- # content = ex.cell(row,col)
1776
- # puts "#{row}/#{col}"
1777
- # #puts content if ! ex.empty?(row,col) or ex.formula?(row,col)
1778
- # if ex.formula?(row,col)
1779
- # #! ex.empty?(row,col)
1780
- # puts content
1781
- # end
1782
- # end
1783
- # end
1784
- # end
1785
-
1786
- def test_download_uri
1787
- if ONLINE
1788
- if OPENOFFICE
1789
- assert_raises(RuntimeError) {
1790
- Roo::OpenOffice.new("http://gibbsnichtdomainxxxxx.com/file.ods")
1791
- }
1792
- end
1793
- if EXCELX
1794
- assert_raises(RuntimeError) {
1795
- Roo::Excelx.new("http://gibbsnichtdomainxxxxx.com/file.xlsx")
1796
- }
1797
- end
1798
- end
1799
- end
1800
-
1801
- def test_download_uri_with_query_string
1802
- dir = File.expand_path("#{File.dirname __FILE__}/files")
1803
- { xlsx: [EXCELX, Roo::Excelx],
1804
- ods: [OPENOFFICE, Roo::OpenOffice]}.each do |extension, (flag, type)|
1805
- if flag
1806
- file = "#{dir}/simple_spreadsheet.#{extension}"
1807
- url = "http://test.example.com/simple_spreadsheet.#{extension}?query-param=value"
1808
- stub_request(:any, url).to_return(body: File.read(file))
1809
- spreadsheet = type.new(url)
1810
- spreadsheet.default_sheet = spreadsheet.sheets.first
1811
- assert_equal 'Task 1', spreadsheet.cell('f', 4)
1812
- end
1813
- end
1814
- end
1815
-
1816
- # def test_soap_server
1817
- # #threads = []
1818
- # #threads << Thread.new("serverthread") do
1819
- # fork do
1820
- # p "serverthread started"
1821
- # puts "in child, pid = #$$"
1822
- # puts `/usr/bin/ruby rooserver.rb`
1823
- # p "serverthread finished"
1824
- # end
1825
- # #threads << Thread.new("clientthread") do
1826
- # p "clientthread started"
1827
- # sleep 10
1828
- # proxy = SOAP::RPC::Driver.new("http://localhost:12321","spreadsheetserver")
1829
- # proxy.add_method('cell','row','col')
1830
- # proxy.add_method('officeversion')
1831
- # proxy.add_method('last_row')
1832
- # proxy.add_method('last_column')
1833
- # proxy.add_method('first_row')
1834
- # proxy.add_method('first_column')
1835
- # proxy.add_method('sheets')
1836
- # proxy.add_method('set_default_sheet','s')
1837
- # proxy.add_method('ferien_fuer_region', 'region')
1838
-
1839
- # sheets = proxy.sheets
1840
- # p sheets
1841
- # proxy.set_default_sheet(sheets.first)
1842
-
1843
- # assert_equal 1, proxy.first_row
1844
- # assert_equal 1, proxy.first_column
1845
- # assert_equal 187, proxy.last_row
1846
- # assert_equal 7, proxy.last_column
1847
- # assert_equal 42, proxy.cell('C',8)
1848
- # assert_equal 43, proxy.cell('F',12)
1849
- # assert_equal "1.0", proxy.officeversion
1850
- # p "clientthread finished"
1851
- # #end
1852
- # #threads.each {|t| t.join }
1853
- # puts "fertig"
1854
- # Process.kill("INT",pid)
1855
- # pid = Process.wait
1856
- # puts "child terminated, pid= #{pid}, status= #{$?.exitstatus}"
1857
- # end
1858
-
1859
- def split_coord(s)
1860
- letter = ""
1861
- number = 0
1862
- i = 0
1863
- while i<s.length and "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz".include?(s[i,1])
1864
- letter += s[i,1]
1865
- i+=1
1866
- end
1867
- while i<s.length and "01234567890".include?(s[i,1])
1868
- number = number*10 + s[i,1].to_i
1869
- i+=1
1870
- end
1871
- if letter=="" or number==0
1872
- raise ArgumentError
1873
- end
1874
- return letter,number
1875
- end
1876
-
1877
- #def sum(s,expression)
1878
- # arg = expression.split(':')
1879
- # b,z = split_coord(arg[0])
1880
- # first_row = z
1881
- # first_col = OpenOffice.letter_to_number(b)
1882
- # b,z = split_coord(arg[1])
1883
- # last_row = z
1884
- # last_col = OpenOffice.letter_to_number(b)
1885
- # result = 0
1886
- # first_row.upto(last_row) {|row|
1887
- # first_col.upto(last_col) {|col|
1888
- # result = result + s.cell(row,col)
1889
- # }
1890
- # }
1891
- # result
1892
- #end
1893
-
1894
- #def test_dsl
1895
- # s = OpenOffice.new(File.join(TESTDIR,"numbers1.ods"))
1896
- # s.default_sheet = s.sheets.first
1897
- #
1898
- # s.set 'a',1, 5
1899
- # s.set 'b',1, 3
1900
- # s.set 'c',1, 7
1901
- # s.set('a',2, s.cell('a',1)+s.cell('b',1))
1902
- # assert_equal 8, s.cell('a',2)
1903
- #
1904
- # assert_equal 15, sum(s,'A1:C1')
1905
- # end
1906
-
1907
- #def test_create_spreadsheet1
1908
- # name = File.join(TESTDIR,'createdspreadsheet.ods')
1909
- # rm(name) if File.exists?(File.join(TESTDIR,'createdspreadsheet.ods'))
1910
- # # anlegen, falls noch nicht existierend
1911
- # s = OpenOffice.new(name,true)
1912
- # assert File.exists?(name)
1913
- #end
1914
-
1915
- #def test_create_spreadsheet2
1916
- # # anlegen, falls noch nicht existierend
1917
- # s = OpenOffice.new(File.join(TESTDIR,"createdspreadsheet.ods"),true)
1918
- # s.set 'a',1,42
1919
- # s.set 'b',1,43
1920
- # s.set 'c',1,44
1921
- # s.save
1922
- #
1923
- # t = OpenOffice.new(File.join(TESTDIR,"createdspreadsheet.ods"))
1924
- # assert_equal 42, t.cell(1,'a')
1925
- # assert_equal 43, t.cell('b',1)
1926
- # assert_equal 44, t.cell('c',3)
1927
- #end
1928
-
1929
- # We don't have the bode-v1.xlsx test file
1930
- # #TODO: xlsx-Datei anpassen!
1931
- # def test_excelx_download_uri_and_zipped
1932
- # #TODO: gezippte xlsx Datei online zum Testen suchen
1933
- # if EXCELX
1934
- # if ONLINE
1935
- # url = 'http://stiny-leonhard.de/bode-v1.xlsx.zip'
1936
- # excel = Roo::Excelx.new(url, :zip)
1937
- # assert_equal 'ist "e" im Nenner von H(s)', excel.cell('b', 5)
1938
- # end
1939
- # end
1940
- # end
1941
-
1942
- # def test_excelx_zipped
1943
- # # TODO: bode...xls bei Gelegenheit nach .xlsx konverieren lassen und zippen!
1944
- # if EXCELX
1945
- # # diese Datei gibt es noch nicht gezippt
1946
- # excel = Roo::Excelx.new(File.join(TESTDIR,"bode-v1.xlsx.zip"), :zip)
1947
- # assert excel
1948
- # assert_raises(ArgumentError) {
1949
- # assert_equal 'ist "e" im Nenner von H(s)', excel.cell('b', 5)
1950
- # }
1951
- # excel.default_sheet = excel.sheets.first
1952
- # assert_equal 'ist "e" im Nenner von H(s)', excel.cell('b', 5)
1953
- # end
1954
- # end
1955
-
1956
- def test_csv_parsing_with_headers
1957
- return unless CSV
1958
- headers = ["TITEL", "VERFASSER", "OBJEKT", "NUMMER", "SEITE", "INTERNET", "PC", "KENNUNG"]
1959
-
1960
- oo = Roo::Spreadsheet.open(File.join(TESTDIR, 'Bibelbund.csv'))
1961
- parsed = oo.parse(:headers => true)
1962
- assert_equal headers, parsed[1].keys
1963
- end
1964
-
1965
1159
  def test_bug_numbered_sheet_names
1966
1160
  with_each_spreadsheet(:name=>'bug-numbered-sheet-names', :format=>:excelx) do |oo|
1967
1161
  oo.each_with_pagename { }
1968
1162
  end
1969
1163
  end
1970
1164
 
1971
- def test_parsing_xslx_from_numbers
1972
- return unless EXCELX
1973
- xlsx = Roo::Excelx.new(File.join(TESTDIR, "numbers-export.xlsx"))
1974
-
1975
- xlsx.default_sheet = xlsx.sheets.first
1976
- assert_equal 'Sheet 1', xlsx.cell('a',1)
1977
-
1978
- # Another buggy behavior of Numbers 3.1: if a warkbook has more than a
1979
- # single sheet, all sheets except the first one will have an extra row and
1980
- # column added to the beginning. That's why we assert against cell B2 and
1981
- # not A1
1982
- xlsx.default_sheet = xlsx.sheets.last
1983
- assert_equal 'Sheet 2', xlsx.cell('b',2)
1984
- end
1985
-
1986
- def test_openoffice_encryption
1987
- if OPENOFFICE
1988
- assert_raises(ArgumentError) { Roo::LibreOffice.new(File.join(TESTDIR, "encrypted-letmein.ods")) }
1989
- assert_raises(ArgumentError) { Roo::LibreOffice.new(File.join(TESTDIR, "encrypted-letmein.ods"), :password => "badpassword") }
1990
- oo = Roo::LibreOffice.new(File.join(TESTDIR, "encrypted-letmein.ods"), :password => "letmein")
1991
- oo.default_sheet = oo.sheets.first
1992
- assert_equal "Hello World", oo.cell('a',1)
1993
- end
1994
- end
1995
-
1996
- def test_expand_merged_range
1997
- return unless EXCELX
1998
- xlsx = Roo::Excelx.new(File.join(TESTDIR, "merged_ranges.xlsx"), {:expand_merged_ranges => true})
1999
- for row in 3..7 do
2000
- for col in 'a'..'b'
2001
- if row > 3 && row < 7 && col == 'a'
2002
- assert_equal 'vertical1', xlsx.cell(col,row)
2003
- else
2004
- assert_nil xlsx.cell(col,row)
2005
- end
2006
- end
2007
- end
2008
- for row in 3..11 do
2009
- for col in 'f'..'h'
2010
- if row > 3 && row < 11 && col == 'g'
2011
- assert_equal 'vertical2', xlsx.cell(col,row)
2012
- else
2013
- assert_nil xlsx.cell(col,row)
2014
- end
2015
- end
2016
- end
2017
- for row in 3..5 do
2018
- for col in 'b'..'f'
2019
- if row == 4 && col > 'b' && col < 'f'
2020
- assert_equal 'horizontal', xlsx.cell(col,row)
2021
- else
2022
- assert_nil xlsx.cell(col,row)
2023
- end
2024
- end
2025
- end
2026
- for row in 8..13 do
2027
- for col in 'a'..'e'
2028
- if row > 8 && row < 13 && col > 'a' && col < 'e'
2029
- assert_equal 'block', xlsx.cell(col,row)
2030
- else
2031
- assert_nil xlsx.cell(col,row)
2032
- end
2033
- end
2034
- end
2035
- end
2036
-
2037
- def test_noexpand_merged_range
2038
- return unless EXCELX
2039
- xlsx = Roo::Excelx.new(File.join(TESTDIR, "merged_ranges.xlsx"))
2040
- for row in 3..7 do
2041
- for col in 'a'..'b'
2042
- if row == 4 && col == 'a'
2043
- assert_equal 'vertical1', xlsx.cell(col,row)
2044
- else
2045
- assert_nil xlsx.cell(col,row)
2046
- end
2047
- end
2048
- end
2049
- for row in 3..11 do
2050
- for col in 'f'..'h'
2051
- if row == 4 && col == 'g'
2052
- assert_equal 'vertical2', xlsx.cell(col,row)
2053
- else
2054
- assert_nil xlsx.cell(col,row)
2055
- end
2056
- end
2057
- end
2058
- for row in 3..5 do
2059
- for col in 'b'..'f'
2060
- if row == 4 && col == 'c'
2061
- assert_equal 'horizontal', xlsx.cell(col,row)
2062
- else
2063
- assert_nil xlsx.cell(col,row)
2064
- end
2065
- end
2066
- end
2067
- for row in 8..13 do
2068
- for col in 'a'..'e'
2069
- if row == 9 && col == 'b'
2070
- assert_equal 'block', xlsx.cell(col,row)
2071
- else
2072
- assert_nil xlsx.cell(col,row)
2073
- end
2074
- end
2075
- end
2076
- end
2077
-
2078
- def test_open_stream
2079
- return unless EXCELX
2080
- file_contents = File.read File.join(TESTDIR, fixture_filename(:numbers1, :excelx)), encoding: 'BINARY'
2081
- stream = StringIO.new(file_contents)
2082
- xlsx = Roo::Excelx.new(stream)
2083
- assert_equal ["Tabelle1","Name of Sheet 2","Sheet3","Sheet4","Sheet5"], xlsx.sheets
2084
- end
2085
-
2086
1165
  def test_close
2087
1166
  with_each_spreadsheet(:name=>'numbers1') do |oo|
2088
1167
  next unless (tempdir = oo.instance_variable_get('@tmpdir'))
@@ -2091,16 +1170,31 @@ where the expected result is
2091
1170
  end
2092
1171
  end
2093
1172
 
1173
+ # NOTE: Ruby 2.4.0 changed the way GC works. The last Roo object created by
1174
+ # with_each_spreadsheet wasn't getting GC'd until after the process
1175
+ # ended.
1176
+ #
1177
+ # That behavior change broke this test. In order to fix it, I forked the
1178
+ # process and passed the temp directories from the forked process in
1179
+ # order to check if they were removed properly.
2094
1180
  def test_finalize
2095
- tempdirs = []
2096
- begin
2097
- with_each_spreadsheet(:name=>'numbers1') do |oo|
2098
- tempdirs << oo.instance_variable_get('@tmpdir')
1181
+ skip if defined? JRUBY_VERSION
1182
+
1183
+ read, write = IO.pipe
1184
+ pid = Process.fork do
1185
+ with_each_spreadsheet(name: "numbers1") do |oo|
1186
+ write.puts oo.instance_variable_get("@tmpdir")
2099
1187
  end
2100
- GC.start
2101
1188
  end
1189
+
1190
+ Process.wait(pid)
1191
+ write.close
1192
+ tempdirs = read.read.split("\n")
1193
+ read.close
1194
+
1195
+ refute tempdirs.empty?
2102
1196
  tempdirs.each do |tempdir|
2103
- assert !File.exists?(tempdir), "Expected #{tempdir} to be cleaned up, but it still exists"
1197
+ refute File.exist?(tempdir), "Expected #{tempdir} to be cleaned up, but it still exists"
2104
1198
  end
2105
1199
  end
2106
1200