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
|
@@ -1,21 +1,44 @@
|
|
|
1
1
|
require 'tc_helper.rb'
|
|
2
2
|
|
|
3
3
|
class TestRelationships < Test::Unit::TestCase
|
|
4
|
-
|
|
4
|
+
|
|
5
|
+
def test_instances_with_different_attributes_have_unique_ids
|
|
6
|
+
rel_1 = Axlsx::Relationship.new(Object.new, Axlsx::WORKSHEET_R, 'target')
|
|
7
|
+
rel_2 = Axlsx::Relationship.new(Object.new, Axlsx::COMMENT_R, 'foobar')
|
|
8
|
+
assert_not_equal rel_1.Id, rel_2.Id
|
|
5
9
|
end
|
|
6
|
-
|
|
7
|
-
def
|
|
10
|
+
|
|
11
|
+
def test_instances_with_same_attributes_share_id
|
|
12
|
+
source_obj = Object.new
|
|
13
|
+
instance = Axlsx::Relationship.new(source_obj, Axlsx::WORKSHEET_R, 'target')
|
|
14
|
+
assert_equal instance.Id, Axlsx::Relationship.new(source_obj, Axlsx::WORKSHEET_R, 'target').Id
|
|
8
15
|
end
|
|
9
|
-
|
|
16
|
+
|
|
17
|
+
def test_target_is_only_considered_for_same_attributes_check_if_target_mode_is_external
|
|
18
|
+
source_obj = Object.new
|
|
19
|
+
rel_1 = Axlsx::Relationship.new(source_obj, Axlsx::WORKSHEET_R, 'target')
|
|
20
|
+
rel_2 = Axlsx::Relationship.new(source_obj, Axlsx::WORKSHEET_R, '../target')
|
|
21
|
+
assert_equal rel_1.Id, rel_2.Id
|
|
22
|
+
|
|
23
|
+
rel_3 = Axlsx::Relationship.new(source_obj, Axlsx::HYPERLINK_R, 'target', :target_mode => :External)
|
|
24
|
+
rel_4 = Axlsx::Relationship.new(source_obj, Axlsx::HYPERLINK_R, '../target', :target_mode => :External)
|
|
25
|
+
assert_not_equal rel_3.Id, rel_4.Id
|
|
26
|
+
end
|
|
27
|
+
|
|
10
28
|
def test_type
|
|
11
|
-
assert_raise(ArgumentError) { Axlsx::Relationship.new 'type', 'target' }
|
|
12
|
-
assert_nothing_raised { Axlsx::Relationship.new Axlsx::WORKSHEET_R, 'target' }
|
|
13
|
-
assert_nothing_raised { Axlsx::Relationship.new Axlsx::COMMENT_R, 'target' }
|
|
29
|
+
assert_raise(ArgumentError) { Axlsx::Relationship.new nil, 'type', 'target' }
|
|
30
|
+
assert_nothing_raised { Axlsx::Relationship.new nil, Axlsx::WORKSHEET_R, 'target' }
|
|
31
|
+
assert_nothing_raised { Axlsx::Relationship.new nil, Axlsx::COMMENT_R, 'target' }
|
|
14
32
|
end
|
|
15
33
|
|
|
16
34
|
def test_target_mode
|
|
17
|
-
assert_raise(ArgumentError) { Axlsx::Relationship.new 'type', 'target', :target_mode => "FISH" }
|
|
18
|
-
assert_nothing_raised { Axlsx::Relationship.new( Axlsx::WORKSHEET_R, 'target', :target_mode => :External) }
|
|
35
|
+
assert_raise(ArgumentError) { Axlsx::Relationship.new nil, 'type', 'target', :target_mode => "FISH" }
|
|
36
|
+
assert_nothing_raised { Axlsx::Relationship.new( nil, Axlsx::WORKSHEET_R, 'target', :target_mode => :External) }
|
|
19
37
|
end
|
|
20
38
|
|
|
39
|
+
def test_ampersand_escaping_in_target
|
|
40
|
+
r = Axlsx::Relationship.new(nil, Axlsx::HYPERLINK_R, "http://example.com?foo=1&bar=2", :target_mod => :External)
|
|
41
|
+
doc = Nokogiri::XML(r.to_xml_string)
|
|
42
|
+
assert_equal(doc.xpath("//Relationship[@Target='http://example.com?foo=1&bar=2']").size, 1)
|
|
43
|
+
end
|
|
21
44
|
end
|
|
@@ -2,6 +2,17 @@ require 'tc_helper.rb'
|
|
|
2
2
|
|
|
3
3
|
class TestRelationships < Test::Unit::TestCase
|
|
4
4
|
|
|
5
|
+
def test_for
|
|
6
|
+
source_obj_1, source_obj_2 = Object.new, Object.new
|
|
7
|
+
rel_1 = Axlsx::Relationship.new(source_obj_1, Axlsx::WORKSHEET_R, "bar")
|
|
8
|
+
rel_2 = Axlsx::Relationship.new(source_obj_2, Axlsx::WORKSHEET_R, "bar")
|
|
9
|
+
rels = Axlsx::Relationships.new
|
|
10
|
+
rels << rel_1
|
|
11
|
+
rels << rel_2
|
|
12
|
+
assert_equal rel_1, rels.for(source_obj_1)
|
|
13
|
+
assert_equal rel_2, rels.for(source_obj_2)
|
|
14
|
+
end
|
|
15
|
+
|
|
5
16
|
def test_valid_document
|
|
6
17
|
@rels = Axlsx::Relationships.new
|
|
7
18
|
schema = Nokogiri::XML::Schema(File.open(Axlsx::RELS_XSD))
|
|
@@ -12,7 +23,7 @@ class TestRelationships < Test::Unit::TestCase
|
|
|
12
23
|
errors << error
|
|
13
24
|
end
|
|
14
25
|
|
|
15
|
-
@rels << Axlsx::Relationship.new(Axlsx::WORKSHEET_R, "bar")
|
|
26
|
+
@rels << Axlsx::Relationship.new(nil, Axlsx::WORKSHEET_R, "bar")
|
|
16
27
|
doc = Nokogiri::XML(@rels.to_xml_string)
|
|
17
28
|
errors = []
|
|
18
29
|
schema.validate(doc).each do |error|
|
data/test/stylesheet/tc_color.rb
CHANGED
|
@@ -27,6 +27,12 @@ class TestColor < Test::Unit::TestCase
|
|
|
27
27
|
assert_equal(@item.rgb, "FF00FF00" )
|
|
28
28
|
end
|
|
29
29
|
|
|
30
|
+
def test_rgb_writer_doesnt_mutate_its_argument
|
|
31
|
+
my_rgb = 'ff00ff00'
|
|
32
|
+
@item.rgb = my_rgb
|
|
33
|
+
assert_equal 'ff00ff00', my_rgb
|
|
34
|
+
end
|
|
35
|
+
|
|
30
36
|
def test_tint
|
|
31
37
|
assert_raise(ArgumentError) { @item.tint = -1 }
|
|
32
38
|
assert_nothing_raised { @item.tint = -1.0 }
|
|
@@ -105,6 +105,19 @@ class TestStyles < Test::Unit::TestCase
|
|
|
105
105
|
assert(@styles.parse_alignment_options(:alignment => {}).is_a?(Axlsx::CellAlignment))
|
|
106
106
|
end
|
|
107
107
|
|
|
108
|
+
def test_parse_font_using_defaults
|
|
109
|
+
original = @styles.fonts.first
|
|
110
|
+
@styles.add_style :b => 1, :sz => 99
|
|
111
|
+
created = @styles.fonts.last
|
|
112
|
+
original_attributes = original.instance_values
|
|
113
|
+
assert_equal(1, created.b)
|
|
114
|
+
assert_equal(99, created.sz)
|
|
115
|
+
copied = original_attributes.reject{ |key, value| %w(b sz).include? key }
|
|
116
|
+
copied.each do |key, value|
|
|
117
|
+
assert_equal(created.instance_values[key], value)
|
|
118
|
+
end
|
|
119
|
+
end
|
|
120
|
+
|
|
108
121
|
def test_parse_font_options
|
|
109
122
|
options = {
|
|
110
123
|
:fg_color => "FF050505",
|
|
@@ -137,7 +150,7 @@ class TestStyles < Test::Unit::TestCase
|
|
|
137
150
|
assert_equal(@styles.parse_fill_options(:bg_color => "DE").class, Fixnum, "return index of fill if not :dxf type")
|
|
138
151
|
assert_equal(@styles.parse_fill_options(:bg_color => "DE", :type => :dxf).class, Axlsx::Fill, "return fill object if :dxf type")
|
|
139
152
|
f = @styles.parse_fill_options(:bg_color => "DE", :type => :dxf)
|
|
140
|
-
assert(f.fill_type.
|
|
153
|
+
assert(f.fill_type.bgColor.rgb == "FFDEDEDE")
|
|
141
154
|
end
|
|
142
155
|
|
|
143
156
|
def test_parse_protection_options
|
|
@@ -197,7 +210,7 @@ class TestStyles < Test::Unit::TestCase
|
|
|
197
210
|
assert_equal(0, style, "returns the zero-based dxfId")
|
|
198
211
|
|
|
199
212
|
dxf = @styles.dxfs.last
|
|
200
|
-
assert_equal(@styles.dxfs.last.fill.fill_type.
|
|
213
|
+
assert_equal(@styles.dxfs.last.fill.fill_type.bgColor.rgb, "FF000000", "fill created with color")
|
|
201
214
|
|
|
202
215
|
assert_equal(font_count, (@styles.fonts.size), "font not created under styles")
|
|
203
216
|
assert_equal(fill_count, (@styles.fills.size), "fill not created under styles")
|
data/test/tc_axlsx.rb
CHANGED
|
@@ -14,8 +14,35 @@ class TestAxlsx < Test::Unit::TestCase
|
|
|
14
14
|
}
|
|
15
15
|
end
|
|
16
16
|
|
|
17
|
-
def
|
|
18
|
-
|
|
17
|
+
def test_cell_range_empty_if_no_cell
|
|
18
|
+
assert_equal(Axlsx.cell_range([]), "")
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def test_do_not_trust_input_by_default
|
|
22
|
+
assert_equal false, Axlsx.trust_input
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
def test_trust_input_can_be_set_to_true
|
|
27
|
+
Axlsx.trust_input = true
|
|
28
|
+
assert_equal true, Axlsx.trust_input
|
|
29
|
+
end
|
|
30
|
+
def test_cell_range_relative
|
|
31
|
+
p = Axlsx::Package.new
|
|
32
|
+
ws = p.workbook.add_worksheet
|
|
33
|
+
row = ws.add_row
|
|
34
|
+
c1 = row.add_cell
|
|
35
|
+
c2 = row.add_cell
|
|
36
|
+
assert_equal(Axlsx.cell_range([c2, c1], false), "A1:B1")
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def test_cell_range_absolute
|
|
40
|
+
p = Axlsx::Package.new
|
|
41
|
+
ws = p.workbook.add_worksheet :name => "Sheet <'>\" 1"
|
|
42
|
+
row = ws.add_row
|
|
43
|
+
c1 = row.add_cell
|
|
44
|
+
c2 = row.add_cell
|
|
45
|
+
assert_equal(Axlsx.cell_range([c2, c1], true), "'Sheet <''>" 1'!$A$1:$B$1")
|
|
19
46
|
end
|
|
20
47
|
|
|
21
48
|
def test_name_to_indices
|
|
@@ -36,4 +63,10 @@ class TestAxlsx < Test::Unit::TestCase
|
|
|
36
63
|
# todo
|
|
37
64
|
end
|
|
38
65
|
|
|
66
|
+
def test_range_to_a
|
|
67
|
+
assert_equal([['A1', 'B1', 'C1']], Axlsx::range_to_a('A1:C1'))
|
|
68
|
+
assert_equal([['A1', 'B1', 'C1'], ['A2', 'B2', 'C2']], Axlsx::range_to_a('A1:C2'))
|
|
69
|
+
assert_equal([['Z5', 'AA5', 'AB5'], ['Z6', 'AA6', 'AB6']], Axlsx::range_to_a('Z5:AB6'))
|
|
70
|
+
end
|
|
71
|
+
|
|
39
72
|
end
|
data/test/tc_helper.rb
CHANGED
|
@@ -1,4 +1,10 @@
|
|
|
1
1
|
$LOAD_PATH.unshift "#{File.dirname(__FILE__)}/../lib"
|
|
2
|
-
require '
|
|
2
|
+
require 'simplecov'
|
|
3
|
+
SimpleCov.start do
|
|
4
|
+
add_filter "/test/"
|
|
5
|
+
add_filter "/vendor/"
|
|
6
|
+
end
|
|
7
|
+
|
|
3
8
|
require 'test/unit'
|
|
9
|
+
require "timecop"
|
|
4
10
|
require "axlsx.rb"
|
data/test/tc_package.rb
CHANGED
|
@@ -7,6 +7,9 @@ class TestPackage < Test::Unit::TestCase
|
|
|
7
7
|
ws = @package.workbook.add_worksheet
|
|
8
8
|
ws.add_row ['Can', 'we', 'build it?']
|
|
9
9
|
ws.add_row ['Yes!', 'We', 'can!']
|
|
10
|
+
ws.outline_level_rows 0, 1
|
|
11
|
+
ws.outline_level_columns 0, 1
|
|
12
|
+
ws.add_hyperlink :ref => ws.rows.first.cells.last, :location => 'https://github.com/randym'
|
|
10
13
|
ws.workbook.add_defined_name("#{ws.name}!A1:C2", :name => '_xlnm.Print_Titles', :hidden => true)
|
|
11
14
|
ws.protect_range('A1:C1')
|
|
12
15
|
ws.protect_range(ws.rows.last.cells)
|
|
@@ -37,15 +40,15 @@ class TestPackage < Test::Unit::TestCase
|
|
|
37
40
|
ws.add_chart(Axlsx::Line3DChart, :title => "axis labels") do |chart|
|
|
38
41
|
chart.valAxis.title = 'bob'
|
|
39
42
|
chart.d_lbls.show_val = true
|
|
40
|
-
end
|
|
41
|
-
|
|
43
|
+
end
|
|
44
|
+
|
|
42
45
|
ws.add_chart(Axlsx::Bar3DChart, :title => 'bar chart') do |chart|
|
|
43
46
|
chart.add_series :data => [1,4,5], :labels => %w(A B C)
|
|
44
47
|
chart.d_lbls.show_percent = true
|
|
45
48
|
end
|
|
46
49
|
|
|
47
50
|
ws.add_chart(Axlsx::ScatterChart, :title => 'scat man') do |chart|
|
|
48
|
-
chart.add_series :xData => [1,2,3,4], :yData => [4,3,2,1]
|
|
51
|
+
chart.add_series :xData => [1,2,3,4], :yData => [4,3,2,1]
|
|
49
52
|
chart.d_lbls.show_val = true
|
|
50
53
|
end
|
|
51
54
|
|
|
@@ -56,11 +59,12 @@ class TestPackage < Test::Unit::TestCase
|
|
|
56
59
|
image.height=666
|
|
57
60
|
image.hyperlink.tooltip = "Labeled Link"
|
|
58
61
|
image.start_at 5, 5
|
|
62
|
+
image.end_at 10, 10
|
|
59
63
|
end
|
|
60
64
|
ws.add_image :image_src => File.expand_path('../../examples/image1.gif', __FILE__) do |image|
|
|
61
65
|
image.start_at 0, 20
|
|
62
66
|
image.width=360
|
|
63
|
-
image.height=333
|
|
67
|
+
image.height=333
|
|
64
68
|
end
|
|
65
69
|
ws.add_image :image_src => File.expand_path('../../examples/image1.png', __FILE__) do |image|
|
|
66
70
|
image.start_at 9, 20
|
|
@@ -68,6 +72,11 @@ class TestPackage < Test::Unit::TestCase
|
|
|
68
72
|
image.height = 167
|
|
69
73
|
end
|
|
70
74
|
ws.add_table 'A1:C1'
|
|
75
|
+
|
|
76
|
+
ws.add_pivot_table 'G5:G6', 'A1:B3'
|
|
77
|
+
|
|
78
|
+
ws.add_page_break "B2"
|
|
79
|
+
|
|
71
80
|
end
|
|
72
81
|
|
|
73
82
|
def test_use_autowidth
|
|
@@ -99,6 +108,12 @@ class TestPackage < Test::Unit::TestCase
|
|
|
99
108
|
assert(Axlsx::Package.new.workbook.worksheets.size == 0, 'Workbook should not have sheets by default')
|
|
100
109
|
end
|
|
101
110
|
|
|
111
|
+
def test_created_at_is_propagated_to_core
|
|
112
|
+
time = Time.utc(2013, 1, 1, 12, 0)
|
|
113
|
+
p = Axlsx::Package.new :created_at => time
|
|
114
|
+
assert_equal(time, p.core.created)
|
|
115
|
+
end
|
|
116
|
+
|
|
102
117
|
def test_serialization
|
|
103
118
|
assert_nothing_raised do
|
|
104
119
|
begin
|
|
@@ -111,6 +126,27 @@ class TestPackage < Test::Unit::TestCase
|
|
|
111
126
|
end
|
|
112
127
|
end
|
|
113
128
|
end
|
|
129
|
+
|
|
130
|
+
# See comment for Package#zip_entry_for_part
|
|
131
|
+
def test_serialization_creates_identical_files_at_any_time_if_created_at_is_set
|
|
132
|
+
@package.core.created = Time.now
|
|
133
|
+
zip_content_now = @package.to_stream.string
|
|
134
|
+
Timecop.travel(3600) do
|
|
135
|
+
zip_content_then = @package.to_stream.string
|
|
136
|
+
assert zip_content_then == zip_content_now, "zip files are not identical"
|
|
137
|
+
end
|
|
138
|
+
end
|
|
139
|
+
|
|
140
|
+
def test_serialization_creates_identical_files_for_identical_packages
|
|
141
|
+
package_1, package_2 = 2.times.map do
|
|
142
|
+
Axlsx::Package.new(:created_at => Time.utc(2013, 1, 1)).tap do |p|
|
|
143
|
+
p.workbook.add_worksheet(:name => "Basic Worksheet") do |sheet|
|
|
144
|
+
sheet.add_row [1, 2, 3]
|
|
145
|
+
end
|
|
146
|
+
end
|
|
147
|
+
end
|
|
148
|
+
assert package_1.to_stream.string == package_2.to_stream.string, "zip files are not identical"
|
|
149
|
+
end
|
|
114
150
|
|
|
115
151
|
def test_validation
|
|
116
152
|
assert_equal(@package.validate.size, 0, @package.validate)
|
|
@@ -134,10 +170,13 @@ class TestPackage < Test::Unit::TestCase
|
|
|
134
170
|
assert_equal(p.select{ |part| part[:entry] =~ /xl\/worksheets\/sheet\d\.xml/ }.size, @package.workbook.worksheets.size, "one or more sheet missing")
|
|
135
171
|
assert_equal(p.select{ |part| part[:entry] =~ /xl\/worksheets\/_rels\/sheet\d\.xml\.rels/ }.size, @package.workbook.worksheets.size, "one or more sheet rels missing")
|
|
136
172
|
assert_equal(p.select{ |part| part[:entry] =~ /xl\/comments\d\.xml/ }.size, @package.workbook.worksheets.size, "one or more sheet rels missing")
|
|
173
|
+
assert_equal(p.select{ |part| part[:entry] =~ /xl\/pivotTables\/pivotTable\d\.xml/ }.size, @package.workbook.worksheets.first.pivot_tables.size, "one or more pivot tables missing")
|
|
174
|
+
assert_equal(p.select{ |part| part[:entry] =~ /xl\/pivotTables\/_rels\/pivotTable\d\.xml.rels/ }.size, @package.workbook.worksheets.first.pivot_tables.size, "one or more pivot tables rels missing")
|
|
175
|
+
assert_equal(p.select{ |part| part[:entry] =~ /xl\/pivotCache\/pivotCacheDefinition\d\.xml/ }.size, @package.workbook.worksheets.first.pivot_tables.size, "one or more pivot tables missing")
|
|
137
176
|
|
|
138
177
|
|
|
139
178
|
#no mystery parts
|
|
140
|
-
assert_equal(p.size
|
|
179
|
+
assert_equal(24, p.size)
|
|
141
180
|
|
|
142
181
|
end
|
|
143
182
|
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
require 'tc_helper.rb'
|
|
2
|
+
class Funk
|
|
3
|
+
include Axlsx::Accessors
|
|
4
|
+
include Axlsx::SerializedAttributes
|
|
5
|
+
serializable_attributes :camel_symbol, :boolean, :integer
|
|
6
|
+
|
|
7
|
+
attr_accessor :camel_symbol, :boolean, :integer
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
class TestSeralizedAttributes < Test::Unit::TestCase
|
|
11
|
+
def setup
|
|
12
|
+
@object = Funk.new
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def test_camel_symbol
|
|
16
|
+
@object.camel_symbol = :foo_bar
|
|
17
|
+
assert_equal('camelSymbol="fooBar" ', @object.serialized_attributes)
|
|
18
|
+
end
|
|
19
|
+
end
|
data/test/util/tc_validators.rb
CHANGED
|
@@ -158,4 +158,29 @@ class TestValidators < Test::Unit::TestCase
|
|
|
158
158
|
assert_raise(ArgumentError) { Axlsx.validate_split_state_type 'frozen_split' }
|
|
159
159
|
assert_raise(ArgumentError) { Axlsx.validate_split_state_type 0 }
|
|
160
160
|
end
|
|
161
|
-
|
|
161
|
+
|
|
162
|
+
def test_validate_integerish
|
|
163
|
+
assert_raise(ArgumentError) { Axlsx.validate_integerish Axlsx }
|
|
164
|
+
[1, 1.4, "a"].each { |test_value| assert_nothing_raised { Axlsx.validate_integerish test_value } }
|
|
165
|
+
end
|
|
166
|
+
def test_validate_family
|
|
167
|
+
assert_raise(ArgumentError) { Axlsx.validate_family 0 }
|
|
168
|
+
(1..5).each do |item|
|
|
169
|
+
assert_nothing_raised { Axlsx.validate_family item }
|
|
170
|
+
end
|
|
171
|
+
end
|
|
172
|
+
|
|
173
|
+
def test_validate_u
|
|
174
|
+
assert_raise(ArgumentError) { Axlsx.validate_cell_u :hoge }
|
|
175
|
+
[:none, :single, :double, :singleAccounting, :doubleAccounting].each do |sym|
|
|
176
|
+
assert_nothing_raised { Axlsx.validate_cell_u sym }
|
|
177
|
+
end
|
|
178
|
+
end
|
|
179
|
+
|
|
180
|
+
def test_range_validation
|
|
181
|
+
# exclusive
|
|
182
|
+
assert_raise(ArgumentError) { Axlsx::RangeValidator.validate('foo', 1, 10, 10, false) }
|
|
183
|
+
# inclusive by default
|
|
184
|
+
assert_nothing_raised { Axlsx::RangeValidator.validate('foo', 1, 10, 10) }
|
|
185
|
+
end
|
|
186
|
+
end
|
|
@@ -10,14 +10,14 @@ class TestDefinedNames < Test::Unit::TestCase
|
|
|
10
10
|
end
|
|
11
11
|
|
|
12
12
|
def test_string_attributes
|
|
13
|
-
|
|
13
|
+
%w(short_cut_key status_bar help description custom_menu comment).each do |attr|
|
|
14
14
|
assert_raise(ArgumentError, 'only strings allowed in string attributes') { @dn.send("#{attr}=", 1) }
|
|
15
15
|
assert_nothing_raised { @dn.send("#{attr}=", '_xlnm.Sheet_Title') }
|
|
16
16
|
end
|
|
17
17
|
end
|
|
18
18
|
|
|
19
19
|
def test_boolean_attributes
|
|
20
|
-
|
|
20
|
+
%w(workbook_parameter publish_to_server xlm vb_proceedure function hidden).each do |attr|
|
|
21
21
|
assert_raise(ArgumentError, 'only booleanish allowed in string attributes') { @dn.send("#{attr}=", 'foo') }
|
|
22
22
|
assert_nothing_raised { @dn.send("#{attr}=", 1) }
|
|
23
23
|
end
|
|
@@ -24,6 +24,12 @@ class TestSharedStringsTable < Test::Unit::TestCase
|
|
|
24
24
|
assert_equal(sst.unique_count, 4)
|
|
25
25
|
end
|
|
26
26
|
|
|
27
|
+
def test_uses_workbook_xml_space
|
|
28
|
+
assert_equal(@p.workbook.xml_space, @p.workbook.shared_strings.xml_space)
|
|
29
|
+
@p.workbook.xml_space = :default
|
|
30
|
+
assert_equal(:default, @p.workbook.shared_strings.xml_space)
|
|
31
|
+
end
|
|
32
|
+
|
|
27
33
|
def test_valid_document
|
|
28
34
|
schema = Nokogiri::XML::Schema(File.open(Axlsx::SML_XSD))
|
|
29
35
|
doc = Nokogiri::XML(@p.workbook.shared_strings.to_xml_string)
|
|
@@ -9,6 +9,23 @@ class TestWorkbook < Test::Unit::TestCase
|
|
|
9
9
|
def teardown
|
|
10
10
|
end
|
|
11
11
|
|
|
12
|
+
def test_worksheet_users_xml_space
|
|
13
|
+
sheet = @wb.add_worksheet(:name => 'foo')
|
|
14
|
+
ws_xml = Nokogiri::XML(sheet.to_xml_string)
|
|
15
|
+
assert(ws_xml.xpath("//xmlns:worksheet/@xml:space='preserve'"))
|
|
16
|
+
|
|
17
|
+
@wb.xml_space = :default
|
|
18
|
+
ws_xml = Nokogiri::XML(sheet.to_xml_string)
|
|
19
|
+
assert(ws_xml.xpath("//xmlns:worksheet/@xml:space='default'"))
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def test_xml_space
|
|
23
|
+
assert_equal(:preserve, @wb.xml_space)
|
|
24
|
+
@wb.xml_space = :default
|
|
25
|
+
assert_equal(:default, @wb.xml_space)
|
|
26
|
+
assert_raise(ArgumentError) { @wb.xml_space = :none }
|
|
27
|
+
end
|
|
28
|
+
|
|
12
29
|
def test_no_autowidth
|
|
13
30
|
assert_equal(@wb.use_autowidth, true)
|
|
14
31
|
assert_raise(ArgumentError) {@wb.use_autowidth = 0.1}
|
|
@@ -16,6 +33,13 @@ class TestWorkbook < Test::Unit::TestCase
|
|
|
16
33
|
assert_equal(@wb.use_autowidth, false)
|
|
17
34
|
end
|
|
18
35
|
|
|
36
|
+
|
|
37
|
+
def test_sheet_by_name_retrieval
|
|
38
|
+
@wb.add_worksheet(:name=>'foo')
|
|
39
|
+
@wb.add_worksheet(:name=>'bar')
|
|
40
|
+
assert_equal('foo', @wb.sheet_by_name('foo').name)
|
|
41
|
+
|
|
42
|
+
end
|
|
19
43
|
def test_date1904
|
|
20
44
|
assert_equal(Axlsx::Workbook.date1904, @wb.date1904)
|
|
21
45
|
@wb.date1904 = :false
|
|
@@ -42,6 +66,14 @@ class TestWorkbook < Test::Unit::TestCase
|
|
|
42
66
|
assert_equal(@wb.worksheets.first, ws, "the worksheet returned is the worksheet added")
|
|
43
67
|
assert_equal(ws.name, "bob", "name option gets passed to worksheet")
|
|
44
68
|
end
|
|
69
|
+
|
|
70
|
+
def test_insert_worksheet
|
|
71
|
+
@wb.add_worksheet(:name => 'A')
|
|
72
|
+
@wb.add_worksheet(:name => 'B')
|
|
73
|
+
ws3 = @wb.insert_worksheet(0, :name => 'C')
|
|
74
|
+
assert_equal(ws3.name, @wb.worksheets.first.name)
|
|
75
|
+
end
|
|
76
|
+
|
|
45
77
|
def test_relationships
|
|
46
78
|
#current relationship size is 1 due to style relation
|
|
47
79
|
assert(@wb.relationships.size == 1)
|
|
@@ -84,5 +116,10 @@ class TestWorkbook < Test::Unit::TestCase
|
|
|
84
116
|
assert_equal(doc.xpath('//xmlns:workbook/xmlns:definedNames/xmlns:definedName').inner_text, @wb.worksheets[0].auto_filter.defined_name)
|
|
85
117
|
end
|
|
86
118
|
|
|
87
|
-
|
|
119
|
+
def test_to_xml_uses_correct_rIds_for_pivotCache
|
|
120
|
+
ws = @wb.add_worksheet
|
|
121
|
+
pivot_table = ws.add_pivot_table('G5:G6', 'A1:D5')
|
|
122
|
+
doc = Nokogiri::XML(@wb.to_xml_string)
|
|
123
|
+
assert_equal pivot_table.cache_definition.rId, doc.xpath("//xmlns:pivotCache").first["r:id"]
|
|
124
|
+
end
|
|
88
125
|
end
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
require 'tc_helper.rb'
|
|
2
|
+
|
|
3
|
+
class TestAutoFilter < Test::Unit::TestCase
|
|
4
|
+
|
|
5
|
+
def setup
|
|
6
|
+
ws = Axlsx::Package.new.workbook.add_worksheet
|
|
7
|
+
3.times { |index| ws.add_row [1*index,2*index,3*index] }
|
|
8
|
+
@auto_filter = ws.auto_filter
|
|
9
|
+
@auto_filter.range = 'A1:C3'
|
|
10
|
+
@auto_filter.add_column 0, :filters, :filter_items => [1]
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def test_defined_name
|
|
14
|
+
assert_equal("'Sheet1'!$A$1:$C$3", @auto_filter.defined_name)
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def test_to_xml_string
|
|
18
|
+
doc = Nokogiri::XML(@auto_filter.to_xml_string)
|
|
19
|
+
assert(doc.xpath("autoFilter[@ref='#{@auto_filter.range}']"))
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def test_columns
|
|
23
|
+
assert @auto_filter.columns.is_a?(Axlsx::SimpleTypedList)
|
|
24
|
+
assert_equal @auto_filter.columns.allowed_types, [Axlsx::FilterColumn]
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def test_add_column
|
|
28
|
+
@auto_filter.add_column(0, :filters) do |column|
|
|
29
|
+
assert column.is_a? FilterColumn
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def test_applya
|
|
34
|
+
assert_equal nil, @auto_filter.worksheet.rows.last.hidden
|
|
35
|
+
@auto_filter.apply
|
|
36
|
+
assert_equal true, @auto_filter.worksheet.rows.last.hidden
|
|
37
|
+
end
|
|
38
|
+
end
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
require 'tc_helper.rb'
|
|
2
|
+
|
|
3
|
+
class TestFilterColumn < Test::Unit::TestCase
|
|
4
|
+
|
|
5
|
+
def setup
|
|
6
|
+
@filter_column = Axlsx::FilterColumn.new(0, :filters, :filter_items => [200])
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
def test_initialize_col_id
|
|
11
|
+
assert_raise ArgumentError do
|
|
12
|
+
Axlsx::FilterColumn.new(0, :bobs_house_of_filter)
|
|
13
|
+
end
|
|
14
|
+
assert_raise ArgumentError do
|
|
15
|
+
Axlsx::FilterColumn.new(:penut, :filters)
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def test_initailize_filter_type
|
|
20
|
+
assert @filter_column.filter.is_a?(Axlsx::Filters)
|
|
21
|
+
assert_equal 1, @filter_column.filter.filter_items.size
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def test_initialize_filter_type_filters_with_options
|
|
25
|
+
assert_equal 200, @filter_column.filter.filter_items.first.val
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def test_initialize_with_block
|
|
29
|
+
filter_column = Axlsx::FilterColumn.new(0, :filters) do |filters|
|
|
30
|
+
filters.filter_items = [700, 100, 5]
|
|
31
|
+
end
|
|
32
|
+
assert_equal 3, filter_column.filter.filter_items.size
|
|
33
|
+
assert_equal 700, filter_column.filter.filter_items.first.val
|
|
34
|
+
assert_equal 5, filter_column.filter.filter_items.last.val
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def test_default_show_button
|
|
38
|
+
assert_equal true, @filter_column.show_button
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def test_default_hidden_button
|
|
42
|
+
assert_equal false, @filter_column.hidden_button
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def test_show_button
|
|
46
|
+
assert_raise ArgumentError do
|
|
47
|
+
@filter_column.show_button = :foo
|
|
48
|
+
end
|
|
49
|
+
assert_nothing_raised { @filter_column.show_button = false }
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
def test_hidden_button
|
|
53
|
+
assert_raise ArgumentError do
|
|
54
|
+
@filter_column.hidden_button = :hoge
|
|
55
|
+
end
|
|
56
|
+
assert_nothing_raised { @filter_column.hidden_button = true }
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
def test_col_id=
|
|
60
|
+
assert_raise ArgumentError do
|
|
61
|
+
@filter_column.col_id = :bar
|
|
62
|
+
end
|
|
63
|
+
assert_nothing_raised { @filter_column.col_id = 7 }
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
def test_to_xml_string
|
|
67
|
+
doc = Nokogiri::XML(@filter_column.to_xml_string)
|
|
68
|
+
assert doc.xpath("//filterColumn[@colId=#{@filter_column.col_id}]")
|
|
69
|
+
assert doc.xpath("//filterColumn[@hiddenButton=#{@filter_column.hidden_button}]")
|
|
70
|
+
assert doc.xpath("//filterColumn[@showButton=#{@filter_column.show_button}]")
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
assert doc.xpath("//filterColumn/filters")
|
|
75
|
+
end
|
|
76
|
+
end
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
require 'tc_helper.rb'
|
|
2
|
+
|
|
3
|
+
class TestFilters < Test::Unit::TestCase
|
|
4
|
+
def setup
|
|
5
|
+
@filters = Axlsx::Filters.new(:filter_items => [1, 'a'],
|
|
6
|
+
:date_group_items =>[ { :date_time_grouping => :year, :year => 2011, :month => 11, :day => 11, :hour => 0, :minute => 0, :second => 0 } ] ,
|
|
7
|
+
:blank => true)
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def test_blank
|
|
11
|
+
assert_equal true, @filters.blank
|
|
12
|
+
assert_raise(ArgumentError) { @filters.blank = :only_if_you_want_it }
|
|
13
|
+
@filters.blank = true
|
|
14
|
+
assert_equal true, @filters.blank
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def test_calendar_type
|
|
18
|
+
assert_raise(ArgumentError) { @filters.calendar_type = 'monkey calendar' }
|
|
19
|
+
@filters.calendar_type = 'japan'
|
|
20
|
+
assert_equal('japan', @filters.calendar_type)
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def test_filters_items
|
|
24
|
+
assert @filters.filter_items.is_a?(Array)
|
|
25
|
+
assert_equal 2, @filters.filter_items.size
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def test_date_group_items
|
|
29
|
+
assert @filters.date_group_items.is_a?(Array)
|
|
30
|
+
assert_equal 1, @filters.date_group_items.size
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def test_apply_is_false_for_matching_values
|
|
34
|
+
keeper = Object.new
|
|
35
|
+
def keeper.value; 'a'; end
|
|
36
|
+
assert_equal false, @filters.apply(keeper)
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def test_apply_is_true_for_non_matching_values
|
|
40
|
+
hidden = Object.new
|
|
41
|
+
def hidden.value; 'b'; end
|
|
42
|
+
assert_equal true, @filters.apply(hidden)
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def test_to_xml_string
|
|
46
|
+
doc = Nokogiri::XML(@filters.to_xml_string)
|
|
47
|
+
assert_equal(1, doc.xpath('//filters[@blank="true"]').size)
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
require 'tc_helper.rb'
|
|
2
|
+
|
|
3
|
+
class TestBreak < Test::Unit::TestCase
|
|
4
|
+
|
|
5
|
+
def setup
|
|
6
|
+
@break = Axlsx::Break.new(:id => 1, :min => 1, :max => 10, :man => true, :pt => false)
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
def test_id
|
|
10
|
+
assert_equal(1, @break.id)
|
|
11
|
+
assert_raises ArgumentError do
|
|
12
|
+
Axlsx::Break.new(:hoge, {:id => -1})
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def test_min
|
|
17
|
+
assert_equal(1, @break.min)
|
|
18
|
+
assert_raises ArgumentError do
|
|
19
|
+
Axlsx::Break.new(:hoge, :min => -1)
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def test_max
|
|
24
|
+
assert_equal(10, @break.max)
|
|
25
|
+
assert_raises ArgumentError do
|
|
26
|
+
Axlsx::Break.new(:hoge, :max => -1)
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
def test_man
|
|
32
|
+
assert_equal(true, @break.man)
|
|
33
|
+
assert_raises ArgumentError do
|
|
34
|
+
Axlsx::Break.new(:man => -1)
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def test_pt
|
|
39
|
+
assert_equal(false, @break.pt)
|
|
40
|
+
assert_raises ArgumentError do
|
|
41
|
+
Axlsx::Break.new(:pt => -1)
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def test_to_xml_string
|
|
46
|
+
doc = Nokogiri::XML(@break.to_xml_string)
|
|
47
|
+
assert_equal(doc.xpath('//brk[@id="1"][@min="1"][@max="10"][@pt="false"][@man="true"]').size, 1)
|
|
48
|
+
end
|
|
49
|
+
end
|