workbook 0.4.6.0 → 0.4.7
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/README.md +14 -15
- data/lib/workbook.rb +22 -11
- data/lib/workbook/book.rb +47 -25
- data/lib/workbook/cell.rb +20 -26
- data/lib/workbook/generatetypes.rb +14 -0
- data/lib/workbook/modules/cache.rb +52 -0
- data/lib/workbook/modules/{table_diff_sort.rb → diff_sort.rb} +64 -16
- data/lib/workbook/modules/raw_objects_storage.rb +7 -2
- data/lib/workbook/readers/ods_reader.rb +1 -1
- data/lib/workbook/readers/xls_reader.rb +55 -55
- data/lib/workbook/readers/xls_shared.rb +47 -0
- data/lib/workbook/readers/xlsx_reader.rb +34 -153
- data/lib/workbook/row.rb +47 -4
- data/lib/workbook/sheet.rb +4 -0
- data/lib/workbook/table.rb +36 -16
- data/lib/workbook/types/Date.rb +9 -0
- data/lib/workbook/types/False.rb +0 -0
- data/lib/workbook/types/FalseClass.rb +9 -0
- data/lib/workbook/types/Nil.rb +0 -0
- data/lib/workbook/types/NilClass.rb +9 -0
- data/lib/workbook/types/Numeric.rb +9 -0
- data/lib/workbook/types/String.rb +9 -0
- data/lib/workbook/types/Time.rb +9 -0
- data/lib/workbook/types/True.rb +0 -0
- data/lib/workbook/types/TrueClass.rb +9 -0
- data/lib/workbook/version.rb +1 -1
- data/lib/workbook/writers/html_writer.rb +40 -18
- data/lib/workbook/writers/xls_writer.rb +47 -5
- data/lib/workbook/writers/xlsx_writer.rb +123 -0
- data/test/artifacts/bigtable.xls +0 -0
- data/test/artifacts/bigtable.xlsx +0 -0
- data/test/artifacts/simple_sheet.xlsx +0 -0
- data/test/artifacts/simple_sheet_many_sheets.xls +0 -0
- data/test/test_book.rb +50 -2
- data/test/test_cell.rb +1 -1
- data/test/test_format.rb +8 -0
- data/test/test_modules_cache.rb +68 -0
- data/test/test_modules_table_diff_sort.rb +12 -1
- data/test/test_readers_xls_reader.rb +6 -0
- data/test/test_readers_xlsx_reader.rb +10 -9
- data/test/test_row.rb +65 -8
- data/test/test_sheet.rb +8 -0
- data/test/test_table.rb +48 -0
- data/test/test_writers_html_writer.rb +18 -8
- data/test/test_writers_xls_writer.rb +90 -0
- data/test/test_writers_xlsx_writer.rb +153 -0
- data/workbook.gemspec +9 -7
- metadata +71 -31
Binary file
|
Binary file
|
Binary file
|
Binary file
|
data/test/test_book.rb
CHANGED
@@ -10,16 +10,18 @@ class TestWorkbook < Test::Unit::TestCase
|
|
10
10
|
|
11
11
|
def test_push
|
12
12
|
w = Workbook::Book.new nil
|
13
|
+
assert_equal(w.count,1)
|
13
14
|
assert_equal([[[]]],w)
|
14
15
|
w = Workbook::Book.new
|
15
|
-
assert_equal(w.count,1)
|
16
|
-
|
17
16
|
w.push
|
18
17
|
assert_equal(w.first.class,Workbook::Sheet)
|
19
18
|
w.push
|
19
|
+
assert_equal(w,w.last.book)
|
20
20
|
assert_equal(w.count,3)
|
21
21
|
s = Workbook::Sheet.new
|
22
22
|
w.push s
|
23
|
+
assert_equal(w,w.last.book)
|
24
|
+
|
23
25
|
assert_equal(w.last,s)
|
24
26
|
w = Workbook::Book.new
|
25
27
|
assert_equal(w.sheet.table.class,Workbook::Table)
|
@@ -34,6 +36,8 @@ class TestWorkbook < Test::Unit::TestCase
|
|
34
36
|
assert_equal(w.sheet, s)
|
35
37
|
end
|
36
38
|
|
39
|
+
|
40
|
+
|
37
41
|
def test_template
|
38
42
|
b = Workbook::Book.new
|
39
43
|
raw = "asdf"
|
@@ -44,6 +48,15 @@ class TestWorkbook < Test::Unit::TestCase
|
|
44
48
|
assert_equal(raw,b.template)
|
45
49
|
end
|
46
50
|
|
51
|
+
def test_file_extension
|
52
|
+
b = Workbook::Book.new
|
53
|
+
assert_equal("aaa",b.file_extension("aaa.aaa"))
|
54
|
+
b = Workbook::Book.new
|
55
|
+
assert_equal("xlsx",b.file_extension(File.join(File.dirname(__FILE__), 'artifacts/book_with_tabs_and_colours.xlsx')))
|
56
|
+
b = Workbook::Book.new
|
57
|
+
assert_equal("xlsx",b.file_extension(File.new(File.join(File.dirname(__FILE__), 'artifacts/book_with_tabs_and_colours.xlsx'))))
|
58
|
+
end
|
59
|
+
|
47
60
|
def test_parent_child
|
48
61
|
b = Workbook::Book.new [[1,2,3],[1,2,3]]
|
49
62
|
assert_equal(Workbook::Sheet, b.first.class)
|
@@ -67,4 +80,39 @@ class TestWorkbook < Test::Unit::TestCase
|
|
67
80
|
assert_raises(ArgumentError) { Workbook::Book.read("test string here", :ods) }
|
68
81
|
assert_raises(ArgumentError) { Workbook::Book.read("test string here", :xlsx) }
|
69
82
|
end
|
83
|
+
|
84
|
+
def test_push_and_ltlt
|
85
|
+
b = Workbook::Book.new [["a","b"],[1,2]]
|
86
|
+
b.push Workbook::Sheet.new([["a","b"],[2,2]])
|
87
|
+
b.push Workbook::Sheet.new([["a","b"],[3,2]])
|
88
|
+
b << Workbook::Sheet.new([["a","b"],[4,2]])
|
89
|
+
b.push Workbook::Sheet.new([["a","b"],[5,2]])
|
90
|
+
b << Workbook::Sheet.new([["a","b"],[6,2]])
|
91
|
+
b.push Workbook::Sheet.new([["a","b"],[7,2]])
|
92
|
+
|
93
|
+
# puts b.index b.last
|
94
|
+
7.times { |time| assert_equal(b,b[0].book) }
|
95
|
+
end
|
96
|
+
|
97
|
+
def test_removal_of_sheets_pop_and_delete_at_works_as_expected
|
98
|
+
b = Workbook::Book.new [["a","b"],[1,2]]
|
99
|
+
b.push Workbook::Sheet.new([["a","b"],[2,2]])
|
100
|
+
b.push Workbook::Sheet.new([["a","b"],[3,2]])
|
101
|
+
b << Workbook::Sheet.new([["a","b"],[4,2]])
|
102
|
+
b.push Workbook::Sheet.new([["a","b"],[5,2]])
|
103
|
+
b << Workbook::Sheet.new([["a","b"],[6,2]])
|
104
|
+
b.push Workbook::Sheet.new([["a","b"],[7,2]])
|
105
|
+
|
106
|
+
assert_equal(7, b.count)
|
107
|
+
assert_equal(5,b[4][0][1][0].value)
|
108
|
+
b.delete_at(4)
|
109
|
+
assert_equal(6, b.count)
|
110
|
+
assert_equal(6,b[4][0][1][0].value)
|
111
|
+
b.pop(3)
|
112
|
+
assert_equal(3, b.count)
|
113
|
+
end
|
114
|
+
|
115
|
+
def test_supported_mime_types
|
116
|
+
assert_equal true, Workbook::SUPPORTED_MIME_TYPES.include?('text/csv')
|
117
|
+
end
|
70
118
|
end
|
data/test/test_cell.rb
CHANGED
@@ -10,7 +10,7 @@ class TestCell < Test::Unit::TestCase
|
|
10
10
|
w = Workbook::Cell.new "asdf"
|
11
11
|
assert_equal("asdf",w.value)
|
12
12
|
|
13
|
-
assert_raise(ArgumentError) { w = Workbook::Cell.new
|
13
|
+
assert_raise(ArgumentError) { w = Workbook::Cell.new Workbook::Row }
|
14
14
|
|
15
15
|
t = Time.now
|
16
16
|
w = Workbook::Cell.new t
|
data/test/test_format.rb
CHANGED
@@ -19,6 +19,14 @@ class TestFormat < Test::Unit::TestCase
|
|
19
19
|
|
20
20
|
end
|
21
21
|
|
22
|
+
def test_available_raws
|
23
|
+
deet = Time.now
|
24
|
+
f = Workbook::Format.new {}
|
25
|
+
assert_equal([], f.available_raws)
|
26
|
+
f.add_raw deet
|
27
|
+
assert_equal([Time], f.available_raws)
|
28
|
+
end
|
29
|
+
|
22
30
|
def test_merge
|
23
31
|
a = Workbook::Format.new({:background=>:red})
|
24
32
|
b = Workbook::Format.new({:background=>:yellow, :color=>:green})
|
@@ -0,0 +1,68 @@
|
|
1
|
+
# -*- encoding : utf-8 -*-
|
2
|
+
require File.join(File.dirname(__FILE__), 'helper')
|
3
|
+
|
4
|
+
class TestToCacheClass
|
5
|
+
include Workbook::Modules::Cache
|
6
|
+
def basic_fetch
|
7
|
+
fetch_cache(:a){
|
8
|
+
sleep(0.5)
|
9
|
+
"return"
|
10
|
+
}
|
11
|
+
end
|
12
|
+
def expiring_fetch
|
13
|
+
fetch_cache(:a,Time.now+0.6){
|
14
|
+
sleep(0.5)
|
15
|
+
"return"
|
16
|
+
}
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
module Modules
|
21
|
+
class TestTableDiffSort < Test::Unit::TestCase
|
22
|
+
def test_basic_fetch
|
23
|
+
c = TestToCacheClass.new
|
24
|
+
c.debug_cache = false
|
25
|
+
start_time = Time.now
|
26
|
+
c.basic_fetch
|
27
|
+
diff_time = Time.now-start_time
|
28
|
+
assert_equal(true,(diff_time > 0.5 and diff_time < 0.51))
|
29
|
+
c.basic_fetch
|
30
|
+
diff_time = Time.now-start_time
|
31
|
+
assert_equal(true,(diff_time > 0.5 and diff_time < 0.51))
|
32
|
+
c.basic_fetch
|
33
|
+
diff_time = Time.now-start_time
|
34
|
+
assert_equal(true,(diff_time > 0.5 and diff_time < 0.51))
|
35
|
+
end
|
36
|
+
def test_basic_fetch_invalidate_cache!
|
37
|
+
c = TestToCacheClass.new
|
38
|
+
start_time = Time.now
|
39
|
+
c.basic_fetch
|
40
|
+
diff_time = Time.now-start_time
|
41
|
+
assert_equal(true,(diff_time > 0.5 and diff_time < 0.51))
|
42
|
+
c.basic_fetch
|
43
|
+
diff_time = Time.now-start_time
|
44
|
+
assert_equal(true,(diff_time > 0.5 and diff_time < 0.51))
|
45
|
+
c.invalidate_cache!
|
46
|
+
c.basic_fetch
|
47
|
+
diff_time = Time.now-start_time
|
48
|
+
assert_equal(true,(diff_time > 1 and diff_time < 1.01))
|
49
|
+
end
|
50
|
+
def test_basic_fetch_invalidate_by_expiration
|
51
|
+
c = TestToCacheClass.new
|
52
|
+
start_time = Time.now
|
53
|
+
c.expiring_fetch
|
54
|
+
diff_time = Time.now-start_time
|
55
|
+
assert_equal(true,(diff_time > 0.5 and diff_time < 0.51))
|
56
|
+
c.expiring_fetch
|
57
|
+
diff_time = Time.now-start_time
|
58
|
+
assert_equal(true,(diff_time > 0.5 and diff_time < 0.51))
|
59
|
+
c.expiring_fetch
|
60
|
+
diff_time = Time.now-start_time
|
61
|
+
assert_equal(true,(diff_time > 0.5 and diff_time < 0.51))
|
62
|
+
sleep(0.5)
|
63
|
+
diff_time = Time.now-start_time
|
64
|
+
assert_equal(true,(diff_time > 1 and diff_time < 1.01))
|
65
|
+
end
|
66
|
+
|
67
|
+
end
|
68
|
+
end
|
@@ -106,7 +106,6 @@ module Modules
|
|
106
106
|
# ba = [['a','b','c','d'],[1,2,3,4],[3,2,3,4],[3,3,3,4],[4,2,3,4],[]]
|
107
107
|
# bb = [['a','b','c','d'],[1,2,3,4],[3,2,3,4],[3,2,3,4],[],[5,2,3,4]]
|
108
108
|
# hence,
|
109
|
-
expected = [['a','b','c','d'],[1,2,3,4],[3,2,3,4],[3,'3 (was: 2)',3,4],[4,2,3,4],['(was: 5)','(was: 2)','(was: 3)','(was: 4)']]
|
110
109
|
|
111
110
|
tself = ba.sheet.table
|
112
111
|
tother = bb.sheet.table
|
@@ -115,5 +114,17 @@ module Modules
|
|
115
114
|
assert_equal("a,b,c,d\n1,2,3,4\n3,2,3,4\n3,3 (was: 2),3,4\n4,2,3,4\n(was: 5),(was: 2),(was: 3),(was: 4)\n",diff_result.to_csv)
|
116
115
|
diff_result.sheet.book.write_to_xls
|
117
116
|
end
|
117
|
+
|
118
|
+
def test_workbook_diff
|
119
|
+
ba = Workbook::Book.new [['a','b','c','d'],[1,2,3,4],[4,2,3,4],[3,2,3,4],[3,3,3,4]]
|
120
|
+
bb = Workbook::Book.new [['a','b','c','d'],[1,2,3,4],[3,2,3,4],[5,2,3,4],[3,2,3,4]]
|
121
|
+
ba << [['e','f','g','h'],[1,2,3,4],[4,2,3,4],[3,2,3,4],[3,3,3,4]]
|
122
|
+
bb << [['e','f','g','h'],[1,2,2,2],[4,2,3,4],[3,2,3,4],[3,3,3,6]]
|
123
|
+
diff_result = ba.diff bb
|
124
|
+
|
125
|
+
assert_equal("a,b,c,d\n1,2,3,4\n3,2,3,4\n3,3 (was: 2),3,4\n4,2,3,4\n(was: 5),(was: 2),(was: 3),(was: 4)\n",diff_result[0][0].to_csv)
|
126
|
+
assert_equal("e,f,g,h\n1,2,3 (was: 2),4 (was: 2)\n3,2,3,4\n3,3,3,4 (was: 6)\n4,2,3,4\n",diff_result[1][0].to_csv)
|
127
|
+
|
128
|
+
end
|
118
129
|
end
|
119
130
|
end
|
@@ -58,5 +58,11 @@ module Readers
|
|
58
58
|
end
|
59
59
|
assert_equal(true,failed_properly)
|
60
60
|
end
|
61
|
+
def test_multi_sheet_opening
|
62
|
+
b = Workbook::Book.open(File.join(File.dirname(__FILE__), 'artifacts/simple_sheet_many_sheets.xls'))
|
63
|
+
raw_xls = b.template.raws[Spreadsheet::Excel::Workbook]
|
64
|
+
assert_equal(["Diff_10", "Diff_9", "Diff_8", "Diff_7", "Diff_6", "Diff_5", "Diff_4", "Diff_3", "Diff_2", "Diff_1"], b.collect{|a| a.name})
|
65
|
+
assert_equal([10, 9, 8, 7, 6, 5, 4, 3, 2, 1], b.collect{|a| a.table[1][0].value})
|
66
|
+
end
|
61
67
|
end
|
62
68
|
end
|
@@ -9,9 +9,9 @@ module Readers
|
|
9
9
|
assert_equal(90588,w.sheet.table[2][:b].value)
|
10
10
|
assert_equal(DateTime.new(2011,11,15),w.sheet.table[3][:d].value)
|
11
11
|
# assert_equal("#CCFFCC",w.sheet.table[3][:c].format[:background_color]) #colour compatibility turned off for now...
|
12
|
-
assert_equal(8,w.sheet.table.first[:b].format[:width].round)
|
13
|
-
assert_equal(4,w.sheet.table.first[:a].format[:width].round)
|
14
|
-
assert_equal(25,w.sheet.table.first[:c].format[:width].round)
|
12
|
+
# assert_equal(8,w.sheet.table.first[:b].format[:width].round)
|
13
|
+
# assert_equal(4,w.sheet.table.first[:a].format[:width].round)
|
14
|
+
# assert_equal(25,w.sheet.table.first[:c].format[:width].round)
|
15
15
|
end
|
16
16
|
def test_open_native_xlsx
|
17
17
|
w = Workbook::Book.new
|
@@ -29,11 +29,12 @@ module Readers
|
|
29
29
|
assert_equal(nil,w.ms_formatting_to_strftime(nil));
|
30
30
|
assert_equal(nil,w.ms_formatting_to_strftime(""));
|
31
31
|
end
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
32
|
+
|
33
|
+
# def test_monkey_patched_ruby_xl_is_date_format?
|
34
|
+
# w = RubyXL::Workbook.new
|
35
|
+
# assert_equal(false, w.is_date_format?(nil))
|
36
|
+
# assert_equal(false, w.is_date_format?(""))
|
37
|
+
# assert_equal(true, w.is_date_format?("D-M-YYY"))
|
38
|
+
# end
|
38
39
|
end
|
39
40
|
end
|
data/test/test_row.rb
CHANGED
@@ -104,7 +104,7 @@ class TestRow < Test::Unit::TestCase
|
|
104
104
|
assert_equal(date, r2[:asdfasd].value)
|
105
105
|
assert_equal(date, r2[1].value)
|
106
106
|
end
|
107
|
-
|
107
|
+
|
108
108
|
|
109
109
|
def test_to_hash_with_values
|
110
110
|
t = Workbook::Table.new
|
@@ -118,7 +118,7 @@ class TestRow < Test::Unit::TestCase
|
|
118
118
|
expected = {:test=>2, :asdfasd=>date}
|
119
119
|
assert_equal(expected, r2.to_hash_with_values)
|
120
120
|
end
|
121
|
-
|
121
|
+
|
122
122
|
def test_to_hash_cache
|
123
123
|
t = Workbook::Table.new
|
124
124
|
t << ["test", "asdf-asd"]
|
@@ -129,9 +129,9 @@ class TestRow < Test::Unit::TestCase
|
|
129
129
|
assert_equal(3, r[:test].value)
|
130
130
|
assert_equal(3, r[:test].value)
|
131
131
|
t.last[:test] = nil
|
132
|
-
assert_equal(nil, r[:test].value)
|
132
|
+
assert_equal(nil, r[:test].value)
|
133
133
|
r[:test] = 5
|
134
|
-
assert_equal(5, r[:test].value)
|
134
|
+
assert_equal(5, r[:test].value)
|
135
135
|
end
|
136
136
|
|
137
137
|
def test_compare
|
@@ -217,14 +217,14 @@ class TestRow < Test::Unit::TestCase
|
|
217
217
|
table.push Workbook::Row.new(["a","b"])
|
218
218
|
table[1] = Workbook::Row.new([1,2])
|
219
219
|
assert_equal(1,table[1][:a].value)
|
220
|
-
assert_equal(2,table[1][:b].value)
|
221
|
-
|
220
|
+
assert_equal(2,table[1][:b].value)
|
221
|
+
|
222
222
|
b = Workbook::Book.new
|
223
223
|
table = b.sheet.table
|
224
224
|
table.push Workbook::Row.new(["a","b"])
|
225
225
|
table[1] = [1,2]
|
226
226
|
assert_equal(1,table[1][:a].value)
|
227
|
-
assert_equal(2,table[1][:b].value)
|
227
|
+
assert_equal(2,table[1][:b].value)
|
228
228
|
end
|
229
229
|
|
230
230
|
def test_preservation_of_format_on_assign
|
@@ -236,7 +236,18 @@ class TestRow < Test::Unit::TestCase
|
|
236
236
|
assert_equal("#f00",row[0].format["background"])
|
237
237
|
end
|
238
238
|
|
239
|
-
def
|
239
|
+
def test_find_by_string
|
240
|
+
b = Workbook::Book.new
|
241
|
+
table = b.sheet.table
|
242
|
+
table << Workbook::Row.new(["a","b"])
|
243
|
+
row = Workbook::Row.new([],table)
|
244
|
+
row[1]= 12
|
245
|
+
assert_equal(12, table.last["b"])
|
246
|
+
assert_equal(nil, table.last["a"])
|
247
|
+
|
248
|
+
end
|
249
|
+
|
250
|
+
def test_row_hash_index_string_assignment
|
240
251
|
b = Workbook::Book.new
|
241
252
|
table = b.sheet.table
|
242
253
|
table << Workbook::Row.new(["a","b"])
|
@@ -245,6 +256,8 @@ class TestRow < Test::Unit::TestCase
|
|
245
256
|
assert_equal(12, table.last.last.value)
|
246
257
|
row[:b]= 15
|
247
258
|
assert_equal(15, table.last.last.value)
|
259
|
+
row["b"]= 18
|
260
|
+
assert_equal(18, table.last.last.value)
|
248
261
|
end
|
249
262
|
|
250
263
|
def test_trim!
|
@@ -316,4 +329,48 @@ class TestRow < Test::Unit::TestCase
|
|
316
329
|
assert_equal(c, d)
|
317
330
|
|
318
331
|
end
|
332
|
+
|
333
|
+
def test_add
|
334
|
+
a = Workbook::Row.new
|
335
|
+
a << 1
|
336
|
+
a << 2
|
337
|
+
a << "asdf"
|
338
|
+
a << 2.2
|
339
|
+
a.push(5)
|
340
|
+
assert_equal(1,a[0].value)
|
341
|
+
assert_equal(2,a[1].value)
|
342
|
+
assert_equal("asdf",a[2].value)
|
343
|
+
assert_equal(2.2,a[3].value)
|
344
|
+
assert_equal(5,a[4].value)
|
345
|
+
end
|
346
|
+
|
347
|
+
def test_plus
|
348
|
+
header = Workbook::Row.new([:a,:b])
|
349
|
+
a = Workbook::Row.new
|
350
|
+
table = Workbook::Table.new
|
351
|
+
table << header
|
352
|
+
table << a
|
353
|
+
assert_equal(table, a.table)
|
354
|
+
assert_equal(Workbook::Row, (a + [1,1]).class )
|
355
|
+
assert_equal([1,1],(a + [1,1]).to_a )
|
356
|
+
assert_equal(Workbook::Cell,(a + [1,1])[0].class )
|
357
|
+
a += [1,1]
|
358
|
+
assert_equal([1,1],a.to_a )
|
359
|
+
assert_equal(Workbook::Row, a.class )
|
360
|
+
assert_equal(nil, a.table)
|
361
|
+
assert_equal(Workbook::Cell,a[0].class)
|
362
|
+
end
|
363
|
+
|
364
|
+
def test_concat
|
365
|
+
header = Workbook::Row.new([:a,:b])
|
366
|
+
a = Workbook::Row.new
|
367
|
+
table = Workbook::Table.new
|
368
|
+
table << header
|
369
|
+
table << a
|
370
|
+
a.concat [1,1]
|
371
|
+
assert_equal([1,1],a.to_a )
|
372
|
+
assert_equal(Workbook::Row, a.class )
|
373
|
+
assert_equal(table, a.table)
|
374
|
+
assert_equal(Workbook::Cell,a[0].class)
|
375
|
+
end
|
319
376
|
end
|
data/test/test_sheet.rb
CHANGED
@@ -74,4 +74,12 @@ class TestWorkbook < Test::Unit::TestCase
|
|
74
74
|
printer.print(:path => ".", :profile => "profile")
|
75
75
|
|
76
76
|
end
|
77
|
+
def test_name
|
78
|
+
b = Workbook::Book.new [["a","b"],[1,2]]
|
79
|
+
b.push Workbook::Sheet.new([["a","b"],[2,2]])
|
80
|
+
b.push Workbook::Sheet.new([["a","b"],[3,2]])
|
81
|
+
|
82
|
+
# puts b.index b.last
|
83
|
+
assert_equal(["Sheet 1", "Sheet 2", "Sheet 3"], b.collect{|a| a.name})
|
84
|
+
end
|
77
85
|
end
|
data/test/test_table.rb
CHANGED
@@ -121,8 +121,37 @@ class TestTable< Test::Unit::TestCase
|
|
121
121
|
assert_equal(27,t.alpha_index_to_number_index("AB"))
|
122
122
|
assert_equal(51,t.alpha_index_to_number_index("AZ"))
|
123
123
|
assert_equal(52,t.alpha_index_to_number_index("BA"))
|
124
|
+
assert_equal((27*26)-1,t.alpha_index_to_number_index("ZZ"))
|
124
125
|
end
|
125
126
|
|
127
|
+
def test_multirowselect_through_collections
|
128
|
+
w = Workbook::Book.new [["a","b"],[1,2],[3,4]]
|
129
|
+
t = w.sheet.table
|
130
|
+
assert_equal(Workbook::Table,t[0..2].class)
|
131
|
+
assert_equal(2,t[0..2][1][1])
|
132
|
+
end
|
133
|
+
|
134
|
+
def test_table
|
135
|
+
w = Workbook::Book.new [[nil,nil],["a","b"],[1,2],[3,4]]
|
136
|
+
t = w.sheet.table
|
137
|
+
w2 = Workbook::Book.new
|
138
|
+
w2.sheet.table = t[2..3]
|
139
|
+
assert_equal("1,2\n3,4\n", w2.sheet.table.to_csv)
|
140
|
+
end
|
141
|
+
def test_array_style_assignment
|
142
|
+
w = Workbook::Book.new [["a","b"],[1,2],[3,4]]
|
143
|
+
t = w.sheet.table
|
144
|
+
r = t[1].clone
|
145
|
+
assert_equal(nil, r.table)
|
146
|
+
t[2] = r
|
147
|
+
assert_equal(t, r.table)
|
148
|
+
end
|
149
|
+
def test_delete_at
|
150
|
+
w = Workbook::Book.new [["a","b"],[1,2],[3,4]]
|
151
|
+
t = w.sheet.table
|
152
|
+
t.delete_at 2
|
153
|
+
assert_equal(1, t.last.first.value)
|
154
|
+
end
|
126
155
|
def test_trim!
|
127
156
|
t = Workbook::Table.new
|
128
157
|
t << [1,2,3]
|
@@ -138,4 +167,23 @@ class TestTable< Test::Unit::TestCase
|
|
138
167
|
t.trim!
|
139
168
|
assert_equal("1,2,3\n,,\n1,2,\n",t.to_csv)
|
140
169
|
end
|
170
|
+
def test_performance
|
171
|
+
table = Workbook::Table.new
|
172
|
+
headers = 1000.times.collect{|a| "header#{a}"}
|
173
|
+
first_row = 1000.times.collect{|a| Time.now}
|
174
|
+
table << headers.shuffle
|
175
|
+
table << first_row
|
176
|
+
100.times do |times|
|
177
|
+
row = table[1].clone
|
178
|
+
table << row
|
179
|
+
headers.each do |a|
|
180
|
+
row[a.to_sym]=Time.now
|
181
|
+
end
|
182
|
+
end
|
183
|
+
last_line = table.count-1
|
184
|
+
first_few_lines = table[12][0].value - table[2][0].value
|
185
|
+
last_few_lines = table[last_line][0].value - table[last_line-10][0].value
|
186
|
+
# puts [first_few_lines,last_few_lines].join(" vs ")
|
187
|
+
assert_equal(true, first_few_lines*1.10 > last_few_lines) # 10% slower is acceptable
|
188
|
+
end
|
141
189
|
end
|