axlsx 1.1.6 → 1.2.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.
- data/.yardopts +5 -2
- data/CHANGELOG.md +39 -0
- data/README.md +97 -46
- data/Rakefile +3 -2
- data/examples/basic_charts.rb +54 -0
- data/examples/chart_colors.rb +18 -3
- data/examples/example.rb +118 -42
- data/examples/example.xlsx +0 -0
- data/examples/example_streamed.xlsx +0 -0
- data/examples/extractive.pdf +0 -0
- data/examples/no-use_autowidth.xlsx +0 -0
- data/examples/scraping_html.rb +91 -0
- data/examples/shared_strings_example.xlsx +0 -0
- data/examples/sheet_view.rb +34 -0
- data/lib/axlsx/content_type/content_type.rb +2 -0
- data/lib/axlsx/content_type/default.rb +21 -12
- data/lib/axlsx/content_type/override.rb +22 -11
- data/lib/axlsx/doc_props/app.rb +36 -32
- data/lib/axlsx/doc_props/core.rb +9 -5
- data/lib/axlsx/drawing/ax_data_source.rb +7 -6
- data/lib/axlsx/drawing/axis.rb +64 -25
- data/lib/axlsx/drawing/bar_3D_chart.rb +49 -45
- data/lib/axlsx/drawing/bar_series.rb +1 -0
- data/lib/axlsx/drawing/cat_axis.rb +43 -39
- data/lib/axlsx/drawing/chart.rb +65 -54
- data/lib/axlsx/drawing/d_lbls.rb +100 -0
- data/lib/axlsx/drawing/drawing.rb +7 -5
- data/lib/axlsx/drawing/graphic_frame.rb +2 -2
- data/lib/axlsx/drawing/line_3D_chart.rb +3 -10
- data/lib/axlsx/drawing/num_data.rb +2 -2
- data/lib/axlsx/drawing/num_data_source.rb +1 -1
- data/lib/axlsx/drawing/pie_3D_chart.rb +10 -7
- data/lib/axlsx/drawing/scatter_chart.rb +2 -8
- data/lib/axlsx/drawing/title.rb +21 -9
- data/lib/axlsx/drawing/two_cell_anchor.rb +41 -9
- data/lib/axlsx/drawing/view_3D.rb +41 -31
- data/lib/axlsx/drawing/vml_drawing.rb +1 -1
- data/lib/axlsx/package.rb +20 -16
- data/lib/axlsx/rels/relationship.rb +3 -3
- data/lib/axlsx/stylesheet/styles.rb +1 -1
- data/lib/axlsx/util/constants.rb +4 -0
- data/lib/axlsx/util/simple_typed_list.rb +15 -8
- data/lib/axlsx/util/validators.rb +28 -4
- data/lib/axlsx/version.rb +2 -7
- data/lib/axlsx/workbook/defined_name.rb +174 -0
- data/lib/axlsx/workbook/defined_names.rb +21 -0
- data/lib/axlsx/workbook/workbook.rb +46 -17
- data/lib/axlsx/workbook/worksheet/auto_filter.rb +34 -0
- data/lib/axlsx/workbook/worksheet/cell.rb +28 -1
- data/lib/axlsx/workbook/worksheet/col.rb +15 -0
- data/lib/axlsx/workbook/worksheet/cols.rb +20 -0
- data/lib/axlsx/workbook/worksheet/comments.rb +8 -0
- data/lib/axlsx/workbook/worksheet/conditional_formattings.rb +25 -0
- data/lib/axlsx/workbook/worksheet/data_bar.rb +1 -1
- data/lib/axlsx/workbook/worksheet/data_validations.rb +28 -0
- data/lib/axlsx/workbook/worksheet/dimension.rb +65 -0
- data/lib/axlsx/workbook/worksheet/merged_cells.rb +35 -0
- data/lib/axlsx/workbook/worksheet/page_setup.rb +10 -1
- data/lib/axlsx/workbook/worksheet/pane.rb +144 -0
- data/lib/axlsx/workbook/worksheet/protected_range.rb +46 -0
- data/lib/axlsx/workbook/worksheet/protected_ranges.rb +34 -0
- data/lib/axlsx/workbook/worksheet/row.rb +1 -1
- data/lib/axlsx/workbook/worksheet/selection.rb +111 -0
- data/lib/axlsx/workbook/worksheet/sheet_data.rb +25 -0
- data/lib/axlsx/workbook/worksheet/sheet_pr.rb +24 -0
- data/lib/axlsx/workbook/worksheet/sheet_view.rb +379 -0
- data/lib/axlsx/workbook/worksheet/tables.rb +31 -0
- data/lib/axlsx/workbook/worksheet/worksheet.rb +315 -291
- data/lib/axlsx/workbook/worksheet/worksheet_comments.rb +57 -0
- data/lib/axlsx/workbook/worksheet/worksheet_drawing.rb +64 -0
- data/lib/axlsx.rb +24 -16
- data/test/content_type/tc_content_type.rb +1 -6
- data/test/doc_props/tc_core.rb +1 -1
- data/test/drawing/tc_axis.rb +27 -2
- data/test/drawing/tc_bar_3D_chart.rb +12 -12
- data/test/drawing/tc_bar_series.rb +1 -2
- data/test/drawing/tc_cat_axis.rb +3 -3
- data/test/drawing/tc_chart.rb +8 -6
- data/test/drawing/tc_d_lbls.rb +47 -0
- data/test/drawing/tc_drawing.rb +5 -4
- data/test/drawing/tc_line_series.rb +1 -1
- data/test/drawing/tc_num_data.rb +5 -1
- data/test/drawing/tc_pie_3D_chart.rb +4 -8
- data/test/drawing/tc_pie_series.rb +1 -1
- data/test/drawing/tc_scatter_series.rb +1 -1
- data/test/drawing/tc_series.rb +1 -1
- data/test/drawing/tc_title.rb +16 -0
- data/test/drawing/tc_view_3D.rb +18 -18
- data/test/tc_package.rb +41 -4
- data/test/util/tc_validators.rb +68 -11
- data/test/workbook/tc_defined_name.rb +41 -0
- data/test/workbook/tc_workbook.rb +5 -3
- data/test/workbook/worksheet/table/tc_table.rb +0 -8
- data/test/workbook/worksheet/tc_cell.rb +2 -4
- data/test/workbook/worksheet/tc_page_setup.rb +20 -3
- data/test/workbook/worksheet/tc_pane.rb +94 -0
- data/test/workbook/worksheet/tc_protected_range.rb +17 -0
- data/test/workbook/worksheet/tc_row.rb +2 -2
- data/test/workbook/worksheet/tc_selection.rb +94 -0
- data/test/workbook/worksheet/tc_sheet_view.rb +214 -0
- data/test/workbook/worksheet/tc_worksheet.rb +53 -41
- metadata +104 -97
- data/examples/chart_colors.xlsx +0 -0
- data/examples/conditional_formatting/getting_barred.xlsx +0 -0
- data/examples/doc/_index.html +0 -84
- data/examples/doc/class_list.html +0 -47
- data/examples/doc/css/common.css +0 -1
- data/examples/doc/css/full_list.css +0 -55
- data/examples/doc/css/style.css +0 -322
- data/examples/doc/file_list.html +0 -46
- data/examples/doc/frames.html +0 -13
- data/examples/doc/index.html +0 -84
- data/examples/doc/js/app.js +0 -205
- data/examples/doc/js/full_list.js +0 -173
- data/examples/doc/js/jquery.js +0 -16
- data/examples/doc/method_list.html +0 -46
- data/examples/doc/top-level-namespace.html +0 -95
- data/examples/examples_saved.xlsx +0 -0
- data/examples/fish.xlsx +0 -0
- data/examples/pareto.rb +0 -28
- data/examples/pareto.xlsx +0 -0
- data/examples/pie_chart.rb +0 -16
- data/examples/pie_chart.xlsx +0 -0
- data/examples/pie_chart_saved.xlsx +0 -0
- data/examples/sheet_protection.xlsx +0 -0
- data/examples/two_cell_anchor_image.xlsx +0 -0
- data/examples/~$pie_chart_saved.xlsx +0 -0
- data/lib/axlsx/drawing/ax_data_source.rb~ +0 -55
- data/lib/axlsx/drawing/data_source.rb~ +0 -51
- data/lib/axlsx/drawing/hlink_click.rb~ +0 -0
- data/lib/axlsx/drawing/hyperlink.rb~ +0 -64
- data/lib/axlsx/drawing/num_data.rb~ +0 -51
- data/lib/axlsx/drawing/num_data_source.rb~ +0 -54
- data/lib/axlsx/drawing/num_val.rb~ +0 -40
- data/lib/axlsx/drawing/picture_locking.rb~ +0 -36
- data/lib/axlsx/drawing/ref.rb~ +0 -41
- data/lib/axlsx/drawing/str_data.rb~ +0 -58
- data/lib/axlsx/drawing/str_val.rb~ +0 -35
- data/lib/axlsx/drawing/vml_drawing.rb~ +0 -6
- data/lib/axlsx/drawing/vml_shape.rb~ +0 -61
- data/lib/axlsx/util/cbf.rb +0 -333
- data/lib/axlsx/util/cfb.rb~ +0 -201
- data/lib/axlsx/util/font_tables.rb~ +0 -0
- data/lib/axlsx/util/ms_off_crypto.rb +0 -189
- data/lib/axlsx/util/ms_off_crypto.rb~ +0 -3
- data/lib/axlsx/util/ms_offcrypto.rb~ +0 -0
- data/lib/axlsx/util/parser.rb~ +0 -6
- data/lib/axlsx/util/storage.rb~ +0 -0
- data/lib/axlsx/workbook/shared_strings_table.rb~ +0 -69
- data/lib/axlsx/workbook/worksheet/cfvo.rb~ +0 -0
- data/lib/axlsx/workbook/worksheet/col.rb~ +0 -0
- data/lib/axlsx/workbook/worksheet/color_scale.rb~ +0 -46
- data/lib/axlsx/workbook/worksheet/comment.rb~ +0 -91
- data/lib/axlsx/workbook/worksheet/comments.rb~ +0 -86
- data/lib/axlsx/workbook/worksheet/data_bar.rb~ +0 -0
- data/lib/axlsx/workbook/worksheet/icon_set.rb~ +0 -95
- data/lib/axlsx/workbook/worksheet/shared_strings_table.rb~ +0 -0
- data/lib/axlsx/workbook/worksheet/table.rb~ +0 -97
- data/lib/schema/dc.xsd~ +0 -118
- data/lib/schema/dcterms.xsd~ +0 -331
- data/lib/schema/opc-coreProperties.xsd~ +0 -50
- data/test/drawing/tc_data_source.rb~ +0 -30
- data/test/drawing/tc_num_data.rb~ +0 -35
- data/test/drawing/tc_num_val.rb~ +0 -29
- data/test/drawing/tc_str_data.rb~ +0 -30
- data/test/drawing/tc_str_val.rb~ +0 -26
- data/test/drawing/tc_vml_drawing.rb~ +0 -0
- data/test/workbook/worksheet/table/tc_table.rb~ +0 -72
- data/test/workbook/worksheet/tc_cfvo.rb~ +0 -20
- data/test/workbook/worksheet/tc_col.rb~ +0 -10
- data/test/workbook/worksheet/tc_color_scale.rb~ +0 -0
- data/test/workbook/worksheet/tc_data_bar.rb~ +0 -0
- data/test/workbook/worksheet/tc_icon_set.rb~ +0 -0
|
@@ -0,0 +1,214 @@
|
|
|
1
|
+
# encoding: UTF-8
|
|
2
|
+
$LOAD_PATH.unshift "#{File.dirname(__FILE__)}/../../"
|
|
3
|
+
require 'tc_helper.rb'
|
|
4
|
+
|
|
5
|
+
class TestSheetView < Test::Unit::TestCase
|
|
6
|
+
def setup
|
|
7
|
+
#inverse defaults for booleans
|
|
8
|
+
@boolean_options = { :right_to_left => true, :show_formulas => true, :show_outline_symbols => true,
|
|
9
|
+
:show_white_space => true, :tab_selected => true, :default_grid_color => false, :show_grid_lines => false,
|
|
10
|
+
:show_row_col_headers => false, :show_ruler => false, :show_zeros => false, :window_protection => true }
|
|
11
|
+
@symbol_options = { :view => :page_break_preview }
|
|
12
|
+
@nil_options = { :color_id => 2, :top_left_cell => 'A2' }
|
|
13
|
+
@int_0 = { :zoom_scale_normal => 100, :zoom_scale_page_layout_view => 100, :zoom_scale_sheet_layout_view => 100, :workbook_view_id => 2 }
|
|
14
|
+
@int_100 = { :zoom_scale => 10 }
|
|
15
|
+
|
|
16
|
+
@integer_options = { :color_id => 2, :workbook_view_id => 2 }.merge(@int_0).merge(@int_100)
|
|
17
|
+
@string_options = { :top_left_cell => 'A2' }
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
@options = @boolean_options.merge(@boolean_options).merge(@symbol_options).merge(@nil_options).merge(@int_0).merge(@int_100)
|
|
21
|
+
|
|
22
|
+
@sv = Axlsx::SheetView.new(@options)
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def test_initialize
|
|
26
|
+
sv = Axlsx::SheetView.new
|
|
27
|
+
|
|
28
|
+
@boolean_options.each do |key, value|
|
|
29
|
+
assert_equal(!value, sv.send(key.to_sym), "initialized default #{key} should be #{!value}")
|
|
30
|
+
assert_equal(value, @sv.send(key.to_sym), "initialized options #{key} should be #{value}")
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
@nil_options.each do |key, value|
|
|
34
|
+
assert_equal(nil, sv.send(key.to_sym), "initialized default #{key} should be nil")
|
|
35
|
+
assert_equal(value, @sv.send(key.to_sym), "initialized options #{key} should be #{value}")
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
@int_0.each do |key, value|
|
|
39
|
+
assert_equal(0, sv.send(key.to_sym), "initialized default #{key} should be 0")
|
|
40
|
+
assert_equal(value, @sv.send(key.to_sym), "initialized options #{key} should be #{value}")
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
@int_100.each do |key, value|
|
|
44
|
+
assert_equal(100, sv.send(key.to_sym), "initialized default #{key} should be 100")
|
|
45
|
+
assert_equal(value, @sv.send(key.to_sym), "initialized options #{key} should be #{value}")
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
def test_boolean_attribute_validation
|
|
50
|
+
@boolean_options.each do |key, value|
|
|
51
|
+
assert_raise(ArgumentError, "#{key} must be boolean") { @sv.send("#{key}=".to_sym, 'A') }
|
|
52
|
+
assert_nothing_raised { @sv.send("#{key}=".to_sym, true) }
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
def test_string_attribute_validation
|
|
57
|
+
@string_options.each do |key, value|
|
|
58
|
+
assert_raise(ArgumentError, "#{key} must be string") { @sv.send("#{key}=".to_sym, :symbol) }
|
|
59
|
+
assert_nothing_raised { @sv.send("#{key}=".to_sym, "foo") }
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
def test_symbol_attribute_validation
|
|
64
|
+
@symbol_options.each do |key, value|
|
|
65
|
+
assert_raise(ArgumentError, "#{key} must be symbol") { @sv.send("#{key}=".to_sym, "foo") }
|
|
66
|
+
assert_nothing_raised { @sv.send("#{key}=".to_sym, value) }
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
def test_integer_attribute_validation
|
|
71
|
+
@integer_options.each do |key, value|
|
|
72
|
+
assert_raise(ArgumentError, "#{key} must be integer") { @sv.send("#{key}=".to_sym, "foo") }
|
|
73
|
+
assert_nothing_raised { @sv.send("#{key}=".to_sym, value) }
|
|
74
|
+
end
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
def test_color_id
|
|
78
|
+
assert_raise(ArgumentError) { @sv.color_id = "10" }
|
|
79
|
+
assert_nothing_raised { @sv.color_id = 2 }
|
|
80
|
+
assert_equal(@sv.color_id, 2)
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
def test_default_grid_color
|
|
84
|
+
assert_raise(ArgumentError) { @sv.default_grid_color = "foo" }
|
|
85
|
+
assert_nothing_raised { @sv.default_grid_color = false }
|
|
86
|
+
assert_equal(@sv.default_grid_color, false)
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
def test_right_to_left
|
|
90
|
+
assert_raise(ArgumentError) { @sv.right_to_left = "foo´" }
|
|
91
|
+
assert_nothing_raised { @sv.right_to_left = true }
|
|
92
|
+
assert_equal(@sv.right_to_left, true)
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
def test_show_formulas
|
|
96
|
+
assert_raise(ArgumentError) { @sv.show_formulas = 'foo' }
|
|
97
|
+
assert_nothing_raised { @sv.show_formulas = false }
|
|
98
|
+
assert_equal(@sv.show_formulas, false)
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
def test_show_grid_lines
|
|
102
|
+
assert_raise(ArgumentError) { @sv.show_grid_lines = "foo" }
|
|
103
|
+
assert_nothing_raised { @sv.show_grid_lines = false }
|
|
104
|
+
assert_equal(@sv.show_grid_lines, false)
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
def test_show_outline_symbols
|
|
108
|
+
assert_raise(ArgumentError) { @sv.show_outline_symbols = 'foo' }
|
|
109
|
+
assert_nothing_raised { @sv.show_outline_symbols = false }
|
|
110
|
+
assert_equal(@sv.show_outline_symbols, false)
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
def test_show_row_col_headers
|
|
114
|
+
assert_raise(ArgumentError) { @sv.show_row_col_headers = "foo" }
|
|
115
|
+
assert_nothing_raised { @sv.show_row_col_headers = false }
|
|
116
|
+
assert_equal(@sv.show_row_col_headers, false)
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
def test_show_ruler
|
|
120
|
+
assert_raise(ArgumentError) { @sv.show_ruler = 'foo' }
|
|
121
|
+
assert_nothing_raised { @sv.show_ruler = false }
|
|
122
|
+
assert_equal(@sv.show_ruler, false)
|
|
123
|
+
end
|
|
124
|
+
|
|
125
|
+
def test_show_white_space
|
|
126
|
+
assert_raise(ArgumentError) { @sv.show_white_space = 'foo' }
|
|
127
|
+
assert_nothing_raised { @sv.show_white_space = false }
|
|
128
|
+
assert_equal(@sv.show_white_space, false)
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
def test_show_zeros
|
|
132
|
+
assert_raise(ArgumentError) { @sv.show_zeros = "foo" }
|
|
133
|
+
assert_nothing_raised { @sv.show_zeros = false }
|
|
134
|
+
assert_equal(@sv.show_zeros, false)
|
|
135
|
+
end
|
|
136
|
+
|
|
137
|
+
def test_tab_selected
|
|
138
|
+
assert_raise(ArgumentError) { @sv.tab_selected = "foo" }
|
|
139
|
+
assert_nothing_raised { @sv.tab_selected = false }
|
|
140
|
+
assert_equal(@sv.tab_selected, false)
|
|
141
|
+
end
|
|
142
|
+
|
|
143
|
+
def test_top_left_cell
|
|
144
|
+
assert_raise(ArgumentError) { @sv.top_left_cell = :cell_adress }
|
|
145
|
+
assert_nothing_raised { @sv.top_left_cell = "A2" }
|
|
146
|
+
assert_equal(@sv.top_left_cell, "A2")
|
|
147
|
+
end
|
|
148
|
+
|
|
149
|
+
def test_view
|
|
150
|
+
assert_raise(ArgumentError) { @sv.view = 'view' }
|
|
151
|
+
assert_nothing_raised { @sv.view = :page_break_preview }
|
|
152
|
+
assert_equal(@sv.view, :page_break_preview)
|
|
153
|
+
end
|
|
154
|
+
|
|
155
|
+
def test_window_protection
|
|
156
|
+
assert_raise(ArgumentError) { @sv.window_protection = "foo" }
|
|
157
|
+
assert_nothing_raised { @sv.window_protection = false }
|
|
158
|
+
assert_equal(@sv.window_protection, false)
|
|
159
|
+
end
|
|
160
|
+
|
|
161
|
+
def test_workbook_view_id
|
|
162
|
+
assert_raise(ArgumentError) { @sv.workbook_view_id = "1" }
|
|
163
|
+
assert_nothing_raised { @sv.workbook_view_id = 1 }
|
|
164
|
+
assert_equal(@sv.workbook_view_id, 1)
|
|
165
|
+
end
|
|
166
|
+
|
|
167
|
+
def test_zoom_scale
|
|
168
|
+
assert_raise(ArgumentError) { @sv.zoom_scale = "50" }
|
|
169
|
+
assert_nothing_raised { @sv.zoom_scale = 50 }
|
|
170
|
+
assert_equal(@sv.zoom_scale, 50)
|
|
171
|
+
end
|
|
172
|
+
|
|
173
|
+
def test_zoom_scale_normal
|
|
174
|
+
assert_raise(ArgumentError) { @sv.zoom_scale_normal = "50" }
|
|
175
|
+
assert_nothing_raised { @sv.zoom_scale_normal = 50 }
|
|
176
|
+
assert_equal(@sv.zoom_scale_normal, 50)
|
|
177
|
+
end
|
|
178
|
+
|
|
179
|
+
def test_zoom_scale_page_layout_view
|
|
180
|
+
assert_raise(ArgumentError) { @sv.zoom_scale_page_layout_view = "50" }
|
|
181
|
+
assert_nothing_raised { @sv.zoom_scale_page_layout_view = 50 }
|
|
182
|
+
assert_equal(@sv.zoom_scale_page_layout_view, 50)
|
|
183
|
+
end
|
|
184
|
+
|
|
185
|
+
def test_zoom_scale_sheet_layout_view
|
|
186
|
+
assert_raise(ArgumentError) { @sv.zoom_scale_sheet_layout_view = "50" }
|
|
187
|
+
assert_nothing_raised { @sv.zoom_scale_sheet_layout_view = 50 }
|
|
188
|
+
assert_equal(@sv.zoom_scale_sheet_layout_view, 50)
|
|
189
|
+
end
|
|
190
|
+
|
|
191
|
+
def test_to_xml
|
|
192
|
+
p = Axlsx::Package.new
|
|
193
|
+
@ws = p.workbook.add_worksheet :name => "sheetview"
|
|
194
|
+
@ws.sheet_view do |vs|
|
|
195
|
+
vs.view = :page_break_preview
|
|
196
|
+
end
|
|
197
|
+
|
|
198
|
+
doc = Nokogiri::XML.parse(@ws.sheet_view.to_xml_string)
|
|
199
|
+
|
|
200
|
+
assert_equal(1, doc.xpath("//sheetView[@tabSelected='false']").size)
|
|
201
|
+
|
|
202
|
+
assert_equal(1, doc.xpath("//sheetView[@tabSelected='false'][@showWhiteSpace='false'][@showOutlineSymbols='false'][@showFormulas='false']
|
|
203
|
+
[@rightToLeft='false'][@windowProtection='false'][@showZeros='true'][@showRuler='true']
|
|
204
|
+
[@showRowColHeaders='true'][@showGridLines='true'][@defaultGridColor='true']
|
|
205
|
+
[@zoomScale='100'][@workbookViewId='0'][@zoomScaleSheetLayoutView='0'][@zoomScalePageLayoutView='0']
|
|
206
|
+
[@zoomScaleNormal='0'][@view='page_break_preview']").size)
|
|
207
|
+
end
|
|
208
|
+
|
|
209
|
+
def test_add_selection
|
|
210
|
+
@sv.add_selection(:top_left, :active_cell => "A1")
|
|
211
|
+
assert_equal('A1', @sv.selections[:top_left].active_cell)
|
|
212
|
+
end
|
|
213
|
+
|
|
214
|
+
end
|
|
@@ -14,6 +14,14 @@ class TestWorksheet < Test::Unit::TestCase
|
|
|
14
14
|
assert_equal(ws.pn, "worksheets/sheet2.xml")
|
|
15
15
|
end
|
|
16
16
|
|
|
17
|
+
def test_name_is_html_encoded
|
|
18
|
+
@ws.name = '<foo> & <bar>'
|
|
19
|
+
assert_equal(@ws.name, '<foo> & <bar>')
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def test_name_exception_on_colon
|
|
23
|
+
assert_raises(ArgumentError) { @ws.name = 'foo:bar' }
|
|
24
|
+
end
|
|
17
25
|
def test_page_margins
|
|
18
26
|
assert(@ws.page_margins.is_a? Axlsx::PageMargins)
|
|
19
27
|
end
|
|
@@ -105,7 +113,12 @@ class TestWorksheet < Test::Unit::TestCase
|
|
|
105
113
|
def test_dimension
|
|
106
114
|
@ws.add_row [1, 2, 3]
|
|
107
115
|
@ws.add_row [4, 5, 6]
|
|
108
|
-
assert_equal @ws.dimension, "A1:C2"
|
|
116
|
+
assert_equal @ws.dimension.sqref, "A1:C2"
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
def test_dimension_with_empty_row
|
|
120
|
+
@ws.add_row
|
|
121
|
+
assert_equal "A1:AA200", @ws.dimension.sqref
|
|
109
122
|
end
|
|
110
123
|
|
|
111
124
|
def test_referencing
|
|
@@ -135,7 +148,9 @@ class TestWorksheet < Test::Unit::TestCase
|
|
|
135
148
|
end
|
|
136
149
|
|
|
137
150
|
def test_drawing
|
|
138
|
-
assert @ws.drawing
|
|
151
|
+
assert @ws.drawing == nil
|
|
152
|
+
@ws.add_chart(Axlsx::Pie3DChart)
|
|
153
|
+
assert @ws.drawing.is_a?(Axlsx::Drawing)
|
|
139
154
|
end
|
|
140
155
|
|
|
141
156
|
def test_col_style
|
|
@@ -201,8 +216,8 @@ class TestWorksheet < Test::Unit::TestCase
|
|
|
201
216
|
end
|
|
202
217
|
|
|
203
218
|
def test_fit_to_page_assignation_does_nothing
|
|
204
|
-
@ws.fit_to_page =
|
|
205
|
-
assert_equal(@ws.fit_to_page
|
|
219
|
+
@ws.fit_to_page = true
|
|
220
|
+
assert_equal(@ws.fit_to_page?, false)
|
|
206
221
|
end
|
|
207
222
|
|
|
208
223
|
def test_to_xml_string_selected
|
|
@@ -217,13 +232,6 @@ class TestWorksheet < Test::Unit::TestCase
|
|
|
217
232
|
assert_equal(doc.xpath('//xmlns:worksheet/xmlns:sheetViews/xmlns:sheetView[@showGridLines="false"]').size, 1)
|
|
218
233
|
end
|
|
219
234
|
|
|
220
|
-
|
|
221
|
-
def test_to_xml_string_show_selection
|
|
222
|
-
doc = Nokogiri::XML(@ws.to_xml_string)
|
|
223
|
-
assert_equal(doc.xpath('//xmlns:worksheet/xmlns:sheetViews/xmlns:sheetView/xmlns:selection[@activeCell="A1"]').size, 1)
|
|
224
|
-
assert_equal(doc.xpath('//xmlns:worksheet/xmlns:sheetViews/xmlns:sheetView/xmlns:selection[@sqref="A1"]').size, 1)
|
|
225
|
-
end
|
|
226
|
-
|
|
227
235
|
def test_to_xml_string_auto_fit_data
|
|
228
236
|
@ws.add_row [1, "two"]
|
|
229
237
|
doc = Nokogiri::XML(@ws.to_xml_string)
|
|
@@ -255,7 +263,7 @@ class TestWorksheet < Test::Unit::TestCase
|
|
|
255
263
|
def test_to_xml_string_sheet_protection
|
|
256
264
|
@ws.sheet_protection.password = 'fish'
|
|
257
265
|
doc = Nokogiri::XML(@ws.to_xml_string)
|
|
258
|
-
assert(doc.xpath('//sheetProtection'))
|
|
266
|
+
assert(doc.xpath('//xmlns:sheetProtection'))
|
|
259
267
|
end
|
|
260
268
|
|
|
261
269
|
def test_to_xml_string_page_margins
|
|
@@ -300,23 +308,22 @@ class TestWorksheet < Test::Unit::TestCase
|
|
|
300
308
|
assert_equal(doc.xpath('//xmlns:worksheet/xmlns:tableParts/xmlns:tablePart[@r:id="rId1"]').size, 1)
|
|
301
309
|
end
|
|
302
310
|
|
|
303
|
-
def test_abs_auto_filter
|
|
304
|
-
@ws.add_row [1, "two", 3]
|
|
305
|
-
@ws.auto_filter = "A1:C1"
|
|
306
|
-
assert_equal(@ws.abs_auto_filter, "'Sheet1'!$A$1:$C$1")
|
|
307
|
-
end
|
|
308
|
-
|
|
309
311
|
def test_to_xml_string
|
|
310
312
|
schema = Nokogiri::XML::Schema(File.open(Axlsx::SML_XSD))
|
|
311
313
|
doc = Nokogiri::XML(@ws.to_xml_string)
|
|
312
|
-
|
|
313
|
-
schema.validate(doc).each do |error|
|
|
314
|
-
errors.push error
|
|
315
|
-
puts error.message
|
|
316
|
-
end
|
|
317
|
-
assert(errors.empty?, "error free validation")
|
|
314
|
+
assert(schema.validate(doc).map{ |e| puts e.message; e }.empty?, "error free validation")
|
|
318
315
|
end
|
|
319
316
|
|
|
317
|
+
def test_styles
|
|
318
|
+
assert(@ws.styles.is_a?(Axlsx::Styles), 'worksheet provides access to styles')
|
|
319
|
+
end
|
|
320
|
+
|
|
321
|
+
def test_to_xml_string_with_illegal_chars
|
|
322
|
+
nasties = "\v\u2028\u0001\u0002\u0003\u0004\u0005\u0006\u0007\u0008\u001f"
|
|
323
|
+
@ws.add_row [nasties]
|
|
324
|
+
assert_equal(0, @ws.rows.last.cells.last.value.index("\v"))
|
|
325
|
+
assert_equal(nil,@ws.to_xml_string.index("\v"))
|
|
326
|
+
end
|
|
320
327
|
# Make sure the XML for all optional elements (like pageMargins, autoFilter, ...)
|
|
321
328
|
# is generated in correct order.
|
|
322
329
|
def test_valid_with_optional_elements
|
|
@@ -329,13 +336,7 @@ class TestWorksheet < Test::Unit::TestCase
|
|
|
329
336
|
@ws.add_table "E1:F3"
|
|
330
337
|
schema = Nokogiri::XML::Schema(File.open(Axlsx::SML_XSD))
|
|
331
338
|
doc = Nokogiri::XML(@ws.to_xml_string)
|
|
332
|
-
|
|
333
|
-
schema.validate(doc).each do |error|
|
|
334
|
-
errors.push error
|
|
335
|
-
puts error.message
|
|
336
|
-
end
|
|
337
|
-
assert(errors.empty?, "error free validation")
|
|
338
|
-
|
|
339
|
+
assert(schema.validate(doc).map { |e| puts e.message; e }.empty?, schema.validate(doc).map { |e| e.message }.join('\n'))
|
|
339
340
|
end
|
|
340
341
|
|
|
341
342
|
def test_relationships
|
|
@@ -357,14 +358,14 @@ class TestWorksheet < Test::Unit::TestCase
|
|
|
357
358
|
end
|
|
358
359
|
|
|
359
360
|
def test_name_size
|
|
360
|
-
assert_raise(ArgumentError, "name too long!") { @ws.name = Array.new(32, "A").join(
|
|
361
|
-
assert_nothing_raised { @ws.name = Array.new(31, "A").join(
|
|
361
|
+
assert_raise(ArgumentError, "name too long!") { @ws.name = Array.new(32, "A").join() }
|
|
362
|
+
assert_nothing_raised { @ws.name = Array.new(31, "A").join() }
|
|
362
363
|
end
|
|
363
364
|
|
|
364
365
|
def test_set_fixed_width_column
|
|
365
366
|
@ws.add_row ["mule", "donkey", "horse"], :widths => [20, :ignore, nil]
|
|
366
367
|
assert(@ws.column_info.size == 3, "a data item for each column")
|
|
367
|
-
assert_equal(@ws.column_info[0].width,
|
|
368
|
+
assert_equal(20, @ws.column_info[0].width, "adding a row with fixed width updates :fixed attribute")
|
|
368
369
|
assert_equal(@ws.column_info[1].width, nil, ":ignore does not set any data")
|
|
369
370
|
end
|
|
370
371
|
|
|
@@ -381,17 +382,28 @@ class TestWorksheet < Test::Unit::TestCase
|
|
|
381
382
|
assert_raise(ArgumentError, 'only accept Integer, Float or Fixnum') { @ws.column_widths 2, 7, "-1" }
|
|
382
383
|
end
|
|
383
384
|
|
|
385
|
+
def test_protect_range
|
|
386
|
+
assert(@ws.send(:protected_ranges).is_a?(Axlsx::SimpleTypedList))
|
|
387
|
+
assert_equal(0, @ws.send(:protected_ranges).size)
|
|
388
|
+
@ws.protect_range('A1:A3')
|
|
389
|
+
assert_equal('A1:A3', @ws.send(:protected_ranges).last.sqref)
|
|
390
|
+
end
|
|
391
|
+
|
|
392
|
+
def test_protect_range_with_cells
|
|
393
|
+
@ws.add_row [1, 2, 3]
|
|
394
|
+
assert_nothing_raised {@ws.protect_range(@ws.rows.first.cells) }
|
|
395
|
+
assert_equal('A1:C1', @ws.send(:protected_ranges).last.sqref)
|
|
396
|
+
|
|
397
|
+
end
|
|
384
398
|
def test_merge_cells
|
|
385
|
-
assert(@ws.merged_cells.is_a?(Array))
|
|
386
|
-
assert_equal(@ws.merged_cells.size, 0)
|
|
387
399
|
@ws.add_row [1,2,3]
|
|
388
400
|
@ws.add_row [4,5,6]
|
|
389
401
|
@ws.add_row [7,8,9]
|
|
390
402
|
@ws.merge_cells "A1:A2"
|
|
391
403
|
@ws.merge_cells "B2:C3"
|
|
392
404
|
@ws.merge_cells @ws.rows.last.cells[(0..1)]
|
|
393
|
-
assert_equal(@ws.merged_cells.size, 3)
|
|
394
|
-
assert_equal(@ws.merged_cells.last, "A3:B3")
|
|
405
|
+
assert_equal(@ws.send(:merged_cells).size, 3)
|
|
406
|
+
assert_equal(@ws.send(:merged_cells).last, "A3:B3")
|
|
395
407
|
end
|
|
396
408
|
|
|
397
409
|
def test_merge_cells_sorts_correctly_by_row_when_given_array
|
|
@@ -399,13 +411,13 @@ class TestWorksheet < Test::Unit::TestCase
|
|
|
399
411
|
@ws.add_row [i]
|
|
400
412
|
end
|
|
401
413
|
@ws.merge_cells [@ws.rows[8].cells.first, @ws.rows[9].cells.first]
|
|
402
|
-
assert_equal "A9:A10", @ws.merged_cells.first
|
|
414
|
+
assert_equal "A9:A10", @ws.send(:merged_cells).first
|
|
403
415
|
end
|
|
404
416
|
|
|
405
417
|
def test_auto_filter
|
|
406
|
-
assert(@ws.auto_filter.nil?)
|
|
418
|
+
assert(@ws.auto_filter.range.nil?)
|
|
407
419
|
assert_raise(ArgumentError) { @ws.auto_filter = 123 }
|
|
408
420
|
@ws.auto_filter = "A1:D9"
|
|
409
|
-
assert_equal(@ws.auto_filter, "A1:D9")
|
|
421
|
+
assert_equal(@ws.auto_filter.range, "A1:D9")
|
|
410
422
|
end
|
|
411
423
|
end
|