axlsx 1.1.0 → 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 +78 -0
- data/LICENSE +1 -1
- data/README.md +132 -331
- data/Rakefile +17 -5
- data/examples/basic_charts.rb +54 -0
- data/examples/chart_colors.rb +88 -0
- data/examples/conditional_formatting/example_conditional_formatting.rb +72 -0
- data/examples/conditional_formatting/getting_barred.rb +37 -0
- data/examples/conditional_formatting/hitting_the_high_notes.rb +37 -0
- data/examples/conditional_formatting/scaled_colors.rb +39 -0
- data/examples/conditional_formatting/stop_and_go.rb +37 -0
- data/examples/data_validation.rb +50 -0
- data/examples/example.rb +300 -152
- data/examples/example.xlsx +0 -0
- data/examples/example_streamed.xlsx +0 -0
- data/examples/extractive.pdf +0 -0
- data/examples/extractive.rb +45 -0
- data/examples/no-use_autowidth.xlsx +0 -0
- data/examples/sample.png +0 -0
- data/examples/scraping_html.rb +91 -0
- data/examples/shared_strings_example.xlsx +0 -0
- data/examples/sheet_protection.rb +10 -0
- data/examples/sheet_view.rb +34 -0
- data/examples/skydrive/real_example.rb +63 -0
- data/examples/two_cell_anchor_image.rb +11 -0
- data/lib/axlsx/content_type/content_type.rb +2 -0
- data/lib/axlsx/content_type/default.rb +30 -15
- data/lib/axlsx/content_type/override.rb +29 -14
- data/lib/axlsx/doc_props/app.rb +161 -104
- data/lib/axlsx/doc_props/core.rb +9 -5
- data/lib/axlsx/drawing/ax_data_source.rb +26 -0
- data/lib/axlsx/drawing/axis.rb +106 -35
- data/lib/axlsx/drawing/bar_3D_chart.rb +49 -45
- data/lib/axlsx/drawing/bar_series.rb +25 -7
- data/lib/axlsx/drawing/cat_axis.rb +50 -22
- data/lib/axlsx/drawing/chart.rb +69 -56
- data/lib/axlsx/drawing/d_lbls.rb +100 -0
- data/lib/axlsx/drawing/drawing.rb +28 -12
- data/lib/axlsx/drawing/graphic_frame.rb +2 -1
- data/lib/axlsx/drawing/line_3D_chart.rb +3 -10
- data/lib/axlsx/drawing/line_series.rb +20 -4
- data/lib/axlsx/drawing/num_data.rb +52 -0
- data/lib/axlsx/drawing/num_data_source.rb +61 -0
- data/lib/axlsx/drawing/num_val.rb +32 -0
- data/lib/axlsx/drawing/pic.rb +44 -4
- data/lib/axlsx/drawing/pie_3D_chart.rb +10 -7
- data/lib/axlsx/drawing/pie_series.rb +18 -4
- data/lib/axlsx/drawing/scatter_chart.rb +12 -18
- data/lib/axlsx/drawing/scatter_series.rb +28 -2
- data/lib/axlsx/drawing/ser_axis.rb +1 -1
- data/lib/axlsx/drawing/series.rb +1 -1
- data/lib/axlsx/drawing/str_data.rb +42 -0
- data/lib/axlsx/drawing/str_val.rb +33 -0
- data/lib/axlsx/drawing/title.rb +21 -9
- data/lib/axlsx/drawing/two_cell_anchor.rb +46 -9
- data/lib/axlsx/drawing/view_3D.rb +44 -31
- data/lib/axlsx/drawing/vml_drawing.rb +42 -0
- data/lib/axlsx/drawing/vml_shape.rb +125 -0
- data/lib/axlsx/package.rb +44 -16
- data/lib/axlsx/rels/relationship.rb +3 -3
- data/lib/axlsx/rels/relationships.rb +1 -11
- data/lib/axlsx/stylesheet/color.rb +0 -1
- data/lib/axlsx/stylesheet/dxf.rb +79 -0
- data/lib/axlsx/stylesheet/font.rb +2 -1
- data/lib/axlsx/stylesheet/gradient_fill.rb +1 -1
- data/lib/axlsx/stylesheet/styles.rb +143 -50
- data/lib/axlsx/stylesheet/table_style.rb +3 -3
- data/lib/axlsx/stylesheet/xf.rb +2 -0
- data/lib/axlsx/util/constants.rb +36 -0
- data/lib/axlsx/util/simple_typed_list.rb +15 -21
- data/lib/axlsx/util/validators.rb +122 -5
- 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/shared_strings_table.rb +12 -13
- data/lib/axlsx/workbook/workbook.rb +71 -13
- data/lib/axlsx/workbook/worksheet/auto_filter.rb +34 -0
- data/lib/axlsx/workbook/worksheet/cell.rb +45 -36
- data/lib/axlsx/workbook/worksheet/cfvo.rb +62 -0
- data/lib/axlsx/workbook/worksheet/col.rb +17 -1
- data/lib/axlsx/workbook/worksheet/color_scale.rb +76 -0
- data/lib/axlsx/workbook/worksheet/cols.rb +20 -0
- data/lib/axlsx/workbook/worksheet/comment.rb +101 -0
- data/lib/axlsx/workbook/worksheet/comments.rb +85 -0
- data/lib/axlsx/workbook/worksheet/conditional_formatting.rb +82 -0
- data/lib/axlsx/workbook/worksheet/conditional_formatting_rule.rb +216 -0
- data/lib/axlsx/workbook/worksheet/conditional_formattings.rb +25 -0
- data/lib/axlsx/workbook/worksheet/data_bar.rb +97 -0
- data/lib/axlsx/workbook/worksheet/data_validation.rb +245 -0
- data/lib/axlsx/workbook/worksheet/data_validations.rb +28 -0
- data/lib/axlsx/workbook/worksheet/dimension.rb +65 -0
- data/lib/axlsx/workbook/worksheet/icon_set.rb +83 -0
- data/lib/axlsx/workbook/worksheet/merged_cells.rb +35 -0
- data/lib/axlsx/workbook/worksheet/page_setup.rb +113 -0
- data/lib/axlsx/workbook/worksheet/pane.rb +144 -0
- data/lib/axlsx/workbook/worksheet/print_options.rb +63 -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 +69 -12
- 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_protection.rb +224 -0
- data/lib/axlsx/workbook/worksheet/sheet_view.rb +379 -0
- data/lib/axlsx/workbook/worksheet/table.rb +3 -3
- data/lib/axlsx/workbook/worksheet/tables.rb +31 -0
- data/lib/axlsx/workbook/worksheet/worksheet.rb +379 -233
- data/lib/axlsx/workbook/worksheet/worksheet_comments.rb +57 -0
- data/lib/axlsx/workbook/worksheet/worksheet_drawing.rb +64 -0
- data/lib/axlsx.rb +31 -16
- data/test/benchmark.rb +30 -38
- data/test/content_type/tc_content_type.rb +1 -6
- data/test/doc_props/tc_app.rb +31 -1
- data/test/doc_props/tc_core.rb +3 -1
- data/test/drawing/tc_axis.rb +46 -3
- data/test/drawing/tc_bar_3D_chart.rb +12 -12
- data/test/drawing/tc_bar_series.rb +17 -13
- data/test/drawing/tc_cat_axis.rb +3 -3
- data/test/drawing/tc_cat_axis_data.rb +23 -13
- data/test/drawing/tc_chart.rb +29 -11
- data/test/drawing/tc_d_lbls.rb +47 -0
- data/test/drawing/tc_data_source.rb +17 -0
- data/test/drawing/tc_drawing.rb +11 -5
- data/test/drawing/tc_hyperlink.rb +4 -5
- data/test/drawing/tc_line_series.rb +9 -11
- data/test/drawing/tc_named_axis_data.rb +27 -0
- data/test/drawing/tc_num_data.rb +31 -0
- data/test/drawing/tc_num_val.rb +29 -0
- data/test/drawing/tc_pic.rb +22 -2
- data/test/drawing/tc_pie_3D_chart.rb +4 -8
- data/test/drawing/tc_pie_series.rb +11 -13
- data/test/drawing/tc_scatter_chart.rb +6 -1
- data/test/drawing/tc_scatter_series.rb +6 -5
- data/test/drawing/tc_series.rb +1 -1
- data/test/drawing/tc_str_data.rb +18 -0
- data/test/drawing/tc_str_val.rb +21 -0
- data/test/drawing/tc_title.rb +16 -0
- data/test/drawing/tc_two_cell_anchor.rb +2 -3
- data/test/drawing/tc_view_3D.rb +18 -18
- data/test/drawing/tc_vml_drawing.rb +25 -0
- data/test/drawing/tc_vml_shape.rb +100 -0
- data/test/profile.rb +2 -1
- data/test/rels/tc_relationship.rb +1 -0
- data/test/stylesheet/tc_dxf.rb +81 -0
- data/test/stylesheet/tc_gradient_fill.rb +8 -0
- data/test/stylesheet/tc_pattern_fill.rb +7 -1
- data/test/stylesheet/tc_styles.rb +163 -3
- data/test/stylesheet/tc_table_style.rb +8 -0
- data/test/stylesheet/tc_table_style_element.rb +10 -1
- data/test/tc_helper.rb +1 -0
- data/test/tc_package.rb +93 -17
- data/test/util/tc_simple_typed_list.rb +13 -0
- data/test/util/tc_validators.rb +95 -9
- 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 +3 -11
- data/test/workbook/worksheet/tc_cell.rb +52 -18
- data/test/workbook/worksheet/tc_cfvo.rb +31 -0
- data/test/workbook/worksheet/tc_col.rb +9 -0
- data/test/workbook/worksheet/tc_color_scale.rb +29 -0
- data/test/workbook/worksheet/tc_comment.rb +57 -0
- data/test/workbook/worksheet/tc_comments.rb +57 -0
- data/test/workbook/worksheet/tc_conditional_formatting.rb +217 -0
- data/test/workbook/worksheet/tc_data_bar.rb +39 -0
- data/test/workbook/worksheet/tc_data_validation.rb +265 -0
- data/test/workbook/worksheet/tc_date_time_converter.rb +11 -5
- data/test/workbook/worksheet/tc_icon_set.rb +45 -0
- data/test/workbook/worksheet/tc_page_setup.rb +138 -0
- data/test/workbook/worksheet/tc_pane.rb +94 -0
- data/test/workbook/worksheet/tc_print_options.rb +72 -0
- data/test/workbook/worksheet/tc_protected_range.rb +17 -0
- data/test/workbook/worksheet/tc_row.rb +44 -13
- data/test/workbook/worksheet/tc_selection.rb +94 -0
- data/test/workbook/worksheet/tc_sheet_protection.rb +117 -0
- data/test/workbook/worksheet/tc_sheet_view.rb +214 -0
- data/test/workbook/worksheet/tc_worksheet.rb +147 -50
- metadata +216 -148
- data/examples/example.csv +0 -1000
- data/examples/example.rb~ +0 -112
- data/lib/axlsx/drawing/cat_axis_data.rb +0 -34
- data/lib/axlsx/drawing/hlink_click.rb~ +0 -0
- data/lib/axlsx/drawing/hyperlink.rb~ +0 -64
- data/lib/axlsx/drawing/named_axis_data.rb +0 -36
- data/lib/axlsx/drawing/picture_locking.rb~ +0 -36
- data/lib/axlsx/drawing/val_axis_data.rb +0 -27
- data/lib/axlsx/stylesheet/#num_fmt.rb# +0 -69
- data/lib/axlsx/util/cbf.rb +0 -333
- data/lib/axlsx/util/cfb.rb~ +0 -201
- 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/col.rb~ +0 -0
- 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/#benchmark.txt# +0 -7
- data/test/#tc_helper.rb# +0 -3
- data/test/benchmark.rb~ +0 -0
- data/test/benchmark.txt +0 -6
- data/test/benchmark.txt~ +0 -6
- data/test/drawing/tc_val_axis_data.rb +0 -17
- data/test/example.csv +0 -1000
- data/test/example.xlsx +0 -0
- data/test/example_streamed.xlsx +0 -0
- data/test/tc_axlsx.rb~ +0 -0
- data/test/tc_helper.rb~ +0 -3
- data/test/workbook/worksheet/table/tc_table.rb~ +0 -72
- data/test/workbook/worksheet/tc_col.rb~ +0 -10
data/test/util/tc_validators.rb
CHANGED
|
@@ -8,15 +8,15 @@ class TestValidators < Test::Unit::TestCase
|
|
|
8
8
|
def test_validators
|
|
9
9
|
#unsigned_int
|
|
10
10
|
assert_nothing_raised { Axlsx.validate_unsigned_int 1 }
|
|
11
|
-
assert_nothing_raised { Axlsx.validate_unsigned_int
|
|
12
|
-
assert_raise(ArgumentError) { Axlsx.validate_unsigned_int
|
|
13
|
-
assert_raise(ArgumentError) { Axlsx.validate_unsigned_int
|
|
11
|
+
assert_nothing_raised { Axlsx.validate_unsigned_int(+1) }
|
|
12
|
+
assert_raise(ArgumentError) { Axlsx.validate_unsigned_int(-1)}
|
|
13
|
+
assert_raise(ArgumentError) { Axlsx.validate_unsigned_int('1') }
|
|
14
14
|
|
|
15
15
|
#int
|
|
16
|
-
assert_nothing_raised { Axlsx.validate_int
|
|
17
|
-
assert_nothing_raised { Axlsx.validate_int
|
|
18
|
-
assert_raise(ArgumentError) { Axlsx.validate_int
|
|
19
|
-
assert_raise(ArgumentError) { Axlsx.validate_int
|
|
16
|
+
assert_nothing_raised { Axlsx.validate_int(1) }
|
|
17
|
+
assert_nothing_raised { Axlsx.validate_int(-1) }
|
|
18
|
+
assert_raise(ArgumentError) { Axlsx.validate_int('a')}
|
|
19
|
+
assert_raise(ArgumentError) { Axlsx.validate_int(Array) }
|
|
20
20
|
|
|
21
21
|
#boolean (as 0 or 1, :true, :false, true, false, or "true," "false")
|
|
22
22
|
[0,1,:true, :false, true, false, "true", "false"].each do |v|
|
|
@@ -70,6 +70,92 @@ class TestValidators < Test::Unit::TestCase
|
|
|
70
70
|
assert_raise(ArgumentError) { Axlsx.validate_relationship_type "http://some.url" }
|
|
71
71
|
assert_raise(ArgumentError) { Axlsx.validate_relationship_type false }
|
|
72
72
|
|
|
73
|
-
|
|
74
|
-
|
|
73
|
+
#number_with_unit
|
|
74
|
+
assert_nothing_raised { Axlsx.validate_number_with_unit "210mm" }
|
|
75
|
+
assert_nothing_raised { Axlsx.validate_number_with_unit "8.5in" }
|
|
76
|
+
assert_nothing_raised { Axlsx.validate_number_with_unit "29.7cm" }
|
|
77
|
+
assert_nothing_raised { Axlsx.validate_number_with_unit "120pt" }
|
|
78
|
+
assert_nothing_raised { Axlsx.validate_number_with_unit "0pc" }
|
|
79
|
+
assert_nothing_raised { Axlsx.validate_number_with_unit "12.34pi" }
|
|
80
|
+
assert_raise(ArgumentError) { Axlsx.validate_number_with_unit nil }
|
|
81
|
+
assert_raise(ArgumentError) { Axlsx.validate_number_with_unit "210" }
|
|
82
|
+
assert_raise(ArgumentError) { Axlsx.validate_number_with_unit 210 }
|
|
83
|
+
assert_raise(ArgumentError) { Axlsx.validate_number_with_unit "mm" }
|
|
84
|
+
assert_raise(ArgumentError) { Axlsx.validate_number_with_unit "-29cm" }
|
|
75
85
|
|
|
86
|
+
#scale_10_400
|
|
87
|
+
assert_nothing_raised { Axlsx.validate_scale_10_400 10 }
|
|
88
|
+
assert_nothing_raised { Axlsx.validate_scale_10_400 100 }
|
|
89
|
+
assert_nothing_raised { Axlsx.validate_scale_10_400 400 }
|
|
90
|
+
assert_raise(ArgumentError) { Axlsx.validate_scale_10_400 9 }
|
|
91
|
+
assert_raise(ArgumentError) { Axlsx.validate_scale_10_400 10.0 }
|
|
92
|
+
assert_raise(ArgumentError) { Axlsx.validate_scale_10_400 400.1 }
|
|
93
|
+
assert_raise(ArgumentError) { Axlsx.validate_scale_10_400 "99" }
|
|
94
|
+
|
|
95
|
+
#scale_0_10_400
|
|
96
|
+
assert_nothing_raised { Axlsx.validate_scale_0_10_400 0 }
|
|
97
|
+
assert_nothing_raised { Axlsx.validate_scale_0_10_400 10 }
|
|
98
|
+
assert_nothing_raised { Axlsx.validate_scale_0_10_400 100 }
|
|
99
|
+
assert_nothing_raised { Axlsx.validate_scale_0_10_400 400 }
|
|
100
|
+
assert_raise(ArgumentError) { Axlsx.validate_scale_0_10_400 9 }
|
|
101
|
+
assert_raise(ArgumentError) { Axlsx.validate_scale_0_10_400 10.0 }
|
|
102
|
+
assert_raise(ArgumentError) { Axlsx.validate_scale_0_10_400 400.1 }
|
|
103
|
+
assert_raise(ArgumentError) { Axlsx.validate_scale_0_10_400 "99" }
|
|
104
|
+
|
|
105
|
+
#page_orientation
|
|
106
|
+
assert_nothing_raised { Axlsx.validate_page_orientation :default }
|
|
107
|
+
assert_nothing_raised { Axlsx.validate_page_orientation :landscape }
|
|
108
|
+
assert_nothing_raised { Axlsx.validate_page_orientation :portrait }
|
|
109
|
+
assert_raise(ArgumentError) { Axlsx.validate_page_orientation nil }
|
|
110
|
+
assert_raise(ArgumentError) { Axlsx.validate_page_orientation 1 }
|
|
111
|
+
assert_raise(ArgumentError) { Axlsx.validate_page_orientation "landscape" }
|
|
112
|
+
|
|
113
|
+
#data_validation_error_style
|
|
114
|
+
[:information, :stop, :warning].each do |sym|
|
|
115
|
+
assert_nothing_raised { Axlsx.validate_data_validation_error_style sym }
|
|
116
|
+
end
|
|
117
|
+
assert_raise(ArgumentError) { Axlsx.validate_data_validation_error_style :other_symbol }
|
|
118
|
+
assert_raise(ArgumentError) { Axlsx.validate_data_validation_error_style 'warning' }
|
|
119
|
+
assert_raise(ArgumentError) { Axlsx.validate_data_validation_error_style 0 }
|
|
120
|
+
|
|
121
|
+
#data_validation_operator
|
|
122
|
+
[:lessThan, :lessThanOrEqual, :equal, :notEqual, :greaterThanOrEqual, :greaterThan, :between, :notBetween].each do |sym|
|
|
123
|
+
assert_nothing_raised { Axlsx.validate_data_validation_operator sym }
|
|
124
|
+
end
|
|
125
|
+
assert_raise(ArgumentError) { Axlsx.validate_data_validation_error_style :other_symbol }
|
|
126
|
+
assert_raise(ArgumentError) { Axlsx.validate_data_validation_error_style 'lessThan' }
|
|
127
|
+
assert_raise(ArgumentError) { Axlsx.validate_data_validation_error_style 0 }
|
|
128
|
+
|
|
129
|
+
#data_validation_type
|
|
130
|
+
[:custom, :data, :decimal, :list, :none, :textLength, :time, :whole].each do |sym|
|
|
131
|
+
assert_nothing_raised { Axlsx.validate_data_validation_type sym }
|
|
132
|
+
end
|
|
133
|
+
assert_raise(ArgumentError) { Axlsx.validate_data_validation_error_style :other_symbol }
|
|
134
|
+
assert_raise(ArgumentError) { Axlsx.validate_data_validation_error_style 'decimal' }
|
|
135
|
+
assert_raise(ArgumentError) { Axlsx.validate_data_validation_error_style 0 }
|
|
136
|
+
|
|
137
|
+
#sheet_view_type
|
|
138
|
+
[:normal, :page_break_preview, :page_layout].each do |sym|
|
|
139
|
+
assert_nothing_raised { Axlsx.validate_sheet_view_type sym }
|
|
140
|
+
end
|
|
141
|
+
assert_raise(ArgumentError) { Axlsx.validate_data_validation_error_style :other_symbol }
|
|
142
|
+
assert_raise(ArgumentError) { Axlsx.validate_data_validation_error_style 'page_layout' }
|
|
143
|
+
assert_raise(ArgumentError) { Axlsx.validate_data_validation_error_style 0 }
|
|
144
|
+
|
|
145
|
+
#active_pane_type
|
|
146
|
+
[:bottom_left, :bottom_right, :top_left, :top_right].each do |sym|
|
|
147
|
+
assert_nothing_raised { Axlsx.validate_pane_type sym }
|
|
148
|
+
end
|
|
149
|
+
assert_raise(ArgumentError) { Axlsx.validate_pane_type :other_symbol }
|
|
150
|
+
assert_raise(ArgumentError) { Axlsx.validate_pane_type 'bottom_left' }
|
|
151
|
+
assert_raise(ArgumentError) { Axlsx.validate_pane_type 0 }
|
|
152
|
+
|
|
153
|
+
#split_state_type
|
|
154
|
+
[:frozen, :frozen_split, :split].each do |sym|
|
|
155
|
+
assert_nothing_raised { Axlsx.validate_split_state_type sym }
|
|
156
|
+
end
|
|
157
|
+
assert_raise(ArgumentError) { Axlsx.validate_split_state_type :other_symbol }
|
|
158
|
+
assert_raise(ArgumentError) { Axlsx.validate_split_state_type 'frozen_split' }
|
|
159
|
+
assert_raise(ArgumentError) { Axlsx.validate_split_state_type 0 }
|
|
160
|
+
end
|
|
161
|
+
end
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
require 'tc_helper'
|
|
2
|
+
|
|
3
|
+
class TestDefinedNames < Test::Unit::TestCase
|
|
4
|
+
def setup
|
|
5
|
+
@dn = Axlsx::DefinedName.new('Sheet1!A1:A1')
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
def test_initialize
|
|
9
|
+
assert_equal('Sheet1!A1:A1', @dn.formula)
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def test_string_attributes
|
|
13
|
+
Axlsx::DefinedName::STRING_ATTRIBUTES.each do |attr|
|
|
14
|
+
assert_raise(ArgumentError, 'only strings allowed in string attributes') { @dn.send("#{attr}=", 1) }
|
|
15
|
+
assert_nothing_raised { @dn.send("#{attr}=", '_xlnm.Sheet_Title') }
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def test_boolean_attributes
|
|
20
|
+
Axlsx::DefinedName::BOOLEAN_ATTRIBUTES.each do |attr|
|
|
21
|
+
assert_raise(ArgumentError, 'only booleanish allowed in string attributes') { @dn.send("#{attr}=", 'foo') }
|
|
22
|
+
assert_nothing_raised { @dn.send("#{attr}=", 1) }
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def test_local_sheet_id
|
|
28
|
+
assert_raise(ArgumentError, 'local_sheet_id must be an unsigned int') { @dn.local_sheet_id = -1 }
|
|
29
|
+
assert_nothing_raised { @dn.local_sheet_id = 1 }
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def test_to_xml_string
|
|
33
|
+
assert_raise(ArgumentError, 'name is required for serialization') { @dn.to_xml_string }
|
|
34
|
+
@dn.name = '_xlnm.Print_Titles'
|
|
35
|
+
@dn.hidden = true
|
|
36
|
+
doc = Nokogiri::XML(@dn.to_xml_string)
|
|
37
|
+
assert(doc.xpath("//definedName[@name='_xlnm.Print_Titles']"))
|
|
38
|
+
assert(doc.xpath("//definedName[@hidden='true']"))
|
|
39
|
+
assert_equal('Sheet1!A1:A1', doc.xpath('//definedName').text)
|
|
40
|
+
end
|
|
41
|
+
end
|
|
@@ -24,7 +24,10 @@ class TestWorkbook < Test::Unit::TestCase
|
|
|
24
24
|
assert_equal(Axlsx::Workbook.date1904, @wb.date1904)
|
|
25
25
|
end
|
|
26
26
|
|
|
27
|
-
|
|
27
|
+
def test_add_defined_name
|
|
28
|
+
@wb.add_defined_name 'Sheet1!1:1', :name => '_xlnm.Print_Titles', :hidden => true
|
|
29
|
+
assert_equal(1, @wb.defined_names.size)
|
|
30
|
+
end
|
|
28
31
|
|
|
29
32
|
def test_shared_strings
|
|
30
33
|
assert_equal(@wb.use_shared_strings, nil)
|
|
@@ -72,14 +75,13 @@ class TestWorkbook < Test::Unit::TestCase
|
|
|
72
75
|
assert(@wb.worksheets.size == 1)
|
|
73
76
|
end
|
|
74
77
|
|
|
75
|
-
|
|
76
78
|
def test_to_xml_string_defined_names
|
|
77
79
|
@wb.add_worksheet do |sheet|
|
|
78
80
|
sheet.add_row [1, "two"]
|
|
79
81
|
sheet.auto_filter = "A1:B1"
|
|
80
82
|
end
|
|
81
83
|
doc = Nokogiri::XML(@wb.to_xml_string)
|
|
82
|
-
assert_equal(doc.xpath('//xmlns:workbook/xmlns:definedNames/xmlns:definedName').inner_text, @wb.worksheets[0].
|
|
84
|
+
assert_equal(doc.xpath('//xmlns:workbook/xmlns:definedNames/xmlns:definedName').inner_text, @wb.worksheets[0].auto_filter.defined_name)
|
|
83
85
|
end
|
|
84
86
|
|
|
85
87
|
|
|
@@ -25,26 +25,18 @@ class TestTable < Test::Unit::TestCase
|
|
|
25
25
|
|
|
26
26
|
end
|
|
27
27
|
|
|
28
|
-
def test_charts
|
|
29
|
-
assert(@ws.drawing.charts.empty?)
|
|
30
|
-
chart = @ws.add_chart(Axlsx::Pie3DChart, :title=>"bob", :start_at=>[0,0], :end_at=>[1,1])
|
|
31
|
-
assert_equal(@ws.drawing.charts.last, chart, "add chart is returned")
|
|
32
|
-
chart = @ws.add_chart(Axlsx::Pie3DChart, :title=>"nancy", :start_at=>[1,5], :end_at=>[5,10])
|
|
33
|
-
assert_equal(@ws.drawing.charts.last, chart, "add chart is returned")
|
|
34
|
-
end
|
|
35
|
-
|
|
36
28
|
def test_pn
|
|
37
|
-
|
|
29
|
+
@ws.add_table("A1:D5")
|
|
38
30
|
assert_equal(@ws.tables.first.pn, "tables/table1.xml")
|
|
39
31
|
end
|
|
40
32
|
|
|
41
33
|
def test_rId
|
|
42
|
-
|
|
34
|
+
@ws.add_table("A1:D5")
|
|
43
35
|
assert_equal(@ws.tables.first.rId, "rId1")
|
|
44
36
|
end
|
|
45
37
|
|
|
46
38
|
def test_index
|
|
47
|
-
|
|
39
|
+
@ws.add_table("A1:D5")
|
|
48
40
|
assert_equal(@ws.tables.first.index, @ws.workbook.tables.index(@ws.tables.first))
|
|
49
41
|
end
|
|
50
42
|
|
|
@@ -33,7 +33,7 @@ class TestCell < Test::Unit::TestCase
|
|
|
33
33
|
assert_equal(@c.index, @row.cells.index(@c))
|
|
34
34
|
end
|
|
35
35
|
|
|
36
|
-
def
|
|
36
|
+
def test_pos
|
|
37
37
|
assert_equal(@c.pos, [@c.index, @c.row.index])
|
|
38
38
|
end
|
|
39
39
|
|
|
@@ -197,31 +197,17 @@ class TestCell < Test::Unit::TestCase
|
|
|
197
197
|
end
|
|
198
198
|
|
|
199
199
|
def test_merge_with_string
|
|
200
|
-
assert_equal(@c.row.worksheet.merged_cells.size, 0)
|
|
201
200
|
@c.row.add_cell 2
|
|
202
201
|
@c.row.add_cell 3
|
|
203
202
|
@c.merge "A2"
|
|
204
|
-
assert_equal(@c.row.worksheet.merged_cells.last, "A1:A2")
|
|
203
|
+
assert_equal(@c.row.worksheet.send(:merged_cells).last, "A1:A2")
|
|
205
204
|
end
|
|
206
205
|
|
|
207
206
|
def test_merge_with_cell
|
|
208
|
-
assert_equal(@c.row.worksheet.merged_cells.size, 0)
|
|
209
207
|
@c.row.add_cell 2
|
|
210
208
|
@c.row.add_cell 3
|
|
211
209
|
@c.merge @row.cells.last
|
|
212
|
-
assert_equal(@c.row.worksheet.merged_cells.last, "A1:C1")
|
|
213
|
-
end
|
|
214
|
-
|
|
215
|
-
def test_equality
|
|
216
|
-
c2 = @row.add_cell 1, :type=>:float, :style=>1
|
|
217
|
-
|
|
218
|
-
assert_equal(c2.shareable_hash,@c.shareable_hash)
|
|
219
|
-
c3 = @row.add_cell 2, :type=>:float, :style=>1
|
|
220
|
-
c4 = @row.add_cell 1, :type=>:float, :style=>1, :color => "#FFFFFFFF"
|
|
221
|
-
assert_equal(c4.shareable_hash == c2.shareable_hash,false)
|
|
222
|
-
c5 = @row.add_cell 1, :type=>:float, :style=>1, :color => "#FFFFFFFF"
|
|
223
|
-
assert_equal(c5.shareable_hash, c4.shareable_hash)
|
|
224
|
-
|
|
210
|
+
assert_equal(@c.row.worksheet.send(:merged_cells).last, "A1:C1")
|
|
225
211
|
end
|
|
226
212
|
|
|
227
213
|
def test_ssti
|
|
@@ -230,13 +216,61 @@ class TestCell < Test::Unit::TestCase
|
|
|
230
216
|
assert_equal(@c.ssti, 1)
|
|
231
217
|
end
|
|
232
218
|
|
|
219
|
+
def test_plain_string
|
|
220
|
+
@c.type = :integer
|
|
221
|
+
assert_equal(@c.plain_string?, false)
|
|
222
|
+
|
|
223
|
+
@c.type = :string
|
|
224
|
+
@c.value = 'plain string'
|
|
225
|
+
assert_equal(@c.plain_string?, true)
|
|
226
|
+
|
|
227
|
+
@c.value = nil
|
|
228
|
+
assert_equal(@c.plain_string?, false)
|
|
229
|
+
|
|
230
|
+
@c.value = ''
|
|
231
|
+
assert_equal(@c.plain_string?, false)
|
|
232
|
+
|
|
233
|
+
@c.value = '=sum'
|
|
234
|
+
assert_equal(@c.plain_string?, false)
|
|
235
|
+
|
|
236
|
+
@c.value = 'plain string'
|
|
237
|
+
@c.font_name = 'Arial'
|
|
238
|
+
assert_equal(@c.plain_string?, false)
|
|
239
|
+
end
|
|
240
|
+
|
|
233
241
|
def test_to_xml_string
|
|
234
242
|
c_xml = Nokogiri::XML(@c.to_xml_string(1,1))
|
|
235
243
|
assert_equal(c_xml.xpath("/c[@s=1]").size, 1)
|
|
236
244
|
end
|
|
245
|
+
|
|
246
|
+
def test_to_xml_string_nil
|
|
247
|
+
@c.value = nil
|
|
248
|
+
c_xml = Nokogiri::XML(@c.to_xml_string(1,1))
|
|
249
|
+
assert_equal(c_xml.xpath("/c[@s=1]").size, 1)
|
|
250
|
+
end
|
|
251
|
+
|
|
252
|
+
def test_to_xml_string_with_run
|
|
253
|
+
@c.b = true
|
|
254
|
+
@c.type = :string
|
|
255
|
+
@c.value = "a"
|
|
256
|
+
@c.font_name = 'arial'
|
|
257
|
+
@c.color = 'FF0000'
|
|
258
|
+
c_xml = Nokogiri::XML(@c.to_xml_string(1,1))
|
|
259
|
+
assert(c_xml.xpath("//b"))
|
|
260
|
+
end
|
|
261
|
+
def test_to_xml_string_formula
|
|
262
|
+
p = Axlsx::Package.new
|
|
263
|
+
ws = p.workbook.add_worksheet do |sheet|
|
|
264
|
+
sheet.add_row ["=IF(2+2=4,4,5)"]
|
|
265
|
+
end
|
|
266
|
+
doc = Nokogiri::XML(ws.to_xml_string)
|
|
267
|
+
assert(doc.xpath("//f[@text()='IF(2+2=4,4,5)']"))
|
|
268
|
+
|
|
269
|
+
end
|
|
270
|
+
|
|
237
271
|
def test_to_xml
|
|
238
272
|
# TODO This could use some much more stringent testing related to the xml content generated!
|
|
239
|
-
|
|
273
|
+
@ws.add_row [Time.now, Date.today, true, 1, 1.0, "text", "=sum(A1:A2)"]
|
|
240
274
|
schema = Nokogiri::XML::Schema(File.open(Axlsx::SML_XSD))
|
|
241
275
|
doc = Nokogiri::XML(@ws.to_xml_string)
|
|
242
276
|
errors = []
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
require 'tc_helper.rb'
|
|
2
|
+
|
|
3
|
+
class TestCfvo < Test::Unit::TestCase
|
|
4
|
+
def setup
|
|
5
|
+
@cfvo = Axlsx::Cfvo.new(:val => "0", :type => :min)
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
def test_val
|
|
9
|
+
assert_nothing_raised { @cfvo.val = "abc" }
|
|
10
|
+
assert_equal(@cfvo.val, "abc")
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def test_type
|
|
14
|
+
assert_raise(ArgumentError) { @cfvo.type = :invalid_type }
|
|
15
|
+
assert_nothing_raised { @cfvo.type = :max }
|
|
16
|
+
assert_equal(@cfvo.type, :max)
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def test_gte
|
|
20
|
+
assert_raise(ArgumentError) { @cfvo.gte = :bob }
|
|
21
|
+
assert_equal(@cfvo.gte, true)
|
|
22
|
+
assert_nothing_raised { @cfvo.gte = false }
|
|
23
|
+
assert_equal(@cfvo.gte, false)
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def test_to_xml_string
|
|
27
|
+
doc = Nokogiri::XML.parse(@cfvo.to_xml_string)
|
|
28
|
+
assert doc.xpath(".//cfvo[@type='min'][@val=0][@gte=true]")
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
end
|
|
@@ -6,6 +6,13 @@ class TestCol < Test::Unit::TestCase
|
|
|
6
6
|
@col = Axlsx::Col.new 1, 1
|
|
7
7
|
end
|
|
8
8
|
|
|
9
|
+
def test_initialize
|
|
10
|
+
options = { :width => 12, :collapsed => true, :hidden => true, :outlineLevel => 1, :phonetic => true, :style => 1}
|
|
11
|
+
|
|
12
|
+
col = Axlsx::Col.new 0, 0, options
|
|
13
|
+
options.each{ |key, value| assert_equal(col.send(key.to_sym), value) }
|
|
14
|
+
end
|
|
15
|
+
|
|
9
16
|
def test_min_max_required
|
|
10
17
|
assert_raise(ArgumentError, 'min and max must be specified when creating a new column') { Axlsx::Col.new }
|
|
11
18
|
assert_raise(ArgumentError, 'min and max must be specified when creating a new column') { Axlsx::Col.new nil, nil }
|
|
@@ -53,6 +60,8 @@ class TestCol < Test::Unit::TestCase
|
|
|
53
60
|
|
|
54
61
|
def test_style
|
|
55
62
|
assert_equal(@col.style, nil)
|
|
63
|
+
@col.style = 1
|
|
64
|
+
assert_equal(@col.style, 1)
|
|
56
65
|
#TODO check that the style specified is actually in the styles xfs collection
|
|
57
66
|
end
|
|
58
67
|
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
require 'tc_helper.rb'
|
|
2
|
+
|
|
3
|
+
class TestColorScale < Test::Unit::TestCase
|
|
4
|
+
def setup
|
|
5
|
+
@color_scale = Axlsx::ColorScale.new
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
def test_add
|
|
9
|
+
@color_scale.add :type => :max, :val => 5, :color => "FFDEDEDE"
|
|
10
|
+
assert_equal(@color_scale.value_objects.size,3)
|
|
11
|
+
assert_equal(@color_scale.colors.size,3)
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def test_delete_at
|
|
15
|
+
assert_raise(ArgumentError, "minimum two are protected") { @color_scale.delete_at 0 }
|
|
16
|
+
assert_raise(ArgumentError, "minimum two are protected") { @color_scale.delete_at 1 }
|
|
17
|
+
@color_scale.add :type => :max, :val => 5, :color => "FFDEDEDE"
|
|
18
|
+
assert_nothing_raised {@color_scale.delete_at 2}
|
|
19
|
+
assert_equal(@color_scale.value_objects.size,2)
|
|
20
|
+
assert_equal(@color_scale.colors.size,2)
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def test_to_xml_string
|
|
24
|
+
doc = Nokogiri::XML.parse(@color_scale.to_xml_string)
|
|
25
|
+
assert_equal(doc.xpath(".//colorScale//cfvo").size, 2)
|
|
26
|
+
assert_equal(doc.xpath(".//colorScale//color").size, 2)
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
end
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
require 'tc_helper.rb'
|
|
2
|
+
|
|
3
|
+
class TestComment < Test::Unit::TestCase
|
|
4
|
+
def setup
|
|
5
|
+
p = Axlsx::Package.new
|
|
6
|
+
wb = p.workbook
|
|
7
|
+
@ws = wb.add_worksheet
|
|
8
|
+
@c1 = @ws.add_comment :ref => 'A1', :text => 'penut machine', :author => 'crank'
|
|
9
|
+
@c2 = @ws.add_comment :ref => 'C3', :text => 'rust bucket', :author => 'PO'
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def test_initailize
|
|
13
|
+
assert_raise(ArgumentError) { Axlsx::Comment.new }
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def test_author
|
|
17
|
+
assert(@c1.author == 'crank')
|
|
18
|
+
assert(@c2.author == 'PO')
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def test_text
|
|
22
|
+
assert(@c1.text == 'penut machine')
|
|
23
|
+
assert(@c2.text == 'rust bucket')
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def test_author_index
|
|
27
|
+
assert_equal(@c1.author_index, 1)
|
|
28
|
+
assert_equal(@c2.author_index, 0)
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def test_ref
|
|
32
|
+
assert(@c1.ref == 'A1')
|
|
33
|
+
assert(@c2.ref == 'C3')
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def test_vml_shape
|
|
37
|
+
pos = Axlsx::name_to_indices(@c1.ref)
|
|
38
|
+
assert(@c1.vml_shape.is_a?(Axlsx::VmlShape))
|
|
39
|
+
assert(@c1.vml_shape.column == pos[0])
|
|
40
|
+
assert(@c1.vml_shape.row == pos[1])
|
|
41
|
+
assert(@c1.vml_shape.row == pos[1])
|
|
42
|
+
assert_equal(pos[0], @c1.vml_shape.left_column)
|
|
43
|
+
assert(@c1.vml_shape.top_row == pos[1])
|
|
44
|
+
assert_equal(pos[0] + 2 , @c1.vml_shape.right_column)
|
|
45
|
+
assert(@c1.vml_shape.bottom_row == pos[1]+4)
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
def to_xml_string
|
|
49
|
+
doc = Nokogiri::XML(@c1.to_xml_string)
|
|
50
|
+
assert_equal(doc.xpath("//comment[@ref='#{@c1.ref}']").size, 1)
|
|
51
|
+
assert_equal(doc.xpath("//comment[@authorId='#{@c1.author_index.to}']").size, 1)
|
|
52
|
+
assert_equal(doc.xpath("//t[text()='#{@c1.author}']").size, 1)
|
|
53
|
+
assert_equal(doc.xpath("//t[text()='#{@c1.text}']").size, 1)
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
end
|
|
57
|
+
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
require 'tc_helper.rb'
|
|
2
|
+
|
|
3
|
+
class TestComments < Test::Unit::TestCase
|
|
4
|
+
def setup
|
|
5
|
+
p = Axlsx::Package.new
|
|
6
|
+
wb = p.workbook
|
|
7
|
+
@ws = wb.add_worksheet
|
|
8
|
+
@c1 = @ws.add_comment :ref => 'A1', :text => 'penut machine', :author => 'crank'
|
|
9
|
+
@c2 = @ws.add_comment :ref => 'C3', :text => 'rust bucket', :author => 'PO'
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def test_initialize
|
|
13
|
+
assert_raise(ArgumentError) { Axlsx::Comments.new }
|
|
14
|
+
assert(@ws.comments.vml_drawing.is_a?(Axlsx::VmlDrawing))
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def test_add_comment
|
|
18
|
+
assert_equal(@ws.comments.size, 2)
|
|
19
|
+
assert_raise(ArgumentError) { @ws.comments.add_comment() }
|
|
20
|
+
assert_raise(ArgumentError) { @ws.comments.add_comment(:text => 'Yes We Can', :ref => 'A1') }
|
|
21
|
+
assert_raise(ArgumentError) { @ws.comments.add_comment(:author => 'bob', :ref => 'A1') }
|
|
22
|
+
assert_raise(ArgumentError) { @ws.comments.add_comment(:author => 'bob', :text => 'Yes We Can')}
|
|
23
|
+
assert_nothing_raised { @ws.comments.add_comment(:author => 'bob', :text => 'Yes We Can', :ref => 'A1') }
|
|
24
|
+
assert_equal(@ws.comments.size, 3)
|
|
25
|
+
end
|
|
26
|
+
def test_authors
|
|
27
|
+
assert_equal(@ws.comments.authors.size, @ws.comments.size)
|
|
28
|
+
@ws.add_comment(:text => 'Yes We Can!', :author => :bob, :ref => 'F1')
|
|
29
|
+
assert_equal(@ws.comments.authors.size, 3)
|
|
30
|
+
@ws.add_comment(:text => 'Yes We Can!', :author => :bob, :ref => 'F1')
|
|
31
|
+
assert_equal(@ws.comments.authors.size, 3, 'only unique authors are returned')
|
|
32
|
+
end
|
|
33
|
+
def test_pn
|
|
34
|
+
assert_equal(@ws.comments.pn, Axlsx::COMMENT_PN % (@ws.index+1).to_s)
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def test_index
|
|
38
|
+
assert_equal(@ws.index, @ws.comments.index)
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def test_to_xml_string
|
|
42
|
+
doc = Nokogiri::XML(@ws.comments.to_xml_string)
|
|
43
|
+
schema = Nokogiri::XML::Schema(File.open(Axlsx::SML_XSD))
|
|
44
|
+
errors = []
|
|
45
|
+
schema.validate(doc).each do |error|
|
|
46
|
+
errors << error
|
|
47
|
+
end
|
|
48
|
+
assert_equal(0, errors.length)
|
|
49
|
+
|
|
50
|
+
# TODO figure out why these xpath expressions dont work!
|
|
51
|
+
# assert(doc.xpath("//comments"))
|
|
52
|
+
# assert_equal(doc.xpath("//xmlns:author").size, @ws.comments.authors.size)
|
|
53
|
+
# assert_equal(doc.xpath("//comment").size, @ws.comments.size)
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
|