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
|
@@ -33,5 +33,11 @@ class TestPatternFill < Test::Unit::TestCase
|
|
|
33
33
|
assert_nothing_raised { @item.patternType = :lightUp }
|
|
34
34
|
assert_equal(@item.patternType, :lightUp)
|
|
35
35
|
end
|
|
36
|
-
|
|
36
|
+
|
|
37
|
+
def test_to_xml_string
|
|
38
|
+
@item = Axlsx::PatternFill.new :bgColor => Axlsx::Color.new(:rgb => "FF0000"), :fgColor => Axlsx::Color.new(:rgb=>"00FF00")
|
|
39
|
+
doc = Nokogiri::XML(@item.to_xml_string)
|
|
40
|
+
assert(doc.xpath('//color[@rgb="FFFF0000"]'))
|
|
41
|
+
assert(doc.xpath('//color[@rgb="FF00FF00"]'))
|
|
42
|
+
end
|
|
37
43
|
end
|
|
@@ -19,7 +19,7 @@ class TestStyles < Test::Unit::TestCase
|
|
|
19
19
|
end
|
|
20
20
|
def test_add_style_border_hash
|
|
21
21
|
border_count = @styles.borders.size
|
|
22
|
-
|
|
22
|
+
@styles.add_style :border => {:style => :thin, :color => "FFFF0000"}
|
|
23
23
|
assert_equal(@styles.borders.size, border_count + 1)
|
|
24
24
|
assert_equal(@styles.borders.last.prs.last.color.rgb, "FFFF0000")
|
|
25
25
|
assert_raise(ArgumentError) { @styles.add_style :border => {:color => "FFFF0000"} }
|
|
@@ -27,7 +27,7 @@ class TestStyles < Test::Unit::TestCase
|
|
|
27
27
|
end
|
|
28
28
|
|
|
29
29
|
def test_add_style_border_edges
|
|
30
|
-
|
|
30
|
+
@styles.add_style :border => { :style => :thin, :color => "0000FFFF", :edges => [:top, :bottom] }
|
|
31
31
|
parts = @styles.borders.last.prs
|
|
32
32
|
parts.each { |pr| assert_equal(pr.color.rgb, "0000FFFF", "Style is applied to #{pr.name} properly") }
|
|
33
33
|
assert((parts.map { |pr| pr.name.to_s }.sort && ['bottom', 'top']).size == 2, "specify two edges, and you get two border prs")
|
|
@@ -44,7 +44,6 @@ class TestStyles < Test::Unit::TestCase
|
|
|
44
44
|
def test_parse_num_fmt
|
|
45
45
|
f_code = {:format_code => "YYYY/MM"}
|
|
46
46
|
num_fmt = {:num_fmt => 5}
|
|
47
|
-
both = { :format_code => "#000", :num_fmt => 0 }
|
|
48
47
|
assert_equal(@styles.parse_num_fmt_options, nil, 'noop if neither :format_code or :num_fmt exist')
|
|
49
48
|
max = @styles.numFmts.map{ |nf| nf.numFmtId }.max
|
|
50
49
|
@styles.parse_num_fmt_options(f_code)
|
|
@@ -181,7 +180,7 @@ class TestStyles < Test::Unit::TestCase
|
|
|
181
180
|
|
|
182
181
|
def test_basic_add_style_dxf
|
|
183
182
|
border_count = @styles.borders.size
|
|
184
|
-
|
|
183
|
+
@styles.add_style :border => {:style => :thin, :color => "FFFF0000"}, :type => :dxf
|
|
185
184
|
assert_equal(@styles.borders.size, border_count, "styles borders not affected")
|
|
186
185
|
assert_equal(@styles.dxfs.last.border.prs.last.color.rgb, "FFFF0000")
|
|
187
186
|
assert_raise(ArgumentError) { @styles.add_style :border => {:color => "FFFF0000"}, :type => :dxf }
|
|
@@ -13,6 +13,10 @@ class TestTableStyle < Test::Unit::TestCase
|
|
|
13
13
|
assert_equal(@item.name, "fisher")
|
|
14
14
|
assert_equal(@item.pivot, nil)
|
|
15
15
|
assert_equal(@item.table, nil)
|
|
16
|
+
ts = Axlsx::TableStyle.new 'price', :pivot => true, :table => true
|
|
17
|
+
assert_equal(ts.name, 'price')
|
|
18
|
+
assert_equal(ts.pivot, true)
|
|
19
|
+
assert_equal(ts.table, true)
|
|
16
20
|
end
|
|
17
21
|
|
|
18
22
|
def test_name
|
|
@@ -33,4 +37,8 @@ class TestTableStyle < Test::Unit::TestCase
|
|
|
33
37
|
assert_equal(@item.table, true)
|
|
34
38
|
end
|
|
35
39
|
|
|
40
|
+
def test_to_xml_string
|
|
41
|
+
doc = Nokogiri::XML(@item.to_xml_string)
|
|
42
|
+
assert(doc.xpath("//tableStyle[@name='#{@item.name}']"))
|
|
43
|
+
end
|
|
36
44
|
end
|
|
@@ -13,6 +13,10 @@ class TestTableStyleElement < Test::Unit::TestCase
|
|
|
13
13
|
assert_equal(@item.type, nil)
|
|
14
14
|
assert_equal(@item.size, nil)
|
|
15
15
|
assert_equal(@item.dxfId, nil)
|
|
16
|
+
options = { :type => :headerRow, :size => 10, :dxfId => 1 }
|
|
17
|
+
|
|
18
|
+
tse = Axlsx::TableStyleElement.new options
|
|
19
|
+
options.each { |key, value| assert_equal(tse.send(key.to_sym), value) }
|
|
16
20
|
end
|
|
17
21
|
|
|
18
22
|
def test_type
|
|
@@ -32,5 +36,10 @@ class TestTableStyleElement < Test::Unit::TestCase
|
|
|
32
36
|
assert_nothing_raised { @item.dxfId = 7 }
|
|
33
37
|
assert_equal(@item.dxfId, 7)
|
|
34
38
|
end
|
|
35
|
-
|
|
39
|
+
|
|
40
|
+
def test_to_xml_string
|
|
41
|
+
doc = Nokogiri::XML(@item.to_xml_string)
|
|
42
|
+
@item.type = :headerRow
|
|
43
|
+
assert(doc.xpath("//tableStyleElement[@type='#{@item.type.to_s}']"))
|
|
44
|
+
end
|
|
36
45
|
end
|
data/test/tc_helper.rb
CHANGED
data/test/tc_package.rb
CHANGED
|
@@ -1,13 +1,78 @@
|
|
|
1
|
+
# encoding: UTF-8
|
|
1
2
|
require 'tc_helper.rb'
|
|
2
3
|
|
|
3
4
|
class TestPackage < Test::Unit::TestCase
|
|
4
5
|
def setup
|
|
5
6
|
@package = Axlsx::Package.new
|
|
6
7
|
ws = @package.workbook.add_worksheet
|
|
7
|
-
|
|
8
|
-
|
|
8
|
+
ws.add_row ['Can', 'we', 'build it?']
|
|
9
|
+
ws.add_row ['Yes!', 'We', 'can!']
|
|
10
|
+
ws.workbook.add_defined_name("#{ws.name}!A1:C2", :name => '_xlnm.Print_Titles', :hidden => true)
|
|
11
|
+
ws.protect_range('A1:C1')
|
|
12
|
+
ws.protect_range(ws.rows.last.cells)
|
|
13
|
+
ws.add_comment :author => 'alice', :text => 'Hi Bob', :ref => 'A12'
|
|
14
|
+
ws.add_comment :author => 'bob', :text => 'Hi Alice', :ref => 'F19'
|
|
15
|
+
ws.sheet_view do |vs|
|
|
16
|
+
vs.pane do |p|
|
|
17
|
+
p.active_pane = :top_right
|
|
18
|
+
p.state = :split
|
|
19
|
+
p.x_split = 11080
|
|
20
|
+
p.y_split = 5000
|
|
21
|
+
p.top_left_cell = 'C44'
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
vs.add_selection(:top_left, { :active_cell => 'A2', :sqref => 'A2' })
|
|
25
|
+
vs.add_selection(:top_right, { :active_cell => 'I10', :sqref => 'I10' })
|
|
26
|
+
vs.add_selection(:bottom_left, { :active_cell => 'E55', :sqref => 'E55' })
|
|
27
|
+
vs.add_selection(:bottom_right, { :active_cell => 'I57', :sqref => 'I57' })
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
ws.add_chart(Axlsx::Pie3DChart, :title => "これは?", :start_at => [0,3]) do |chart|
|
|
31
|
+
chart.add_series :data=>[1,2,3], :labels=>["a", "b", "c"]
|
|
32
|
+
chart.d_lbls.show_val = true
|
|
33
|
+
chart.d_lbls.d_lbl_pos = :outEnd
|
|
34
|
+
chart.d_lbls.show_percent = true
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
ws.add_chart(Axlsx::Line3DChart, :title => "axis labels") do |chart|
|
|
38
|
+
chart.valAxis.title = 'bob'
|
|
39
|
+
chart.d_lbls.show_val = true
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
ws.add_chart(Axlsx::Bar3DChart, :title => 'bar chart') do |chart|
|
|
43
|
+
chart.add_series :data => [1,4,5], :labels => %w(A B C)
|
|
44
|
+
chart.d_lbls.show_percent = true
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
ws.add_chart(Axlsx::ScatterChart, :title => 'scat man') do |chart|
|
|
48
|
+
chart.add_series :xData => [1,2,3,4], :yData => [4,3,2,1]
|
|
49
|
+
chart.d_lbls.show_val = true
|
|
50
|
+
end
|
|
51
|
+
|
|
9
52
|
@fname = 'axlsx_test_serialization.xlsx'
|
|
53
|
+
img = File.expand_path('../../examples/image1.jpeg', __FILE__)
|
|
54
|
+
ws.add_image(:image_src => img, :noSelect => true, :noMove => true, :hyperlink=>"http://axlsx.blogspot.com") do |image|
|
|
55
|
+
image.width=720
|
|
56
|
+
image.height=666
|
|
57
|
+
image.hyperlink.tooltip = "Labeled Link"
|
|
58
|
+
image.start_at 5, 5
|
|
59
|
+
end
|
|
60
|
+
ws.add_image :image_src => File.expand_path('../../examples/image1.gif', __FILE__) do |image|
|
|
61
|
+
image.start_at 0, 20
|
|
62
|
+
image.width=360
|
|
63
|
+
image.height=333
|
|
64
|
+
end
|
|
65
|
+
ws.add_image :image_src => File.expand_path('../../examples/image1.png', __FILE__) do |image|
|
|
66
|
+
image.start_at 9, 20
|
|
67
|
+
image.width = 180
|
|
68
|
+
image.height = 167
|
|
69
|
+
end
|
|
70
|
+
ws.add_table 'A1:C1'
|
|
71
|
+
end
|
|
10
72
|
|
|
73
|
+
def test_use_autowidth
|
|
74
|
+
@package.use_autowidth = false
|
|
75
|
+
assert(@package.workbook.use_autowidth == false)
|
|
11
76
|
end
|
|
12
77
|
|
|
13
78
|
def test_core_accessor
|
|
@@ -35,30 +100,26 @@ class TestPackage < Test::Unit::TestCase
|
|
|
35
100
|
end
|
|
36
101
|
|
|
37
102
|
def test_serialization
|
|
38
|
-
fname = 'axlsx_test_serialization.xlsx'
|
|
39
103
|
assert_nothing_raised do
|
|
40
104
|
begin
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
105
|
+
@package.serialize(@fname)
|
|
106
|
+
zf = Zip::ZipFile.open(@fname)
|
|
107
|
+
@package.send(:parts).each{ |part| zf.get_entry(part[:entry]) }
|
|
108
|
+
File.delete(@fname)
|
|
45
109
|
rescue Errno::EACCES
|
|
46
|
-
|
|
110
|
+
puts "WARNING:: test_serialization requires write access."
|
|
47
111
|
end
|
|
48
|
-
|
|
49
|
-
|
|
112
|
+
end
|
|
113
|
+
end
|
|
50
114
|
|
|
51
115
|
def test_validation
|
|
52
116
|
assert_equal(@package.validate.size, 0, @package.validate)
|
|
53
|
-
|
|
117
|
+
Axlsx::Workbook.send(:class_variable_set, :@@date1904, 9900)
|
|
118
|
+
assert(@package.validate.size > 0)
|
|
54
119
|
end
|
|
55
120
|
|
|
56
121
|
def test_parts
|
|
57
122
|
p = @package.send(:parts)
|
|
58
|
-
p.each do |part|
|
|
59
|
-
#all parts must have :doc, :entry, :schema
|
|
60
|
-
assert(part.keys.size == 3 && part.keys.reject{ |k| [:doc, :entry, :schema].include? k}.empty?)
|
|
61
|
-
end
|
|
62
123
|
#all parts have an entry
|
|
63
124
|
assert_equal(p.select{ |part| part[:entry] =~ /_rels\/\.rels/ }.size, 1, "rels missing")
|
|
64
125
|
assert_equal(p.select{ |part| part[:entry] =~ /docProps\/core\.xml/ }.size, 1, "core missing")
|
|
@@ -72,9 +133,11 @@ class TestPackage < Test::Unit::TestCase
|
|
|
72
133
|
assert_equal(p.select{ |part| part[:entry] =~ /xl\/charts\/chart\d\.xml/ }.size, @package.workbook.charts.size, "one or more charts missing")
|
|
73
134
|
assert_equal(p.select{ |part| part[:entry] =~ /xl\/worksheets\/sheet\d\.xml/ }.size, @package.workbook.worksheets.size, "one or more sheet missing")
|
|
74
135
|
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
|
+
assert_equal(p.select{ |part| part[:entry] =~ /xl\/comments\d\.xml/ }.size, @package.workbook.worksheets.size, "one or more sheet rels missing")
|
|
137
|
+
|
|
75
138
|
|
|
76
139
|
#no mystery parts
|
|
77
|
-
assert_equal(p.size,
|
|
140
|
+
assert_equal(p.size, 21)
|
|
78
141
|
|
|
79
142
|
end
|
|
80
143
|
|
|
@@ -102,11 +165,24 @@ class TestPackage < Test::Unit::TestCase
|
|
|
102
165
|
def test_content_type_added_with_shared_strings
|
|
103
166
|
@package.use_shared_strings = true
|
|
104
167
|
ct = @package.send(:content_types)
|
|
105
|
-
assert(ct.select { |
|
|
168
|
+
assert(ct.select { |type| type.ContentType == Axlsx::SHARED_STRINGS_CT }.size == 1)
|
|
106
169
|
end
|
|
107
170
|
|
|
108
171
|
def test_name_to_indices
|
|
109
172
|
assert(Axlsx::name_to_indices('A1') == [0,0])
|
|
110
173
|
assert(Axlsx::name_to_indices('A100') == [0,99], 'needs to axcept rows that contain 0')
|
|
111
174
|
end
|
|
175
|
+
|
|
176
|
+
def test_to_stream
|
|
177
|
+
stream = @package.to_stream
|
|
178
|
+
assert(stream.is_a?(StringIO))
|
|
179
|
+
# this is just a roundabout guess for a package as it is build now
|
|
180
|
+
# in testing.
|
|
181
|
+
assert(stream.size > 80000)
|
|
182
|
+
end
|
|
183
|
+
|
|
184
|
+
def test_encrypt
|
|
185
|
+
# this is no where near close to ready yet
|
|
186
|
+
assert(@package.encrypt('your_mom.xlsxl', 'has a password') == false)
|
|
187
|
+
end
|
|
112
188
|
end
|
|
@@ -61,5 +61,18 @@ class TestSimpleTypedList < Test::Unit::TestCase
|
|
|
61
61
|
assert_nothing_raised { @list.delete 0 }
|
|
62
62
|
assert_nothing_raised { @list.delete 9 }
|
|
63
63
|
end
|
|
64
|
+
|
|
65
|
+
def test_delete
|
|
66
|
+
@list.push 1
|
|
67
|
+
assert(@list.size == 1)
|
|
68
|
+
@list.delete 1
|
|
69
|
+
assert(@list.empty?)
|
|
70
|
+
end
|
|
64
71
|
|
|
72
|
+
def test_equality
|
|
73
|
+
@list.push 1
|
|
74
|
+
@list.push 2
|
|
75
|
+
assert_equal(@list, [1,2])
|
|
76
|
+
|
|
77
|
+
end
|
|
65
78
|
end
|
data/test/util/tc_validators.rb
CHANGED
|
@@ -8,15 +8,15 @@ class TestValidators < Test::Unit::TestCase
|
|
|
8
8
|
def test_validators
|
|
9
9
|
#unsigned_int
|
|
10
10
|
assert_nothing_raised { Axlsx.validate_unsigned_int 1 }
|
|
11
|
-
assert_nothing_raised { Axlsx.validate_unsigned_int
|
|
12
|
-
assert_raise(ArgumentError) { Axlsx.validate_unsigned_int
|
|
13
|
-
assert_raise(ArgumentError) { Axlsx.validate_unsigned_int
|
|
11
|
+
assert_nothing_raised { Axlsx.validate_unsigned_int(+1) }
|
|
12
|
+
assert_raise(ArgumentError) { Axlsx.validate_unsigned_int(-1)}
|
|
13
|
+
assert_raise(ArgumentError) { Axlsx.validate_unsigned_int('1') }
|
|
14
14
|
|
|
15
15
|
#int
|
|
16
|
-
assert_nothing_raised { Axlsx.validate_int
|
|
17
|
-
assert_nothing_raised { Axlsx.validate_int
|
|
18
|
-
assert_raise(ArgumentError) { Axlsx.validate_int
|
|
19
|
-
assert_raise(ArgumentError) { Axlsx.validate_int
|
|
16
|
+
assert_nothing_raised { Axlsx.validate_int(1) }
|
|
17
|
+
assert_nothing_raised { Axlsx.validate_int(-1) }
|
|
18
|
+
assert_raise(ArgumentError) { Axlsx.validate_int('a')}
|
|
19
|
+
assert_raise(ArgumentError) { Axlsx.validate_int(Array) }
|
|
20
20
|
|
|
21
21
|
#boolean (as 0 or 1, :true, :false, true, false, or "true," "false")
|
|
22
22
|
[0,1,:true, :false, true, false, "true", "false"].each do |v|
|
|
@@ -70,6 +70,92 @@ class TestValidators < Test::Unit::TestCase
|
|
|
70
70
|
assert_raise(ArgumentError) { Axlsx.validate_relationship_type "http://some.url" }
|
|
71
71
|
assert_raise(ArgumentError) { Axlsx.validate_relationship_type false }
|
|
72
72
|
|
|
73
|
-
|
|
74
|
-
|
|
73
|
+
#number_with_unit
|
|
74
|
+
assert_nothing_raised { Axlsx.validate_number_with_unit "210mm" }
|
|
75
|
+
assert_nothing_raised { Axlsx.validate_number_with_unit "8.5in" }
|
|
76
|
+
assert_nothing_raised { Axlsx.validate_number_with_unit "29.7cm" }
|
|
77
|
+
assert_nothing_raised { Axlsx.validate_number_with_unit "120pt" }
|
|
78
|
+
assert_nothing_raised { Axlsx.validate_number_with_unit "0pc" }
|
|
79
|
+
assert_nothing_raised { Axlsx.validate_number_with_unit "12.34pi" }
|
|
80
|
+
assert_raise(ArgumentError) { Axlsx.validate_number_with_unit nil }
|
|
81
|
+
assert_raise(ArgumentError) { Axlsx.validate_number_with_unit "210" }
|
|
82
|
+
assert_raise(ArgumentError) { Axlsx.validate_number_with_unit 210 }
|
|
83
|
+
assert_raise(ArgumentError) { Axlsx.validate_number_with_unit "mm" }
|
|
84
|
+
assert_raise(ArgumentError) { Axlsx.validate_number_with_unit "-29cm" }
|
|
75
85
|
|
|
86
|
+
#scale_10_400
|
|
87
|
+
assert_nothing_raised { Axlsx.validate_scale_10_400 10 }
|
|
88
|
+
assert_nothing_raised { Axlsx.validate_scale_10_400 100 }
|
|
89
|
+
assert_nothing_raised { Axlsx.validate_scale_10_400 400 }
|
|
90
|
+
assert_raise(ArgumentError) { Axlsx.validate_scale_10_400 9 }
|
|
91
|
+
assert_raise(ArgumentError) { Axlsx.validate_scale_10_400 10.0 }
|
|
92
|
+
assert_raise(ArgumentError) { Axlsx.validate_scale_10_400 400.1 }
|
|
93
|
+
assert_raise(ArgumentError) { Axlsx.validate_scale_10_400 "99" }
|
|
94
|
+
|
|
95
|
+
#scale_0_10_400
|
|
96
|
+
assert_nothing_raised { Axlsx.validate_scale_0_10_400 0 }
|
|
97
|
+
assert_nothing_raised { Axlsx.validate_scale_0_10_400 10 }
|
|
98
|
+
assert_nothing_raised { Axlsx.validate_scale_0_10_400 100 }
|
|
99
|
+
assert_nothing_raised { Axlsx.validate_scale_0_10_400 400 }
|
|
100
|
+
assert_raise(ArgumentError) { Axlsx.validate_scale_0_10_400 9 }
|
|
101
|
+
assert_raise(ArgumentError) { Axlsx.validate_scale_0_10_400 10.0 }
|
|
102
|
+
assert_raise(ArgumentError) { Axlsx.validate_scale_0_10_400 400.1 }
|
|
103
|
+
assert_raise(ArgumentError) { Axlsx.validate_scale_0_10_400 "99" }
|
|
104
|
+
|
|
105
|
+
#page_orientation
|
|
106
|
+
assert_nothing_raised { Axlsx.validate_page_orientation :default }
|
|
107
|
+
assert_nothing_raised { Axlsx.validate_page_orientation :landscape }
|
|
108
|
+
assert_nothing_raised { Axlsx.validate_page_orientation :portrait }
|
|
109
|
+
assert_raise(ArgumentError) { Axlsx.validate_page_orientation nil }
|
|
110
|
+
assert_raise(ArgumentError) { Axlsx.validate_page_orientation 1 }
|
|
111
|
+
assert_raise(ArgumentError) { Axlsx.validate_page_orientation "landscape" }
|
|
112
|
+
|
|
113
|
+
#data_validation_error_style
|
|
114
|
+
[:information, :stop, :warning].each do |sym|
|
|
115
|
+
assert_nothing_raised { Axlsx.validate_data_validation_error_style sym }
|
|
116
|
+
end
|
|
117
|
+
assert_raise(ArgumentError) { Axlsx.validate_data_validation_error_style :other_symbol }
|
|
118
|
+
assert_raise(ArgumentError) { Axlsx.validate_data_validation_error_style 'warning' }
|
|
119
|
+
assert_raise(ArgumentError) { Axlsx.validate_data_validation_error_style 0 }
|
|
120
|
+
|
|
121
|
+
#data_validation_operator
|
|
122
|
+
[:lessThan, :lessThanOrEqual, :equal, :notEqual, :greaterThanOrEqual, :greaterThan, :between, :notBetween].each do |sym|
|
|
123
|
+
assert_nothing_raised { Axlsx.validate_data_validation_operator sym }
|
|
124
|
+
end
|
|
125
|
+
assert_raise(ArgumentError) { Axlsx.validate_data_validation_error_style :other_symbol }
|
|
126
|
+
assert_raise(ArgumentError) { Axlsx.validate_data_validation_error_style 'lessThan' }
|
|
127
|
+
assert_raise(ArgumentError) { Axlsx.validate_data_validation_error_style 0 }
|
|
128
|
+
|
|
129
|
+
#data_validation_type
|
|
130
|
+
[:custom, :data, :decimal, :list, :none, :textLength, :time, :whole].each do |sym|
|
|
131
|
+
assert_nothing_raised { Axlsx.validate_data_validation_type sym }
|
|
132
|
+
end
|
|
133
|
+
assert_raise(ArgumentError) { Axlsx.validate_data_validation_error_style :other_symbol }
|
|
134
|
+
assert_raise(ArgumentError) { Axlsx.validate_data_validation_error_style 'decimal' }
|
|
135
|
+
assert_raise(ArgumentError) { Axlsx.validate_data_validation_error_style 0 }
|
|
136
|
+
|
|
137
|
+
#sheet_view_type
|
|
138
|
+
[:normal, :page_break_preview, :page_layout].each do |sym|
|
|
139
|
+
assert_nothing_raised { Axlsx.validate_sheet_view_type sym }
|
|
140
|
+
end
|
|
141
|
+
assert_raise(ArgumentError) { Axlsx.validate_data_validation_error_style :other_symbol }
|
|
142
|
+
assert_raise(ArgumentError) { Axlsx.validate_data_validation_error_style 'page_layout' }
|
|
143
|
+
assert_raise(ArgumentError) { Axlsx.validate_data_validation_error_style 0 }
|
|
144
|
+
|
|
145
|
+
#active_pane_type
|
|
146
|
+
[:bottom_left, :bottom_right, :top_left, :top_right].each do |sym|
|
|
147
|
+
assert_nothing_raised { Axlsx.validate_pane_type sym }
|
|
148
|
+
end
|
|
149
|
+
assert_raise(ArgumentError) { Axlsx.validate_pane_type :other_symbol }
|
|
150
|
+
assert_raise(ArgumentError) { Axlsx.validate_pane_type 'bottom_left' }
|
|
151
|
+
assert_raise(ArgumentError) { Axlsx.validate_pane_type 0 }
|
|
152
|
+
|
|
153
|
+
#split_state_type
|
|
154
|
+
[:frozen, :frozen_split, :split].each do |sym|
|
|
155
|
+
assert_nothing_raised { Axlsx.validate_split_state_type sym }
|
|
156
|
+
end
|
|
157
|
+
assert_raise(ArgumentError) { Axlsx.validate_split_state_type :other_symbol }
|
|
158
|
+
assert_raise(ArgumentError) { Axlsx.validate_split_state_type 'frozen_split' }
|
|
159
|
+
assert_raise(ArgumentError) { Axlsx.validate_split_state_type 0 }
|
|
160
|
+
end
|
|
161
|
+
end
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
require 'tc_helper'
|
|
2
|
+
|
|
3
|
+
class TestDefinedNames < Test::Unit::TestCase
|
|
4
|
+
def setup
|
|
5
|
+
@dn = Axlsx::DefinedName.new('Sheet1!A1:A1')
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
def test_initialize
|
|
9
|
+
assert_equal('Sheet1!A1:A1', @dn.formula)
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def test_string_attributes
|
|
13
|
+
Axlsx::DefinedName::STRING_ATTRIBUTES.each do |attr|
|
|
14
|
+
assert_raise(ArgumentError, 'only strings allowed in string attributes') { @dn.send("#{attr}=", 1) }
|
|
15
|
+
assert_nothing_raised { @dn.send("#{attr}=", '_xlnm.Sheet_Title') }
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def test_boolean_attributes
|
|
20
|
+
Axlsx::DefinedName::BOOLEAN_ATTRIBUTES.each do |attr|
|
|
21
|
+
assert_raise(ArgumentError, 'only booleanish allowed in string attributes') { @dn.send("#{attr}=", 'foo') }
|
|
22
|
+
assert_nothing_raised { @dn.send("#{attr}=", 1) }
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def test_local_sheet_id
|
|
28
|
+
assert_raise(ArgumentError, 'local_sheet_id must be an unsigned int') { @dn.local_sheet_id = -1 }
|
|
29
|
+
assert_nothing_raised { @dn.local_sheet_id = 1 }
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def test_to_xml_string
|
|
33
|
+
assert_raise(ArgumentError, 'name is required for serialization') { @dn.to_xml_string }
|
|
34
|
+
@dn.name = '_xlnm.Print_Titles'
|
|
35
|
+
@dn.hidden = true
|
|
36
|
+
doc = Nokogiri::XML(@dn.to_xml_string)
|
|
37
|
+
assert(doc.xpath("//definedName[@name='_xlnm.Print_Titles']"))
|
|
38
|
+
assert(doc.xpath("//definedName[@hidden='true']"))
|
|
39
|
+
assert_equal('Sheet1!A1:A1', doc.xpath('//definedName').text)
|
|
40
|
+
end
|
|
41
|
+
end
|
|
@@ -24,7 +24,10 @@ class TestWorkbook < Test::Unit::TestCase
|
|
|
24
24
|
assert_equal(Axlsx::Workbook.date1904, @wb.date1904)
|
|
25
25
|
end
|
|
26
26
|
|
|
27
|
-
|
|
27
|
+
def test_add_defined_name
|
|
28
|
+
@wb.add_defined_name 'Sheet1!1:1', :name => '_xlnm.Print_Titles', :hidden => true
|
|
29
|
+
assert_equal(1, @wb.defined_names.size)
|
|
30
|
+
end
|
|
28
31
|
|
|
29
32
|
def test_shared_strings
|
|
30
33
|
assert_equal(@wb.use_shared_strings, nil)
|
|
@@ -72,14 +75,13 @@ class TestWorkbook < Test::Unit::TestCase
|
|
|
72
75
|
assert(@wb.worksheets.size == 1)
|
|
73
76
|
end
|
|
74
77
|
|
|
75
|
-
|
|
76
78
|
def test_to_xml_string_defined_names
|
|
77
79
|
@wb.add_worksheet do |sheet|
|
|
78
80
|
sheet.add_row [1, "two"]
|
|
79
81
|
sheet.auto_filter = "A1:B1"
|
|
80
82
|
end
|
|
81
83
|
doc = Nokogiri::XML(@wb.to_xml_string)
|
|
82
|
-
assert_equal(doc.xpath('//xmlns:workbook/xmlns:definedNames/xmlns:definedName').inner_text, @wb.worksheets[0].
|
|
84
|
+
assert_equal(doc.xpath('//xmlns:workbook/xmlns:definedNames/xmlns:definedName').inner_text, @wb.worksheets[0].auto_filter.defined_name)
|
|
83
85
|
end
|
|
84
86
|
|
|
85
87
|
|
|
@@ -25,26 +25,18 @@ class TestTable < Test::Unit::TestCase
|
|
|
25
25
|
|
|
26
26
|
end
|
|
27
27
|
|
|
28
|
-
def test_charts
|
|
29
|
-
assert(@ws.drawing.charts.empty?)
|
|
30
|
-
chart = @ws.add_chart(Axlsx::Pie3DChart, :title=>"bob", :start_at=>[0,0], :end_at=>[1,1])
|
|
31
|
-
assert_equal(@ws.drawing.charts.last, chart, "add chart is returned")
|
|
32
|
-
chart = @ws.add_chart(Axlsx::Pie3DChart, :title=>"nancy", :start_at=>[1,5], :end_at=>[5,10])
|
|
33
|
-
assert_equal(@ws.drawing.charts.last, chart, "add chart is returned")
|
|
34
|
-
end
|
|
35
|
-
|
|
36
28
|
def test_pn
|
|
37
|
-
|
|
29
|
+
@ws.add_table("A1:D5")
|
|
38
30
|
assert_equal(@ws.tables.first.pn, "tables/table1.xml")
|
|
39
31
|
end
|
|
40
32
|
|
|
41
33
|
def test_rId
|
|
42
|
-
|
|
34
|
+
@ws.add_table("A1:D5")
|
|
43
35
|
assert_equal(@ws.tables.first.rId, "rId1")
|
|
44
36
|
end
|
|
45
37
|
|
|
46
38
|
def test_index
|
|
47
|
-
|
|
39
|
+
@ws.add_table("A1:D5")
|
|
48
40
|
assert_equal(@ws.tables.first.index, @ws.workbook.tables.index(@ws.tables.first))
|
|
49
41
|
end
|
|
50
42
|
|
|
@@ -33,7 +33,7 @@ class TestCell < Test::Unit::TestCase
|
|
|
33
33
|
assert_equal(@c.index, @row.cells.index(@c))
|
|
34
34
|
end
|
|
35
35
|
|
|
36
|
-
def
|
|
36
|
+
def test_pos
|
|
37
37
|
assert_equal(@c.pos, [@c.index, @c.row.index])
|
|
38
38
|
end
|
|
39
39
|
|
|
@@ -197,19 +197,17 @@ class TestCell < Test::Unit::TestCase
|
|
|
197
197
|
end
|
|
198
198
|
|
|
199
199
|
def test_merge_with_string
|
|
200
|
-
assert_equal(@c.row.worksheet.merged_cells.size, 0)
|
|
201
200
|
@c.row.add_cell 2
|
|
202
201
|
@c.row.add_cell 3
|
|
203
202
|
@c.merge "A2"
|
|
204
|
-
assert_equal(@c.row.worksheet.merged_cells.last, "A1:A2")
|
|
203
|
+
assert_equal(@c.row.worksheet.send(:merged_cells).last, "A1:A2")
|
|
205
204
|
end
|
|
206
205
|
|
|
207
206
|
def test_merge_with_cell
|
|
208
|
-
assert_equal(@c.row.worksheet.merged_cells.size, 0)
|
|
209
207
|
@c.row.add_cell 2
|
|
210
208
|
@c.row.add_cell 3
|
|
211
209
|
@c.merge @row.cells.last
|
|
212
|
-
assert_equal(@c.row.worksheet.merged_cells.last, "A1:C1")
|
|
210
|
+
assert_equal(@c.row.worksheet.send(:merged_cells).last, "A1:C1")
|
|
213
211
|
end
|
|
214
212
|
|
|
215
213
|
def test_ssti
|
|
@@ -244,9 +242,35 @@ class TestCell < Test::Unit::TestCase
|
|
|
244
242
|
c_xml = Nokogiri::XML(@c.to_xml_string(1,1))
|
|
245
243
|
assert_equal(c_xml.xpath("/c[@s=1]").size, 1)
|
|
246
244
|
end
|
|
245
|
+
|
|
246
|
+
def test_to_xml_string_nil
|
|
247
|
+
@c.value = nil
|
|
248
|
+
c_xml = Nokogiri::XML(@c.to_xml_string(1,1))
|
|
249
|
+
assert_equal(c_xml.xpath("/c[@s=1]").size, 1)
|
|
250
|
+
end
|
|
251
|
+
|
|
252
|
+
def test_to_xml_string_with_run
|
|
253
|
+
@c.b = true
|
|
254
|
+
@c.type = :string
|
|
255
|
+
@c.value = "a"
|
|
256
|
+
@c.font_name = 'arial'
|
|
257
|
+
@c.color = 'FF0000'
|
|
258
|
+
c_xml = Nokogiri::XML(@c.to_xml_string(1,1))
|
|
259
|
+
assert(c_xml.xpath("//b"))
|
|
260
|
+
end
|
|
261
|
+
def test_to_xml_string_formula
|
|
262
|
+
p = Axlsx::Package.new
|
|
263
|
+
ws = p.workbook.add_worksheet do |sheet|
|
|
264
|
+
sheet.add_row ["=IF(2+2=4,4,5)"]
|
|
265
|
+
end
|
|
266
|
+
doc = Nokogiri::XML(ws.to_xml_string)
|
|
267
|
+
assert(doc.xpath("//f[@text()='IF(2+2=4,4,5)']"))
|
|
268
|
+
|
|
269
|
+
end
|
|
270
|
+
|
|
247
271
|
def test_to_xml
|
|
248
272
|
# TODO This could use some much more stringent testing related to the xml content generated!
|
|
249
|
-
|
|
273
|
+
@ws.add_row [Time.now, Date.today, true, 1, 1.0, "text", "=sum(A1:A2)"]
|
|
250
274
|
schema = Nokogiri::XML::Schema(File.open(Axlsx::SML_XSD))
|
|
251
275
|
doc = Nokogiri::XML(@ws.to_xml_string)
|
|
252
276
|
errors = []
|
|
@@ -6,6 +6,13 @@ class TestCol < Test::Unit::TestCase
|
|
|
6
6
|
@col = Axlsx::Col.new 1, 1
|
|
7
7
|
end
|
|
8
8
|
|
|
9
|
+
def test_initialize
|
|
10
|
+
options = { :width => 12, :collapsed => true, :hidden => true, :outlineLevel => 1, :phonetic => true, :style => 1}
|
|
11
|
+
|
|
12
|
+
col = Axlsx::Col.new 0, 0, options
|
|
13
|
+
options.each{ |key, value| assert_equal(col.send(key.to_sym), value) }
|
|
14
|
+
end
|
|
15
|
+
|
|
9
16
|
def test_min_max_required
|
|
10
17
|
assert_raise(ArgumentError, 'min and max must be specified when creating a new column') { Axlsx::Col.new }
|
|
11
18
|
assert_raise(ArgumentError, 'min and max must be specified when creating a new column') { Axlsx::Col.new nil, nil }
|
|
@@ -53,6 +60,8 @@ class TestCol < Test::Unit::TestCase
|
|
|
53
60
|
|
|
54
61
|
def test_style
|
|
55
62
|
assert_equal(@col.style, nil)
|
|
63
|
+
@col.style = 1
|
|
64
|
+
assert_equal(@col.style, 1)
|
|
56
65
|
#TODO check that the style specified is actually in the styles xfs collection
|
|
57
66
|
end
|
|
58
67
|
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
require 'tc_helper.rb'
|
|
2
|
+
|
|
3
|
+
class TestComment < Test::Unit::TestCase
|
|
4
|
+
def setup
|
|
5
|
+
p = Axlsx::Package.new
|
|
6
|
+
wb = p.workbook
|
|
7
|
+
@ws = wb.add_worksheet
|
|
8
|
+
@c1 = @ws.add_comment :ref => 'A1', :text => 'penut machine', :author => 'crank'
|
|
9
|
+
@c2 = @ws.add_comment :ref => 'C3', :text => 'rust bucket', :author => 'PO'
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def test_initailize
|
|
13
|
+
assert_raise(ArgumentError) { Axlsx::Comment.new }
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def test_author
|
|
17
|
+
assert(@c1.author == 'crank')
|
|
18
|
+
assert(@c2.author == 'PO')
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def test_text
|
|
22
|
+
assert(@c1.text == 'penut machine')
|
|
23
|
+
assert(@c2.text == 'rust bucket')
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def test_author_index
|
|
27
|
+
assert_equal(@c1.author_index, 1)
|
|
28
|
+
assert_equal(@c2.author_index, 0)
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def test_ref
|
|
32
|
+
assert(@c1.ref == 'A1')
|
|
33
|
+
assert(@c2.ref == 'C3')
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def test_vml_shape
|
|
37
|
+
pos = Axlsx::name_to_indices(@c1.ref)
|
|
38
|
+
assert(@c1.vml_shape.is_a?(Axlsx::VmlShape))
|
|
39
|
+
assert(@c1.vml_shape.column == pos[0])
|
|
40
|
+
assert(@c1.vml_shape.row == pos[1])
|
|
41
|
+
assert(@c1.vml_shape.row == pos[1])
|
|
42
|
+
assert_equal(pos[0], @c1.vml_shape.left_column)
|
|
43
|
+
assert(@c1.vml_shape.top_row == pos[1])
|
|
44
|
+
assert_equal(pos[0] + 2 , @c1.vml_shape.right_column)
|
|
45
|
+
assert(@c1.vml_shape.bottom_row == pos[1]+4)
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
def to_xml_string
|
|
49
|
+
doc = Nokogiri::XML(@c1.to_xml_string)
|
|
50
|
+
assert_equal(doc.xpath("//comment[@ref='#{@c1.ref}']").size, 1)
|
|
51
|
+
assert_equal(doc.xpath("//comment[@authorId='#{@c1.author_index.to}']").size, 1)
|
|
52
|
+
assert_equal(doc.xpath("//t[text()='#{@c1.author}']").size, 1)
|
|
53
|
+
assert_equal(doc.xpath("//t[text()='#{@c1.text}']").size, 1)
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
end
|
|
57
|
+
|