caxlsx 2.0.2
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 +9 -0
- data/.yardopts_guide +19 -0
- data/CHANGELOG.md +239 -0
- data/LICENSE +22 -0
- data/README.md +256 -0
- data/Rakefile +31 -0
- 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 +58 -0
- data/examples/chart_colors.rb +88 -0
- data/examples/colored_links.rb +59 -0
- data/examples/conditional_formatting/example_conditional_formatting.rb +74 -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 +777 -0
- data/examples/extractive.rb +45 -0
- data/examples/image1.jpeg +0 -0
- data/examples/ios_preview.rb +14 -0
- data/examples/page_setup.rb +11 -0
- data/examples/pivot_table.rb +39 -0
- data/examples/sheet_protection.rb +10 -0
- data/examples/skydrive/real_example.rb +63 -0
- data/examples/styles.rb +66 -0
- data/examples/underline.rb +13 -0
- data/examples/wrap_text.rb +21 -0
- data/lib/axlsx.rb +152 -0
- data/lib/axlsx/content_type/abstract_content_type.rb +32 -0
- data/lib/axlsx/content_type/content_type.rb +26 -0
- data/lib/axlsx/content_type/default.rb +25 -0
- data/lib/axlsx/content_type/override.rb +25 -0
- data/lib/axlsx/doc_props/app.rb +235 -0
- data/lib/axlsx/doc_props/core.rb +39 -0
- data/lib/axlsx/drawing/ax_data_source.rb +26 -0
- data/lib/axlsx/drawing/axes.rb +61 -0
- data/lib/axlsx/drawing/axis.rb +187 -0
- data/lib/axlsx/drawing/bar_3D_chart.rb +151 -0
- data/lib/axlsx/drawing/bar_series.rb +82 -0
- data/lib/axlsx/drawing/cat_axis.rb +85 -0
- data/lib/axlsx/drawing/chart.rb +232 -0
- data/lib/axlsx/drawing/d_lbls.rb +90 -0
- data/lib/axlsx/drawing/drawing.rb +162 -0
- data/lib/axlsx/drawing/graphic_frame.rb +54 -0
- data/lib/axlsx/drawing/hyperlink.rb +102 -0
- data/lib/axlsx/drawing/line_3D_chart.rb +68 -0
- data/lib/axlsx/drawing/line_chart.rb +99 -0
- data/lib/axlsx/drawing/line_series.rb +81 -0
- data/lib/axlsx/drawing/marker.rb +84 -0
- data/lib/axlsx/drawing/num_data.rb +52 -0
- data/lib/axlsx/drawing/num_data_source.rb +62 -0
- data/lib/axlsx/drawing/num_val.rb +32 -0
- data/lib/axlsx/drawing/one_cell_anchor.rb +98 -0
- data/lib/axlsx/drawing/pic.rb +205 -0
- data/lib/axlsx/drawing/picture_locking.rb +44 -0
- data/lib/axlsx/drawing/pie_3D_chart.rb +48 -0
- data/lib/axlsx/drawing/pie_series.rb +74 -0
- data/lib/axlsx/drawing/scaling.rb +60 -0
- data/lib/axlsx/drawing/scatter_chart.rb +74 -0
- data/lib/axlsx/drawing/scatter_series.rb +65 -0
- data/lib/axlsx/drawing/ser_axis.rb +45 -0
- data/lib/axlsx/drawing/series.rb +69 -0
- data/lib/axlsx/drawing/series_title.rb +23 -0
- data/lib/axlsx/drawing/str_data.rb +42 -0
- data/lib/axlsx/drawing/str_val.rb +32 -0
- data/lib/axlsx/drawing/title.rb +78 -0
- data/lib/axlsx/drawing/two_cell_anchor.rb +92 -0
- data/lib/axlsx/drawing/val_axis.rb +37 -0
- data/lib/axlsx/drawing/view_3D.rb +115 -0
- data/lib/axlsx/drawing/vml_drawing.rb +42 -0
- data/lib/axlsx/drawing/vml_shape.rb +66 -0
- data/lib/axlsx/package.rb +352 -0
- data/lib/axlsx/rels/relationship.rb +129 -0
- data/lib/axlsx/rels/relationships.rb +29 -0
- data/lib/axlsx/stylesheet/border.rb +71 -0
- data/lib/axlsx/stylesheet/border_pr.rb +71 -0
- data/lib/axlsx/stylesheet/cell_alignment.rb +134 -0
- data/lib/axlsx/stylesheet/cell_protection.rb +43 -0
- data/lib/axlsx/stylesheet/cell_style.rb +74 -0
- data/lib/axlsx/stylesheet/color.rb +78 -0
- data/lib/axlsx/stylesheet/dxf.rb +79 -0
- data/lib/axlsx/stylesheet/fill.rb +35 -0
- data/lib/axlsx/stylesheet/font.rb +148 -0
- data/lib/axlsx/stylesheet/gradient_fill.rb +103 -0
- data/lib/axlsx/stylesheet/gradient_stop.rb +37 -0
- data/lib/axlsx/stylesheet/num_fmt.rb +79 -0
- data/lib/axlsx/stylesheet/pattern_fill.rb +73 -0
- data/lib/axlsx/stylesheet/styles.rb +420 -0
- data/lib/axlsx/stylesheet/table_style.rb +54 -0
- data/lib/axlsx/stylesheet/table_style_element.rb +79 -0
- data/lib/axlsx/stylesheet/table_styles.rb +46 -0
- data/lib/axlsx/stylesheet/xf.rb +147 -0
- data/lib/axlsx/util/accessors.rb +64 -0
- data/lib/axlsx/util/constants.rb +392 -0
- data/lib/axlsx/util/options_parser.rb +15 -0
- data/lib/axlsx/util/parser.rb +44 -0
- data/lib/axlsx/util/serialized_attributes.rb +79 -0
- data/lib/axlsx/util/simple_typed_list.rb +203 -0
- data/lib/axlsx/util/storage.rb +146 -0
- data/lib/axlsx/util/validators.rb +300 -0
- data/lib/axlsx/version.rb +5 -0
- data/lib/axlsx/workbook/defined_name.rb +129 -0
- data/lib/axlsx/workbook/defined_names.rb +21 -0
- data/lib/axlsx/workbook/shared_strings_table.rb +77 -0
- data/lib/axlsx/workbook/workbook.rb +354 -0
- 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 +416 -0
- data/lib/axlsx/workbook/worksheet/cell_serializer.rb +144 -0
- data/lib/axlsx/workbook/worksheet/cfvo.rb +62 -0
- data/lib/axlsx/workbook/worksheet/cfvos.rb +15 -0
- data/lib/axlsx/workbook/worksheet/col.rb +144 -0
- data/lib/axlsx/workbook/worksheet/col_breaks.rb +35 -0
- data/lib/axlsx/workbook/worksheet/color_scale.rb +110 -0
- data/lib/axlsx/workbook/worksheet/cols.rb +20 -0
- data/lib/axlsx/workbook/worksheet/comment.rb +92 -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 +220 -0
- data/lib/axlsx/workbook/worksheet/conditional_formattings.rb +25 -0
- data/lib/axlsx/workbook/worksheet/data_bar.rb +131 -0
- data/lib/axlsx/workbook/worksheet/data_validation.rb +244 -0
- data/lib/axlsx/workbook/worksheet/data_validations.rb +28 -0
- data/lib/axlsx/workbook/worksheet/date_time_converter.rb +30 -0
- data/lib/axlsx/workbook/worksheet/dimension.rb +64 -0
- data/lib/axlsx/workbook/worksheet/header_footer.rb +54 -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_margins.rb +99 -0
- data/lib/axlsx/workbook/worksheet/page_set_up_pr.rb +44 -0
- data/lib/axlsx/workbook/worksheet/page_setup.rb +242 -0
- data/lib/axlsx/workbook/worksheet/pane.rb +141 -0
- 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 +41 -0
- data/lib/axlsx/workbook/worksheet/protected_range.rb +49 -0
- data/lib/axlsx/workbook/worksheet/protected_ranges.rb +34 -0
- data/lib/axlsx/workbook/worksheet/row.rb +172 -0
- data/lib/axlsx/workbook/worksheet/row_breaks.rb +33 -0
- data/lib/axlsx/workbook/worksheet/selection.rb +103 -0
- data/lib/axlsx/workbook/worksheet/sheet_calc_pr.rb +29 -0
- data/lib/axlsx/workbook/worksheet/sheet_data.rb +25 -0
- data/lib/axlsx/workbook/worksheet/sheet_format_pr.rb +60 -0
- data/lib/axlsx/workbook/worksheet/sheet_pr.rb +69 -0
- data/lib/axlsx/workbook/worksheet/sheet_protection.rb +120 -0
- data/lib/axlsx/workbook/worksheet/sheet_view.rb +213 -0
- data/lib/axlsx/workbook/worksheet/table.rb +102 -0
- data/lib/axlsx/workbook/worksheet/table_style_info.rb +51 -0
- data/lib/axlsx/workbook/worksheet/tables.rb +31 -0
- data/lib/axlsx/workbook/worksheet/worksheet.rb +769 -0
- data/lib/axlsx/workbook/worksheet/worksheet_comments.rb +58 -0
- data/lib/axlsx/workbook/worksheet/worksheet_drawing.rb +58 -0
- data/lib/axlsx/workbook/worksheet/worksheet_hyperlink.rb +74 -0
- data/lib/axlsx/workbook/worksheet/worksheet_hyperlinks.rb +38 -0
- data/lib/schema/dc.xsd +118 -0
- data/lib/schema/dcmitype.xsd +52 -0
- data/lib/schema/dcterms.xsd +331 -0
- data/lib/schema/dml-chart.xsd +1499 -0
- data/lib/schema/dml-chartDrawing.xsd +146 -0
- data/lib/schema/dml-compatibility.xsd +14 -0
- data/lib/schema/dml-diagram.xsd +1091 -0
- data/lib/schema/dml-lockedCanvas.xsd +11 -0
- data/lib/schema/dml-main.xsd +3048 -0
- data/lib/schema/dml-picture.xsd +23 -0
- data/lib/schema/dml-spreadsheetDrawing.xsd +185 -0
- data/lib/schema/dml-wordprocessingDrawing.xsd +185 -0
- data/lib/schema/opc-contentTypes.xsd +42 -0
- data/lib/schema/opc-coreProperties.xsd +54 -0
- data/lib/schema/opc-digSig.xsd +49 -0
- data/lib/schema/opc-relationships.xsd +33 -0
- data/lib/schema/pml.xsd +1676 -0
- data/lib/schema/shared-additionalCharacteristics.xsd +28 -0
- data/lib/schema/shared-bibliography.xsd +144 -0
- data/lib/schema/shared-commonSimpleTypes.xsd +166 -0
- data/lib/schema/shared-customXmlDataProperties.xsd +25 -0
- data/lib/schema/shared-customXmlSchemaProperties.xsd +18 -0
- data/lib/schema/shared-documentPropertiesCustom.xsd +59 -0
- data/lib/schema/shared-documentPropertiesExtended.xsd +56 -0
- data/lib/schema/shared-documentPropertiesVariantTypes.xsd +195 -0
- data/lib/schema/shared-math.xsd +582 -0
- data/lib/schema/shared-relationshipReference.xsd +25 -0
- data/lib/schema/sml.xsd +4434 -0
- data/lib/schema/vml-main.xsd +569 -0
- data/lib/schema/vml-officeDrawing.xsd +509 -0
- data/lib/schema/vml-presentationDrawing.xsd +12 -0
- data/lib/schema/vml-spreadsheetDrawing.xsd +108 -0
- data/lib/schema/vml-wordprocessingDrawing.xsd +96 -0
- data/lib/schema/wml.xsd +3644 -0
- data/lib/schema/xml.xsd +116 -0
- data/test/benchmark.rb +72 -0
- data/test/content_type/tc_content_type.rb +76 -0
- data/test/content_type/tc_default.rb +16 -0
- data/test/content_type/tc_override.rb +14 -0
- data/test/doc_props/tc_app.rb +43 -0
- data/test/doc_props/tc_core.rb +42 -0
- data/test/drawing/tc_axes.rb +8 -0
- data/test/drawing/tc_axis.rb +85 -0
- data/test/drawing/tc_bar_3D_chart.rb +71 -0
- data/test/drawing/tc_bar_series.rb +37 -0
- data/test/drawing/tc_cat_axis.rb +31 -0
- data/test/drawing/tc_cat_axis_data.rb +27 -0
- data/test/drawing/tc_chart.rb +110 -0
- data/test/drawing/tc_d_lbls.rb +57 -0
- data/test/drawing/tc_data_source.rb +17 -0
- data/test/drawing/tc_drawing.rb +80 -0
- data/test/drawing/tc_graphic_frame.rb +27 -0
- data/test/drawing/tc_hyperlink.rb +64 -0
- data/test/drawing/tc_line_3d_chart.rb +47 -0
- data/test/drawing/tc_line_chart.rb +39 -0
- data/test/drawing/tc_line_series.rb +30 -0
- data/test/drawing/tc_marker.rb +44 -0
- 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_one_cell_anchor.rb +66 -0
- data/test/drawing/tc_pic.rb +107 -0
- data/test/drawing/tc_picture_locking.rb +72 -0
- data/test/drawing/tc_pie_3D_chart.rb +28 -0
- data/test/drawing/tc_pie_series.rb +32 -0
- data/test/drawing/tc_scaling.rb +36 -0
- data/test/drawing/tc_scatter_chart.rb +48 -0
- data/test/drawing/tc_scatter_series.rb +21 -0
- data/test/drawing/tc_ser_axis.rb +31 -0
- data/test/drawing/tc_series.rb +23 -0
- data/test/drawing/tc_series_title.rb +33 -0
- data/test/drawing/tc_str_data.rb +18 -0
- data/test/drawing/tc_str_val.rb +21 -0
- data/test/drawing/tc_title.rb +49 -0
- data/test/drawing/tc_two_cell_anchor.rb +36 -0
- data/test/drawing/tc_val_axis.rb +24 -0
- data/test/drawing/tc_view_3D.rb +54 -0
- data/test/drawing/tc_vml_drawing.rb +25 -0
- data/test/drawing/tc_vml_shape.rb +106 -0
- data/test/profile.rb +24 -0
- data/test/rels/tc_relationship.rb +44 -0
- data/test/rels/tc_relationships.rb +37 -0
- data/test/stylesheet/tc_border.rb +37 -0
- data/test/stylesheet/tc_border_pr.rb +32 -0
- data/test/stylesheet/tc_cell_alignment.rb +81 -0
- data/test/stylesheet/tc_cell_protection.rb +29 -0
- data/test/stylesheet/tc_cell_style.rb +57 -0
- data/test/stylesheet/tc_color.rb +43 -0
- data/test/stylesheet/tc_dxf.rb +81 -0
- data/test/stylesheet/tc_fill.rb +18 -0
- data/test/stylesheet/tc_font.rb +121 -0
- data/test/stylesheet/tc_gradient_fill.rb +72 -0
- data/test/stylesheet/tc_gradient_stop.rb +31 -0
- data/test/stylesheet/tc_num_fmt.rb +30 -0
- data/test/stylesheet/tc_pattern_fill.rb +43 -0
- data/test/stylesheet/tc_styles.rb +235 -0
- data/test/stylesheet/tc_table_style.rb +44 -0
- data/test/stylesheet/tc_table_style_element.rb +45 -0
- data/test/stylesheet/tc_table_styles.rb +29 -0
- data/test/stylesheet/tc_xf.rb +120 -0
- data/test/tc_axlsx.rb +72 -0
- data/test/tc_helper.rb +10 -0
- data/test/tc_package.rb +227 -0
- data/test/util/tc_serialized_attributes.rb +19 -0
- data/test/util/tc_simple_typed_list.rb +78 -0
- data/test/util/tc_validators.rb +186 -0
- data/test/workbook/tc_defined_name.rb +41 -0
- data/test/workbook/tc_shared_strings_table.rb +44 -0
- data/test/workbook/tc_workbook.rb +125 -0
- 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 +319 -0
- data/test/workbook/worksheet/tc_cfvo.rb +31 -0
- data/test/workbook/worksheet/tc_col.rb +78 -0
- data/test/workbook/worksheet/tc_color_scale.rb +58 -0
- data/test/workbook/worksheet/tc_comment.rb +72 -0
- data/test/workbook/worksheet/tc_comments.rb +57 -0
- data/test/workbook/worksheet/tc_conditional_formatting.rb +224 -0
- data/test/workbook/worksheet/tc_data_bar.rb +46 -0
- data/test/workbook/worksheet/tc_data_validation.rb +265 -0
- data/test/workbook/worksheet/tc_date_time_converter.rb +124 -0
- data/test/workbook/worksheet/tc_header_footer.rb +151 -0
- data/test/workbook/worksheet/tc_icon_set.rb +45 -0
- data/test/workbook/worksheet/tc_page_margins.rb +97 -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 +54 -0
- 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_print_options.rb +72 -0
- data/test/workbook/worksheet/tc_protected_range.rb +17 -0
- data/test/workbook/worksheet/tc_row.rb +117 -0
- data/test/workbook/worksheet/tc_selection.rb +55 -0
- 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_protection.rb +117 -0
- data/test/workbook/worksheet/tc_sheet_view.rb +214 -0
- data/test/workbook/worksheet/tc_table.rb +68 -0
- data/test/workbook/worksheet/tc_table_style_info.rb +53 -0
- data/test/workbook/worksheet/tc_worksheet.rb +538 -0
- data/test/workbook/worksheet/tc_worksheet_hyperlink.rb +55 -0
- metadata +546 -0
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
require 'tc_helper.rb'
|
|
2
|
+
|
|
3
|
+
class TestDataBar < Test::Unit::TestCase
|
|
4
|
+
def setup
|
|
5
|
+
@data_bar = Axlsx::DataBar.new :color => "FF638EC6"
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
def test_defaults
|
|
9
|
+
assert_equal @data_bar.minLength, 10
|
|
10
|
+
assert_equal @data_bar.maxLength, 90
|
|
11
|
+
assert_equal @data_bar.showValue, true
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def test_override_default_cfvos
|
|
15
|
+
data_bar = Axlsx::DataBar.new({:color => 'FF00FF00'}, {:type => :min, :val => "20"})
|
|
16
|
+
assert_equal("20", data_bar.value_objects.first.val)
|
|
17
|
+
assert_equal("0", data_bar.value_objects.last.val)
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
def test_minLength
|
|
22
|
+
assert_raise(ArgumentError) { @data_bar.minLength = :invalid_type }
|
|
23
|
+
assert_nothing_raised { @data_bar.minLength = 0}
|
|
24
|
+
assert_equal(@data_bar.minLength, 0)
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def test_maxLength
|
|
28
|
+
assert_raise(ArgumentError) { @data_bar.maxLength = :invalid_type }
|
|
29
|
+
assert_nothing_raised { @data_bar.maxLength = 0}
|
|
30
|
+
assert_equal(@data_bar.maxLength, 0)
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def test_showValue
|
|
34
|
+
assert_raise(ArgumentError) { @data_bar.showValue = :invalid_type }
|
|
35
|
+
assert_nothing_raised { @data_bar.showValue = false}
|
|
36
|
+
assert_equal(@data_bar.showValue, false)
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def test_to_xml_string
|
|
40
|
+
doc = Nokogiri::XML.parse(@data_bar.to_xml_string)
|
|
41
|
+
assert_equal(doc.xpath(".//dataBar[@minLength=10][@maxLength=90][@showValue='true']").size, 1)
|
|
42
|
+
assert_equal(doc.xpath(".//dataBar//cfvo").size, 2)
|
|
43
|
+
assert_equal(doc.xpath(".//dataBar//color").size, 1)
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
end
|
|
@@ -0,0 +1,265 @@
|
|
|
1
|
+
# encoding: UTF-8
|
|
2
|
+
require 'tc_helper.rb'
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
class TestDataValidation < Test::Unit::TestCase
|
|
6
|
+
def setup
|
|
7
|
+
#inverse defaults
|
|
8
|
+
@boolean_options = { :allowBlank => false, :showDropDown => true, :showErrorMessage => false, :showInputMessage => true }
|
|
9
|
+
@nil_options = { :formula1 => 'foo', :formula2 => 'foo', :errorTitle => 'foo', :operator => :lessThan, :prompt => 'foo', :promptTitle => 'foo', :sqref => 'foo' }
|
|
10
|
+
@type_option = { :type => :whole }
|
|
11
|
+
@error_style_option = { :errorStyle => :warning }
|
|
12
|
+
|
|
13
|
+
@string_options = { :formula1 => 'foo', :formula2 => 'foo', :error => 'foo', :errorTitle => 'foo', :prompt => 'foo', :promptTitle => 'foo', :sqref => 'foo' }
|
|
14
|
+
@symbol_options = { :errorStyle => :warning, :operator => :lessThan, :type => :whole}
|
|
15
|
+
|
|
16
|
+
@options = @boolean_options.merge(@nil_options).merge(@type_option).merge(@error_style_option)
|
|
17
|
+
|
|
18
|
+
@dv = Axlsx::DataValidation.new(@options)
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def test_initialize
|
|
22
|
+
dv = Axlsx::DataValidation.new
|
|
23
|
+
|
|
24
|
+
@boolean_options.each do |key, value|
|
|
25
|
+
assert_equal(!value, dv.send(key.to_sym), "initialized default #{key} should be #{!value}")
|
|
26
|
+
assert_equal(value, @dv.send(key.to_sym), "initialized options #{key} should be #{value}")
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
@nil_options.each do |key, value|
|
|
30
|
+
assert_equal(nil, dv.send(key.to_sym), "initialized default #{key} should be nil")
|
|
31
|
+
assert_equal(value, @dv.send(key.to_sym), "initialized options #{key} should be #{value}")
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
@type_option.each do |key, value|
|
|
35
|
+
assert_equal(:none, dv.send(key.to_sym), "initialized default #{key} should be :none")
|
|
36
|
+
assert_equal(value, @dv.send(key.to_sym), "initialized options #{key} should be #{value}")
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
@error_style_option.each do |key, value|
|
|
40
|
+
assert_equal(:stop, dv.send(key.to_sym), "initialized default #{key} should be :stop")
|
|
41
|
+
assert_equal(value, @dv.send(key.to_sym), "initialized options #{key} should be #{value}")
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def test_boolean_attribute_validation
|
|
46
|
+
@boolean_options.each do |key, value|
|
|
47
|
+
assert_raise(ArgumentError, "#{key} must be boolean") { @dv.send("#{key}=".to_sym, 'A') }
|
|
48
|
+
assert_nothing_raised { @dv.send("#{key}=".to_sym, true) }
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
def test_string_attribute_validation
|
|
53
|
+
@string_options.each do |key, value|
|
|
54
|
+
assert_raise(ArgumentError, "#{key} must be string") { @dv.send("#{key}=".to_sym, :symbol) }
|
|
55
|
+
assert_nothing_raised { @dv.send("#{key}=".to_sym, "foo") }
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
def test_symbol_attribute_validation
|
|
60
|
+
@symbol_options.each do |key, value|
|
|
61
|
+
assert_raise(ArgumentError, "#{key} must be symbol") { @dv.send("#{key}=".to_sym, "foo") }
|
|
62
|
+
assert_nothing_raised { @dv.send("#{key}=".to_sym, value) }
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
def test_formula1
|
|
67
|
+
assert_raise(ArgumentError) { @dv.formula1 = 10 }
|
|
68
|
+
assert_nothing_raised { @dv.formula1 = "=SUM(A1:A1)" }
|
|
69
|
+
assert_equal(@dv.formula1, "=SUM(A1:A1)")
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
def test_formula2
|
|
73
|
+
assert_raise(ArgumentError) { @dv.formula2 = 10 }
|
|
74
|
+
assert_nothing_raised { @dv.formula2 = "=SUM(A1:A1)" }
|
|
75
|
+
assert_equal(@dv.formula2, "=SUM(A1:A1)")
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
def test_allowBlank
|
|
79
|
+
assert_raise(ArgumentError) { @dv.allowBlank = "foo´" }
|
|
80
|
+
assert_nothing_raised { @dv.allowBlank = false }
|
|
81
|
+
assert_equal(@dv.allowBlank, false)
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
def test_error
|
|
85
|
+
assert_raise(ArgumentError) { @dv.error = :symbol }
|
|
86
|
+
assert_nothing_raised { @dv.error = "This is a error message" }
|
|
87
|
+
assert_equal(@dv.error, "This is a error message")
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
def test_errorStyle
|
|
91
|
+
assert_raise(ArgumentError) { @dv.errorStyle = "foo" }
|
|
92
|
+
assert_nothing_raised { @dv.errorStyle = :information }
|
|
93
|
+
assert_equal(@dv.errorStyle, :information)
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
def test_errorTitle
|
|
97
|
+
assert_raise(ArgumentError) { @dv.errorTitle = :symbol }
|
|
98
|
+
assert_nothing_raised { @dv.errorTitle = "This is the error title" }
|
|
99
|
+
assert_equal(@dv.errorTitle, "This is the error title")
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
def test_operator
|
|
103
|
+
assert_raise(ArgumentError) { @dv.operator = "foo" }
|
|
104
|
+
assert_nothing_raised { @dv.operator = :greaterThan }
|
|
105
|
+
assert_equal(@dv.operator, :greaterThan)
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
def test_prompt
|
|
109
|
+
assert_raise(ArgumentError) { @dv.prompt = :symbol }
|
|
110
|
+
assert_nothing_raised { @dv.prompt = "This is a prompt message" }
|
|
111
|
+
assert_equal(@dv.prompt, "This is a prompt message")
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
def test_promptTitle
|
|
115
|
+
assert_raise(ArgumentError) { @dv.promptTitle = :symbol }
|
|
116
|
+
assert_nothing_raised { @dv.promptTitle = "This is the prompt title" }
|
|
117
|
+
assert_equal(@dv.promptTitle, "This is the prompt title")
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
def test_showDropDown
|
|
121
|
+
assert_raise(ArgumentError) { @dv.showDropDown = "foo´" }
|
|
122
|
+
assert_nothing_raised { @dv.showDropDown = false }
|
|
123
|
+
assert_equal(@dv.showDropDown, false)
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
def test_showErrorMessage
|
|
127
|
+
assert_raise(ArgumentError) { @dv.showErrorMessage = "foo´" }
|
|
128
|
+
assert_nothing_raised { @dv.showErrorMessage = false }
|
|
129
|
+
assert_equal(@dv.showErrorMessage, false)
|
|
130
|
+
end
|
|
131
|
+
|
|
132
|
+
def test_showInputMessage
|
|
133
|
+
assert_raise(ArgumentError) { @dv.showInputMessage = "foo´" }
|
|
134
|
+
assert_nothing_raised { @dv.showInputMessage = false }
|
|
135
|
+
assert_equal(@dv.showInputMessage, false)
|
|
136
|
+
end
|
|
137
|
+
|
|
138
|
+
def test_sqref
|
|
139
|
+
assert_raise(ArgumentError) { @dv.sqref = 10 }
|
|
140
|
+
assert_nothing_raised { @dv.sqref = "A1:A1" }
|
|
141
|
+
assert_equal(@dv.sqref, "A1:A1")
|
|
142
|
+
end
|
|
143
|
+
|
|
144
|
+
def test_type
|
|
145
|
+
assert_raise(ArgumentError) { @dv.type = "foo" }
|
|
146
|
+
assert_nothing_raised { @dv.type = :list }
|
|
147
|
+
assert_equal(@dv.type, :list)
|
|
148
|
+
end
|
|
149
|
+
|
|
150
|
+
def test_whole_decimal_data_time_textLength_to_xml
|
|
151
|
+
p = Axlsx::Package.new
|
|
152
|
+
@ws = p.workbook.add_worksheet :name=>"data_validation"
|
|
153
|
+
@ws.add_data_validation("A1", { :type => :whole, :operator => :between, :formula1 => '5', :formula2 => '10',
|
|
154
|
+
:showErrorMessage => true, :errorTitle => 'Wrong input', :error => 'Only values between 5 and 10',
|
|
155
|
+
:errorStyle => :information, :showInputMessage => true, :promptTitle => 'Be carful!',
|
|
156
|
+
:prompt => 'Only values between 5 and 10'})
|
|
157
|
+
|
|
158
|
+
doc = Nokogiri::XML.parse(@ws.to_xml_string)
|
|
159
|
+
|
|
160
|
+
#test attributes
|
|
161
|
+
assert_equal(1, doc.xpath("//xmlns:worksheet/xmlns:dataValidations[@count='1']/xmlns:dataValidation[@sqref='A1']
|
|
162
|
+
[@promptTitle='Be carful!'][@prompt='Only values between 5 and 10'][@operator='between'][@errorTitle='Wrong input']
|
|
163
|
+
[@error='Only values between 5 and 10'][@showErrorMessage='true'][@allowBlank='true'][@showInputMessage='true'][@type='whole']
|
|
164
|
+
[@errorStyle='information']").size)
|
|
165
|
+
assert doc.xpath("//xmlns:worksheet/xmlns:dataValidations[@count='1']/xmlns:dataValidation[@sqref='A1']
|
|
166
|
+
[@promptTitle='Be carful!'][@prompt='Only values between 5 and 10'][@operator='between'][@errorTitle='Wrong input']
|
|
167
|
+
[@error='Only values between 5 and 10'][@showErrorMessage='true'][@allowBlank='true'][@showInputMessage='true']
|
|
168
|
+
[@type='whole'][@errorStyle='information']")
|
|
169
|
+
|
|
170
|
+
#test forumula1
|
|
171
|
+
assert_equal(1, doc.xpath("//xmlns:worksheet/xmlns:dataValidations/xmlns:dataValidation/xmlns:formula1").size)
|
|
172
|
+
assert doc.xpath("//xmlns:worksheet/xmlns:dataValidations/xmlns:dataValidation/xmlns:formula1='5'")
|
|
173
|
+
|
|
174
|
+
#test forumula2
|
|
175
|
+
assert_equal(1, doc.xpath("//xmlns:worksheet/xmlns:dataValidations/xmlns:dataValidation/xmlns:formula2").size)
|
|
176
|
+
assert doc.xpath("//xmlns:worksheet/xmlns:dataValidations/xmlns:dataValidation/xmlns:formula2='10'")
|
|
177
|
+
end
|
|
178
|
+
|
|
179
|
+
def test_list_to_xml
|
|
180
|
+
p = Axlsx::Package.new
|
|
181
|
+
@ws = p.workbook.add_worksheet :name=>"data_validation"
|
|
182
|
+
@ws.add_data_validation("A1", { :type => :list, :formula1 => 'A1:A5',
|
|
183
|
+
:showErrorMessage => true, :errorTitle => 'Wrong input', :error => 'Only values from list',
|
|
184
|
+
:errorStyle => :stop, :showInputMessage => true, :promptTitle => 'Be carful!',
|
|
185
|
+
:prompt => 'Only values from list', :showDropDown => true})
|
|
186
|
+
|
|
187
|
+
doc = Nokogiri::XML.parse(@ws.to_xml_string)
|
|
188
|
+
|
|
189
|
+
#test attributes
|
|
190
|
+
assert_equal(1, doc.xpath("//xmlns:worksheet/xmlns:dataValidations[@count='1']/xmlns:dataValidation[@sqref='A1']
|
|
191
|
+
[@promptTitle='Be carful!'][@prompt='Only values from list'][@errorTitle='Wrong input'][@error='Only values from list']
|
|
192
|
+
[@showErrorMessage='true'][@allowBlank='true'][@showInputMessage='true'][@showDropDown='true'][@type='list']
|
|
193
|
+
[@errorStyle='stop']").size)
|
|
194
|
+
assert doc.xpath("//xmlns:worksheet/xmlns:dataValidations[@count='1']/xmlns:dataValidation[@sqref='A1']
|
|
195
|
+
[@promptTitle='Be carful!'][@prompt='Only values from list'][@errorTitle='Wrong input'][@error='Only values from list']
|
|
196
|
+
[@showErrorMessage='true'][@allowBlank='true'][@showInputMessage='true'][@showDropDown='true'][@type='list'][@errorStyle='stop']")
|
|
197
|
+
|
|
198
|
+
#test forumula1
|
|
199
|
+
assert_equal(1, doc.xpath("//xmlns:worksheet/xmlns:dataValidations/xmlns:dataValidation/xmlns:formula1").size)
|
|
200
|
+
assert doc.xpath("//xmlns:worksheet/xmlns:dataValidations/xmlns:dataValidation/xmlns:formula1='A1:A5'")
|
|
201
|
+
end
|
|
202
|
+
|
|
203
|
+
def test_custom_to_xml
|
|
204
|
+
p = Axlsx::Package.new
|
|
205
|
+
@ws = p.workbook.add_worksheet :name=>"data_validation"
|
|
206
|
+
@ws.add_data_validation("A1", { :type => :custom, :formula1 => '=5/2',
|
|
207
|
+
:showErrorMessage => true, :errorTitle => 'Wrong input', :error => 'Only values corresponding formula',
|
|
208
|
+
:errorStyle => :stop, :showInputMessage => true, :promptTitle => 'Be carful!',
|
|
209
|
+
:prompt => 'Only values corresponding formula'})
|
|
210
|
+
|
|
211
|
+
doc = Nokogiri::XML.parse(@ws.to_xml_string)
|
|
212
|
+
|
|
213
|
+
#test attributes
|
|
214
|
+
assert_equal(1, doc.xpath("//xmlns:worksheet/xmlns:dataValidations[@count='1']/xmlns:dataValidation[@sqref='A1'][@promptTitle='Be carful!']
|
|
215
|
+
[@prompt='Only values corresponding formula'][@errorTitle='Wrong input'][@error='Only values corresponding formula'][@showErrorMessage='true']
|
|
216
|
+
[@allowBlank='true'][@showInputMessage='true'][@type='custom'][@errorStyle='stop']").size)
|
|
217
|
+
assert doc.xpath("//xmlns:worksheet/xmlns:dataValidations[@count='1']/xmlns:dataValidation[@sqref='A1'][@promptTitle='Be carful!']
|
|
218
|
+
[@prompt='Only values corresponding formula'][@errorTitle='Wrong input'][@error='Only values corresponding formula']
|
|
219
|
+
[@showErrorMessage='true'][@allowBlank='true'][@showInputMessage='true'][@type='custom'][@errorStyle='stop']")
|
|
220
|
+
|
|
221
|
+
#test forumula1
|
|
222
|
+
assert_equal(1, doc.xpath("//xmlns:worksheet/xmlns:dataValidations/xmlns:dataValidation/xmlns:formula1").size)
|
|
223
|
+
assert doc.xpath("//xmlns:worksheet/xmlns:dataValidations/xmlns:dataValidation/xmlns:formula1='=5/2'")
|
|
224
|
+
end
|
|
225
|
+
|
|
226
|
+
def test_multiple_datavalidations_to_xml
|
|
227
|
+
p = Axlsx::Package.new
|
|
228
|
+
@ws = p.workbook.add_worksheet :name=>"data_validation"
|
|
229
|
+
@ws.add_data_validation("A1", { :type => :whole, :operator => :between, :formula1 => '5', :formula2 => '10',
|
|
230
|
+
:showErrorMessage => true, :errorTitle => 'Wrong input', :error => 'Only values between 5 and 10',
|
|
231
|
+
:errorStyle => :information, :showInputMessage => true, :promptTitle => 'Be carful!',
|
|
232
|
+
:prompt => 'Only values between 5 and 10'})
|
|
233
|
+
@ws.add_data_validation("B1", { :type => :list, :formula1 => 'A1:A5',
|
|
234
|
+
:showErrorMessage => true, :errorTitle => 'Wrong input', :error => 'Only values from list',
|
|
235
|
+
:errorStyle => :stop, :showInputMessage => true, :promptTitle => 'Be carful!',
|
|
236
|
+
:prompt => 'Only values from list', :showDropDown => true})
|
|
237
|
+
|
|
238
|
+
doc = Nokogiri::XML.parse(@ws.to_xml_string)
|
|
239
|
+
|
|
240
|
+
#test attributes
|
|
241
|
+
assert_equal(1, doc.xpath("//xmlns:worksheet/xmlns:dataValidations[@count='2']/xmlns:dataValidation[@sqref='A1']
|
|
242
|
+
[@promptTitle='Be carful!'][@prompt='Only values between 5 and 10'][@operator='between'][@errorTitle='Wrong input']
|
|
243
|
+
[@error='Only values between 5 and 10'][@showErrorMessage='true'][@allowBlank='true'][@showInputMessage='true'][@type='whole']
|
|
244
|
+
[@errorStyle='information']").size)
|
|
245
|
+
assert doc.xpath("//xmlns:worksheet/xmlns:dataValidations[@count='2']/xmlns:dataValidation[@sqref='A1']
|
|
246
|
+
[@promptTitle='Be carful!'][@prompt='Only values between 5 and 10'][@operator='between'][@errorTitle='Wrong input']
|
|
247
|
+
[@error='Only values between 5 and 10'][@showErrorMessage='true'][@allowBlank='true'][@showInputMessage='true']
|
|
248
|
+
[@type='whole'][@errorStyle='information']")
|
|
249
|
+
|
|
250
|
+
#test attributes
|
|
251
|
+
assert_equal(1, doc.xpath("//xmlns:worksheet/xmlns:dataValidations[@count='2']/xmlns:dataValidation[@sqref='B1']
|
|
252
|
+
[@promptTitle='Be carful!'][@prompt='Only values from list'][@errorTitle='Wrong input'][@error='Only values from list']
|
|
253
|
+
[@showErrorMessage='true'][@allowBlank='true'][@showInputMessage='true'][@showDropDown='true'][@type='list']
|
|
254
|
+
[@errorStyle='stop']").size)
|
|
255
|
+
assert doc.xpath("//xmlns:worksheet/xmlns:dataValidations[@count='2']/xmlns:dataValidation[@sqref='B1']
|
|
256
|
+
[@promptTitle='Be carful!'][@prompt='Only values from list'][@errorTitle='Wrong input'][@error='Only values from list']
|
|
257
|
+
[@showErrorMessage='true'][@allowBlank='true'][@showInputMessage='true'][@showDropDown='true'][@type='list'][@errorStyle='stop']")
|
|
258
|
+
end
|
|
259
|
+
|
|
260
|
+
def test_empty_attributes
|
|
261
|
+
v = Axlsx::DataValidation.new
|
|
262
|
+
assert_equal(nil, v.send(:get_valid_attributes))
|
|
263
|
+
|
|
264
|
+
end
|
|
265
|
+
end
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
require 'tc_helper.rb'
|
|
3
|
+
|
|
4
|
+
class TestDateTimeConverter < Test::Unit::TestCase
|
|
5
|
+
def setup
|
|
6
|
+
@margin_of_error = 0.000_001
|
|
7
|
+
@extended_time_range = begin
|
|
8
|
+
Time.parse "1893-08-05"
|
|
9
|
+
Time.parse "9999-12-31T23:59:59Z"
|
|
10
|
+
true
|
|
11
|
+
rescue
|
|
12
|
+
false
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def test_date_to_serial_1900
|
|
17
|
+
Axlsx::Workbook.date1904 = false
|
|
18
|
+
tests = if @extended_time_range
|
|
19
|
+
{ # examples taken straight from the spec
|
|
20
|
+
"1893-08-05" => -2338.0,
|
|
21
|
+
"1900-01-01" => 2.0,
|
|
22
|
+
"1910-02-03" => 3687.0,
|
|
23
|
+
"2006-02-01" => 38749.0,
|
|
24
|
+
"9999-12-31" => 2958465.0
|
|
25
|
+
}
|
|
26
|
+
else
|
|
27
|
+
{ # examples taken inside the possible values
|
|
28
|
+
"1970-01-01" => 25569.0, # Unix epoch
|
|
29
|
+
"1970-01-02" => 25570.0,
|
|
30
|
+
"2006-02-01" => 38749.0,
|
|
31
|
+
"2038-01-19" => 50424.0, # max date using signed timestamp in 32bit
|
|
32
|
+
}
|
|
33
|
+
end
|
|
34
|
+
tests.each do |date_string, expected|
|
|
35
|
+
serial = Axlsx::DateTimeConverter::date_to_serial Date.parse(date_string)
|
|
36
|
+
assert_equal expected, serial
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def test_date_to_serial_1904
|
|
41
|
+
Axlsx::Workbook.date1904 = true
|
|
42
|
+
tests = if @extended_time_range
|
|
43
|
+
{ # examples taken straight from the spec
|
|
44
|
+
"1893-08-05" => -3800.0,
|
|
45
|
+
"1904-01-01" => 0.0,
|
|
46
|
+
"1910-02-03" => 2225.0,
|
|
47
|
+
"2006-02-01" => 37287.0,
|
|
48
|
+
"9999-12-31" => 2957003.0
|
|
49
|
+
}
|
|
50
|
+
else
|
|
51
|
+
{ # examples taken inside the possible values
|
|
52
|
+
"1970-01-01" => 24107.0, # Unix epoch
|
|
53
|
+
"1970-01-02" => 24108.0,
|
|
54
|
+
"2006-02-01" => 37287.0,
|
|
55
|
+
"2038-01-19" => 48962.0, # max date using signed timestamp in 32bit
|
|
56
|
+
}
|
|
57
|
+
end
|
|
58
|
+
tests.each do |date_string, expected|
|
|
59
|
+
serial = Axlsx::DateTimeConverter::date_to_serial Date.parse(date_string)
|
|
60
|
+
assert_equal expected, serial
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
def test_time_to_serial_1900
|
|
65
|
+
Axlsx::Workbook.date1904 = false
|
|
66
|
+
tests = if @extended_time_range
|
|
67
|
+
{ # examples taken straight from the spec
|
|
68
|
+
"1893-08-05T00:00:01Z" => -2337.999989,
|
|
69
|
+
"1899-12-28T18:00:00Z" => -1.25,
|
|
70
|
+
"1910-02-03T10:05:54Z" => 3687.4207639,
|
|
71
|
+
"1900-01-01T12:00:00Z" => 2.5, # wrongly indicated as 1.5 in the spec!
|
|
72
|
+
"9999-12-31T23:59:59Z" => 2958465.9999884
|
|
73
|
+
}
|
|
74
|
+
else
|
|
75
|
+
{ # examples taken inside the possible values
|
|
76
|
+
"1970-01-01T00:00:00Z" => 25569.0, # Unix epoch
|
|
77
|
+
"1970-01-01T12:00:00Z" => 25569.5,
|
|
78
|
+
"2000-01-01T00:00:00Z" => 36526.0,
|
|
79
|
+
"2038-01-19T03:14:07Z" => 50424.134803, # max signed timestamp in 32bit
|
|
80
|
+
}
|
|
81
|
+
end
|
|
82
|
+
tests.each do |time_string, expected|
|
|
83
|
+
serial = Axlsx::DateTimeConverter::time_to_serial Time.parse(time_string)
|
|
84
|
+
assert_in_delta expected, serial, @margin_of_error
|
|
85
|
+
end
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
def test_time_to_serial_1904
|
|
89
|
+
Axlsx::Workbook.date1904 = true
|
|
90
|
+
# ruby 1.8.7 cannot parse dates prior to epoch. see http://ruby-doc.org/core-1.8.7/Time.html
|
|
91
|
+
|
|
92
|
+
tests = if @extended_time_range
|
|
93
|
+
{ # examples taken straight from the spec
|
|
94
|
+
"1893-08-05T00:00:01Z" => -3799.999989,
|
|
95
|
+
"1910-02-03T10:05:54Z" => 2225.4207639,
|
|
96
|
+
"1904-01-01T12:00:00Z" => 0.5000000,
|
|
97
|
+
"9999-12-31T23:59:59Z" => 2957003.9999884
|
|
98
|
+
}
|
|
99
|
+
else
|
|
100
|
+
{ # examples taken inside the possible values
|
|
101
|
+
"1970-01-01T00:00:00Z" => 24107.0, # Unix epoch
|
|
102
|
+
"1970-01-01T12:00:00Z" => 24107.5,
|
|
103
|
+
"2000-01-01T00:00:00Z" => 35064.0,
|
|
104
|
+
"2038-01-19T03:14:07Z" => 48962.134803, # max signed timestamp in 32bit
|
|
105
|
+
}
|
|
106
|
+
end
|
|
107
|
+
tests.each do |time_string, expected|
|
|
108
|
+
serial = Axlsx::DateTimeConverter::time_to_serial Time.parse(time_string)
|
|
109
|
+
assert_in_delta expected, serial, @margin_of_error
|
|
110
|
+
end
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
def test_timezone
|
|
114
|
+
|
|
115
|
+
utc = Time.utc 2012 # January 1st, 2012 at 0:00 UTC
|
|
116
|
+
local = Time.parse "2012-01-01 09:00:00 +0900"
|
|
117
|
+
|
|
118
|
+
assert_equal local, utc
|
|
119
|
+
assert_equal Axlsx::DateTimeConverter::time_to_serial(local) - local.utc_offset.to_f/86400, Axlsx::DateTimeConverter::time_to_serial(utc)
|
|
120
|
+
Axlsx::Workbook.date1904 = true
|
|
121
|
+
assert_equal Axlsx::DateTimeConverter::time_to_serial(local) - local.utc_offset.to_f/86400, Axlsx::DateTimeConverter::time_to_serial(utc)
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
end
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
require 'tc_helper'
|
|
2
|
+
|
|
3
|
+
class TestHeaderFooter < Test::Unit::TestCase
|
|
4
|
+
|
|
5
|
+
def setup
|
|
6
|
+
@p = Axlsx::Package.new
|
|
7
|
+
ws = @p.workbook.add_worksheet :name => 'test'
|
|
8
|
+
@hf = ws.header_footer
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def test_initialize
|
|
12
|
+
assert_equal(nil, @hf.odd_header)
|
|
13
|
+
assert_equal(nil, @hf.odd_footer)
|
|
14
|
+
|
|
15
|
+
assert_equal(nil, @hf.even_header)
|
|
16
|
+
assert_equal(nil, @hf.even_footer)
|
|
17
|
+
|
|
18
|
+
assert_equal(nil, @hf.first_header)
|
|
19
|
+
assert_equal(nil, @hf.first_footer)
|
|
20
|
+
|
|
21
|
+
assert_equal(nil, @hf.different_first)
|
|
22
|
+
assert_equal(nil, @hf.different_odd_even)
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def test_initialize_with_options
|
|
26
|
+
header_footer = {
|
|
27
|
+
:odd_header => 'oh',
|
|
28
|
+
:odd_footer => 'of',
|
|
29
|
+
|
|
30
|
+
:even_header => 'eh',
|
|
31
|
+
:even_footer => 'ef',
|
|
32
|
+
|
|
33
|
+
:first_header => 'fh',
|
|
34
|
+
:first_footer => 'ff',
|
|
35
|
+
|
|
36
|
+
:different_first => true,
|
|
37
|
+
:different_odd_even => true
|
|
38
|
+
}
|
|
39
|
+
optioned = @p.workbook.add_worksheet(:name => 'optioned', :header_footer => header_footer).header_footer
|
|
40
|
+
|
|
41
|
+
assert_equal('oh', optioned.odd_header)
|
|
42
|
+
assert_equal('of', optioned.odd_footer)
|
|
43
|
+
|
|
44
|
+
assert_equal('eh', optioned.even_header)
|
|
45
|
+
assert_equal('ef', optioned.even_footer)
|
|
46
|
+
|
|
47
|
+
assert_equal('fh', optioned.first_header)
|
|
48
|
+
assert_equal('ff', optioned.first_footer)
|
|
49
|
+
|
|
50
|
+
assert_equal(true, optioned.different_first)
|
|
51
|
+
assert_equal(true, optioned.different_odd_even)
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
def test_string_attributes
|
|
55
|
+
%w(odd_header odd_footer even_header even_footer first_header first_footer).each do |attr|
|
|
56
|
+
assert_raise(ArgumentError, 'only strings allowed in string attributes') { @hf.send("#{attr}=", 1) }
|
|
57
|
+
assert_nothing_raised { @hf.send("#{attr}=", 'test_string') }
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
def test_boolean_attributes
|
|
62
|
+
%w(different_first different_odd_even).each do |attr|
|
|
63
|
+
assert_raise(ArgumentError, 'only booleanish allowed in string attributes') { @hf.send("#{attr}=", 'foo') }
|
|
64
|
+
assert_nothing_raised { @hf.send("#{attr}=", 1) }
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
def test_set_all_values
|
|
69
|
+
@hf.set(
|
|
70
|
+
:odd_header => 'oh',
|
|
71
|
+
:odd_footer => 'of',
|
|
72
|
+
|
|
73
|
+
:even_header => 'eh',
|
|
74
|
+
:even_footer => 'ef',
|
|
75
|
+
|
|
76
|
+
:first_header => 'fh',
|
|
77
|
+
:first_footer => 'ff',
|
|
78
|
+
|
|
79
|
+
:different_first => true,
|
|
80
|
+
:different_odd_even => true
|
|
81
|
+
)
|
|
82
|
+
|
|
83
|
+
assert_equal('oh', @hf.odd_header)
|
|
84
|
+
assert_equal('of', @hf.odd_footer)
|
|
85
|
+
|
|
86
|
+
assert_equal('eh', @hf.even_header)
|
|
87
|
+
assert_equal('ef', @hf.even_footer)
|
|
88
|
+
|
|
89
|
+
assert_equal('fh', @hf.first_header)
|
|
90
|
+
assert_equal('ff', @hf.first_footer)
|
|
91
|
+
|
|
92
|
+
assert_equal(true, @hf.different_first)
|
|
93
|
+
assert_equal(true, @hf.different_odd_even)
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
def test_to_xml_all_values
|
|
97
|
+
@hf.set(
|
|
98
|
+
:odd_header => 'oh',
|
|
99
|
+
:odd_footer => 'of',
|
|
100
|
+
|
|
101
|
+
:even_header => 'eh',
|
|
102
|
+
:even_footer => 'ef',
|
|
103
|
+
|
|
104
|
+
:first_header => 'fh',
|
|
105
|
+
:first_footer => 'ff',
|
|
106
|
+
|
|
107
|
+
:different_first => true,
|
|
108
|
+
:different_odd_even => true
|
|
109
|
+
)
|
|
110
|
+
|
|
111
|
+
doc = Nokogiri::XML.parse(@hf.to_xml_string)
|
|
112
|
+
assert_equal(1, doc.xpath(".//headerFooter[@differentFirst='true'][@differentOddEven='true']").size)
|
|
113
|
+
|
|
114
|
+
assert_equal(1, doc.xpath(".//headerFooter/oddHeader").size)
|
|
115
|
+
assert_equal('oh', doc.xpath(".//headerFooter/oddHeader").text)
|
|
116
|
+
assert_equal(1, doc.xpath(".//headerFooter/oddFooter").size)
|
|
117
|
+
assert_equal('of', doc.xpath(".//headerFooter/oddFooter").text)
|
|
118
|
+
|
|
119
|
+
assert_equal(1, doc.xpath(".//headerFooter/evenHeader").size)
|
|
120
|
+
assert_equal('eh', doc.xpath(".//headerFooter/evenHeader").text)
|
|
121
|
+
assert_equal(1, doc.xpath(".//headerFooter/evenFooter").size)
|
|
122
|
+
assert_equal('ef', doc.xpath(".//headerFooter/evenFooter").text)
|
|
123
|
+
|
|
124
|
+
assert_equal(1, doc.xpath(".//headerFooter/firstHeader").size)
|
|
125
|
+
assert_equal('fh', doc.xpath(".//headerFooter/firstHeader").text)
|
|
126
|
+
assert_equal(1, doc.xpath(".//headerFooter/firstFooter").size)
|
|
127
|
+
assert_equal('ff', doc.xpath(".//headerFooter/firstFooter").text)
|
|
128
|
+
end
|
|
129
|
+
|
|
130
|
+
def test_to_xml_some_values
|
|
131
|
+
@hf.set(
|
|
132
|
+
:odd_header => 'oh',
|
|
133
|
+
:different_odd_even => false
|
|
134
|
+
)
|
|
135
|
+
|
|
136
|
+
doc = Nokogiri::XML.parse(@hf.to_xml_string)
|
|
137
|
+
assert_equal(1, doc.xpath(".//headerFooter[@differentOddEven='false']").size)
|
|
138
|
+
assert_equal(0, doc.xpath(".//headerFooter[@differentFirst]").size)
|
|
139
|
+
|
|
140
|
+
assert_equal(1, doc.xpath(".//headerFooter/oddHeader").size)
|
|
141
|
+
assert_equal('oh', doc.xpath(".//headerFooter/oddHeader").text)
|
|
142
|
+
assert_equal(0, doc.xpath(".//headerFooter/oddFooter").size)
|
|
143
|
+
|
|
144
|
+
assert_equal(0, doc.xpath(".//headerFooter/evenHeader").size)
|
|
145
|
+
assert_equal(0, doc.xpath(".//headerFooter/evenFooter").size)
|
|
146
|
+
|
|
147
|
+
assert_equal(0, doc.xpath(".//headerFooter/firstHeader").size)
|
|
148
|
+
assert_equal(0, doc.xpath(".//headerFooter/firstFooter").size)
|
|
149
|
+
end
|
|
150
|
+
end
|
|
151
|
+
|