axlsx 1.1.3 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.yardopts +5 -2
- data/CHANGELOG.md +60 -0
- data/LICENSE +1 -1
- data/README.md +115 -415
- data/Rakefile +11 -3
- data/examples/basic_charts.rb +54 -0
- data/examples/chart_colors.rb +88 -0
- data/examples/data_validation.rb +50 -0
- data/examples/example.rb +299 -155
- data/examples/example.xlsx +0 -0
- data/examples/example_streamed.xlsx +0 -0
- data/examples/extractive.pdf +0 -0
- data/examples/extractive.rb +45 -0
- data/examples/no-use_autowidth.xlsx +0 -0
- data/examples/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/two_cell_anchor_image.rb +11 -0
- data/lib/axlsx/content_type/content_type.rb +2 -0
- data/lib/axlsx/content_type/default.rb +30 -15
- data/lib/axlsx/content_type/override.rb +29 -14
- data/lib/axlsx/doc_props/app.rb +161 -104
- data/lib/axlsx/doc_props/core.rb +9 -5
- data/lib/axlsx/drawing/ax_data_source.rb +26 -0
- data/lib/axlsx/drawing/axis.rb +92 -37
- data/lib/axlsx/drawing/bar_3D_chart.rb +49 -45
- data/lib/axlsx/drawing/bar_series.rb +25 -7
- data/lib/axlsx/drawing/cat_axis.rb +50 -22
- data/lib/axlsx/drawing/chart.rb +69 -56
- data/lib/axlsx/drawing/d_lbls.rb +100 -0
- data/lib/axlsx/drawing/drawing.rb +28 -12
- data/lib/axlsx/drawing/graphic_frame.rb +2 -1
- data/lib/axlsx/drawing/line_3D_chart.rb +3 -10
- data/lib/axlsx/drawing/line_series.rb +20 -4
- data/lib/axlsx/drawing/num_data.rb +52 -0
- data/lib/axlsx/drawing/num_data_source.rb +61 -0
- data/lib/axlsx/drawing/num_val.rb +32 -0
- data/lib/axlsx/drawing/pic.rb +44 -4
- data/lib/axlsx/drawing/pie_3D_chart.rb +10 -7
- data/lib/axlsx/drawing/pie_series.rb +18 -4
- data/lib/axlsx/drawing/scatter_chart.rb +2 -8
- data/lib/axlsx/drawing/scatter_series.rb +28 -2
- data/lib/axlsx/drawing/ser_axis.rb +1 -1
- data/lib/axlsx/drawing/series.rb +1 -1
- data/lib/axlsx/drawing/str_data.rb +42 -0
- data/lib/axlsx/drawing/str_val.rb +33 -0
- data/lib/axlsx/drawing/title.rb +21 -9
- data/lib/axlsx/drawing/two_cell_anchor.rb +46 -9
- data/lib/axlsx/drawing/view_3D.rb +44 -31
- data/lib/axlsx/drawing/vml_drawing.rb +42 -0
- data/lib/axlsx/drawing/vml_shape.rb +125 -0
- data/lib/axlsx/package.rb +44 -16
- data/lib/axlsx/rels/relationship.rb +3 -3
- data/lib/axlsx/rels/relationships.rb +1 -11
- data/lib/axlsx/stylesheet/gradient_fill.rb +1 -1
- data/lib/axlsx/stylesheet/styles.rb +1 -1
- data/lib/axlsx/stylesheet/table_style.rb +3 -3
- data/lib/axlsx/util/constants.rb +28 -0
- data/lib/axlsx/util/simple_typed_list.rb +15 -21
- data/lib/axlsx/util/validators.rb +81 -8
- 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 +65 -13
- data/lib/axlsx/workbook/worksheet/auto_filter.rb +34 -0
- data/lib/axlsx/workbook/worksheet/cell.rb +35 -7
- data/lib/axlsx/workbook/worksheet/col.rb +17 -1
- 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/dimension.rb +65 -0
- data/lib/axlsx/workbook/worksheet/merged_cells.rb +35 -0
- data/lib/axlsx/workbook/worksheet/page_setup.rb +113 -0
- data/lib/axlsx/workbook/worksheet/pane.rb +144 -0
- data/lib/axlsx/workbook/worksheet/print_options.rb +63 -0
- data/lib/axlsx/workbook/worksheet/protected_range.rb +46 -0
- data/lib/axlsx/workbook/worksheet/protected_ranges.rb +34 -0
- data/lib/axlsx/workbook/worksheet/row.rb +67 -12
- data/lib/axlsx/workbook/worksheet/selection.rb +111 -0
- data/lib/axlsx/workbook/worksheet/sheet_data.rb +25 -0
- data/lib/axlsx/workbook/worksheet/sheet_pr.rb +24 -0
- data/lib/axlsx/workbook/worksheet/sheet_protection.rb +224 -0
- data/lib/axlsx/workbook/worksheet/sheet_view.rb +379 -0
- data/lib/axlsx/workbook/worksheet/table.rb +3 -3
- data/lib/axlsx/workbook/worksheet/tables.rb +31 -0
- data/lib/axlsx/workbook/worksheet/worksheet.rb +377 -255
- data/lib/axlsx/workbook/worksheet/worksheet_comments.rb +57 -0
- data/lib/axlsx/workbook/worksheet/worksheet_drawing.rb +64 -0
- data/lib/axlsx.rb +30 -15
- 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 +17 -13
- data/test/drawing/tc_cat_axis.rb +3 -3
- data/test/drawing/tc_cat_axis_data.rb +23 -13
- data/test/drawing/tc_chart.rb +29 -11
- data/test/drawing/tc_d_lbls.rb +47 -0
- data/test/drawing/tc_data_source.rb +17 -0
- data/test/drawing/tc_drawing.rb +11 -5
- data/test/drawing/tc_hyperlink.rb +4 -5
- data/test/drawing/tc_line_series.rb +9 -11
- data/test/drawing/tc_named_axis_data.rb +27 -0
- data/test/drawing/tc_num_data.rb +31 -0
- data/test/drawing/tc_num_val.rb +29 -0
- data/test/drawing/tc_pic.rb +22 -2
- data/test/drawing/tc_pie_3D_chart.rb +4 -8
- data/test/drawing/tc_pie_series.rb +11 -13
- data/test/drawing/tc_scatter_chart.rb +6 -1
- data/test/drawing/tc_scatter_series.rb +6 -5
- data/test/drawing/tc_series.rb +1 -1
- data/test/drawing/tc_str_data.rb +18 -0
- data/test/drawing/tc_str_val.rb +21 -0
- data/test/drawing/tc_title.rb +16 -0
- data/test/drawing/tc_two_cell_anchor.rb +2 -3
- data/test/drawing/tc_view_3D.rb +18 -18
- data/test/drawing/tc_vml_drawing.rb +25 -0
- data/test/drawing/tc_vml_shape.rb +100 -0
- data/test/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 +3 -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 +93 -17
- data/test/util/tc_simple_typed_list.rb +13 -0
- data/test/util/tc_validators.rb +95 -9
- data/test/workbook/tc_defined_name.rb +41 -0
- data/test/workbook/tc_workbook.rb +5 -3
- data/test/workbook/worksheet/table/tc_table.rb +3 -11
- data/test/workbook/worksheet/tc_cell.rb +30 -6
- 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_setup.rb +138 -0
- data/test/workbook/worksheet/tc_pane.rb +94 -0
- data/test/workbook/worksheet/tc_print_options.rb +72 -0
- data/test/workbook/worksheet/tc_protected_range.rb +17 -0
- data/test/workbook/worksheet/tc_row.rb +36 -12
- data/test/workbook/worksheet/tc_selection.rb +94 -0
- data/test/workbook/worksheet/tc_sheet_protection.rb +117 -0
- data/test/workbook/worksheet/tc_sheet_view.rb +214 -0
- data/test/workbook/worksheet/tc_worksheet.rb +138 -48
- metadata +164 -52
- data/examples/example.csv +0 -1000
- data/lib/axlsx/drawing/cat_axis_data.rb +0 -34
- data/lib/axlsx/drawing/hlink_click.rb~ +0 -0
- data/lib/axlsx/drawing/hyperlink.rb~ +0 -64
- data/lib/axlsx/drawing/named_axis_data.rb +0 -36
- data/lib/axlsx/drawing/picture_locking.rb~ +0 -36
- data/lib/axlsx/drawing/val_axis_data.rb +0 -27
- data/lib/axlsx/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_val_axis_data.rb +0 -17
- 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,57 @@
|
|
|
1
|
+
require 'tc_helper.rb'
|
|
2
|
+
|
|
3
|
+
class TestComments < Test::Unit::TestCase
|
|
4
|
+
def setup
|
|
5
|
+
p = Axlsx::Package.new
|
|
6
|
+
wb = p.workbook
|
|
7
|
+
@ws = wb.add_worksheet
|
|
8
|
+
@c1 = @ws.add_comment :ref => 'A1', :text => 'penut machine', :author => 'crank'
|
|
9
|
+
@c2 = @ws.add_comment :ref => 'C3', :text => 'rust bucket', :author => 'PO'
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def test_initialize
|
|
13
|
+
assert_raise(ArgumentError) { Axlsx::Comments.new }
|
|
14
|
+
assert(@ws.comments.vml_drawing.is_a?(Axlsx::VmlDrawing))
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def test_add_comment
|
|
18
|
+
assert_equal(@ws.comments.size, 2)
|
|
19
|
+
assert_raise(ArgumentError) { @ws.comments.add_comment() }
|
|
20
|
+
assert_raise(ArgumentError) { @ws.comments.add_comment(:text => 'Yes We Can', :ref => 'A1') }
|
|
21
|
+
assert_raise(ArgumentError) { @ws.comments.add_comment(:author => 'bob', :ref => 'A1') }
|
|
22
|
+
assert_raise(ArgumentError) { @ws.comments.add_comment(:author => 'bob', :text => 'Yes We Can')}
|
|
23
|
+
assert_nothing_raised { @ws.comments.add_comment(:author => 'bob', :text => 'Yes We Can', :ref => 'A1') }
|
|
24
|
+
assert_equal(@ws.comments.size, 3)
|
|
25
|
+
end
|
|
26
|
+
def test_authors
|
|
27
|
+
assert_equal(@ws.comments.authors.size, @ws.comments.size)
|
|
28
|
+
@ws.add_comment(:text => 'Yes We Can!', :author => :bob, :ref => 'F1')
|
|
29
|
+
assert_equal(@ws.comments.authors.size, 3)
|
|
30
|
+
@ws.add_comment(:text => 'Yes We Can!', :author => :bob, :ref => 'F1')
|
|
31
|
+
assert_equal(@ws.comments.authors.size, 3, 'only unique authors are returned')
|
|
32
|
+
end
|
|
33
|
+
def test_pn
|
|
34
|
+
assert_equal(@ws.comments.pn, Axlsx::COMMENT_PN % (@ws.index+1).to_s)
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def test_index
|
|
38
|
+
assert_equal(@ws.index, @ws.comments.index)
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def test_to_xml_string
|
|
42
|
+
doc = Nokogiri::XML(@ws.comments.to_xml_string)
|
|
43
|
+
schema = Nokogiri::XML::Schema(File.open(Axlsx::SML_XSD))
|
|
44
|
+
errors = []
|
|
45
|
+
schema.validate(doc).each do |error|
|
|
46
|
+
errors << error
|
|
47
|
+
end
|
|
48
|
+
assert_equal(0, errors.length)
|
|
49
|
+
|
|
50
|
+
# TODO figure out why these xpath expressions dont work!
|
|
51
|
+
# assert(doc.xpath("//comments"))
|
|
52
|
+
# assert_equal(doc.xpath("//xmlns:author").size, @ws.comments.authors.size)
|
|
53
|
+
# assert_equal(doc.xpath("//comment").size, @ws.comments.size)
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
|
|
@@ -15,6 +15,50 @@ class TestConditionalFormatting < Test::Unit::TestCase
|
|
|
15
15
|
assert_equal("AA1:AB100", optioned.sqref)
|
|
16
16
|
assert_equal([1, 2], optioned.rules)
|
|
17
17
|
end
|
|
18
|
+
def test_add_as_rule
|
|
19
|
+
|
|
20
|
+
color_scale = Axlsx::ColorScale.new do |cs|
|
|
21
|
+
cs.colors.first.rgb = "FFDFDFDF"
|
|
22
|
+
cs.colors.last.rgb = "FF00FF00"
|
|
23
|
+
cs.value_objects.first.type = :percentile
|
|
24
|
+
cs.value_objects.first.val = 5
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
data_bar = Axlsx::DataBar.new :color => "FFFF0000"
|
|
28
|
+
icon_set = Axlsx::IconSet.new :iconSet => "5Rating"
|
|
29
|
+
cfr = Axlsx::ConditionalFormattingRule.new( { :type => :containsText, :text => "TRUE",
|
|
30
|
+
:dxfId => 0, :priority => 1,
|
|
31
|
+
:formula => 'NOT(ISERROR(SEARCH("FALSE",AB1)))',
|
|
32
|
+
:color_scale => color_scale,
|
|
33
|
+
:data_bar => data_bar,
|
|
34
|
+
:icon_set => icon_set})
|
|
35
|
+
|
|
36
|
+
assert(cfr.data_bar.is_a?(Axlsx::DataBar))
|
|
37
|
+
assert(cfr.icon_set.is_a?(Axlsx::IconSet))
|
|
38
|
+
assert(cfr.color_scale.is_a?(Axlsx::ColorScale))
|
|
39
|
+
cfs = @ws.add_conditional_formatting( "B2:B2", [cfr])
|
|
40
|
+
doc = Nokogiri::XML.parse(cfs.last.to_xml_string)
|
|
41
|
+
assert_equal(1, doc.xpath(".//conditionalFormatting[@sqref='B2:B2']//cfRule[@type='containsText'][@dxfId=0][@priority=1]").size)
|
|
42
|
+
assert doc.xpath(".//conditionalFormatting//cfRule[@type='containsText'][@dxfId=0][@priority=1]//formula='NOT(ISERROR(SEARCH(\"FALSE\",AB1)))'")
|
|
43
|
+
|
|
44
|
+
cfs.last.rules.last.type = :colorScale
|
|
45
|
+
doc = Nokogiri::XML.parse(cfs.last.to_xml_string)
|
|
46
|
+
assert_equal(doc.xpath(".//conditionalFormatting//cfRule//colorScale//cfvo").size, 2)
|
|
47
|
+
assert_equal(doc.xpath(".//conditionalFormatting//cfRule//colorScale//color").size, 2)
|
|
48
|
+
|
|
49
|
+
cfs.last.rules.last.type = :dataBar
|
|
50
|
+
doc = Nokogiri::XML.parse(cfs.last.to_xml_string)
|
|
51
|
+
assert_equal(doc.xpath(".//conditionalFormatting//cfRule//dataBar").size, 1)
|
|
52
|
+
assert_equal(doc.xpath(".//conditionalFormatting//cfRule//dataBar//cfvo").size, 2)
|
|
53
|
+
assert_equal(doc.xpath(".//conditionalFormatting//cfRule//dataBar//color[@rgb='FFFF0000']").size, 1)
|
|
54
|
+
|
|
55
|
+
cfs.last.rules.last.type = :iconSet
|
|
56
|
+
doc = Nokogiri::XML.parse(cfs.last.to_xml_string)
|
|
57
|
+
assert_equal(doc.xpath(".//conditionalFormatting//cfRule//iconSet//cfvo").size, 3)
|
|
58
|
+
assert_equal(doc.xpath(".//conditionalFormatting//cfRule//iconSet[@iconSet='5Rating']").size, 1)
|
|
59
|
+
|
|
60
|
+
end
|
|
61
|
+
|
|
18
62
|
|
|
19
63
|
def test_add_as_hash
|
|
20
64
|
|
|
@@ -23,7 +23,7 @@ class TestDataBar < Test::Unit::TestCase
|
|
|
23
23
|
assert_equal(@data_bar.maxLength, 0)
|
|
24
24
|
end
|
|
25
25
|
|
|
26
|
-
def
|
|
26
|
+
def test_showValue
|
|
27
27
|
assert_raise(ArgumentError) { @data_bar.showValue = :invalid_type }
|
|
28
28
|
assert_nothing_raised { @data_bar.showValue = false}
|
|
29
29
|
assert_equal(@data_bar.showValue, false)
|
|
@@ -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,138 @@
|
|
|
1
|
+
require 'tc_helper.rb'
|
|
2
|
+
|
|
3
|
+
class TestPageSetup < Test::Unit::TestCase
|
|
4
|
+
|
|
5
|
+
def setup
|
|
6
|
+
@p = Axlsx::Package.new
|
|
7
|
+
ws = @p.workbook.add_worksheet :name => "hmmm"
|
|
8
|
+
@ps = ws.page_setup
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def test_initialize
|
|
12
|
+
assert_equal(nil, @ps.fit_to_height)
|
|
13
|
+
assert_equal(nil, @ps.fit_to_width)
|
|
14
|
+
assert_equal(nil, @ps.orientation)
|
|
15
|
+
assert_equal(nil, @ps.paper_height)
|
|
16
|
+
assert_equal(nil, @ps.paper_width)
|
|
17
|
+
assert_equal(nil, @ps.scale)
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def test_initialize_with_options
|
|
21
|
+
page_setup = { :fit_to_height => 1,
|
|
22
|
+
:fit_to_width => 2,
|
|
23
|
+
:orientation => :landscape,
|
|
24
|
+
:paper_height => "297mm",
|
|
25
|
+
:paper_width => "210mm",
|
|
26
|
+
:scale => 50 }
|
|
27
|
+
|
|
28
|
+
optioned = @p.workbook.add_worksheet(:name => 'optioned', :page_setup => page_setup).page_setup
|
|
29
|
+
assert_equal(1, optioned.fit_to_height)
|
|
30
|
+
assert_equal(2, optioned.fit_to_width)
|
|
31
|
+
assert_equal(:landscape, optioned.orientation)
|
|
32
|
+
assert_equal("297mm", optioned.paper_height)
|
|
33
|
+
assert_equal("210mm", optioned.paper_width)
|
|
34
|
+
assert_equal(50, optioned.scale)
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def test_set_all_values
|
|
38
|
+
@ps.set(:fit_to_height => 1, :fit_to_width => 2, :orientation => :landscape, :paper_height => "297mm", :paper_width => "210mm", :scale => 50)
|
|
39
|
+
assert_equal(1, @ps.fit_to_height)
|
|
40
|
+
assert_equal(2, @ps.fit_to_width)
|
|
41
|
+
assert_equal(:landscape, @ps.orientation)
|
|
42
|
+
assert_equal("297mm", @ps.paper_height)
|
|
43
|
+
assert_equal("210mm", @ps.paper_width)
|
|
44
|
+
assert_equal(50, @ps.scale)
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def test_set_some_values
|
|
48
|
+
@ps.set(:fit_to_width => 2, :orientation => :portrait)
|
|
49
|
+
assert_equal(2, @ps.fit_to_width)
|
|
50
|
+
assert_equal(:portrait, @ps.orientation)
|
|
51
|
+
assert_equal(nil, @ps.fit_to_height)
|
|
52
|
+
assert_equal(nil, @ps.paper_height)
|
|
53
|
+
assert_equal(nil, @ps.paper_width)
|
|
54
|
+
assert_equal(nil, @ps.scale)
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
def test_default_fit_to_page?
|
|
58
|
+
assert(@ps.fit_to_width == nil && @ps.fit_to_height == nil)
|
|
59
|
+
assert(@ps.fit_to_page? == false)
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
def test_with_height_fit_to_page?
|
|
63
|
+
assert(@ps.fit_to_width == nil && @ps.fit_to_height == nil)
|
|
64
|
+
@ps.set(:fit_to_height => 1)
|
|
65
|
+
assert(@ps.fit_to_page?)
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
def test_with_width_fit_to_page?
|
|
69
|
+
assert(@ps.fit_to_width == nil && @ps.fit_to_height == nil)
|
|
70
|
+
@ps.set(:fit_to_width => 1)
|
|
71
|
+
assert(@ps.fit_to_page?)
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
def test_to_xml_all_values
|
|
75
|
+
@ps.set(:fit_to_height => 1, :fit_to_width => 2, :orientation => :landscape, :paper_height => "297mm", :paper_width => "210mm", :scale => 50)
|
|
76
|
+
doc = Nokogiri::XML.parse(@ps.to_xml_string)
|
|
77
|
+
assert_equal(1, doc.xpath(".//pageSetup[@fitToHeight='1'][@fitToWidth='2'][@orientation='landscape'][@paperHeight='297mm'][@paperWidth='210mm'][@scale='50']").size)
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
def test_to_xml_some_values
|
|
81
|
+
@ps.set(:orientation => :portrait)
|
|
82
|
+
doc = Nokogiri::XML.parse(@ps.to_xml_string)
|
|
83
|
+
assert_equal(1, doc.xpath(".//pageSetup[@orientation='portrait']").size)
|
|
84
|
+
assert_equal(0, doc.xpath(".//pageSetup[@fitToHeight]").size)
|
|
85
|
+
assert_equal(0, doc.xpath(".//pageSetup[@fitToWidth]").size)
|
|
86
|
+
assert_equal(0, doc.xpath(".//pageSetup[@paperHeight]").size)
|
|
87
|
+
assert_equal(0, doc.xpath(".//pageSetup[@paperWidth]").size)
|
|
88
|
+
assert_equal(0, doc.xpath(".//pageSetup[@scale]").size)
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
def test_fit_to_height
|
|
92
|
+
assert_raise(ArgumentError) { @ps.fit_to_height = 1.5 }
|
|
93
|
+
assert_nothing_raised { @ps.fit_to_height = 2 }
|
|
94
|
+
assert_equal(2, @ps.fit_to_height)
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
def test_fit_to_width
|
|
98
|
+
assert_raise(ArgumentError) { @ps.fit_to_width = false }
|
|
99
|
+
assert_nothing_raised { @ps.fit_to_width = 1 }
|
|
100
|
+
assert_equal(1, @ps.fit_to_width)
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
def test_orientation
|
|
104
|
+
assert_raise(ArgumentError) { @ps.orientation = "" }
|
|
105
|
+
assert_nothing_raised { @ps.orientation = :default }
|
|
106
|
+
assert_equal(:default, @ps.orientation)
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
def test_paper_height
|
|
110
|
+
assert_raise(ArgumentError) { @ps.paper_height = 99 }
|
|
111
|
+
assert_nothing_raised { @ps.paper_height = "11in" }
|
|
112
|
+
assert_equal("11in", @ps.paper_height)
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
def test_paper_width
|
|
116
|
+
assert_raise(ArgumentError) { @ps.paper_width = "22" }
|
|
117
|
+
assert_nothing_raised { @ps.paper_width = "29.7cm" }
|
|
118
|
+
assert_equal("29.7cm", @ps.paper_width)
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
def test_scale
|
|
122
|
+
assert_raise(ArgumentError) { @ps.scale = 50.5 }
|
|
123
|
+
assert_nothing_raised { @ps.scale = 99 }
|
|
124
|
+
assert_equal(99, @ps.scale)
|
|
125
|
+
end
|
|
126
|
+
|
|
127
|
+
def test_fit_to
|
|
128
|
+
fits = @ps.fit_to(:width => 1)
|
|
129
|
+
assert_equal([1, 9999], fits)
|
|
130
|
+
fits = @ps.fit_to :height => 1
|
|
131
|
+
assert_equal(fits, [9999,1])
|
|
132
|
+
fits = @ps.fit_to :height => 7, :width => 2
|
|
133
|
+
assert_equal(fits, [2, 7])
|
|
134
|
+
assert_raise(ArgumentError) { puts @ps.fit_to(:width => true)}
|
|
135
|
+
|
|
136
|
+
|
|
137
|
+
end
|
|
138
|
+
end
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
# encoding: UTF-8
|
|
2
|
+
$LOAD_PATH.unshift "#{File.dirname(__FILE__)}/../../"
|
|
3
|
+
require 'tc_helper.rb'
|
|
4
|
+
|
|
5
|
+
class TestPane < Test::Unit::TestCase
|
|
6
|
+
def setup
|
|
7
|
+
#inverse defaults for booleans
|
|
8
|
+
@nil_options = { :active_pane => :bottom_left, :state => :frozen, :top_left_cell => 'A2' }
|
|
9
|
+
@int_0_options = { :x_split => 2, :y_split => 2 }
|
|
10
|
+
|
|
11
|
+
@string_options = { :top_left_cell => 'A2' }
|
|
12
|
+
@integer_options = { :x_split => 2, :y_split => 2 }
|
|
13
|
+
@symbol_options = { :active_pane => :bottom_left, :state => :frozen }
|
|
14
|
+
|
|
15
|
+
@options = @nil_options.merge(@int_0_options)
|
|
16
|
+
|
|
17
|
+
@pane = Axlsx::Pane.new(@options)
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def test_initialize
|
|
21
|
+
pane = Axlsx::Pane.new
|
|
22
|
+
|
|
23
|
+
@nil_options.each do |key, value|
|
|
24
|
+
assert_equal(nil, pane.send(key.to_sym), "initialized default #{key} should be nil")
|
|
25
|
+
assert_equal(value, @pane.send(key.to_sym), "initialized options #{key} should be #{value}")
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
@int_0_options.each do |key, value|
|
|
29
|
+
assert_equal(0, pane.send(key.to_sym), "initialized default #{key} should be 0")
|
|
30
|
+
assert_equal(value, @pane.send(key.to_sym), "initialized options #{key} should be #{value}")
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def test_string_attribute_validation
|
|
35
|
+
@string_options.each do |key, value|
|
|
36
|
+
assert_raise(ArgumentError, "#{key} must be string") { @pane.send("#{key}=".to_sym, :symbol) }
|
|
37
|
+
assert_nothing_raised { @pane.send("#{key}=".to_sym, "foo") }
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def test_symbol_attribute_validation
|
|
42
|
+
@symbol_options.each do |key, value|
|
|
43
|
+
assert_raise(ArgumentError, "#{key} must be symbol") { @pane.send("#{key}=".to_sym, "foo") }
|
|
44
|
+
assert_nothing_raised { @pane.send("#{key}=".to_sym, value) }
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
def test_integer_attribute_validation
|
|
49
|
+
@integer_options.each do |key, value|
|
|
50
|
+
assert_raise(ArgumentError, "#{key} must be integer") { @pane.send("#{key}=".to_sym, "foo") }
|
|
51
|
+
assert_nothing_raised { @pane.send("#{key}=".to_sym, value) }
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
def test_active_pane
|
|
56
|
+
assert_raise(ArgumentError) { @pane.active_pane = "10" }
|
|
57
|
+
assert_nothing_raised { @pane.active_pane = :top_left }
|
|
58
|
+
assert_equal(@pane.active_pane, :top_left)
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
def test_state
|
|
62
|
+
assert_raise(ArgumentError) { @pane.state = "foo" }
|
|
63
|
+
assert_nothing_raised { @pane.state = :frozen_split }
|
|
64
|
+
assert_equal(@pane.state, :frozen_split)
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
def test_x_split
|
|
68
|
+
assert_raise(ArgumentError) { @pane.x_split = "foo´" }
|
|
69
|
+
assert_nothing_raised { @pane.x_split = 200 }
|
|
70
|
+
assert_equal(@pane.x_split, 200)
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
def test_y_split
|
|
74
|
+
assert_raise(ArgumentError) { @pane.y_split = 'foo' }
|
|
75
|
+
assert_nothing_raised { @pane.y_split = 300 }
|
|
76
|
+
assert_equal(@pane.y_split, 300)
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
def test_top_left_cell
|
|
80
|
+
assert_raise(ArgumentError) { @pane.top_left_cell = :cell }
|
|
81
|
+
assert_nothing_raised { @pane.top_left_cell = "A2" }
|
|
82
|
+
assert_equal(@pane.top_left_cell, "A2")
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
def test_to_xml
|
|
86
|
+
doc = Nokogiri::XML.parse(@pane.to_xml_string)
|
|
87
|
+
assert_equal(1, doc.xpath("//pane[@ySplit=2][@xSplit='2'][@topLeftCell='A2'][@state='frozen'][@activePane='bottomLeft']").size)
|
|
88
|
+
end
|
|
89
|
+
def test_to_xml_frozen
|
|
90
|
+
pane = Axlsx::Pane.new :state => :frozen, :y_split => 2
|
|
91
|
+
doc = Nokogiri::XML(pane.to_xml_string)
|
|
92
|
+
assert_equal(1, doc.xpath("//pane[@topLeftCell='A3']").size)
|
|
93
|
+
end
|
|
94
|
+
end
|