axlsx 1.0.17 → 1.0.18
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.
- data/README.md +70 -37
- data/examples/example.rb +163 -150
- data/lib/axlsx.rb +2 -2
- data/lib/axlsx/content_type/content_type.rb +3 -3
- data/lib/axlsx/drawing/chart.rb +3 -3
- data/lib/axlsx/drawing/pic.rb +1 -0
- data/lib/axlsx/package.rb +29 -29
- data/lib/axlsx/rels/relationship.rb +3 -3
- data/lib/axlsx/stylesheet/font.rb +7 -0
- data/lib/axlsx/stylesheet/styles.rb +6 -3
- data/lib/axlsx/util/constants.rb +16 -14
- data/lib/axlsx/version.rb +1 -1
- data/lib/axlsx/workbook/workbook.rb +24 -24
- data/lib/axlsx/workbook/worksheet/cell.rb +68 -53
- data/lib/axlsx/workbook/worksheet/date_time_converter.rb +29 -0
- data/lib/axlsx/workbook/worksheet/page_margins.rb +94 -0
- data/lib/axlsx/workbook/worksheet/row.rb +31 -14
- data/lib/axlsx/workbook/worksheet/worksheet.rb +127 -45
- data/test/drawing/tc_chart.rb +2 -2
- data/test/stylesheet/tc_cell_alignment.rb +8 -3
- data/test/stylesheet/tc_font.rb +8 -0
- data/test/stylesheet/tc_styles.rb +6 -2
- data/test/workbook/worksheet/tc_cell.rb +39 -9
- data/test/workbook/worksheet/tc_date_time_converter.rb +127 -0
- data/test/workbook/worksheet/tc_date_time_converter.rb~ +69 -0
- data/test/workbook/worksheet/tc_page_margins.rb +100 -0
- data/test/workbook/worksheet/tc_row.rb +36 -0
- data/test/workbook/worksheet/tc_worksheet.rb +78 -1
- metadata +87 -119
@@ -0,0 +1,127 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
require 'test/unit'
|
3
|
+
require 'axlsx.rb'
|
4
|
+
|
5
|
+
class TestDateTimeConverter < Test::Unit::TestCase
|
6
|
+
def setup
|
7
|
+
@margin_of_error = 0.000_001
|
8
|
+
@extended_time_range = begin
|
9
|
+
Time.parse "1893-08-05"
|
10
|
+
Time.parse "9999-12-31T23:59:59Z"
|
11
|
+
true
|
12
|
+
rescue
|
13
|
+
false
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
def test_date_to_serial_1900
|
18
|
+
Axlsx::Workbook.date1904 = false
|
19
|
+
tests = if @extended_time_range
|
20
|
+
{ # examples taken straight from the spec
|
21
|
+
"1893-08-05" => -2338.0,
|
22
|
+
"1900-01-01" => 2.0,
|
23
|
+
"1910-02-03" => 3687.0,
|
24
|
+
"2006-02-01" => 38749.0,
|
25
|
+
"9999-12-31" => 2958465.0
|
26
|
+
}
|
27
|
+
else
|
28
|
+
{ # examples taken inside the possible values
|
29
|
+
"1970-01-01" => 25569.0, # Unix epoch
|
30
|
+
"1970-01-02" => 25570.0,
|
31
|
+
"2006-02-01" => 38749.0,
|
32
|
+
"2038-01-19" => 50424.0, # max date using signed timestamp in 32bit
|
33
|
+
}
|
34
|
+
end
|
35
|
+
tests.each do |date_string, expected|
|
36
|
+
serial = Axlsx::DateTimeConverter::date_to_serial Date.parse(date_string)
|
37
|
+
assert_equal expected, serial
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
def test_date_to_serial_1904
|
42
|
+
Axlsx::Workbook.date1904 = true
|
43
|
+
tests = if @extended_time_range
|
44
|
+
{ # examples taken straight from the spec
|
45
|
+
"1893-08-05" => -3800.0,
|
46
|
+
"1904-01-01" => 0.0,
|
47
|
+
"1910-02-03" => 2225.0,
|
48
|
+
"2006-02-01" => 37287.0,
|
49
|
+
"9999-12-31" => 2957003.0
|
50
|
+
}
|
51
|
+
else
|
52
|
+
{ # examples taken inside the possible values
|
53
|
+
"1970-01-01" => 24107.0, # Unix epoch
|
54
|
+
"1970-01-02" => 24108.0,
|
55
|
+
"2006-02-01" => 37287.0,
|
56
|
+
"2038-01-19" => 48962.0, # max date using signed timestamp in 32bit
|
57
|
+
}
|
58
|
+
end
|
59
|
+
tests.each do |date_string, expected|
|
60
|
+
serial = Axlsx::DateTimeConverter::date_to_serial Date.parse(date_string)
|
61
|
+
assert_equal expected, serial
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
def test_time_to_serial_1900
|
66
|
+
Axlsx::Workbook.date1904 = false
|
67
|
+
tests = if @extended_time_range
|
68
|
+
{ # examples taken straight from the spec
|
69
|
+
"1893-08-05T00:00:01Z" => -2337.999989,
|
70
|
+
"1899-12-28T18:00:00Z" => -1.25,
|
71
|
+
"1910-02-03T10:05:54Z" => 3687.4207639,
|
72
|
+
"1900-01-01T12:00:00Z" => 2.5, # wrongly indicated as 1.5 in the spec!
|
73
|
+
"9999-12-31T23:59:59Z" => 2958465.9999884
|
74
|
+
}
|
75
|
+
else
|
76
|
+
{ # examples taken inside the possible values
|
77
|
+
"1970-01-01T00:00:00Z" => 25569.0, # Unix epoch
|
78
|
+
"1970-01-01T12:00:00Z" => 25569.5,
|
79
|
+
"2000-01-01T00:00:00Z" => 36526.0,
|
80
|
+
"2038-01-19T03:14:07Z" => 50424.134803, # max signed timestamp in 32bit
|
81
|
+
}
|
82
|
+
end
|
83
|
+
tests.each do |time_string, expected|
|
84
|
+
serial = Axlsx::DateTimeConverter::time_to_serial Time.parse(time_string)
|
85
|
+
assert_in_delta expected, serial, @margin_of_error
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
def test_time_to_serial_1904
|
90
|
+
Axlsx::Workbook.date1904 = true
|
91
|
+
# ruby 1.8.7 cannot parse dates prior to epoch. see http://ruby-doc.org/core-1.8.7/Time.html
|
92
|
+
|
93
|
+
tests = if @extended_time_range
|
94
|
+
{ # examples taken straight from the spec
|
95
|
+
"1893-08-05T00:00:01Z" => -3799.999989,
|
96
|
+
"1910-02-03T10:05:54Z" => 2225.4207639,
|
97
|
+
"1904-01-01T12:00:00Z" => 0.5000000,
|
98
|
+
"9999-12-31T23:59:59Z" => 2957003.9999884
|
99
|
+
}
|
100
|
+
else
|
101
|
+
{ # examples taken inside the possible values
|
102
|
+
"1970-01-01T00:00:00Z" => 24107.0, # Unix epoch
|
103
|
+
"1970-01-01T12:00:00Z" => 24107.5,
|
104
|
+
"2000-01-01T00:00:00Z" => 35064.0,
|
105
|
+
"2038-01-19T03:14:07Z" => 48962.134803, # max signed timestamp in 32bit
|
106
|
+
}
|
107
|
+
end
|
108
|
+
tests.each do |time_string, expected|
|
109
|
+
serial = Axlsx::DateTimeConverter::time_to_serial Time.parse(time_string)
|
110
|
+
assert_in_delta expected, serial, @margin_of_error
|
111
|
+
end
|
112
|
+
end
|
113
|
+
|
114
|
+
def test_timezone
|
115
|
+
utc = Time.utc 2012 # January 1st, 2012 at 0:00 UTC
|
116
|
+
local = begin
|
117
|
+
Time.new 2012, 1, 1, 1, 0, 0, 3600 # January 1st, 2012 at 1:00 GMT+1
|
118
|
+
rescue ArgumentError
|
119
|
+
Time.parse "2012-01-01 01:00:00 +0100"
|
120
|
+
end
|
121
|
+
assert_equal local, utc
|
122
|
+
assert_equal Axlsx::DateTimeConverter::time_to_serial(local), Axlsx::DateTimeConverter::time_to_serial(utc)
|
123
|
+
Axlsx::Workbook.date1904 = true
|
124
|
+
assert_equal Axlsx::DateTimeConverter::time_to_serial(local), Axlsx::DateTimeConverter::time_to_serial(utc)
|
125
|
+
end
|
126
|
+
|
127
|
+
end
|
@@ -0,0 +1,69 @@
|
|
1
|
+
require 'test/unit'
|
2
|
+
require 'axlsx.rb'
|
3
|
+
|
4
|
+
class TestConverter < Test::Unit::TestCase
|
5
|
+
def setup
|
6
|
+
@converter = Axlsx::Converter.new
|
7
|
+
@margin_of_error = 0.000_001
|
8
|
+
end
|
9
|
+
|
10
|
+
def test_date_to_serial_1900
|
11
|
+
{ # examples taken straight from the spec
|
12
|
+
"1893-08-05" => -2338.0,
|
13
|
+
"1900-01-01" => 2.0,
|
14
|
+
"1910-02-03" => 3687.0,
|
15
|
+
"2006-02-01" => 38749.0,
|
16
|
+
"9999-12-31" => 2958465.0,
|
17
|
+
}.each do |date_string, expected|
|
18
|
+
serial = @converter.date_to_serial Date.parse(date_string)
|
19
|
+
assert_equal serial, expected
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
def test_date_to_serial_1904
|
24
|
+
{ # examples taken straight from the spec
|
25
|
+
"1893-08-05" => -3800.0,
|
26
|
+
"1904-01-01" => 0.0,
|
27
|
+
"1910-02-03" => 2225.0,
|
28
|
+
"2006-02-01" => 37287.0,
|
29
|
+
"9999-12-31" => 2957003.0,
|
30
|
+
}.each do |date_string, expected|
|
31
|
+
serial = @converter.date_to_serial Date.parse(date_string), true
|
32
|
+
assert_equal serial, expected
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
def test_time_to_serial_1900
|
37
|
+
{ # examples taken straight from the spec
|
38
|
+
"1893-08-05T00:00:01Z" => -2337.999989,
|
39
|
+
"1899-12-28T18:00:00Z" => -1.25,
|
40
|
+
"1910-02-03T10:05:54Z" => 3687.4207639,
|
41
|
+
"1900-01-01T12:00:00Z" => 2.5, # wrongly indicated as 1.5 in the spec!
|
42
|
+
"9999-12-31T23:59:59Z" => 2958465.9999884,
|
43
|
+
}.each do |time_string, expected|
|
44
|
+
serial = @converter.time_to_serial Time.parse(time_string)
|
45
|
+
assert_in_delta serial, expected, @margin_of_error
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
def test_time_to_serial_1904
|
50
|
+
{ # examples taken straight from the spec
|
51
|
+
"1893-08-05T00:00:01Z" => -3799.999989,
|
52
|
+
"1910-02-03T10:05:54Z" => 2225.4207639,
|
53
|
+
"1904-01-01T12:00:00Z" => 0.5000000,
|
54
|
+
"9999-12-31T23:59:59Z" => 2957003.9999884,
|
55
|
+
}.each do |time_string, expected|
|
56
|
+
serial = @converter.time_to_serial Time.parse(time_string), true
|
57
|
+
assert_in_delta serial, expected, @margin_of_error
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
def test_timezone
|
62
|
+
utc = Time.utc 2012 # January 1st, 2012 at 0:00 UTC
|
63
|
+
local = Time.new 2012, 1, 1, 1, 0, 0, 3600 # January 1st, 2012 at 1:00 GMT+1
|
64
|
+
assert_equal local, utc
|
65
|
+
assert_equal @converter.time_to_serial(local), @converter.time_to_serial(utc)
|
66
|
+
assert_equal @converter.time_to_serial(local, true), @converter.time_to_serial(utc, true)
|
67
|
+
end
|
68
|
+
|
69
|
+
end
|
@@ -0,0 +1,100 @@
|
|
1
|
+
require 'test/unit'
|
2
|
+
require 'axlsx.rb'
|
3
|
+
|
4
|
+
class TestPageMargins < Test::Unit::TestCase
|
5
|
+
|
6
|
+
def setup
|
7
|
+
p = Axlsx::Package.new
|
8
|
+
ws = p.workbook.add_worksheet :name=>"hmmm"
|
9
|
+
@pm = ws.page_margins
|
10
|
+
end
|
11
|
+
|
12
|
+
def test_initialize
|
13
|
+
assert_equal(Axlsx::PageMargins::DEFAULT_LEFT_RIGHT, @pm.left)
|
14
|
+
assert_equal(Axlsx::PageMargins::DEFAULT_LEFT_RIGHT, @pm.right)
|
15
|
+
assert_equal(Axlsx::PageMargins::DEFAULT_TOP_BOTTOM, @pm.top)
|
16
|
+
assert_equal(Axlsx::PageMargins::DEFAULT_TOP_BOTTOM, @pm.bottom)
|
17
|
+
assert_equal(Axlsx::PageMargins::DEFAULT_HEADER_FOOTER, @pm.header)
|
18
|
+
assert_equal(Axlsx::PageMargins::DEFAULT_HEADER_FOOTER, @pm.footer)
|
19
|
+
end
|
20
|
+
|
21
|
+
def test_initialize_with_options
|
22
|
+
optioned = Axlsx::PageMargins.new(:left => 2, :right => 3, :top => 2, :bottom => 1, :header => 0.1, :footer => 0.1)
|
23
|
+
assert_equal(2, optioned.left)
|
24
|
+
assert_equal(3, optioned.right)
|
25
|
+
assert_equal(2, optioned.top)
|
26
|
+
assert_equal(1, optioned.bottom)
|
27
|
+
assert_equal(0.1, optioned.header)
|
28
|
+
assert_equal(0.1, optioned.footer)
|
29
|
+
end
|
30
|
+
|
31
|
+
|
32
|
+
def test_set_all_values
|
33
|
+
@pm.set(:left => 1.1, :right => 1.2, :top => 1.3, :bottom => 1.4, :header => 0.8, :footer => 0.9)
|
34
|
+
assert_equal(1.1, @pm.left)
|
35
|
+
assert_equal(1.2, @pm.right)
|
36
|
+
assert_equal(1.3, @pm.top)
|
37
|
+
assert_equal(1.4, @pm.bottom)
|
38
|
+
assert_equal(0.8, @pm.header)
|
39
|
+
assert_equal(0.9, @pm.footer)
|
40
|
+
end
|
41
|
+
|
42
|
+
def test_set_some_values
|
43
|
+
@pm.set(:left => 1.1, :right => 1.2)
|
44
|
+
assert_equal(1.1, @pm.left)
|
45
|
+
assert_equal(1.2, @pm.right)
|
46
|
+
assert_equal(Axlsx::PageMargins::DEFAULT_TOP_BOTTOM, @pm.top)
|
47
|
+
assert_equal(Axlsx::PageMargins::DEFAULT_TOP_BOTTOM, @pm.bottom)
|
48
|
+
assert_equal(Axlsx::PageMargins::DEFAULT_HEADER_FOOTER, @pm.header)
|
49
|
+
assert_equal(Axlsx::PageMargins::DEFAULT_HEADER_FOOTER, @pm.footer)
|
50
|
+
end
|
51
|
+
|
52
|
+
def test_to_xml
|
53
|
+
@pm.left = 1.1
|
54
|
+
@pm.right = 1.2
|
55
|
+
@pm.top = 1.3
|
56
|
+
@pm.bottom = 1.4
|
57
|
+
@pm.header = 0.8
|
58
|
+
@pm.footer = 0.9
|
59
|
+
xml = Nokogiri::XML::Builder.new
|
60
|
+
@pm.to_xml(xml)
|
61
|
+
doc = Nokogiri::XML.parse(xml.to_xml)
|
62
|
+
assert_equal(1, doc.xpath(".//pageMargins[@left=1.1][@right=1.2][@top=1.3][@bottom=1.4][@header=0.8][@footer=0.9]").size)
|
63
|
+
end
|
64
|
+
|
65
|
+
def test_left
|
66
|
+
assert_raise(ArgumentError) { @pm.left = -1.2 }
|
67
|
+
assert_nothing_raised { @pm.left = 1.5 }
|
68
|
+
assert_equal(@pm.left, 1.5)
|
69
|
+
end
|
70
|
+
|
71
|
+
def test_right
|
72
|
+
assert_raise(ArgumentError) { @pm.right = -1.2 }
|
73
|
+
assert_nothing_raised { @pm.right = 1.5 }
|
74
|
+
assert_equal(@pm.right, 1.5)
|
75
|
+
end
|
76
|
+
|
77
|
+
def test_top
|
78
|
+
assert_raise(ArgumentError) { @pm.top = -1.2 }
|
79
|
+
assert_nothing_raised { @pm.top = 1.5 }
|
80
|
+
assert_equal(@pm.top, 1.5)
|
81
|
+
end
|
82
|
+
|
83
|
+
def test_bottom
|
84
|
+
assert_raise(ArgumentError) { @pm.bottom = -1.2 }
|
85
|
+
assert_nothing_raised { @pm.bottom = 1.5 }
|
86
|
+
assert_equal(@pm.bottom, 1.5)
|
87
|
+
end
|
88
|
+
|
89
|
+
def test_header
|
90
|
+
assert_raise(ArgumentError) { @pm.header = -1.2 }
|
91
|
+
assert_nothing_raised { @pm.header = 1.5 }
|
92
|
+
assert_equal(@pm.header, 1.5)
|
93
|
+
end
|
94
|
+
|
95
|
+
def test_footer
|
96
|
+
assert_raise(ArgumentError) { @pm.footer = -1.2 }
|
97
|
+
assert_nothing_raised { @pm.footer = 1.5 }
|
98
|
+
assert_equal(@pm.footer, 1.5)
|
99
|
+
end
|
100
|
+
end
|
@@ -12,6 +12,14 @@ class TestRow < Test::Unit::TestCase
|
|
12
12
|
def test_initialize
|
13
13
|
assert(@row.cells.empty?, "no cells by default")
|
14
14
|
assert_equal(@row.worksheet, @ws, "has a reference to the worksheet")
|
15
|
+
assert_nil(@row.height, "height defaults to nil")
|
16
|
+
assert(!@row.custom_height?, "no custom height by default")
|
17
|
+
end
|
18
|
+
|
19
|
+
def test_initialize_with_fixed_height
|
20
|
+
row = @ws.add_row([1,2,3,4,5], :height=>40)
|
21
|
+
assert_equal(40, row.height)
|
22
|
+
assert(row.custom_height?)
|
15
23
|
end
|
16
24
|
|
17
25
|
def test_style
|
@@ -33,4 +41,32 @@ class TestRow < Test::Unit::TestCase
|
|
33
41
|
r = @ws.add_row [1,2,3], :style=>0, :types=>:integer
|
34
42
|
assert_equal(r.cells.size, 3)
|
35
43
|
end
|
44
|
+
|
45
|
+
def test_custom_height
|
46
|
+
@row.height = 20
|
47
|
+
assert(@row.custom_height?)
|
48
|
+
end
|
49
|
+
|
50
|
+
def test_height
|
51
|
+
assert_raise(ArgumentError) { @row.height = -3 }
|
52
|
+
assert_nothing_raised { @row.height = 15 }
|
53
|
+
assert_equal(15, @row.height)
|
54
|
+
end
|
55
|
+
|
56
|
+
def test_to_xml_without_custom_height
|
57
|
+
xml = Nokogiri::XML::Builder.new
|
58
|
+
@row.to_xml(xml)
|
59
|
+
doc = Nokogiri::XML.parse(xml.to_xml)
|
60
|
+
assert_equal(0, doc.xpath(".//row[@ht]").size)
|
61
|
+
assert_equal(0, doc.xpath(".//row[@customHeight]").size)
|
62
|
+
end
|
63
|
+
|
64
|
+
def test_to_xml_with_custom_height
|
65
|
+
@row.height = 20
|
66
|
+
xml = Nokogiri::XML::Builder.new
|
67
|
+
@row.to_xml(xml)
|
68
|
+
doc = Nokogiri::XML.parse(xml.to_xml)
|
69
|
+
assert_equal(1, doc.xpath(".//row[@ht=20][@customHeight=1]").size)
|
70
|
+
end
|
71
|
+
|
36
72
|
end
|
@@ -13,6 +13,29 @@ class TestWorksheet < Test::Unit::TestCase
|
|
13
13
|
assert_equal(ws.pn, "worksheets/sheet2.xml")
|
14
14
|
end
|
15
15
|
|
16
|
+
def test_page_margins
|
17
|
+
assert(@ws.page_margins.is_a? Axlsx::PageMargins)
|
18
|
+
end
|
19
|
+
|
20
|
+
def test_page_margins_yeild
|
21
|
+
@ws.page_margins do |pm|
|
22
|
+
assert(pm.is_a? Axlsx::PageMargins)
|
23
|
+
assert(@ws.page_margins == pm)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
def test_initialization_options
|
28
|
+
page_margins = {:left => 2, :right => 2, :bottom => 2, :top => 2, :header => 2, :footer => 2}
|
29
|
+
optioned = @ws.workbook.add_worksheet(:name => 'bob', :page_margins => page_margins)
|
30
|
+
assert_equal(optioned.page_margins.left, page_margins[:left])
|
31
|
+
assert_equal(optioned.page_margins.right, page_margins[:right])
|
32
|
+
assert_equal(optioned.page_margins.top, page_margins[:top])
|
33
|
+
assert_equal(optioned.page_margins.bottom, page_margins[:bottom])
|
34
|
+
assert_equal(optioned.page_margins.header, page_margins[:header])
|
35
|
+
assert_equal(optioned.page_margins.footer, page_margins[:footer])
|
36
|
+
assert_equal(optioned.name, 'bob')
|
37
|
+
end
|
38
|
+
|
16
39
|
def test_rels_pn
|
17
40
|
assert_equal(@ws.rels_pn, "worksheets/_rels/sheet1.xml.rels")
|
18
41
|
ws = @ws.workbook.add_worksheet
|
@@ -39,6 +62,10 @@ class TestWorksheet < Test::Unit::TestCase
|
|
39
62
|
@ws.add_row [1, 2, 3]
|
40
63
|
@ws.add_row [4, 5, 6]
|
41
64
|
range = @ws["A1:C2"]
|
65
|
+
first_row = @ws[1]
|
66
|
+
last_row = @ws[2]
|
67
|
+
assert_equal(@ws.rows[0],first_row)
|
68
|
+
assert_equal(@ws.rows[1],last_row)
|
42
69
|
assert_equal(range.size, 6)
|
43
70
|
assert_equal(range.first, @ws.rows.first.cells.first)
|
44
71
|
assert_equal(range.last, @ws.rows.last.cells.last)
|
@@ -116,6 +143,19 @@ class TestWorksheet < Test::Unit::TestCase
|
|
116
143
|
assert(errors.empty?, "error free validation")
|
117
144
|
end
|
118
145
|
|
146
|
+
def test_valid_with_page_margins
|
147
|
+
@ws.page_margins.set :left => 9
|
148
|
+
schema = Nokogiri::XML::Schema(File.open(Axlsx::SML_XSD))
|
149
|
+
doc = Nokogiri::XML(@ws.to_xml)
|
150
|
+
errors = []
|
151
|
+
schema.validate(doc).each do |error|
|
152
|
+
errors.push error
|
153
|
+
puts error.message
|
154
|
+
end
|
155
|
+
assert(errors.empty?, "error free validation")
|
156
|
+
|
157
|
+
end
|
158
|
+
|
119
159
|
def test_relationships
|
120
160
|
assert(@ws.relationships.empty?, "No Drawing relationship until you add a chart")
|
121
161
|
c = @ws.add_chart Axlsx::Pie3DChart
|
@@ -129,6 +169,11 @@ class TestWorksheet < Test::Unit::TestCase
|
|
129
169
|
assert_raise(ArgumentError, "worksheet name must be unique") { n = @ws.name; @ws.workbook.add_worksheet(:name=> @ws) }
|
130
170
|
end
|
131
171
|
|
172
|
+
def test_name_size
|
173
|
+
assert_raise(ArgumentError, "name too long!") { @ws.name = Array.new(32, "A").join('') }
|
174
|
+
assert_nothing_raised { @ws.name = Array.new(31, "A").join('') }
|
175
|
+
end
|
176
|
+
|
132
177
|
def test_update_auto_with_data
|
133
178
|
small = @ws.workbook.styles.add_style(:sz=>2)
|
134
179
|
big = @ws.workbook.styles.add_style(:sz=>10)
|
@@ -143,6 +188,33 @@ class TestWorksheet < Test::Unit::TestCase
|
|
143
188
|
assert_equal(@ws.auto_fit_data[0], {:sz=>10,:longest=>"mule", :fixed=>nil}, "adding a row updates auto_fit_data if the product of the string length and font is greater for the column")
|
144
189
|
end
|
145
190
|
|
191
|
+
def test_set_fixed_width_column
|
192
|
+
@ws.add_row ["mule", "donkey", "horse"], :widths => [20, :ignore, nil]
|
193
|
+
assert(@ws.auto_fit_data.size == 3, "a data item for each column")
|
194
|
+
assert_equal({:sz=>11, :longest=>"mule", :fixed=>20 }, @ws.auto_fit_data[0], "adding a row with fixed width updates :fixed attribute")
|
195
|
+
assert_equal({:sz=>11, :longest=>"", :fixed=>nil}, @ws.auto_fit_data[1], ":ignore does not set any data")
|
196
|
+
assert_equal({:sz=>11, :longest=>"horse", :fixed=>nil}, @ws.auto_fit_data[2], "nil, well really anything else just works as normal")
|
197
|
+
@ws.add_row ["mule", "donkey", "horse"]
|
198
|
+
assert_equal({:sz=>11, :longest=>"donkey", :fixed=>nil}, @ws.auto_fit_data[1])
|
199
|
+
|
200
|
+
end
|
201
|
+
|
202
|
+
def test_fixed_widths_with_merged_cells
|
203
|
+
@ws.add_row ["hey, I'm like really long and stuff so I think you will merge me."]
|
204
|
+
@ws.merge_cells "A1:C1"
|
205
|
+
@ws.add_row ["but Im Short!"], :widths=> [14.8]
|
206
|
+
assert_equal(@ws.send(:auto_width, @ws.auto_fit_data[0]), 14.8)
|
207
|
+
end
|
208
|
+
|
209
|
+
def test_fixed_width_to_auto
|
210
|
+
@ws.add_row ["hey, I'm like really long and stuff so I think you will merge me."]
|
211
|
+
@ws.merge_cells "A1:C1"
|
212
|
+
@ws.add_row ["but Im Short!"], :widths=> [14.8]
|
213
|
+
assert_equal(@ws.send(:auto_width, @ws.auto_fit_data[0]), 14.8)
|
214
|
+
@ws.add_row ["no, I like auto!"], :widths=>[:auto]
|
215
|
+
assert_equal(@ws.auto_fit_data[0][:fixed], nil)
|
216
|
+
end
|
217
|
+
|
146
218
|
def test_auto_width
|
147
219
|
assert(@ws.send(:auto_width, {:sz=>11, :longest=>"fisheries"}) > @ws.send(:auto_width, {:sz=>11, :longest=>"fish"}), "longer strings get a longer auto_width at the same font size")
|
148
220
|
|
@@ -150,6 +222,12 @@ class TestWorksheet < Test::Unit::TestCase
|
|
150
222
|
assert_equal(@ws.send(:auto_width, {:sz=>11, :longest => "This is a really long string", :fixed=>0.2}), 0.2, "fixed rules!")
|
151
223
|
end
|
152
224
|
|
225
|
+
def test_fixed_height
|
226
|
+
@ws.add_row [1, 2, 3], :height => 40
|
227
|
+
assert_equal(40, @ws.rows[-1].height)
|
228
|
+
end
|
229
|
+
|
230
|
+
|
153
231
|
def test_set_column_width
|
154
232
|
@ws.add_row ["chasing windmills", "penut"]
|
155
233
|
assert_equal(@ws.auto_fit_data[0][:fixed], nil, 'no fixed by default')
|
@@ -160,7 +238,6 @@ class TestWorksheet < Test::Unit::TestCase
|
|
160
238
|
assert_raise(ArgumentError, 'only accept Integer, Float or Fixnum') { @ws.column_widths 2, 7, "-1" }
|
161
239
|
end
|
162
240
|
|
163
|
-
|
164
241
|
def test_merge_cells
|
165
242
|
assert(@ws.merged_cells.is_a?(Array))
|
166
243
|
assert_equal(@ws.merged_cells.size, 0)
|