axlsx 1.1.4 → 1.3.1
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 +6 -2
- data/CHANGELOG.md +72 -0
- data/README.md +114 -31
- data/Rakefile +11 -3
- data/examples/auto_filter.rb +16 -0
- data/examples/auto_filter.xlsx +0 -0
- data/examples/basic_charts.rb +58 -0
- data/examples/chart_colors.rb +17 -2
- data/examples/data_validation.rb +50 -0
- data/examples/example.rb +171 -60
- data/examples/example.xlsx +0 -0
- data/examples/example_streamed.xlsx +0 -0
- data/examples/extractive.pdf +0 -0
- data/examples/extractive.rb +3 -0
- data/examples/extractive.xlsx +0 -0
- data/examples/hyperlinks.rb +23 -0
- data/examples/hyperlinks.xlsx +0 -0
- data/examples/no-use_autowidth.xlsx +0 -0
- data/examples/page_setup.rb +11 -0
- data/examples/page_setup.xlsx +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/axlsx.csv +1 -0
- data/examples/skydrive/axlsx.xlsx +0 -0
- data/examples/skydrive/real_example.rb +8 -8
- data/examples/sprk2012/Screen Shot 2012-09-11 at 10.42.06 PM.png +0 -0
- data/examples/sprk2012/Screen Shot 2012-09-11 at 11.07.48 PM.png +0 -0
- data/examples/sprk2012/Screen Shot 2012-09-11 at 8.31.50 PM.png +0 -0
- data/examples/sprk2012/Screen Shot 2012-09-11 at 9.23.27 PM.png +0 -0
- data/examples/sprk2012/Screen Shot 2012-09-11 at 9.32.06 PM.png +0 -0
- data/examples/sprk2012/Screen Shot 2012-09-11 at 9.33.35 PM.png +0 -0
- data/examples/sprk2012/Screen Shot 2012-09-11 at 9.46.44 PM.png +0 -0
- data/examples/sprk2012/Screen Shot 2012-09-12 at 5.07.23 PM.png +0 -0
- data/examples/sprk2012/basics.rb +11 -0
- data/examples/sprk2012/basics.xlsx +0 -0
- data/examples/sprk2012/gravatar.jpeg +0 -0
- data/examples/sprk2012/hair_club.jpg +0 -0
- data/examples/sprk2012/images.rb +9 -0
- data/examples/sprk2012/images.xlsx +0 -0
- data/examples/sprk2012/line_chart.rb +56 -0
- data/examples/sprk2012/line_chart.xlsx +0 -0
- data/examples/sprk2012/sprk2012.key +0 -0
- data/examples/sprk2012/styles.rb +20 -0
- data/examples/sprk2012/styles.xlsx +0 -0
- data/examples/styles.rb +62 -0
- data/examples/styles.xlsx +0 -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 +7 -6
- data/lib/axlsx/drawing/axis.rb +82 -36
- data/lib/axlsx/drawing/bar_3D_chart.rb +49 -45
- data/lib/axlsx/drawing/bar_series.rb +2 -1
- 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 +20 -8
- data/lib/axlsx/drawing/graphic_frame.rb +2 -1
- 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 +4 -1
- data/lib/axlsx/drawing/pic.rb +44 -4
- 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 +46 -9
- data/lib/axlsx/drawing/view_3D.rb +42 -32
- data/lib/axlsx/drawing/vml_drawing.rb +42 -0
- data/lib/axlsx/drawing/vml_shape.rb +125 -0
- data/lib/axlsx/package.rb +43 -16
- data/lib/axlsx/rels/relationship.rb +3 -3
- data/lib/axlsx/rels/relationships.rb +1 -11
- data/lib/axlsx/stylesheet/gradient_fill.rb +1 -1
- data/lib/axlsx/stylesheet/styles.rb +11 -2
- data/lib/axlsx/stylesheet/table_style.rb +3 -3
- data/lib/axlsx/util/constants.rb +131 -2
- data/lib/axlsx/util/simple_typed_list.rb +18 -22
- data/lib/axlsx/util/validators.rb +100 -9
- 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 +70 -13
- data/lib/axlsx/workbook/worksheet/auto_filter/auto_filter.rb +77 -0
- data/lib/axlsx/workbook/worksheet/auto_filter/filter_column.rb +102 -0
- data/lib/axlsx/workbook/worksheet/auto_filter/filters.rb +253 -0
- data/lib/axlsx/workbook/worksheet/cell.rb +41 -8
- data/lib/axlsx/workbook/worksheet/col.rb +15 -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_formattings.rb +25 -0
- data/lib/axlsx/workbook/worksheet/data_bar.rb +1 -1
- 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/date_time_converter.rb +1 -1
- 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_set_up_pr.rb +47 -0
- data/lib/axlsx/workbook/worksheet/page_setup.rb +241 -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 +36 -20
- data/lib/axlsx/workbook/worksheet/selection.rb +111 -0
- data/lib/axlsx/workbook/worksheet/sheet_calc_pr.rb +49 -0
- data/lib/axlsx/workbook/worksheet/sheet_data.rb +25 -0
- data/lib/axlsx/workbook/worksheet/sheet_pr.rb +107 -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 +10 -3
- data/lib/axlsx/workbook/worksheet/table_style_info.rb +68 -0
- data/lib/axlsx/workbook/worksheet/tables.rb +31 -0
- data/lib/axlsx/workbook/worksheet/worksheet.rb +414 -254
- data/lib/axlsx/workbook/worksheet/worksheet_comments.rb +57 -0
- data/lib/axlsx/workbook/worksheet/worksheet_drawing.rb +64 -0
- data/lib/axlsx/workbook/worksheet/worksheet_hyperlink.rb +101 -0
- data/lib/axlsx/workbook/worksheet/worksheet_hyperlinks.rb +38 -0
- data/lib/axlsx.rb +38 -16
- 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 +38 -3
- 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 +29 -9
- data/test/drawing/tc_d_lbls.rb +47 -0
- data/test/drawing/tc_drawing.rb +11 -5
- data/test/drawing/tc_hyperlink.rb +4 -5
- data/test/drawing/tc_line_series.rb +7 -3
- data/test/drawing/tc_num_data.rb +5 -1
- 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 +7 -2
- data/test/drawing/tc_scatter_chart.rb +6 -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_two_cell_anchor.rb +1 -2
- 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/rels/tc_relationship.rb +1 -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 +16 -4
- 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 +94 -17
- data/test/util/tc_simple_typed_list.rb +13 -0
- data/test/util/tc_validators.rb +101 -8
- data/test/workbook/tc_defined_name.rb +41 -0
- data/test/workbook/tc_workbook.rb +5 -3
- 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_cell.rb +53 -7
- data/test/workbook/worksheet/tc_col.rb +9 -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 +44 -0
- data/test/workbook/worksheet/tc_data_bar.rb +1 -1
- data/test/workbook/worksheet/tc_data_validation.rb +265 -0
- data/test/workbook/worksheet/tc_page_set_up_pr.rb +15 -0
- data/test/workbook/worksheet/tc_page_setup.rb +143 -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 +32 -14
- data/test/workbook/worksheet/tc_selection.rb +94 -0
- data/test/workbook/worksheet/tc_sheet_calc_pr.rb +18 -0
- data/test/workbook/worksheet/tc_sheet_pr.rb +27 -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/{table/tc_table.rb → tc_table.rb} +9 -12
- data/test/workbook/worksheet/tc_table_style_info.rb +53 -0
- data/test/workbook/worksheet/tc_worksheet.rb +155 -51
- data/test/workbook/worksheet/tc_worksheet_hyperlink.rb +64 -0
- metadata +194 -81
- data/examples/#extractive.csv# +0 -0
- data/examples/#extractive.rb# +0 -45
- data/examples/chart_colors.rb~ +0 -0
- data/examples/chart_colors.xlsx +0 -0
- data/examples/colored_series_data.xlsx +0 -0
- data/examples/conditional_formatting/getting_barred.xlsx +0 -0
- data/examples/example.csv +0 -1000
- data/examples/extractive.csv +0 -1
- data/examples/extractive.csv~ +0 -1
- data/examples/extractive.rb~ +0 -3
- data/examples/stack.rb +0 -21
- data/examples/stack.rb~ +0 -27
- data/examples/stack.xlsx +0 -0
- data/examples/~$chart_colors.xlsx +0 -0
- data/examples/~$extractive.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/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/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/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
|
|
@@ -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,29 +28,20 @@ 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
|
-
end
|
|
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
31
|
end
|
|
35
32
|
|
|
36
33
|
def test_pn
|
|
37
|
-
|
|
34
|
+
@ws.add_table("A1:D5")
|
|
38
35
|
assert_equal(@ws.tables.first.pn, "tables/table1.xml")
|
|
39
36
|
end
|
|
40
37
|
|
|
41
38
|
def test_rId
|
|
42
|
-
|
|
39
|
+
@ws.add_table("A1:D5")
|
|
43
40
|
assert_equal(@ws.tables.first.rId, "rId1")
|
|
44
41
|
end
|
|
45
42
|
|
|
46
43
|
def test_index
|
|
47
|
-
|
|
44
|
+
@ws.add_table("A1:D5")
|
|
48
45
|
assert_equal(@ws.tables.first.index, @ws.workbook.tables.index(@ws.tables.first))
|
|
49
46
|
end
|
|
50
47
|
|
|
@@ -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
|
|
@@ -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
|
|
@@ -25,6 +33,28 @@ class TestWorksheet < Test::Unit::TestCase
|
|
|
25
33
|
end
|
|
26
34
|
end
|
|
27
35
|
|
|
36
|
+
def test_page_setup
|
|
37
|
+
assert(@ws.page_setup.is_a? Axlsx::PageSetup)
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def test_page_setup_yield
|
|
41
|
+
@ws.page_setup do |ps|
|
|
42
|
+
assert(ps.is_a? Axlsx::PageSetup)
|
|
43
|
+
assert(@ws.page_setup == ps)
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def test_print_options
|
|
48
|
+
assert(@ws.print_options.is_a? Axlsx::PrintOptions)
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
def test_print_options_yield
|
|
52
|
+
@ws.print_options do |po|
|
|
53
|
+
assert(po.is_a? Axlsx::PrintOptions)
|
|
54
|
+
assert(@ws.print_options == po)
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
|
|
28
58
|
def test_no_autowidth
|
|
29
59
|
@ws.workbook.use_autowidth = false
|
|
30
60
|
@ws.add_row [1,2,3,4]
|
|
@@ -33,16 +63,22 @@ class TestWorksheet < Test::Unit::TestCase
|
|
|
33
63
|
|
|
34
64
|
def test_initialization_options
|
|
35
65
|
page_margins = {:left => 2, :right => 2, :bottom => 2, :top => 2, :header => 2, :footer => 2}
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
66
|
+
page_setup = {:fit_to_height => 1, :fit_to_width => 1, :orientation => :landscape, :paper_width => "210mm", :paper_height => "297mm", :scale => 80}
|
|
67
|
+
print_options = {:grid_lines => true, :headings => true, :horizontal_centered => true, :vertical_centered => true}
|
|
68
|
+
optioned = @ws.workbook.add_worksheet(:name => 'bob', :page_margins => page_margins, :page_setup => page_setup, :print_options => print_options, :selected => true, :show_gridlines => false)
|
|
69
|
+
page_margins.keys.each do |key|
|
|
70
|
+
assert_equal(page_margins[key], optioned.page_margins.send(key))
|
|
71
|
+
end
|
|
72
|
+
page_setup.keys.each do |key|
|
|
73
|
+
assert_equal(page_setup[key], optioned.page_setup.send(key))
|
|
74
|
+
end
|
|
75
|
+
print_options.keys.each do |key|
|
|
76
|
+
assert_equal(print_options[key], optioned.print_options.send(key))
|
|
77
|
+
end
|
|
43
78
|
assert_equal(optioned.name, 'bob')
|
|
44
79
|
assert_equal(optioned.selected, true)
|
|
45
80
|
assert_equal(optioned.show_gridlines, false)
|
|
81
|
+
|
|
46
82
|
end
|
|
47
83
|
|
|
48
84
|
|
|
@@ -77,7 +113,12 @@ class TestWorksheet < Test::Unit::TestCase
|
|
|
77
113
|
def test_dimension
|
|
78
114
|
@ws.add_row [1, 2, 3]
|
|
79
115
|
@ws.add_row [4, 5, 6]
|
|
80
|
-
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
|
|
81
122
|
end
|
|
82
123
|
|
|
83
124
|
def test_referencing
|
|
@@ -107,7 +148,9 @@ class TestWorksheet < Test::Unit::TestCase
|
|
|
107
148
|
end
|
|
108
149
|
|
|
109
150
|
def test_drawing
|
|
110
|
-
assert @ws.drawing
|
|
151
|
+
assert @ws.drawing == nil
|
|
152
|
+
@ws.add_chart(Axlsx::Pie3DChart)
|
|
153
|
+
assert @ws.drawing.is_a?(Axlsx::Drawing)
|
|
111
154
|
end
|
|
112
155
|
|
|
113
156
|
def test_col_style
|
|
@@ -152,10 +195,16 @@ class TestWorksheet < Test::Unit::TestCase
|
|
|
152
195
|
end
|
|
153
196
|
assert_equal(@ws.rows[1].cells[0].style, 0)
|
|
154
197
|
assert_equal(@ws.rows[2].cells[1].style, 0)
|
|
198
|
+
@ws.row_style( 1..2, 1, :col_offset => 2)
|
|
199
|
+
@ws.rows[(1..2)].each do |r|
|
|
200
|
+
r.cells[(2..-1)].each do |c|
|
|
201
|
+
assert_equal(c.style, 1)
|
|
202
|
+
end
|
|
203
|
+
end
|
|
155
204
|
end
|
|
156
205
|
|
|
157
206
|
def test_to_xml_string_fit_to_page
|
|
158
|
-
@ws.
|
|
207
|
+
@ws.page_setup.fit_to_width = 1
|
|
159
208
|
doc = Nokogiri::XML(@ws.to_xml_string)
|
|
160
209
|
assert_equal(doc.xpath('//xmlns:worksheet/xmlns:sheetPr/xmlns:pageSetUpPr[@fitToPage="true"]').size, 1)
|
|
161
210
|
end
|
|
@@ -166,6 +215,11 @@ class TestWorksheet < Test::Unit::TestCase
|
|
|
166
215
|
assert_equal(doc.xpath('//xmlns:worksheet/xmlns:dimension[@ref="A1:C1"]').size, 1)
|
|
167
216
|
end
|
|
168
217
|
|
|
218
|
+
def test_fit_to_page_assignation_does_nothing
|
|
219
|
+
@ws.fit_to_page = true
|
|
220
|
+
assert_equal(@ws.fit_to_page?, false)
|
|
221
|
+
end
|
|
222
|
+
|
|
169
223
|
def test_to_xml_string_selected
|
|
170
224
|
@ws.selected = true
|
|
171
225
|
doc = Nokogiri::XML(@ws.to_xml_string)
|
|
@@ -178,13 +232,6 @@ class TestWorksheet < Test::Unit::TestCase
|
|
|
178
232
|
assert_equal(doc.xpath('//xmlns:worksheet/xmlns:sheetViews/xmlns:sheetView[@showGridLines="false"]').size, 1)
|
|
179
233
|
end
|
|
180
234
|
|
|
181
|
-
|
|
182
|
-
def test_to_xml_string_show_selection
|
|
183
|
-
doc = Nokogiri::XML(@ws.to_xml_string)
|
|
184
|
-
assert_equal(doc.xpath('//xmlns:worksheet/xmlns:sheetViews/xmlns:sheetView/xmlns:selection[@activeCell="A1"]').size, 1)
|
|
185
|
-
assert_equal(doc.xpath('//xmlns:worksheet/xmlns:sheetViews/xmlns:sheetView/xmlns:selection[@sqref="A1"]').size, 1)
|
|
186
|
-
end
|
|
187
|
-
|
|
188
235
|
def test_to_xml_string_auto_fit_data
|
|
189
236
|
@ws.add_row [1, "two"]
|
|
190
237
|
doc = Nokogiri::XML(@ws.to_xml_string)
|
|
@@ -199,7 +246,7 @@ class TestWorksheet < Test::Unit::TestCase
|
|
|
199
246
|
|
|
200
247
|
def test_to_xml_string_auto_filter
|
|
201
248
|
@ws.add_row [1, "two"]
|
|
202
|
-
@ws.auto_filter = "A1:B1"
|
|
249
|
+
@ws.auto_filter.range = "A1:B1"
|
|
203
250
|
doc = Nokogiri::XML(@ws.to_xml_string)
|
|
204
251
|
assert_equal(doc.xpath('//xmlns:worksheet/xmlns:autoFilter[@ref="A1:B1"]').size, 1)
|
|
205
252
|
end
|
|
@@ -213,6 +260,12 @@ class TestWorksheet < Test::Unit::TestCase
|
|
|
213
260
|
assert_equal(doc.xpath('//xmlns:worksheet/xmlns:mergeCells/xmlns:mergeCell[@ref="E1:F1"]').size, 1)
|
|
214
261
|
end
|
|
215
262
|
|
|
263
|
+
def test_to_xml_string_sheet_protection
|
|
264
|
+
@ws.sheet_protection.password = 'fish'
|
|
265
|
+
doc = Nokogiri::XML(@ws.to_xml_string)
|
|
266
|
+
assert(doc.xpath('//xmlns:sheetProtection'))
|
|
267
|
+
end
|
|
268
|
+
|
|
216
269
|
def test_to_xml_string_page_margins
|
|
217
270
|
@ws.page_margins do |pm|
|
|
218
271
|
pm.left = 9
|
|
@@ -222,8 +275,26 @@ class TestWorksheet < Test::Unit::TestCase
|
|
|
222
275
|
assert_equal(doc.xpath('//xmlns:worksheet/xmlns:pageMargins[@left="9"][@right="7"]').size, 1)
|
|
223
276
|
end
|
|
224
277
|
|
|
278
|
+
def test_to_xml_string_page_setup
|
|
279
|
+
@ws.page_setup do |ps|
|
|
280
|
+
ps.paper_width = "210mm"
|
|
281
|
+
ps.scale = 80
|
|
282
|
+
end
|
|
283
|
+
doc = Nokogiri::XML(@ws.to_xml_string)
|
|
284
|
+
assert_equal(doc.xpath('//xmlns:worksheet/xmlns:pageSetup[@paperWidth="210mm"][@scale="80"]').size, 1)
|
|
285
|
+
end
|
|
286
|
+
|
|
287
|
+
def test_to_xml_string_print_options
|
|
288
|
+
@ws.print_options do |po|
|
|
289
|
+
po.grid_lines = true
|
|
290
|
+
po.horizontal_centered = true
|
|
291
|
+
end
|
|
292
|
+
doc = Nokogiri::XML(@ws.to_xml_string)
|
|
293
|
+
assert_equal(doc.xpath('//xmlns:worksheet/xmlns:printOptions[@gridLines="true"][@horizontalCentered="true"]').size, 1)
|
|
294
|
+
end
|
|
295
|
+
|
|
225
296
|
def test_to_xml_string_drawing
|
|
226
|
-
|
|
297
|
+
@ws.add_chart Axlsx::Pie3DChart
|
|
227
298
|
doc = Nokogiri::XML(@ws.to_xml_string)
|
|
228
299
|
assert_equal(doc.xpath('//xmlns:worksheet/xmlns:drawing[@r:id="rId1"]').size, 1)
|
|
229
300
|
end
|
|
@@ -237,64 +308,71 @@ class TestWorksheet < Test::Unit::TestCase
|
|
|
237
308
|
assert_equal(doc.xpath('//xmlns:worksheet/xmlns:tableParts/xmlns:tablePart[@r:id="rId1"]').size, 1)
|
|
238
309
|
end
|
|
239
310
|
|
|
240
|
-
def test_abs_auto_filter
|
|
241
|
-
@ws.add_row [1, "two", 3]
|
|
242
|
-
@ws.auto_filter = "A1:C1"
|
|
243
|
-
assert_equal(@ws.abs_auto_filter, "'Sheet1'!$A$1:$C$1")
|
|
244
|
-
end
|
|
245
|
-
|
|
246
311
|
def test_to_xml_string
|
|
247
312
|
schema = Nokogiri::XML::Schema(File.open(Axlsx::SML_XSD))
|
|
248
313
|
doc = Nokogiri::XML(@ws.to_xml_string)
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
314
|
+
assert(schema.validate(doc).map{ |e| puts e.message; e }.empty?, "error free validation")
|
|
315
|
+
end
|
|
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"))
|
|
255
326
|
end
|
|
256
327
|
|
|
328
|
+
def test_to_xml_string_with_newlines
|
|
329
|
+
cell_with_newline = "foo\n\r\nbar"
|
|
330
|
+
@ws.add_row [cell_with_newline]
|
|
331
|
+
assert_equal("foo\n\r\nbar", @ws.rows.last.cells.last.value)
|
|
332
|
+
assert_not_nil(@ws.to_xml_string.index("foo\n\r\nbar"))
|
|
333
|
+
end
|
|
257
334
|
# Make sure the XML for all optional elements (like pageMargins, autoFilter, ...)
|
|
258
335
|
# is generated in correct order.
|
|
259
336
|
def test_valid_with_optional_elements
|
|
260
337
|
@ws.page_margins.set :left => 9
|
|
261
|
-
@ws.
|
|
338
|
+
@ws.page_setup.set :fit_to_width => 1
|
|
339
|
+
@ws.print_options.set :headings => true
|
|
340
|
+
@ws.auto_filter.range = "A1:C3"
|
|
262
341
|
@ws.merge_cells "A4:A5"
|
|
263
342
|
@ws.add_chart Axlsx::Pie3DChart
|
|
264
343
|
@ws.add_table "E1:F3"
|
|
265
344
|
schema = Nokogiri::XML::Schema(File.open(Axlsx::SML_XSD))
|
|
266
345
|
doc = Nokogiri::XML(@ws.to_xml_string)
|
|
267
|
-
|
|
268
|
-
schema.validate(doc).each do |error|
|
|
269
|
-
errors.push error
|
|
270
|
-
puts error.message
|
|
271
|
-
end
|
|
272
|
-
assert(errors.empty?, "error free validation")
|
|
273
|
-
|
|
346
|
+
assert(schema.validate(doc).map { |e| puts e.message; e }.empty?, schema.validate(doc).map { |e| e.message }.join('\n'))
|
|
274
347
|
end
|
|
275
348
|
|
|
276
349
|
def test_relationships
|
|
350
|
+
@ws.add_row [1,2,3]
|
|
277
351
|
assert(@ws.relationships.empty?, "No Drawing relationship until you add a chart")
|
|
278
352
|
c = @ws.add_chart Axlsx::Pie3DChart
|
|
279
353
|
assert_equal(@ws.relationships.size, 1, "adding a chart creates the relationship")
|
|
280
354
|
c = @ws.add_chart Axlsx::Pie3DChart
|
|
281
355
|
assert_equal(@ws.relationships.size, 1, "multiple charts still only result in one relationship")
|
|
356
|
+
c = @ws.add_comment :text => 'builder', :author => 'bob', :ref => @ws.rows.last.cells.last
|
|
357
|
+
assert_equal(@ws.relationships.size, 4, "adding a comment adds 3 relationships")
|
|
358
|
+
c = @ws.add_comment :text => 'not that is a comment!', :author => 'travis', :ref => "A1"
|
|
359
|
+
assert_equal(@ws.relationships.size, 4, "adding multiple comments in the same worksheet should not add any additional comment relationships")
|
|
282
360
|
end
|
|
283
361
|
|
|
284
362
|
|
|
285
363
|
def test_name_unique
|
|
286
|
-
assert_raise(ArgumentError, "worksheet name must be unique") { n = @ws.name; @ws.workbook.add_worksheet(:name=>
|
|
364
|
+
assert_raise(ArgumentError, "worksheet name must be unique") { n = @ws.name; @ws.workbook.add_worksheet(:name=> n) }
|
|
287
365
|
end
|
|
288
366
|
|
|
289
367
|
def test_name_size
|
|
290
|
-
assert_raise(ArgumentError, "name too long!") { @ws.name = Array.new(32, "A").join(
|
|
291
|
-
assert_nothing_raised { @ws.name = Array.new(31, "A").join(
|
|
368
|
+
assert_raise(ArgumentError, "name too long!") { @ws.name = Array.new(32, "A").join() }
|
|
369
|
+
assert_nothing_raised { @ws.name = Array.new(31, "A").join() }
|
|
292
370
|
end
|
|
293
371
|
|
|
294
372
|
def test_set_fixed_width_column
|
|
295
373
|
@ws.add_row ["mule", "donkey", "horse"], :widths => [20, :ignore, nil]
|
|
296
374
|
assert(@ws.column_info.size == 3, "a data item for each column")
|
|
297
|
-
assert_equal(@ws.column_info[0].width,
|
|
375
|
+
assert_equal(20, @ws.column_info[0].width, "adding a row with fixed width updates :fixed attribute")
|
|
298
376
|
assert_equal(@ws.column_info[1].width, nil, ":ignore does not set any data")
|
|
299
377
|
end
|
|
300
378
|
|
|
@@ -311,23 +389,49 @@ class TestWorksheet < Test::Unit::TestCase
|
|
|
311
389
|
assert_raise(ArgumentError, 'only accept Integer, Float or Fixnum') { @ws.column_widths 2, 7, "-1" }
|
|
312
390
|
end
|
|
313
391
|
|
|
392
|
+
def test_protect_range
|
|
393
|
+
assert(@ws.send(:protected_ranges).is_a?(Axlsx::SimpleTypedList))
|
|
394
|
+
assert_equal(0, @ws.send(:protected_ranges).size)
|
|
395
|
+
@ws.protect_range('A1:A3')
|
|
396
|
+
assert_equal('A1:A3', @ws.send(:protected_ranges).last.sqref)
|
|
397
|
+
end
|
|
398
|
+
|
|
399
|
+
def test_protect_range_with_cells
|
|
400
|
+
@ws.add_row [1, 2, 3]
|
|
401
|
+
assert_nothing_raised {@ws.protect_range(@ws.rows.first.cells) }
|
|
402
|
+
assert_equal('A1:C1', @ws.send(:protected_ranges).last.sqref)
|
|
403
|
+
|
|
404
|
+
end
|
|
314
405
|
def test_merge_cells
|
|
315
|
-
assert(@ws.merged_cells.is_a?(Array))
|
|
316
|
-
assert_equal(@ws.merged_cells.size, 0)
|
|
317
406
|
@ws.add_row [1,2,3]
|
|
318
407
|
@ws.add_row [4,5,6]
|
|
319
408
|
@ws.add_row [7,8,9]
|
|
320
409
|
@ws.merge_cells "A1:A2"
|
|
321
410
|
@ws.merge_cells "B2:C3"
|
|
322
411
|
@ws.merge_cells @ws.rows.last.cells[(0..1)]
|
|
323
|
-
assert_equal(@ws.merged_cells.size, 3)
|
|
324
|
-
assert_equal(@ws.merged_cells.last, "A3:B3")
|
|
412
|
+
assert_equal(@ws.send(:merged_cells).size, 3)
|
|
413
|
+
assert_equal(@ws.send(:merged_cells).last, "A3:B3")
|
|
325
414
|
end
|
|
326
|
-
|
|
415
|
+
|
|
416
|
+
def test_merge_cells_sorts_correctly_by_row_when_given_array
|
|
417
|
+
10.times do |i|
|
|
418
|
+
@ws.add_row [i]
|
|
419
|
+
end
|
|
420
|
+
@ws.merge_cells [@ws.rows[8].cells.first, @ws.rows[9].cells.first]
|
|
421
|
+
assert_equal "A9:A10", @ws.send(:merged_cells).first
|
|
422
|
+
end
|
|
423
|
+
|
|
327
424
|
def test_auto_filter
|
|
328
|
-
assert(@ws.auto_filter.nil?)
|
|
425
|
+
assert(@ws.auto_filter.range.nil?)
|
|
329
426
|
assert_raise(ArgumentError) { @ws.auto_filter = 123 }
|
|
330
|
-
@ws.auto_filter = "A1:D9"
|
|
331
|
-
assert_equal(@ws.auto_filter, "A1:D9")
|
|
427
|
+
@ws.auto_filter.range = "A1:D9"
|
|
428
|
+
assert_equal(@ws.auto_filter.range, "A1:D9")
|
|
429
|
+
end
|
|
430
|
+
|
|
431
|
+
def test_sheet_pr_for_auto_filter
|
|
432
|
+
@ws.auto_filter.range = 'A1:D9'
|
|
433
|
+
@ws.auto_filter.add_column 0, :filters, :filter_items => [1]
|
|
434
|
+
doc = Nokogiri::XML(@ws.to_xml_string)
|
|
435
|
+
assert(doc.xpath('//sheetPr[@filterMode="true"]'))
|
|
332
436
|
end
|
|
333
437
|
end
|