axlsx 1.2.0 → 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 +7 -0
- data/.yardopts +3 -2
- data/.yardopts_guide +19 -0
- data/CHANGELOG.md +64 -1
- data/README.md +105 -87
- data/Rakefile +0 -5
- data/examples/2010_comments.rb +17 -0
- data/examples/anchor_swapping.rb +28 -0
- data/examples/auto_filter.rb +16 -0
- data/examples/basic_charts.rb +4 -0
- data/examples/colored_links.rb +59 -0
- data/examples/conditional_formatting/example_conditional_formatting.rb +4 -2
- data/examples/example.rb +569 -258
- data/examples/ios_preview.rb +14 -0
- data/examples/page_setup.rb +11 -0
- data/examples/pivot_table.rb +39 -0
- data/examples/skydrive/real_example.rb +8 -8
- data/examples/styles.rb +66 -0
- data/examples/underline.rb +13 -0
- data/examples/wrap_text.rb +21 -0
- data/lib/axlsx/content_type/abstract_content_type.rb +32 -0
- data/lib/axlsx/content_type/content_type.rb +1 -1
- data/lib/axlsx/content_type/default.rb +6 -37
- data/lib/axlsx/content_type/override.rb +6 -38
- data/lib/axlsx/doc_props/app.rb +10 -7
- data/lib/axlsx/doc_props/core.rb +6 -1
- data/lib/axlsx/drawing/axes.rb +61 -0
- data/lib/axlsx/drawing/axis.rb +20 -17
- data/lib/axlsx/drawing/bar_3D_chart.rb +31 -22
- data/lib/axlsx/drawing/cat_axis.rb +2 -10
- data/lib/axlsx/drawing/chart.rb +33 -6
- data/lib/axlsx/drawing/d_lbls.rb +21 -31
- data/lib/axlsx/drawing/drawing.rb +11 -17
- data/lib/axlsx/drawing/graphic_frame.rb +3 -3
- data/lib/axlsx/drawing/hyperlink.rb +42 -36
- data/lib/axlsx/drawing/line_3D_chart.rb +28 -70
- data/lib/axlsx/drawing/line_chart.rb +99 -0
- data/lib/axlsx/drawing/line_series.rb +20 -2
- data/lib/axlsx/drawing/marker.rb +38 -18
- data/lib/axlsx/drawing/num_data.rb +6 -6
- data/lib/axlsx/drawing/num_data_source.rb +17 -16
- data/lib/axlsx/drawing/one_cell_anchor.rb +28 -21
- data/lib/axlsx/drawing/pic.rb +43 -45
- data/lib/axlsx/drawing/picture_locking.rb +12 -44
- data/lib/axlsx/drawing/pie_3D_chart.rb +2 -1
- data/lib/axlsx/drawing/scaling.rb +13 -13
- data/lib/axlsx/drawing/scatter_chart.rb +32 -21
- data/lib/axlsx/drawing/ser_axis.rb +15 -16
- data/lib/axlsx/drawing/series.rb +3 -6
- data/lib/axlsx/drawing/str_data.rb +3 -3
- data/lib/axlsx/drawing/str_val.rb +7 -8
- data/lib/axlsx/drawing/two_cell_anchor.rb +7 -27
- data/lib/axlsx/drawing/val_axis.rb +14 -13
- data/lib/axlsx/drawing/view_3D.rb +52 -38
- data/lib/axlsx/drawing/vml_shape.rb +20 -79
- data/lib/axlsx/package.rb +58 -28
- data/lib/axlsx/rels/relationship.rb +75 -9
- data/lib/axlsx/rels/relationships.rb +8 -1
- data/lib/axlsx/stylesheet/border.rb +29 -20
- data/lib/axlsx/stylesheet/border_pr.rb +5 -4
- data/lib/axlsx/stylesheet/cell_alignment.rb +55 -29
- data/lib/axlsx/stylesheet/cell_protection.rb +7 -4
- data/lib/axlsx/stylesheet/cell_style.rb +19 -14
- data/lib/axlsx/stylesheet/color.rb +20 -17
- data/lib/axlsx/stylesheet/dxf.rb +4 -4
- data/lib/axlsx/stylesheet/font.rb +22 -22
- data/lib/axlsx/stylesheet/gradient_fill.rb +45 -21
- data/lib/axlsx/stylesheet/num_fmt.rb +23 -14
- data/lib/axlsx/stylesheet/pattern_fill.rb +12 -21
- data/lib/axlsx/stylesheet/styles.rb +37 -22
- data/lib/axlsx/stylesheet/table_style.rb +17 -16
- data/lib/axlsx/stylesheet/table_style_element.rb +15 -11
- data/lib/axlsx/stylesheet/table_styles.rb +14 -11
- data/lib/axlsx/stylesheet/xf.rb +28 -26
- data/lib/axlsx/util/accessors.rb +64 -0
- data/lib/axlsx/util/constants.rb +127 -6
- data/lib/axlsx/util/options_parser.rb +15 -0
- data/lib/axlsx/util/serialized_attributes.rb +79 -0
- data/lib/axlsx/util/simple_typed_list.rb +50 -15
- data/lib/axlsx/util/validators.rb +51 -16
- data/lib/axlsx/version.rb +2 -2
- data/lib/axlsx/workbook/defined_name.rb +14 -59
- data/lib/axlsx/workbook/shared_strings_table.rb +13 -4
- data/lib/axlsx/workbook/workbook.rb +85 -6
- data/lib/axlsx/workbook/worksheet/auto_filter/auto_filter.rb +77 -0
- data/lib/axlsx/workbook/worksheet/auto_filter/filter_column.rb +94 -0
- data/lib/axlsx/workbook/worksheet/auto_filter/filters.rb +246 -0
- data/lib/axlsx/workbook/worksheet/break.rb +37 -0
- data/lib/axlsx/workbook/worksheet/cell.rb +109 -107
- data/lib/axlsx/workbook/worksheet/cell_serializer.rb +144 -0
- data/lib/axlsx/workbook/worksheet/cfvo.rb +15 -15
- data/lib/axlsx/workbook/worksheet/cfvos.rb +15 -0
- data/lib/axlsx/workbook/worksheet/col.rb +43 -29
- data/lib/axlsx/workbook/worksheet/col_breaks.rb +35 -0
- data/lib/axlsx/workbook/worksheet/color_scale.rb +62 -28
- data/lib/axlsx/workbook/worksheet/comment.rb +28 -37
- data/lib/axlsx/workbook/worksheet/comments.rb +3 -3
- data/lib/axlsx/workbook/worksheet/conditional_formatting.rb +11 -11
- data/lib/axlsx/workbook/worksheet/conditional_formatting_rule.rb +31 -27
- data/lib/axlsx/workbook/worksheet/data_bar.rb +75 -41
- data/lib/axlsx/workbook/worksheet/data_validation.rb +61 -62
- data/lib/axlsx/workbook/worksheet/date_time_converter.rb +6 -5
- data/lib/axlsx/workbook/worksheet/dimension.rb +0 -1
- data/lib/axlsx/workbook/worksheet/header_footer.rb +54 -0
- data/lib/axlsx/workbook/worksheet/icon_set.rb +20 -20
- data/lib/axlsx/workbook/worksheet/page_margins.rb +21 -19
- data/lib/axlsx/workbook/worksheet/page_set_up_pr.rb +44 -0
- data/lib/axlsx/workbook/worksheet/page_setup.rb +152 -23
- data/lib/axlsx/workbook/worksheet/pane.rb +48 -51
- data/lib/axlsx/workbook/worksheet/pivot_table.rb +273 -0
- data/lib/axlsx/workbook/worksheet/pivot_table_cache_definition.rb +66 -0
- data/lib/axlsx/workbook/worksheet/pivot_tables.rb +24 -0
- data/lib/axlsx/workbook/worksheet/print_options.rb +8 -30
- data/lib/axlsx/workbook/worksheet/protected_range.rb +16 -13
- data/lib/axlsx/workbook/worksheet/row.rb +59 -83
- data/lib/axlsx/workbook/worksheet/row_breaks.rb +33 -0
- data/lib/axlsx/workbook/worksheet/selection.rb +30 -38
- data/lib/axlsx/workbook/worksheet/sheet_calc_pr.rb +29 -0
- data/lib/axlsx/workbook/worksheet/sheet_format_pr.rb +60 -0
- data/lib/axlsx/workbook/worksheet/sheet_pr.rb +49 -4
- data/lib/axlsx/workbook/worksheet/sheet_protection.rb +51 -155
- data/lib/axlsx/workbook/worksheet/sheet_view.rb +68 -234
- data/lib/axlsx/workbook/worksheet/table.rb +25 -19
- data/lib/axlsx/workbook/worksheet/table_style_info.rb +51 -0
- data/lib/axlsx/workbook/worksheet/tables.rb +1 -1
- data/lib/axlsx/workbook/worksheet/worksheet.rb +174 -35
- data/lib/axlsx/workbook/worksheet/worksheet_comments.rb +6 -5
- data/lib/axlsx/workbook/worksheet/worksheet_drawing.rb +4 -10
- data/lib/axlsx/workbook/worksheet/worksheet_hyperlink.rb +74 -0
- data/lib/axlsx/workbook/worksheet/worksheet_hyperlinks.rb +38 -0
- data/lib/axlsx.rb +55 -5
- data/lib/schema/sml.xsd +4 -0
- data/test/axlsx.qcachegrind +2226 -0
- data/test/benchmark.rb +2 -3
- data/test/content_type/tc_default.rb +0 -11
- data/test/content_type/tc_override.rb +0 -13
- data/test/doc_props/tc_core.rb +7 -0
- data/test/drawing/tc_axes.rb +8 -0
- data/test/drawing/tc_axis.rb +15 -17
- data/test/drawing/tc_bar_3D_chart.rb +6 -0
- data/test/drawing/tc_cat_axis.rb +9 -9
- data/test/drawing/tc_chart.rb +20 -0
- data/test/drawing/tc_d_lbls.rb +14 -4
- data/test/drawing/tc_drawing.rb +0 -5
- data/test/drawing/tc_graphic_frame.rb +5 -3
- data/test/drawing/tc_hyperlink.rb +0 -4
- data/test/drawing/tc_line_chart.rb +39 -0
- data/test/drawing/tc_line_series.rb +8 -2
- data/test/drawing/tc_pic.rb +14 -3
- data/test/drawing/tc_ser_axis.rb +13 -12
- data/test/drawing/tc_two_cell_anchor.rb +3 -3
- data/test/drawing/tc_val_axis.rb +6 -6
- data/test/drawing/tc_vml_shape.rb +9 -3
- data/test/profile.rb +11 -21
- data/test/rels/tc_relationship.rb +32 -9
- data/test/rels/tc_relationships.rb +12 -1
- data/test/stylesheet/tc_color.rb +6 -0
- data/test/stylesheet/tc_styles.rb +15 -2
- data/test/tc_axlsx.rb +35 -2
- data/test/tc_helper.rb +7 -1
- data/test/tc_package.rb +44 -5
- data/test/util/tc_serialized_attributes.rb +19 -0
- data/test/util/tc_validators.rb +26 -1
- data/test/workbook/tc_defined_name.rb +2 -2
- data/test/workbook/tc_shared_strings_table.rb +6 -0
- data/test/workbook/tc_workbook.rb +38 -1
- data/test/workbook/worksheet/auto_filter/tc_auto_filter.rb +38 -0
- data/test/workbook/worksheet/auto_filter/tc_filter_column.rb +76 -0
- data/test/workbook/worksheet/auto_filter/tc_filters.rb +50 -0
- data/test/workbook/worksheet/tc_break.rb +49 -0
- data/test/workbook/worksheet/tc_cell.rb +40 -6
- data/test/workbook/worksheet/tc_col.rb +11 -1
- data/test/workbook/worksheet/tc_color_scale.rb +31 -2
- data/test/workbook/worksheet/tc_comment.rb +21 -6
- data/test/workbook/worksheet/tc_comments.rb +2 -2
- data/test/workbook/worksheet/tc_conditional_formatting.rb +7 -0
- data/test/workbook/worksheet/tc_data_bar.rb +7 -0
- data/test/workbook/worksheet/tc_date_time_converter.rb +3 -11
- data/test/workbook/worksheet/tc_header_footer.rb +151 -0
- data/test/workbook/worksheet/tc_page_set_up_pr.rb +15 -0
- data/test/workbook/worksheet/tc_page_setup.rb +6 -1
- data/test/workbook/worksheet/tc_pane.rb +5 -45
- data/test/workbook/worksheet/tc_pivot_table.rb +120 -0
- data/test/workbook/worksheet/tc_pivot_table_cache_definition.rb +54 -0
- data/test/workbook/worksheet/tc_row.rb +4 -4
- data/test/workbook/worksheet/tc_selection.rb +9 -48
- data/test/workbook/worksheet/tc_sheet_calc_pr.rb +18 -0
- data/test/workbook/worksheet/tc_sheet_format_pr.rb +88 -0
- data/test/workbook/worksheet/tc_sheet_pr.rb +27 -0
- data/test/workbook/worksheet/tc_sheet_view.rb +39 -39
- data/test/workbook/worksheet/{table/tc_table.rb → tc_table.rb} +8 -3
- data/test/workbook/worksheet/tc_table_style_info.rb +53 -0
- data/test/workbook/worksheet/tc_worksheet.rb +131 -16
- data/test/workbook/worksheet/tc_worksheet_hyperlink.rb +55 -0
- metadata +97 -64
- data/examples/example.xlsx +0 -0
- data/examples/example_streamed.xlsx +0 -0
- data/examples/extractive.pdf +0 -0
- data/examples/image1.gif +0 -0
- data/examples/image1.jpg +0 -0
- data/examples/image1.png +0 -0
- data/examples/no-use_autowidth.xlsx +0 -0
- data/examples/sample.png +0 -0
- data/examples/scraping_html.rb +0 -91
- data/examples/shared_strings_example.xlsx +0 -0
- data/examples/sheet_view.rb +0 -34
- data/examples/two_cell_anchor_image.rb +0 -11
- data/lib/axlsx/workbook/worksheet/auto_filter.rb +0 -34
|
@@ -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)
|
|
@@ -15,6 +15,12 @@ class TestTable < Test::Unit::TestCase
|
|
|
15
15
|
|
|
16
16
|
end
|
|
17
17
|
|
|
18
|
+
def test_table_style_info
|
|
19
|
+
table = @ws.add_table('A1:D5', :name => 'foo', :style_info => { :show_row_stripes => true, :name => "TableStyleMedium25" })
|
|
20
|
+
assert_equal('TableStyleMedium25', table.table_style_info.name)
|
|
21
|
+
assert_equal(true, table.table_style_info.show_row_stripes)
|
|
22
|
+
end
|
|
23
|
+
|
|
18
24
|
def test_add_table
|
|
19
25
|
name = "test"
|
|
20
26
|
table = @ws.add_table("A1:D5", :name => name)
|
|
@@ -22,7 +28,6 @@ class TestTable < Test::Unit::TestCase
|
|
|
22
28
|
assert_equal(@ws.workbook.tables.last, table, "must be added to workbook table collection")
|
|
23
29
|
assert_equal(@ws.tables.last, table, "must be added to worksheet table collection")
|
|
24
30
|
assert_equal(table.name, name, "options for name are applied")
|
|
25
|
-
|
|
26
31
|
end
|
|
27
32
|
|
|
28
33
|
def test_pn
|
|
@@ -31,8 +36,8 @@ class TestTable < Test::Unit::TestCase
|
|
|
31
36
|
end
|
|
32
37
|
|
|
33
38
|
def test_rId
|
|
34
|
-
@ws.add_table("A1:D5")
|
|
35
|
-
assert_equal
|
|
39
|
+
table = @ws.add_table("A1:D5")
|
|
40
|
+
assert_equal @ws.relationships.for(table).Id, table.rId
|
|
36
41
|
end
|
|
37
42
|
|
|
38
43
|
def test_index
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
require 'tc_helper.rb'
|
|
2
|
+
|
|
3
|
+
class TestTableStyleInfo < Test::Unit::TestCase
|
|
4
|
+
def setup
|
|
5
|
+
p = Axlsx::Package.new
|
|
6
|
+
@ws = p.workbook.add_worksheet
|
|
7
|
+
40.times do
|
|
8
|
+
@ws.add_row %w(aa bb cc dd ee ff gg hh ii jj kk)
|
|
9
|
+
end
|
|
10
|
+
@table = @ws.add_table(Axlsx::cell_range([@ws.rows.first.cells.first,@ws.rows.last.cells.last], false), :name => 'foo')
|
|
11
|
+
@options = { :show_first_column => 1,
|
|
12
|
+
:show_last_column => 1,
|
|
13
|
+
:show_row_stripes => 1,
|
|
14
|
+
:show_column_stripes => 1,
|
|
15
|
+
:name => "TableStyleDark4" }
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def test_initialize
|
|
21
|
+
table_style = Axlsx::TableStyleInfo.new @options
|
|
22
|
+
@options.each do |key, value|
|
|
23
|
+
assert_equal(value, table_style.send(key.to_sym))
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def test_boolean_properties
|
|
28
|
+
table_style = Axlsx::TableStyleInfo.new
|
|
29
|
+
@options.keys.each do |key|
|
|
30
|
+
assert_nothing_raised { table_style.send("#{key.to_sym}=", true) }
|
|
31
|
+
assert_raises(ArgumentError) { table_style.send(key.to_sym, 'foo') }
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
def doc
|
|
35
|
+
@doc ||= Nokogiri::XML(Axlsx::TableStyleInfo.new(@options).to_xml_string)
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def test_to_xml_string_first_column
|
|
39
|
+
assert(doc.xpath('//tableStyleInfo[@showLastColumn=1]'))
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def test_to_xml_string_row_stripes
|
|
43
|
+
assert(doc.xpath('//tableStyleInfo[@showRowStripes=1]'))
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
def test_to_xml_string_column_stripes
|
|
47
|
+
assert(doc.xpath('//tableStyleInfo[@showColumnStripes=1]'))
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def test_to_xml_string_name
|
|
51
|
+
assert(doc.xpath("//tableStyleInfo[@name=#{@options[:name]}]"))
|
|
52
|
+
end
|
|
53
|
+
end
|
|
@@ -19,9 +19,16 @@ class TestWorksheet < Test::Unit::TestCase
|
|
|
19
19
|
assert_equal(@ws.name, '<foo> & <bar>')
|
|
20
20
|
end
|
|
21
21
|
|
|
22
|
-
def
|
|
22
|
+
def test_name_exception_on_invalid_character
|
|
23
23
|
assert_raises(ArgumentError) { @ws.name = 'foo:bar' }
|
|
24
|
+
assert_raises(ArgumentError) { @ws.name = 'foo[bar' }
|
|
25
|
+
assert_raises(ArgumentError) { @ws.name = 'foo]bar' }
|
|
26
|
+
assert_raises(ArgumentError) { @ws.name = 'foo*bar' }
|
|
27
|
+
assert_raises(ArgumentError) { @ws.name = 'foo/bar' }
|
|
28
|
+
assert_raises(ArgumentError) { @ws.name = 'foo\bar' }
|
|
29
|
+
assert_raises(ArgumentError) { @ws.name = 'foo?bar' }
|
|
24
30
|
end
|
|
31
|
+
|
|
25
32
|
def test_page_margins
|
|
26
33
|
assert(@ws.page_margins.is_a? Axlsx::PageMargins)
|
|
27
34
|
end
|
|
@@ -55,6 +62,17 @@ class TestWorksheet < Test::Unit::TestCase
|
|
|
55
62
|
end
|
|
56
63
|
end
|
|
57
64
|
|
|
65
|
+
def test_header_footer
|
|
66
|
+
assert(@ws.header_footer.is_a? Axlsx::HeaderFooter)
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
def test_header_footer_yield
|
|
70
|
+
@ws.header_footer do |hf|
|
|
71
|
+
assert(hf.is_a? Axlsx::HeaderFooter)
|
|
72
|
+
assert(@ws.header_footer == hf)
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
|
|
58
76
|
def test_no_autowidth
|
|
59
77
|
@ws.workbook.use_autowidth = false
|
|
60
78
|
@ws.add_row [1,2,3,4]
|
|
@@ -65,7 +83,8 @@ class TestWorksheet < Test::Unit::TestCase
|
|
|
65
83
|
page_margins = {:left => 2, :right => 2, :bottom => 2, :top => 2, :header => 2, :footer => 2}
|
|
66
84
|
page_setup = {:fit_to_height => 1, :fit_to_width => 1, :orientation => :landscape, :paper_width => "210mm", :paper_height => "297mm", :scale => 80}
|
|
67
85
|
print_options = {:grid_lines => true, :headings => true, :horizontal_centered => true, :vertical_centered => true}
|
|
68
|
-
|
|
86
|
+
header_footer = {:different_first => false, :different_odd_even => false, :odd_header => 'Header'}
|
|
87
|
+
optioned = @ws.workbook.add_worksheet(:name => 'bob', :page_margins => page_margins, :page_setup => page_setup, :print_options => print_options, :header_footer => header_footer, :selected => true, :show_gridlines => false)
|
|
69
88
|
page_margins.keys.each do |key|
|
|
70
89
|
assert_equal(page_margins[key], optioned.page_margins.send(key))
|
|
71
90
|
end
|
|
@@ -75,6 +94,9 @@ class TestWorksheet < Test::Unit::TestCase
|
|
|
75
94
|
print_options.keys.each do |key|
|
|
76
95
|
assert_equal(print_options[key], optioned.print_options.send(key))
|
|
77
96
|
end
|
|
97
|
+
header_footer.keys.each do |key|
|
|
98
|
+
assert_equal(header_footer[key], optioned.header_footer.send(key))
|
|
99
|
+
end
|
|
78
100
|
assert_equal(optioned.name, 'bob')
|
|
79
101
|
assert_equal(optioned.selected, true)
|
|
80
102
|
assert_equal(optioned.show_gridlines, false)
|
|
@@ -101,9 +123,7 @@ class TestWorksheet < Test::Unit::TestCase
|
|
|
101
123
|
end
|
|
102
124
|
|
|
103
125
|
def test_rId
|
|
104
|
-
assert_equal(@ws.
|
|
105
|
-
ws = @ws.workbook.add_worksheet
|
|
106
|
-
assert_equal(ws.rId, "rId2")
|
|
126
|
+
assert_equal @ws.workbook.relationships.for(@ws).Id, @ws.rId
|
|
107
127
|
end
|
|
108
128
|
|
|
109
129
|
def test_index
|
|
@@ -147,12 +167,39 @@ class TestWorksheet < Test::Unit::TestCase
|
|
|
147
167
|
assert_equal(@ws.workbook.charts.size, 1, "add_chart adds a chart to the workbook")
|
|
148
168
|
end
|
|
149
169
|
|
|
170
|
+
def test_add_page_break_with_string_cell_ref
|
|
171
|
+
assert(@ws.row_breaks.empty?)
|
|
172
|
+
assert(@ws.col_breaks.empty?)
|
|
173
|
+
@ws.add_page_break("B1")
|
|
174
|
+
assert_equal(1, @ws.row_breaks.size)
|
|
175
|
+
assert_equal(1, @ws.col_breaks.size)
|
|
176
|
+
end
|
|
177
|
+
|
|
178
|
+
def test_add_page_break_with_cell
|
|
179
|
+
@ws.add_row [1, 2, 3, 4]
|
|
180
|
+
@ws.add_row [1, 2, 3, 4]
|
|
181
|
+
|
|
182
|
+
|
|
183
|
+
assert(@ws.row_breaks.empty?)
|
|
184
|
+
assert(@ws.col_breaks.empty?)
|
|
185
|
+
@ws.add_page_break(@ws.rows.last.cells[1])
|
|
186
|
+
assert_equal(1, @ws.row_breaks.size)
|
|
187
|
+
assert_equal(1, @ws.col_breaks.size)
|
|
188
|
+
end
|
|
189
|
+
|
|
190
|
+
|
|
150
191
|
def test_drawing
|
|
151
192
|
assert @ws.drawing == nil
|
|
152
193
|
@ws.add_chart(Axlsx::Pie3DChart)
|
|
153
194
|
assert @ws.drawing.is_a?(Axlsx::Drawing)
|
|
154
195
|
end
|
|
155
196
|
|
|
197
|
+
def test_add_pivot_table
|
|
198
|
+
assert(@ws.workbook.pivot_tables.empty?, "the sheet's workbook should not have any pivot tables by default")
|
|
199
|
+
@ws.add_pivot_table 'G5:G6', 'A1:D:10'
|
|
200
|
+
assert_equal(@ws.workbook.pivot_tables.size, 1, "add_pivot_tables adds a pivot_table to the workbook")
|
|
201
|
+
end
|
|
202
|
+
|
|
156
203
|
def test_col_style
|
|
157
204
|
@ws.add_row [1,2,3,4]
|
|
158
205
|
@ws.add_row [1,2,3,4]
|
|
@@ -177,13 +224,20 @@ class TestWorksheet < Test::Unit::TestCase
|
|
|
177
224
|
def test_cols
|
|
178
225
|
@ws.add_row [1,2,3,4]
|
|
179
226
|
@ws.add_row [1,2,3,4]
|
|
180
|
-
@ws.add_row [1,2,3
|
|
227
|
+
@ws.add_row [1,2,3]
|
|
181
228
|
@ws.add_row [1,2,3,4]
|
|
182
229
|
c = @ws.cols[1]
|
|
183
230
|
assert_equal(c.size, 4)
|
|
184
231
|
assert_equal(c[0].value, 2)
|
|
185
232
|
end
|
|
186
233
|
|
|
234
|
+
def test_cols_with_block
|
|
235
|
+
@ws.add_row [1,2,3]
|
|
236
|
+
@ws.add_row [1]
|
|
237
|
+
cols = @ws.cols {|row, column| :foo }
|
|
238
|
+
assert_equal(:foo, cols[1][1])
|
|
239
|
+
end
|
|
240
|
+
|
|
187
241
|
def test_row_style
|
|
188
242
|
@ws.add_row [1,2,3,4]
|
|
189
243
|
@ws.add_row [1,2,3,4]
|
|
@@ -246,7 +300,7 @@ class TestWorksheet < Test::Unit::TestCase
|
|
|
246
300
|
|
|
247
301
|
def test_to_xml_string_auto_filter
|
|
248
302
|
@ws.add_row [1, "two"]
|
|
249
|
-
@ws.auto_filter = "A1:B1"
|
|
303
|
+
@ws.auto_filter.range = "A1:B1"
|
|
250
304
|
doc = Nokogiri::XML(@ws.to_xml_string)
|
|
251
305
|
assert_equal(doc.xpath('//xmlns:worksheet/xmlns:autoFilter[@ref="A1:B1"]').size, 1)
|
|
252
306
|
end
|
|
@@ -260,6 +314,12 @@ class TestWorksheet < Test::Unit::TestCase
|
|
|
260
314
|
assert_equal(doc.xpath('//xmlns:worksheet/xmlns:mergeCells/xmlns:mergeCell[@ref="E1:F1"]').size, 1)
|
|
261
315
|
end
|
|
262
316
|
|
|
317
|
+
def test_to_xml_string_row_breaks
|
|
318
|
+
@ws.add_page_break("A1")
|
|
319
|
+
doc = Nokogiri::XML(@ws.to_xml_string)
|
|
320
|
+
assert_equal(doc.xpath('//xmlns:worksheet/xmlns:rowBreaks/xmlns:brk[@id="0"]').size, 1)
|
|
321
|
+
end
|
|
322
|
+
|
|
263
323
|
def test_to_xml_string_sheet_protection
|
|
264
324
|
@ws.sheet_protection.password = 'fish'
|
|
265
325
|
doc = Nokogiri::XML(@ws.to_xml_string)
|
|
@@ -293,19 +353,29 @@ class TestWorksheet < Test::Unit::TestCase
|
|
|
293
353
|
assert_equal(doc.xpath('//xmlns:worksheet/xmlns:printOptions[@gridLines="true"][@horizontalCentered="true"]').size, 1)
|
|
294
354
|
end
|
|
295
355
|
|
|
356
|
+
def test_to_xml_string_header_footer
|
|
357
|
+
@ws.header_footer do |hf|
|
|
358
|
+
hf.different_first = false
|
|
359
|
+
hf.different_odd_even = false
|
|
360
|
+
hf.odd_header = 'Test Header'
|
|
361
|
+
end
|
|
362
|
+
doc = Nokogiri::XML(@ws.to_xml_string)
|
|
363
|
+
assert_equal(doc.xpath('//xmlns:worksheet/xmlns:headerFooter[@differentFirst="false"][@differentOddEven="false"]').size, 1)
|
|
364
|
+
end
|
|
365
|
+
|
|
296
366
|
def test_to_xml_string_drawing
|
|
297
367
|
@ws.add_chart Axlsx::Pie3DChart
|
|
298
368
|
doc = Nokogiri::XML(@ws.to_xml_string)
|
|
299
|
-
assert_equal(doc.xpath('//xmlns:worksheet/xmlns:drawing[
|
|
369
|
+
assert_equal @ws.send(:worksheet_drawing).relationship.Id, doc.xpath('//xmlns:worksheet/xmlns:drawing').first["r:id"]
|
|
300
370
|
end
|
|
301
371
|
|
|
302
372
|
def test_to_xml_string_tables
|
|
303
373
|
@ws.add_row ["one", "two"]
|
|
304
374
|
@ws.add_row [1, 2]
|
|
305
|
-
@ws.add_table "A1:B2"
|
|
375
|
+
table = @ws.add_table "A1:B2"
|
|
306
376
|
doc = Nokogiri::XML(@ws.to_xml_string)
|
|
307
377
|
assert_equal(doc.xpath('//xmlns:worksheet/xmlns:tableParts[@count="1"]').size, 1)
|
|
308
|
-
assert_equal
|
|
378
|
+
assert_equal table.rId, doc.xpath('//xmlns:worksheet/xmlns:tableParts/xmlns:tablePart').first["r:id"]
|
|
309
379
|
end
|
|
310
380
|
|
|
311
381
|
def test_to_xml_string
|
|
@@ -317,23 +387,31 @@ class TestWorksheet < Test::Unit::TestCase
|
|
|
317
387
|
def test_styles
|
|
318
388
|
assert(@ws.styles.is_a?(Axlsx::Styles), 'worksheet provides access to styles')
|
|
319
389
|
end
|
|
320
|
-
|
|
390
|
+
|
|
321
391
|
def test_to_xml_string_with_illegal_chars
|
|
322
392
|
nasties = "\v\u2028\u0001\u0002\u0003\u0004\u0005\u0006\u0007\u0008\u001f"
|
|
323
393
|
@ws.add_row [nasties]
|
|
324
394
|
assert_equal(0, @ws.rows.last.cells.last.value.index("\v"))
|
|
325
395
|
assert_equal(nil,@ws.to_xml_string.index("\v"))
|
|
326
396
|
end
|
|
397
|
+
|
|
398
|
+
def test_to_xml_string_with_newlines
|
|
399
|
+
cell_with_newline = "foo\n\r\nbar"
|
|
400
|
+
@ws.add_row [cell_with_newline]
|
|
401
|
+
assert_equal("foo\n\r\nbar", @ws.rows.last.cells.last.value)
|
|
402
|
+
assert_not_nil(@ws.to_xml_string.index("foo\n\r\nbar"))
|
|
403
|
+
end
|
|
327
404
|
# Make sure the XML for all optional elements (like pageMargins, autoFilter, ...)
|
|
328
405
|
# is generated in correct order.
|
|
329
406
|
def test_valid_with_optional_elements
|
|
330
407
|
@ws.page_margins.set :left => 9
|
|
331
408
|
@ws.page_setup.set :fit_to_width => 1
|
|
332
409
|
@ws.print_options.set :headings => true
|
|
333
|
-
@ws.auto_filter = "A1:C3"
|
|
410
|
+
@ws.auto_filter.range = "A1:C3"
|
|
334
411
|
@ws.merge_cells "A4:A5"
|
|
335
412
|
@ws.add_chart Axlsx::Pie3DChart
|
|
336
413
|
@ws.add_table "E1:F3"
|
|
414
|
+
@ws.add_pivot_table 'G5:G6', 'A1:D10'
|
|
337
415
|
schema = Nokogiri::XML::Schema(File.open(Axlsx::SML_XSD))
|
|
338
416
|
doc = Nokogiri::XML(@ws.to_xml_string)
|
|
339
417
|
assert(schema.validate(doc).map { |e| puts e.message; e }.empty?, schema.validate(doc).map { |e| e.message }.join('\n'))
|
|
@@ -350,6 +428,8 @@ class TestWorksheet < Test::Unit::TestCase
|
|
|
350
428
|
assert_equal(@ws.relationships.size, 4, "adding a comment adds 3 relationships")
|
|
351
429
|
c = @ws.add_comment :text => 'not that is a comment!', :author => 'travis', :ref => "A1"
|
|
352
430
|
assert_equal(@ws.relationships.size, 4, "adding multiple comments in the same worksheet should not add any additional comment relationships")
|
|
431
|
+
c = @ws.add_pivot_table 'G5:G6', 'A1:D10'
|
|
432
|
+
assert_equal(@ws.relationships.size, 5, "adding a pivot table adds 1 relationship")
|
|
353
433
|
end
|
|
354
434
|
|
|
355
435
|
|
|
@@ -357,6 +437,11 @@ class TestWorksheet < Test::Unit::TestCase
|
|
|
357
437
|
assert_raise(ArgumentError, "worksheet name must be unique") { n = @ws.name; @ws.workbook.add_worksheet(:name=> n) }
|
|
358
438
|
end
|
|
359
439
|
|
|
440
|
+
def test_name_unique_only_checks_other_worksheet_names
|
|
441
|
+
assert_nothing_raised { @ws.name = @ws.name }
|
|
442
|
+
assert_nothing_raised { Axlsx::Package.new.workbook.add_worksheet :name => 'Sheet1' }
|
|
443
|
+
end
|
|
444
|
+
|
|
360
445
|
def test_name_size
|
|
361
446
|
assert_raise(ArgumentError, "name too long!") { @ws.name = Array.new(32, "A").join() }
|
|
362
447
|
assert_nothing_raised { @ws.name = Array.new(31, "A").join() }
|
|
@@ -393,7 +478,7 @@ class TestWorksheet < Test::Unit::TestCase
|
|
|
393
478
|
@ws.add_row [1, 2, 3]
|
|
394
479
|
assert_nothing_raised {@ws.protect_range(@ws.rows.first.cells) }
|
|
395
480
|
assert_equal('A1:C1', @ws.send(:protected_ranges).last.sqref)
|
|
396
|
-
|
|
481
|
+
|
|
397
482
|
end
|
|
398
483
|
def test_merge_cells
|
|
399
484
|
@ws.add_row [1,2,3]
|
|
@@ -405,7 +490,7 @@ class TestWorksheet < Test::Unit::TestCase
|
|
|
405
490
|
assert_equal(@ws.send(:merged_cells).size, 3)
|
|
406
491
|
assert_equal(@ws.send(:merged_cells).last, "A3:B3")
|
|
407
492
|
end
|
|
408
|
-
|
|
493
|
+
|
|
409
494
|
def test_merge_cells_sorts_correctly_by_row_when_given_array
|
|
410
495
|
10.times do |i|
|
|
411
496
|
@ws.add_row [i]
|
|
@@ -413,11 +498,41 @@ class TestWorksheet < Test::Unit::TestCase
|
|
|
413
498
|
@ws.merge_cells [@ws.rows[8].cells.first, @ws.rows[9].cells.first]
|
|
414
499
|
assert_equal "A9:A10", @ws.send(:merged_cells).first
|
|
415
500
|
end
|
|
416
|
-
|
|
501
|
+
|
|
417
502
|
def test_auto_filter
|
|
418
503
|
assert(@ws.auto_filter.range.nil?)
|
|
419
504
|
assert_raise(ArgumentError) { @ws.auto_filter = 123 }
|
|
420
|
-
@ws.auto_filter = "A1:D9"
|
|
505
|
+
@ws.auto_filter.range = "A1:D9"
|
|
421
506
|
assert_equal(@ws.auto_filter.range, "A1:D9")
|
|
422
507
|
end
|
|
508
|
+
|
|
509
|
+
def test_sheet_pr_for_auto_filter
|
|
510
|
+
@ws.auto_filter.range = 'A1:D9'
|
|
511
|
+
@ws.auto_filter.add_column 0, :filters, :filter_items => [1]
|
|
512
|
+
doc = Nokogiri::XML(@ws.to_xml_string)
|
|
513
|
+
assert(doc.xpath('//sheetPr[@filterMode="true"]'))
|
|
514
|
+
end
|
|
515
|
+
|
|
516
|
+
def test_outline_level_rows
|
|
517
|
+
3.times { @ws.add_row [1,2,3] }
|
|
518
|
+
@ws.outline_level_rows 0, 2
|
|
519
|
+
assert_equal(1, @ws.rows[0].outline_level)
|
|
520
|
+
assert_equal(true, @ws.rows[2].hidden)
|
|
521
|
+
assert_equal(true, @ws.sheet_view.show_outline_symbols)
|
|
522
|
+
end
|
|
523
|
+
|
|
524
|
+
def test_outline_level_columns
|
|
525
|
+
3.times { @ws.add_row [1,2,3] }
|
|
526
|
+
@ws.outline_level_columns 0, 2
|
|
527
|
+
assert_equal(1, @ws.column_info[0].outline_level)
|
|
528
|
+
assert_equal(true, @ws.column_info[2].hidden)
|
|
529
|
+
assert_equal(true, @ws.sheet_view.show_outline_symbols)
|
|
530
|
+
end
|
|
531
|
+
|
|
532
|
+
def test_worksheet_does_not_get_added_to_workbook_on_initialize_failure
|
|
533
|
+
assert_equal(1, @wb.worksheets.size)
|
|
534
|
+
assert_raise(ArgumentError) { @wb.add_worksheet(:name => 'Sheet1') }
|
|
535
|
+
assert_equal(1, @wb.worksheets.size)
|
|
536
|
+
end
|
|
537
|
+
|
|
423
538
|
end
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
require 'tc_helper.rb'
|
|
2
|
+
|
|
3
|
+
class TestWorksheetHyperlink < Test::Unit::TestCase
|
|
4
|
+
def setup
|
|
5
|
+
p = Axlsx::Package.new
|
|
6
|
+
wb = p.workbook
|
|
7
|
+
@ws = wb.add_worksheet
|
|
8
|
+
@options = { :location => 'https://github.com/randym/axlsx?foo=1&bar=2', :tooltip => 'axlsx', :ref => 'A1', :display => 'AXSLX', :target => :internal }
|
|
9
|
+
@a = @ws.add_hyperlink @options
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def test_initailize
|
|
13
|
+
assert_raise(ArgumentError) { Axlsx::WorksheetHyperlink.new }
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def test_location
|
|
17
|
+
assert_equal(@options[:location], @a.location)
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def test_tooltip
|
|
21
|
+
assert_equal(@options[:tooltip], @a.tooltip)
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def test_target
|
|
25
|
+
assert_equal(@options[:target], @a.instance_values['target'])
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def test_display
|
|
29
|
+
assert_equal(@options[:display], @a.display)
|
|
30
|
+
end
|
|
31
|
+
def test_ref
|
|
32
|
+
assert_equal(@options[:ref], @a.ref)
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def test_to_xml_string_with_non_external
|
|
36
|
+
doc = Nokogiri::XML(@ws.to_xml_string)
|
|
37
|
+
assert_equal(doc.xpath("//xmlns:hyperlink[@ref='#{@a.ref}']").size, 1)
|
|
38
|
+
assert_equal(doc.xpath("//xmlns:hyperlink[@tooltip='#{@a.tooltip}']").size, 1)
|
|
39
|
+
assert_equal(doc.xpath("//xmlns:hyperlink[@location='#{@a.location}']").size, 1)
|
|
40
|
+
assert_equal(doc.xpath("//xmlns:hyperlink[@display='#{@a.display}']").size, 1)
|
|
41
|
+
assert_equal(doc.xpath("//xmlns:hyperlink[@r:id]").size, 0)
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def test_to_xml_stirng_with_external
|
|
45
|
+
@a.target = :external
|
|
46
|
+
doc = Nokogiri::XML(@ws.to_xml_string)
|
|
47
|
+
assert_equal(doc.xpath("//xmlns:hyperlink[@ref='#{@a.ref}']").size, 1)
|
|
48
|
+
assert_equal(doc.xpath("//xmlns:hyperlink[@tooltip='#{@a.tooltip}']").size, 1)
|
|
49
|
+
assert_equal(doc.xpath("//xmlns:hyperlink[@display='#{@a.display}']").size, 1)
|
|
50
|
+
assert_equal(doc.xpath("//xmlns:hyperlink[@location='#{@a.location}']").size, 0)
|
|
51
|
+
assert_equal(doc.xpath("//xmlns:hyperlink[@r:id='#{@a.relationship.Id}']").size, 1)
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
|