axlsx 1.3.6 → 2.0.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.
- checksums.yaml +4 -4
- data/.yardopts_guide +19 -0
- data/CHANGELOG.md +8 -0
- data/README.md +52 -79
- data/Rakefile +0 -5
- data/examples/2010_comments.rb +17 -0
- data/examples/anchor_swapping.rb +28 -0
- data/examples/example.rb +16 -1
- data/examples/pivot_table.rb +2 -0
- data/examples/underline.rb +13 -0
- data/lib/axlsx.rb +8 -0
- data/lib/axlsx/doc_props/core.rb +6 -1
- data/lib/axlsx/drawing/axes.rb +7 -3
- data/lib/axlsx/drawing/bar_3D_chart.rb +2 -2
- data/lib/axlsx/drawing/chart.rb +20 -4
- data/lib/axlsx/drawing/drawing.rb +2 -17
- data/lib/axlsx/drawing/graphic_frame.rb +3 -8
- data/lib/axlsx/drawing/hyperlink.rb +5 -12
- data/lib/axlsx/drawing/marker.rb +25 -5
- data/lib/axlsx/drawing/one_cell_anchor.rb +9 -0
- data/lib/axlsx/drawing/pic.rb +17 -23
- data/lib/axlsx/drawing/two_cell_anchor.rb +7 -27
- data/lib/axlsx/package.rb +31 -11
- data/lib/axlsx/rels/relationship.rb +73 -8
- data/lib/axlsx/rels/relationships.rb +8 -1
- data/lib/axlsx/stylesheet/color.rb +1 -1
- data/lib/axlsx/stylesheet/num_fmt.rb +2 -2
- data/lib/axlsx/stylesheet/styles.rb +5 -3
- data/lib/axlsx/util/serialized_attributes.rb +11 -8
- data/lib/axlsx/util/simple_typed_list.rb +34 -13
- data/lib/axlsx/util/validators.rb +7 -0
- data/lib/axlsx/version.rb +1 -1
- data/lib/axlsx/workbook/defined_name.rb +1 -1
- data/lib/axlsx/workbook/shared_strings_table.rb +12 -3
- data/lib/axlsx/workbook/workbook.rb +31 -8
- data/lib/axlsx/workbook/worksheet/break.rb +37 -0
- data/lib/axlsx/workbook/worksheet/cell.rb +5 -5
- data/lib/axlsx/workbook/worksheet/cell_serializer.rb +1 -1
- data/lib/axlsx/workbook/worksheet/col_breaks.rb +35 -0
- data/lib/axlsx/workbook/worksheet/comment.rb +6 -5
- data/lib/axlsx/workbook/worksheet/comments.rb +3 -3
- data/lib/axlsx/workbook/worksheet/conditional_formatting_rule.rb +1 -1
- data/lib/axlsx/workbook/worksheet/date_time_converter.rb +6 -5
- data/lib/axlsx/workbook/worksheet/pivot_table.rb +32 -18
- data/lib/axlsx/workbook/worksheet/pivot_table_cache_definition.rb +4 -3
- data/lib/axlsx/workbook/worksheet/pivot_tables.rb +1 -1
- data/lib/axlsx/workbook/worksheet/row.rb +1 -1
- data/lib/axlsx/workbook/worksheet/row_breaks.rb +33 -0
- data/lib/axlsx/workbook/worksheet/table.rb +3 -2
- data/lib/axlsx/workbook/worksheet/tables.rb +1 -1
- data/lib/axlsx/workbook/worksheet/worksheet.rb +61 -26
- data/lib/axlsx/workbook/worksheet/worksheet_comments.rb +6 -5
- data/lib/axlsx/workbook/worksheet/worksheet_drawing.rb +3 -9
- data/lib/axlsx/workbook/worksheet/worksheet_hyperlink.rb +5 -10
- data/lib/schema/sml.xsd +4 -0
- data/test/axlsx.qcachegrind +2226 -0
- data/test/doc_props/tc_core.rb +7 -0
- data/test/drawing/tc_axes.rb +8 -0
- data/test/drawing/tc_bar_3D_chart.rb +6 -0
- data/test/drawing/tc_chart.rb +13 -0
- data/test/drawing/tc_drawing.rb +0 -5
- data/test/drawing/tc_graphic_frame.rb +4 -7
- data/test/drawing/tc_hyperlink.rb +0 -4
- data/test/drawing/tc_pic.rb +14 -3
- data/test/drawing/tc_two_cell_anchor.rb +3 -3
- data/test/profile.rb +7 -3
- data/test/rels/tc_relationship.rb +29 -11
- data/test/rels/tc_relationships.rb +12 -1
- data/test/stylesheet/tc_color.rb +6 -0
- data/test/stylesheet/tc_styles.rb +2 -2
- data/test/tc_helper.rb +1 -0
- data/test/tc_package.rb +30 -0
- data/test/util/tc_serialized_attributes.rb +19 -0
- data/test/workbook/tc_shared_strings_table.rb +6 -0
- data/test/workbook/tc_workbook.rb +23 -1
- data/test/workbook/worksheet/tc_break.rb +49 -0
- data/test/workbook/worksheet/tc_comment.rb +17 -6
- data/test/workbook/worksheet/tc_conditional_formatting.rb +2 -2
- data/test/workbook/worksheet/tc_date_time_converter.rb +3 -11
- data/test/workbook/worksheet/tc_pivot_table.rb +40 -22
- data/test/workbook/worksheet/tc_pivot_table_cache_definition.rb +9 -1
- data/test/workbook/worksheet/tc_sheet_view.rb +39 -39
- data/test/workbook/worksheet/tc_table.rb +2 -2
- data/test/workbook/worksheet/tc_worksheet.rb +39 -7
- data/test/workbook/worksheet/tc_worksheet_hyperlink.rb +2 -11
- metadata +37 -10
- data/test/example.xlsx +0 -0
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
require 'tc_helper.rb'
|
|
2
|
+
|
|
3
|
+
class TestBreak < Test::Unit::TestCase
|
|
4
|
+
|
|
5
|
+
def setup
|
|
6
|
+
@break = Axlsx::Break.new(:id => 1, :min => 1, :max => 10, :man => true, :pt => false)
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
def test_id
|
|
10
|
+
assert_equal(1, @break.id)
|
|
11
|
+
assert_raises ArgumentError do
|
|
12
|
+
Axlsx::Break.new(:hoge, {:id => -1})
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def test_min
|
|
17
|
+
assert_equal(1, @break.min)
|
|
18
|
+
assert_raises ArgumentError do
|
|
19
|
+
Axlsx::Break.new(:hoge, :min => -1)
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def test_max
|
|
24
|
+
assert_equal(10, @break.max)
|
|
25
|
+
assert_raises ArgumentError do
|
|
26
|
+
Axlsx::Break.new(:hoge, :max => -1)
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
def test_man
|
|
32
|
+
assert_equal(true, @break.man)
|
|
33
|
+
assert_raises ArgumentError do
|
|
34
|
+
Axlsx::Break.new(:man => -1)
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def test_pt
|
|
39
|
+
assert_equal(false, @break.pt)
|
|
40
|
+
assert_raises ArgumentError do
|
|
41
|
+
Axlsx::Break.new(:pt => -1)
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def test_to_xml_string
|
|
46
|
+
doc = Nokogiri::XML(@break.to_xml_string)
|
|
47
|
+
assert_equal(doc.xpath('//brk[@id="1"][@min="1"][@max="10"][@pt="false"][@man="true"]').size, 1)
|
|
48
|
+
end
|
|
49
|
+
end
|
|
@@ -5,7 +5,7 @@ class TestComment < Test::Unit::TestCase
|
|
|
5
5
|
p = Axlsx::Package.new
|
|
6
6
|
wb = p.workbook
|
|
7
7
|
@ws = wb.add_worksheet
|
|
8
|
-
@c1 = @ws.add_comment :ref => 'A1', :text => '
|
|
8
|
+
@c1 = @ws.add_comment :ref => 'A1', :text => 'text with special char <', :author => 'author with special char <', :visible => false
|
|
9
9
|
@c2 = @ws.add_comment :ref => 'C3', :text => 'rust bucket', :author => 'PO'
|
|
10
10
|
end
|
|
11
11
|
|
|
@@ -14,12 +14,12 @@ class TestComment < Test::Unit::TestCase
|
|
|
14
14
|
end
|
|
15
15
|
|
|
16
16
|
def test_author
|
|
17
|
-
assert(@c1.author == '
|
|
17
|
+
assert(@c1.author == 'author with special char <')
|
|
18
18
|
assert(@c2.author == 'PO')
|
|
19
19
|
end
|
|
20
20
|
|
|
21
21
|
def test_text
|
|
22
|
-
assert(@c1.text == '
|
|
22
|
+
assert(@c1.text == 'text with special char <')
|
|
23
23
|
assert(@c2.text == 'rust bucket')
|
|
24
24
|
end
|
|
25
25
|
|
|
@@ -49,13 +49,24 @@ class TestComment < Test::Unit::TestCase
|
|
|
49
49
|
assert(@c1.vml_shape.bottom_row == pos[1]+4)
|
|
50
50
|
end
|
|
51
51
|
|
|
52
|
-
def
|
|
52
|
+
def test_to_xml_string
|
|
53
53
|
doc = Nokogiri::XML(@c1.to_xml_string)
|
|
54
54
|
assert_equal(doc.xpath("//comment[@ref='#{@c1.ref}']").size, 1)
|
|
55
|
-
assert_equal(doc.xpath("//comment[@authorId='#{@c1.author_index.
|
|
56
|
-
assert_equal(doc.xpath("//t[text()='#{@c1.author}']").size, 1)
|
|
55
|
+
assert_equal(doc.xpath("//comment[@authorId='#{@c1.author_index.to_s}']").size, 1)
|
|
56
|
+
assert_equal(doc.xpath("//t[text()='#{@c1.author}:\n']").size, 1)
|
|
57
57
|
assert_equal(doc.xpath("//t[text()='#{@c1.text}']").size, 1)
|
|
58
58
|
end
|
|
59
59
|
|
|
60
|
+
def test_comment_text_contain_author_and_text
|
|
61
|
+
comment = @ws.add_comment :ref => 'C4', :text => 'some text', :author => 'Bob'
|
|
62
|
+
doc = Nokogiri::XML(comment.to_xml_string)
|
|
63
|
+
assert_equal("Bob:\nsome text", doc.xpath("//comment/text").text)
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
def test_comment_text_does_not_contain_stray_colon_if_author_blank
|
|
67
|
+
comment = @ws.add_comment :ref => 'C5', :text => 'some text', :author => ''
|
|
68
|
+
doc = Nokogiri::XML(comment.to_xml_string)
|
|
69
|
+
assert_equal("some text", doc.xpath("//comment/text").text)
|
|
70
|
+
end
|
|
60
71
|
end
|
|
61
72
|
|
|
@@ -131,9 +131,9 @@ class TestConditionalFormatting < Test::Unit::TestCase
|
|
|
131
131
|
end
|
|
132
132
|
|
|
133
133
|
def test_multiple_formulas
|
|
134
|
-
@ws.add_conditional_formatting "B3:B3", { :type => :cellIs, :dxfId => 0, :priority => 1, :operator => :between, :formula => ["1","5"] }
|
|
134
|
+
@ws.add_conditional_formatting "B3:B3", { :type => :cellIs, :dxfId => 0, :priority => 1, :operator => :between, :formula => ["1 <> 2","5"] }
|
|
135
135
|
doc = Nokogiri::XML.parse(@ws.to_xml_string)
|
|
136
|
-
assert doc.xpath("//xmlns:worksheet/xmlns:conditionalFormatting//xmlns:cfRule[@type='cellIs'][@dxfId=0][@priority=1][@operator='between']//xmlns:formula='1'")
|
|
136
|
+
assert doc.xpath("//xmlns:worksheet/xmlns:conditionalFormatting//xmlns:cfRule[@type='cellIs'][@dxfId=0][@priority=1][@operator='between']//xmlns:formula='1 <> 2'")
|
|
137
137
|
assert doc.xpath("//xmlns:worksheet/xmlns:conditionalFormatting//xmlns:cfRule[@type='cellIs'][@dxfId=0][@priority=1][@operator='between']//xmlns:formula='5'")
|
|
138
138
|
end
|
|
139
139
|
|
|
@@ -113,20 +113,12 @@ class TestDateTimeConverter < Test::Unit::TestCase
|
|
|
113
113
|
def test_timezone
|
|
114
114
|
|
|
115
115
|
utc = Time.utc 2012 # January 1st, 2012 at 0:00 UTC
|
|
116
|
-
|
|
117
|
-
# JRuby makes no assumption on time zone. randym
|
|
118
|
-
#local = begin
|
|
119
|
-
# Time.new 2012, 1, 1, 1, 0, 0, 3600 # January 1st, 2012 at 1:00 GMT+1
|
|
120
|
-
#rescue ArgumentError
|
|
121
|
-
# Time.parse "2012-01-01 01:00:00 +0100"
|
|
122
|
-
#end
|
|
123
|
-
|
|
124
|
-
local = Time.parse "2012-01-01 01:00:00 +0100"
|
|
116
|
+
local = Time.parse "2012-01-01 09:00:00 +0900"
|
|
125
117
|
|
|
126
118
|
assert_equal local, utc
|
|
127
|
-
assert_equal Axlsx::DateTimeConverter::time_to_serial(local),
|
|
119
|
+
assert_equal Axlsx::DateTimeConverter::time_to_serial(local) - local.utc_offset.to_f/86400, Axlsx::DateTimeConverter::time_to_serial(utc)
|
|
128
120
|
Axlsx::Workbook.date1904 = true
|
|
129
|
-
assert_equal Axlsx::DateTimeConverter::time_to_serial(local), Axlsx::DateTimeConverter::time_to_serial(utc)
|
|
121
|
+
assert_equal Axlsx::DateTimeConverter::time_to_serial(local) - local.utc_offset.to_f/86400, Axlsx::DateTimeConverter::time_to_serial(utc)
|
|
130
122
|
end
|
|
131
123
|
|
|
132
124
|
end
|
|
@@ -1,5 +1,17 @@
|
|
|
1
1
|
require 'tc_helper.rb'
|
|
2
2
|
|
|
3
|
+
|
|
4
|
+
def shared_test_pivot_table_xml_validity(pivot_table)
|
|
5
|
+
schema = Nokogiri::XML::Schema(File.open(Axlsx::SML_XSD))
|
|
6
|
+
doc = Nokogiri::XML(pivot_table.to_xml_string)
|
|
7
|
+
errors = []
|
|
8
|
+
schema.validate(doc).each do |error|
|
|
9
|
+
errors.push error
|
|
10
|
+
puts error.message
|
|
11
|
+
end
|
|
12
|
+
assert(errors.empty?, "error free validation")
|
|
13
|
+
end
|
|
14
|
+
|
|
3
15
|
class TestPivotTable < Test::Unit::TestCase
|
|
4
16
|
def setup
|
|
5
17
|
p = Axlsx::Package.new
|
|
@@ -24,8 +36,18 @@ class TestPivotTable < Test::Unit::TestCase
|
|
|
24
36
|
assert_equal(@ws.pivot_tables.last, pivot_table, "must be added to worksheet pivot tables collection")
|
|
25
37
|
end
|
|
26
38
|
|
|
39
|
+
def test_set_pivot_table_data_sheet
|
|
40
|
+
pivot_table = @ws.add_pivot_table('G5:G6', 'A1:D5')
|
|
41
|
+
data_sheet = @ws.clone
|
|
42
|
+
data_sheet.name = "Pivot Table Data Source"
|
|
43
|
+
|
|
44
|
+
assert_equal(pivot_table.data_sheet.name, @ws.name, "must default to the same sheet the pivot table is added to")
|
|
45
|
+
pivot_table.data_sheet = data_sheet
|
|
46
|
+
assert_equal(pivot_table.data_sheet.name, data_sheet.name, "data sheet assigned to pivot table")
|
|
47
|
+
end
|
|
48
|
+
|
|
27
49
|
def test_add_pivot_table_with_config
|
|
28
|
-
pivot_table = @ws.add_pivot_table('G5:G6', 'A1:
|
|
50
|
+
pivot_table = @ws.add_pivot_table('G5:G6', 'A1:E5') do |pt|
|
|
29
51
|
pt.rows = ['Year', 'Month']
|
|
30
52
|
pt.columns = ['Type']
|
|
31
53
|
pt.data = ['Sales']
|
|
@@ -33,8 +55,16 @@ class TestPivotTable < Test::Unit::TestCase
|
|
|
33
55
|
end
|
|
34
56
|
assert_equal(['Year', 'Month'], pivot_table.rows)
|
|
35
57
|
assert_equal(['Type'], pivot_table.columns)
|
|
36
|
-
assert_equal([
|
|
58
|
+
assert_equal([{:ref=>"Sales"}], pivot_table.data)
|
|
37
59
|
assert_equal(['Region'], pivot_table.pages)
|
|
60
|
+
shared_test_pivot_table_xml_validity(pivot_table)
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
def test_add_pivot_table_with_options_on_data_field
|
|
64
|
+
pivot_table = @ws.add_pivot_table('G5:G6', 'A1:D5') do |pt|
|
|
65
|
+
pt.data = [{:ref=>"Sales", :subtotal => 'average'}]
|
|
66
|
+
end
|
|
67
|
+
assert_equal([{:ref=>"Sales", :subtotal => 'average'}], pivot_table.data)
|
|
38
68
|
end
|
|
39
69
|
|
|
40
70
|
def test_header_indices
|
|
@@ -53,11 +83,6 @@ class TestPivotTable < Test::Unit::TestCase
|
|
|
53
83
|
assert_equal(@ws.pivot_tables.first.pn, "pivotTables/pivotTable1.xml")
|
|
54
84
|
end
|
|
55
85
|
|
|
56
|
-
def test_rId
|
|
57
|
-
@ws.add_pivot_table('G5:G6', 'A1:D5')
|
|
58
|
-
assert_equal(@ws.pivot_tables.first.rId, "rId1")
|
|
59
|
-
end
|
|
60
|
-
|
|
61
86
|
def test_index
|
|
62
87
|
@ws.add_pivot_table('G5:G6', 'A1:D5')
|
|
63
88
|
assert_equal(@ws.pivot_tables.first.index, @ws.workbook.pivot_tables.index(@ws.pivot_tables.first))
|
|
@@ -73,14 +98,7 @@ class TestPivotTable < Test::Unit::TestCase
|
|
|
73
98
|
|
|
74
99
|
def test_to_xml_string
|
|
75
100
|
pivot_table = @ws.add_pivot_table('G5:G6', 'A1:D5')
|
|
76
|
-
|
|
77
|
-
doc = Nokogiri::XML(pivot_table.to_xml_string)
|
|
78
|
-
errors = []
|
|
79
|
-
schema.validate(doc).each do |error|
|
|
80
|
-
errors.push error
|
|
81
|
-
puts error.message
|
|
82
|
-
end
|
|
83
|
-
assert(errors.empty?, "error free validation")
|
|
101
|
+
shared_test_pivot_table_xml_validity(pivot_table)
|
|
84
102
|
end
|
|
85
103
|
|
|
86
104
|
def test_to_xml_string_with_configuration
|
|
@@ -90,13 +108,13 @@ class TestPivotTable < Test::Unit::TestCase
|
|
|
90
108
|
pt.data = ['Sales']
|
|
91
109
|
pt.pages = ['Region']
|
|
92
110
|
end
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
111
|
+
shared_test_pivot_table_xml_validity(pivot_table)
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
def test_to_xml_string_with_options_on_data_field
|
|
115
|
+
pivot_table = @ws.add_pivot_table('G5:G6', 'A1:E5') do |pt|
|
|
116
|
+
pt.data = [{:ref=>"Sales", :subtotal => 'average'}]
|
|
99
117
|
end
|
|
100
|
-
|
|
118
|
+
shared_test_pivot_table_xml_validity(pivot_table)
|
|
101
119
|
end
|
|
102
120
|
end
|
|
@@ -21,7 +21,7 @@ class TestPivotTableCacheDefinition < Test::Unit::TestCase
|
|
|
21
21
|
end
|
|
22
22
|
|
|
23
23
|
def test_rId
|
|
24
|
-
assert_equal(
|
|
24
|
+
assert_equal @pivot_table.relationships.for(@cache_definition).Id, @cache_definition.rId
|
|
25
25
|
end
|
|
26
26
|
|
|
27
27
|
def test_index
|
|
@@ -32,6 +32,14 @@ class TestPivotTableCacheDefinition < Test::Unit::TestCase
|
|
|
32
32
|
assert_equal(1, @cache_definition.cache_id)
|
|
33
33
|
end
|
|
34
34
|
|
|
35
|
+
def test_data_sheet
|
|
36
|
+
data_sheet = @ws.clone
|
|
37
|
+
data_sheet.name = "Pivot Table Data Source"
|
|
38
|
+
@pivot_table.data_sheet = data_sheet
|
|
39
|
+
|
|
40
|
+
assert(@cache_definition.to_xml_string.include?(data_sheet.name), "must set the data source correctly")
|
|
41
|
+
end
|
|
42
|
+
|
|
35
43
|
def test_to_xml_string
|
|
36
44
|
schema = Nokogiri::XML::Schema(File.open(Axlsx::SML_XSD))
|
|
37
45
|
doc = Nokogiri::XML(@cache_definition.to_xml_string)
|
|
@@ -5,207 +5,207 @@ require 'tc_helper.rb'
|
|
|
5
5
|
class TestSheetView < Test::Unit::TestCase
|
|
6
6
|
def setup
|
|
7
7
|
#inverse defaults for booleans
|
|
8
|
-
@boolean_options = { :right_to_left => true, :show_formulas => true, :show_outline_symbols => true,
|
|
8
|
+
@boolean_options = { :right_to_left => true, :show_formulas => true, :show_outline_symbols => true,
|
|
9
9
|
:show_white_space => true, :tab_selected => true, :default_grid_color => false, :show_grid_lines => false,
|
|
10
10
|
:show_row_col_headers => false, :show_ruler => false, :show_zeros => false, :window_protection => true }
|
|
11
11
|
@symbol_options = { :view => :page_break_preview }
|
|
12
12
|
@nil_options = { :color_id => 2, :top_left_cell => 'A2' }
|
|
13
13
|
@int_0 = { :zoom_scale_normal => 100, :zoom_scale_page_layout_view => 100, :zoom_scale_sheet_layout_view => 100, :workbook_view_id => 2 }
|
|
14
14
|
@int_100 = { :zoom_scale => 10 }
|
|
15
|
-
|
|
15
|
+
|
|
16
16
|
@integer_options = { :color_id => 2, :workbook_view_id => 2 }.merge(@int_0).merge(@int_100)
|
|
17
17
|
@string_options = { :top_left_cell => 'A2' }
|
|
18
|
-
|
|
19
|
-
|
|
18
|
+
|
|
19
|
+
|
|
20
20
|
@options = @boolean_options.merge(@boolean_options).merge(@symbol_options).merge(@nil_options).merge(@int_0).merge(@int_100)
|
|
21
|
-
|
|
21
|
+
|
|
22
22
|
@sv = Axlsx::SheetView.new(@options)
|
|
23
23
|
end
|
|
24
|
-
|
|
24
|
+
|
|
25
25
|
def test_initialize
|
|
26
26
|
sv = Axlsx::SheetView.new
|
|
27
|
-
|
|
27
|
+
|
|
28
28
|
@boolean_options.each do |key, value|
|
|
29
29
|
assert_equal(!value, sv.send(key.to_sym), "initialized default #{key} should be #{!value}")
|
|
30
30
|
assert_equal(value, @sv.send(key.to_sym), "initialized options #{key} should be #{value}")
|
|
31
31
|
end
|
|
32
|
-
|
|
32
|
+
|
|
33
33
|
@nil_options.each do |key, value|
|
|
34
34
|
assert_equal(nil, sv.send(key.to_sym), "initialized default #{key} should be nil")
|
|
35
35
|
assert_equal(value, @sv.send(key.to_sym), "initialized options #{key} should be #{value}")
|
|
36
36
|
end
|
|
37
|
-
|
|
37
|
+
|
|
38
38
|
@int_0.each do |key, value|
|
|
39
39
|
assert_equal(0, sv.send(key.to_sym), "initialized default #{key} should be 0")
|
|
40
40
|
assert_equal(value, @sv.send(key.to_sym), "initialized options #{key} should be #{value}")
|
|
41
41
|
end
|
|
42
|
-
|
|
42
|
+
|
|
43
43
|
@int_100.each do |key, value|
|
|
44
44
|
assert_equal(100, sv.send(key.to_sym), "initialized default #{key} should be 100")
|
|
45
45
|
assert_equal(value, @sv.send(key.to_sym), "initialized options #{key} should be #{value}")
|
|
46
46
|
end
|
|
47
47
|
end
|
|
48
|
-
|
|
48
|
+
|
|
49
49
|
def test_boolean_attribute_validation
|
|
50
50
|
@boolean_options.each do |key, value|
|
|
51
51
|
assert_raise(ArgumentError, "#{key} must be boolean") { @sv.send("#{key}=".to_sym, 'A') }
|
|
52
52
|
assert_nothing_raised { @sv.send("#{key}=".to_sym, true) }
|
|
53
53
|
end
|
|
54
54
|
end
|
|
55
|
-
|
|
55
|
+
|
|
56
56
|
def test_string_attribute_validation
|
|
57
57
|
@string_options.each do |key, value|
|
|
58
58
|
assert_raise(ArgumentError, "#{key} must be string") { @sv.send("#{key}=".to_sym, :symbol) }
|
|
59
59
|
assert_nothing_raised { @sv.send("#{key}=".to_sym, "foo") }
|
|
60
60
|
end
|
|
61
61
|
end
|
|
62
|
-
|
|
62
|
+
|
|
63
63
|
def test_symbol_attribute_validation
|
|
64
64
|
@symbol_options.each do |key, value|
|
|
65
65
|
assert_raise(ArgumentError, "#{key} must be symbol") { @sv.send("#{key}=".to_sym, "foo") }
|
|
66
66
|
assert_nothing_raised { @sv.send("#{key}=".to_sym, value) }
|
|
67
67
|
end
|
|
68
68
|
end
|
|
69
|
-
|
|
69
|
+
|
|
70
70
|
def test_integer_attribute_validation
|
|
71
71
|
@integer_options.each do |key, value|
|
|
72
72
|
assert_raise(ArgumentError, "#{key} must be integer") { @sv.send("#{key}=".to_sym, "foo") }
|
|
73
73
|
assert_nothing_raised { @sv.send("#{key}=".to_sym, value) }
|
|
74
74
|
end
|
|
75
75
|
end
|
|
76
|
-
|
|
76
|
+
|
|
77
77
|
def test_color_id
|
|
78
78
|
assert_raise(ArgumentError) { @sv.color_id = "10" }
|
|
79
79
|
assert_nothing_raised { @sv.color_id = 2 }
|
|
80
80
|
assert_equal(@sv.color_id, 2)
|
|
81
81
|
end
|
|
82
|
-
|
|
82
|
+
|
|
83
83
|
def test_default_grid_color
|
|
84
84
|
assert_raise(ArgumentError) { @sv.default_grid_color = "foo" }
|
|
85
85
|
assert_nothing_raised { @sv.default_grid_color = false }
|
|
86
86
|
assert_equal(@sv.default_grid_color, false)
|
|
87
87
|
end
|
|
88
|
-
|
|
88
|
+
|
|
89
89
|
def test_right_to_left
|
|
90
90
|
assert_raise(ArgumentError) { @sv.right_to_left = "foo´" }
|
|
91
91
|
assert_nothing_raised { @sv.right_to_left = true }
|
|
92
92
|
assert_equal(@sv.right_to_left, true)
|
|
93
93
|
end
|
|
94
|
-
|
|
94
|
+
|
|
95
95
|
def test_show_formulas
|
|
96
96
|
assert_raise(ArgumentError) { @sv.show_formulas = 'foo' }
|
|
97
97
|
assert_nothing_raised { @sv.show_formulas = false }
|
|
98
98
|
assert_equal(@sv.show_formulas, false)
|
|
99
99
|
end
|
|
100
|
-
|
|
100
|
+
|
|
101
101
|
def test_show_grid_lines
|
|
102
102
|
assert_raise(ArgumentError) { @sv.show_grid_lines = "foo" }
|
|
103
103
|
assert_nothing_raised { @sv.show_grid_lines = false }
|
|
104
104
|
assert_equal(@sv.show_grid_lines, false)
|
|
105
105
|
end
|
|
106
|
-
|
|
106
|
+
|
|
107
107
|
def test_show_outline_symbols
|
|
108
108
|
assert_raise(ArgumentError) { @sv.show_outline_symbols = 'foo' }
|
|
109
109
|
assert_nothing_raised { @sv.show_outline_symbols = false }
|
|
110
110
|
assert_equal(@sv.show_outline_symbols, false)
|
|
111
111
|
end
|
|
112
|
-
|
|
112
|
+
|
|
113
113
|
def test_show_row_col_headers
|
|
114
114
|
assert_raise(ArgumentError) { @sv.show_row_col_headers = "foo" }
|
|
115
115
|
assert_nothing_raised { @sv.show_row_col_headers = false }
|
|
116
116
|
assert_equal(@sv.show_row_col_headers, false)
|
|
117
117
|
end
|
|
118
|
-
|
|
118
|
+
|
|
119
119
|
def test_show_ruler
|
|
120
120
|
assert_raise(ArgumentError) { @sv.show_ruler = 'foo' }
|
|
121
121
|
assert_nothing_raised { @sv.show_ruler = false }
|
|
122
122
|
assert_equal(@sv.show_ruler, false)
|
|
123
123
|
end
|
|
124
|
-
|
|
124
|
+
|
|
125
125
|
def test_show_white_space
|
|
126
126
|
assert_raise(ArgumentError) { @sv.show_white_space = 'foo' }
|
|
127
127
|
assert_nothing_raised { @sv.show_white_space = false }
|
|
128
128
|
assert_equal(@sv.show_white_space, false)
|
|
129
129
|
end
|
|
130
|
-
|
|
130
|
+
|
|
131
131
|
def test_show_zeros
|
|
132
132
|
assert_raise(ArgumentError) { @sv.show_zeros = "foo" }
|
|
133
133
|
assert_nothing_raised { @sv.show_zeros = false }
|
|
134
134
|
assert_equal(@sv.show_zeros, false)
|
|
135
135
|
end
|
|
136
|
-
|
|
136
|
+
|
|
137
137
|
def test_tab_selected
|
|
138
138
|
assert_raise(ArgumentError) { @sv.tab_selected = "foo" }
|
|
139
139
|
assert_nothing_raised { @sv.tab_selected = false }
|
|
140
140
|
assert_equal(@sv.tab_selected, false)
|
|
141
141
|
end
|
|
142
|
-
|
|
142
|
+
|
|
143
143
|
def test_top_left_cell
|
|
144
144
|
assert_raise(ArgumentError) { @sv.top_left_cell = :cell_adress }
|
|
145
145
|
assert_nothing_raised { @sv.top_left_cell = "A2" }
|
|
146
146
|
assert_equal(@sv.top_left_cell, "A2")
|
|
147
147
|
end
|
|
148
|
-
|
|
148
|
+
|
|
149
149
|
def test_view
|
|
150
150
|
assert_raise(ArgumentError) { @sv.view = 'view' }
|
|
151
151
|
assert_nothing_raised { @sv.view = :page_break_preview }
|
|
152
152
|
assert_equal(@sv.view, :page_break_preview)
|
|
153
153
|
end
|
|
154
|
-
|
|
154
|
+
|
|
155
155
|
def test_window_protection
|
|
156
156
|
assert_raise(ArgumentError) { @sv.window_protection = "foo" }
|
|
157
157
|
assert_nothing_raised { @sv.window_protection = false }
|
|
158
158
|
assert_equal(@sv.window_protection, false)
|
|
159
159
|
end
|
|
160
|
-
|
|
160
|
+
|
|
161
161
|
def test_workbook_view_id
|
|
162
162
|
assert_raise(ArgumentError) { @sv.workbook_view_id = "1" }
|
|
163
163
|
assert_nothing_raised { @sv.workbook_view_id = 1 }
|
|
164
164
|
assert_equal(@sv.workbook_view_id, 1)
|
|
165
165
|
end
|
|
166
|
-
|
|
166
|
+
|
|
167
167
|
def test_zoom_scale
|
|
168
168
|
assert_raise(ArgumentError) { @sv.zoom_scale = "50" }
|
|
169
169
|
assert_nothing_raised { @sv.zoom_scale = 50 }
|
|
170
170
|
assert_equal(@sv.zoom_scale, 50)
|
|
171
171
|
end
|
|
172
|
-
|
|
172
|
+
|
|
173
173
|
def test_zoom_scale_normal
|
|
174
174
|
assert_raise(ArgumentError) { @sv.zoom_scale_normal = "50" }
|
|
175
175
|
assert_nothing_raised { @sv.zoom_scale_normal = 50 }
|
|
176
176
|
assert_equal(@sv.zoom_scale_normal, 50)
|
|
177
177
|
end
|
|
178
|
-
|
|
178
|
+
|
|
179
179
|
def test_zoom_scale_page_layout_view
|
|
180
180
|
assert_raise(ArgumentError) { @sv.zoom_scale_page_layout_view = "50" }
|
|
181
181
|
assert_nothing_raised { @sv.zoom_scale_page_layout_view = 50 }
|
|
182
182
|
assert_equal(@sv.zoom_scale_page_layout_view, 50)
|
|
183
183
|
end
|
|
184
|
-
|
|
184
|
+
|
|
185
185
|
def test_zoom_scale_sheet_layout_view
|
|
186
186
|
assert_raise(ArgumentError) { @sv.zoom_scale_sheet_layout_view = "50" }
|
|
187
187
|
assert_nothing_raised { @sv.zoom_scale_sheet_layout_view = 50 }
|
|
188
188
|
assert_equal(@sv.zoom_scale_sheet_layout_view, 50)
|
|
189
189
|
end
|
|
190
|
-
|
|
190
|
+
|
|
191
191
|
def test_to_xml
|
|
192
192
|
p = Axlsx::Package.new
|
|
193
193
|
@ws = p.workbook.add_worksheet :name => "sheetview"
|
|
194
194
|
@ws.sheet_view do |vs|
|
|
195
195
|
vs.view = :page_break_preview
|
|
196
196
|
end
|
|
197
|
-
|
|
197
|
+
|
|
198
198
|
doc = Nokogiri::XML.parse(@ws.sheet_view.to_xml_string)
|
|
199
|
-
|
|
199
|
+
|
|
200
200
|
assert_equal(1, doc.xpath("//sheetView[@tabSelected='false']").size)
|
|
201
|
-
|
|
201
|
+
|
|
202
202
|
assert_equal(1, doc.xpath("//sheetView[@tabSelected='false'][@showWhiteSpace='false'][@showOutlineSymbols='false'][@showFormulas='false']
|
|
203
203
|
[@rightToLeft='false'][@windowProtection='false'][@showZeros='true'][@showRuler='true']
|
|
204
204
|
[@showRowColHeaders='true'][@showGridLines='true'][@defaultGridColor='true']
|
|
205
205
|
[@zoomScale='100'][@workbookViewId='0'][@zoomScaleSheetLayoutView='0'][@zoomScalePageLayoutView='0']
|
|
206
|
-
[@zoomScaleNormal='0'][@view='
|
|
206
|
+
[@zoomScaleNormal='0'][@view='pageBreakPreview']").size)
|
|
207
207
|
end
|
|
208
|
-
|
|
208
|
+
|
|
209
209
|
def test_add_selection
|
|
210
210
|
@sv.add_selection(:top_left, :active_cell => "A1")
|
|
211
211
|
assert_equal('A1', @sv.selections[:top_left].active_cell)
|