axlsx 1.1.4 → 1.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.yardopts +6 -2
- data/CHANGELOG.md +72 -0
- data/README.md +114 -31
- data/Rakefile +11 -3
- data/examples/auto_filter.rb +16 -0
- data/examples/auto_filter.xlsx +0 -0
- data/examples/basic_charts.rb +58 -0
- data/examples/chart_colors.rb +17 -2
- data/examples/data_validation.rb +50 -0
- data/examples/example.rb +171 -60
- data/examples/example.xlsx +0 -0
- data/examples/example_streamed.xlsx +0 -0
- data/examples/extractive.pdf +0 -0
- data/examples/extractive.rb +3 -0
- data/examples/extractive.xlsx +0 -0
- data/examples/hyperlinks.rb +23 -0
- data/examples/hyperlinks.xlsx +0 -0
- data/examples/no-use_autowidth.xlsx +0 -0
- data/examples/page_setup.rb +11 -0
- data/examples/page_setup.xlsx +0 -0
- data/examples/scraping_html.rb +91 -0
- data/examples/shared_strings_example.xlsx +0 -0
- data/examples/sheet_protection.rb +10 -0
- data/examples/sheet_view.rb +34 -0
- data/examples/skydrive/axlsx.csv +1 -0
- data/examples/skydrive/axlsx.xlsx +0 -0
- data/examples/skydrive/real_example.rb +8 -8
- data/examples/sprk2012/Screen Shot 2012-09-11 at 10.42.06 PM.png +0 -0
- data/examples/sprk2012/Screen Shot 2012-09-11 at 11.07.48 PM.png +0 -0
- data/examples/sprk2012/Screen Shot 2012-09-11 at 8.31.50 PM.png +0 -0
- data/examples/sprk2012/Screen Shot 2012-09-11 at 9.23.27 PM.png +0 -0
- data/examples/sprk2012/Screen Shot 2012-09-11 at 9.32.06 PM.png +0 -0
- data/examples/sprk2012/Screen Shot 2012-09-11 at 9.33.35 PM.png +0 -0
- data/examples/sprk2012/Screen Shot 2012-09-11 at 9.46.44 PM.png +0 -0
- data/examples/sprk2012/Screen Shot 2012-09-12 at 5.07.23 PM.png +0 -0
- data/examples/sprk2012/basics.rb +11 -0
- data/examples/sprk2012/basics.xlsx +0 -0
- data/examples/sprk2012/gravatar.jpeg +0 -0
- data/examples/sprk2012/hair_club.jpg +0 -0
- data/examples/sprk2012/images.rb +9 -0
- data/examples/sprk2012/images.xlsx +0 -0
- data/examples/sprk2012/line_chart.rb +56 -0
- data/examples/sprk2012/line_chart.xlsx +0 -0
- data/examples/sprk2012/sprk2012.key +0 -0
- data/examples/sprk2012/styles.rb +20 -0
- data/examples/sprk2012/styles.xlsx +0 -0
- data/examples/styles.rb +62 -0
- data/examples/styles.xlsx +0 -0
- data/examples/two_cell_anchor_image.rb +11 -0
- data/lib/axlsx/content_type/content_type.rb +2 -0
- data/lib/axlsx/content_type/default.rb +30 -15
- data/lib/axlsx/content_type/override.rb +29 -14
- data/lib/axlsx/doc_props/app.rb +161 -104
- data/lib/axlsx/doc_props/core.rb +9 -5
- data/lib/axlsx/drawing/ax_data_source.rb +7 -6
- data/lib/axlsx/drawing/axis.rb +82 -36
- data/lib/axlsx/drawing/bar_3D_chart.rb +49 -45
- data/lib/axlsx/drawing/bar_series.rb +2 -1
- data/lib/axlsx/drawing/cat_axis.rb +43 -39
- data/lib/axlsx/drawing/chart.rb +65 -54
- data/lib/axlsx/drawing/d_lbls.rb +100 -0
- data/lib/axlsx/drawing/drawing.rb +20 -8
- data/lib/axlsx/drawing/graphic_frame.rb +2 -1
- data/lib/axlsx/drawing/line_3D_chart.rb +3 -10
- data/lib/axlsx/drawing/num_data.rb +2 -2
- data/lib/axlsx/drawing/num_data_source.rb +4 -1
- data/lib/axlsx/drawing/pic.rb +44 -4
- data/lib/axlsx/drawing/pie_3D_chart.rb +10 -7
- data/lib/axlsx/drawing/scatter_chart.rb +2 -8
- data/lib/axlsx/drawing/title.rb +21 -9
- data/lib/axlsx/drawing/two_cell_anchor.rb +46 -9
- data/lib/axlsx/drawing/view_3D.rb +42 -32
- data/lib/axlsx/drawing/vml_drawing.rb +42 -0
- data/lib/axlsx/drawing/vml_shape.rb +125 -0
- data/lib/axlsx/package.rb +43 -16
- data/lib/axlsx/rels/relationship.rb +3 -3
- data/lib/axlsx/rels/relationships.rb +1 -11
- data/lib/axlsx/stylesheet/gradient_fill.rb +1 -1
- data/lib/axlsx/stylesheet/styles.rb +11 -2
- data/lib/axlsx/stylesheet/table_style.rb +3 -3
- data/lib/axlsx/util/constants.rb +131 -2
- data/lib/axlsx/util/simple_typed_list.rb +18 -22
- data/lib/axlsx/util/validators.rb +100 -9
- data/lib/axlsx/version.rb +2 -7
- data/lib/axlsx/workbook/defined_name.rb +174 -0
- data/lib/axlsx/workbook/defined_names.rb +21 -0
- data/lib/axlsx/workbook/workbook.rb +70 -13
- data/lib/axlsx/workbook/worksheet/auto_filter/auto_filter.rb +77 -0
- data/lib/axlsx/workbook/worksheet/auto_filter/filter_column.rb +102 -0
- data/lib/axlsx/workbook/worksheet/auto_filter/filters.rb +253 -0
- data/lib/axlsx/workbook/worksheet/cell.rb +41 -8
- data/lib/axlsx/workbook/worksheet/col.rb +15 -0
- data/lib/axlsx/workbook/worksheet/cols.rb +20 -0
- data/lib/axlsx/workbook/worksheet/comment.rb +101 -0
- data/lib/axlsx/workbook/worksheet/comments.rb +85 -0
- data/lib/axlsx/workbook/worksheet/conditional_formattings.rb +25 -0
- data/lib/axlsx/workbook/worksheet/data_bar.rb +1 -1
- data/lib/axlsx/workbook/worksheet/data_validation.rb +245 -0
- data/lib/axlsx/workbook/worksheet/data_validations.rb +28 -0
- data/lib/axlsx/workbook/worksheet/date_time_converter.rb +1 -1
- data/lib/axlsx/workbook/worksheet/dimension.rb +65 -0
- data/lib/axlsx/workbook/worksheet/merged_cells.rb +35 -0
- data/lib/axlsx/workbook/worksheet/page_set_up_pr.rb +47 -0
- data/lib/axlsx/workbook/worksheet/page_setup.rb +241 -0
- data/lib/axlsx/workbook/worksheet/pane.rb +144 -0
- data/lib/axlsx/workbook/worksheet/print_options.rb +63 -0
- data/lib/axlsx/workbook/worksheet/protected_range.rb +46 -0
- data/lib/axlsx/workbook/worksheet/protected_ranges.rb +34 -0
- data/lib/axlsx/workbook/worksheet/row.rb +36 -20
- data/lib/axlsx/workbook/worksheet/selection.rb +111 -0
- data/lib/axlsx/workbook/worksheet/sheet_calc_pr.rb +49 -0
- data/lib/axlsx/workbook/worksheet/sheet_data.rb +25 -0
- data/lib/axlsx/workbook/worksheet/sheet_pr.rb +107 -0
- data/lib/axlsx/workbook/worksheet/sheet_protection.rb +224 -0
- data/lib/axlsx/workbook/worksheet/sheet_view.rb +379 -0
- data/lib/axlsx/workbook/worksheet/table.rb +10 -3
- data/lib/axlsx/workbook/worksheet/table_style_info.rb +68 -0
- data/lib/axlsx/workbook/worksheet/tables.rb +31 -0
- data/lib/axlsx/workbook/worksheet/worksheet.rb +414 -254
- data/lib/axlsx/workbook/worksheet/worksheet_comments.rb +57 -0
- data/lib/axlsx/workbook/worksheet/worksheet_drawing.rb +64 -0
- data/lib/axlsx/workbook/worksheet/worksheet_hyperlink.rb +101 -0
- data/lib/axlsx/workbook/worksheet/worksheet_hyperlinks.rb +38 -0
- data/lib/axlsx.rb +38 -16
- data/test/content_type/tc_content_type.rb +1 -6
- data/test/doc_props/tc_app.rb +31 -1
- data/test/doc_props/tc_core.rb +3 -1
- data/test/drawing/tc_axis.rb +38 -3
- data/test/drawing/tc_bar_3D_chart.rb +12 -12
- data/test/drawing/tc_bar_series.rb +1 -2
- data/test/drawing/tc_cat_axis.rb +3 -3
- data/test/drawing/tc_chart.rb +29 -9
- data/test/drawing/tc_d_lbls.rb +47 -0
- data/test/drawing/tc_drawing.rb +11 -5
- data/test/drawing/tc_hyperlink.rb +4 -5
- data/test/drawing/tc_line_series.rb +7 -3
- data/test/drawing/tc_num_data.rb +5 -1
- data/test/drawing/tc_pic.rb +22 -2
- data/test/drawing/tc_pie_3D_chart.rb +4 -8
- data/test/drawing/tc_pie_series.rb +7 -2
- data/test/drawing/tc_scatter_chart.rb +6 -1
- data/test/drawing/tc_scatter_series.rb +1 -1
- data/test/drawing/tc_series.rb +1 -1
- data/test/drawing/tc_title.rb +16 -0
- data/test/drawing/tc_two_cell_anchor.rb +1 -2
- data/test/drawing/tc_view_3D.rb +18 -18
- data/test/drawing/tc_vml_drawing.rb +25 -0
- data/test/drawing/tc_vml_shape.rb +100 -0
- data/test/rels/tc_relationship.rb +1 -0
- data/test/stylesheet/tc_gradient_fill.rb +8 -0
- data/test/stylesheet/tc_pattern_fill.rb +7 -1
- data/test/stylesheet/tc_styles.rb +16 -4
- data/test/stylesheet/tc_table_style.rb +8 -0
- data/test/stylesheet/tc_table_style_element.rb +10 -1
- data/test/tc_helper.rb +1 -0
- data/test/tc_package.rb +94 -17
- data/test/util/tc_simple_typed_list.rb +13 -0
- data/test/util/tc_validators.rb +101 -8
- data/test/workbook/tc_defined_name.rb +41 -0
- data/test/workbook/tc_workbook.rb +5 -3
- data/test/workbook/worksheet/auto_filter/tc_auto_filter.rb +38 -0
- data/test/workbook/worksheet/auto_filter/tc_filter_column.rb +76 -0
- data/test/workbook/worksheet/auto_filter/tc_filters.rb +50 -0
- data/test/workbook/worksheet/tc_cell.rb +53 -7
- data/test/workbook/worksheet/tc_col.rb +9 -0
- data/test/workbook/worksheet/tc_comment.rb +57 -0
- data/test/workbook/worksheet/tc_comments.rb +57 -0
- data/test/workbook/worksheet/tc_conditional_formatting.rb +44 -0
- data/test/workbook/worksheet/tc_data_bar.rb +1 -1
- data/test/workbook/worksheet/tc_data_validation.rb +265 -0
- data/test/workbook/worksheet/tc_page_set_up_pr.rb +15 -0
- data/test/workbook/worksheet/tc_page_setup.rb +143 -0
- data/test/workbook/worksheet/tc_pane.rb +94 -0
- data/test/workbook/worksheet/tc_print_options.rb +72 -0
- data/test/workbook/worksheet/tc_protected_range.rb +17 -0
- data/test/workbook/worksheet/tc_row.rb +32 -14
- data/test/workbook/worksheet/tc_selection.rb +94 -0
- data/test/workbook/worksheet/tc_sheet_calc_pr.rb +18 -0
- data/test/workbook/worksheet/tc_sheet_pr.rb +27 -0
- data/test/workbook/worksheet/tc_sheet_protection.rb +117 -0
- data/test/workbook/worksheet/tc_sheet_view.rb +214 -0
- data/test/workbook/worksheet/{table/tc_table.rb → tc_table.rb} +9 -12
- data/test/workbook/worksheet/tc_table_style_info.rb +53 -0
- data/test/workbook/worksheet/tc_worksheet.rb +155 -51
- data/test/workbook/worksheet/tc_worksheet_hyperlink.rb +64 -0
- metadata +194 -81
- data/examples/#extractive.csv# +0 -0
- data/examples/#extractive.rb# +0 -45
- data/examples/chart_colors.rb~ +0 -0
- data/examples/chart_colors.xlsx +0 -0
- data/examples/colored_series_data.xlsx +0 -0
- data/examples/conditional_formatting/getting_barred.xlsx +0 -0
- data/examples/example.csv +0 -1000
- data/examples/extractive.csv +0 -1
- data/examples/extractive.csv~ +0 -1
- data/examples/extractive.rb~ +0 -3
- data/examples/stack.rb +0 -21
- data/examples/stack.rb~ +0 -27
- data/examples/stack.xlsx +0 -0
- data/examples/~$chart_colors.xlsx +0 -0
- data/examples/~$extractive.xlsx +0 -0
- data/lib/axlsx/drawing/ax_data_source.rb~ +0 -55
- data/lib/axlsx/drawing/data_source.rb~ +0 -51
- data/lib/axlsx/drawing/hlink_click.rb~ +0 -0
- data/lib/axlsx/drawing/hyperlink.rb~ +0 -64
- data/lib/axlsx/drawing/num_data.rb~ +0 -51
- data/lib/axlsx/drawing/num_data_source.rb~ +0 -54
- data/lib/axlsx/drawing/num_val.rb~ +0 -40
- data/lib/axlsx/drawing/picture_locking.rb~ +0 -36
- data/lib/axlsx/drawing/ref.rb~ +0 -41
- data/lib/axlsx/drawing/str_data.rb~ +0 -58
- data/lib/axlsx/drawing/str_val.rb~ +0 -35
- data/lib/axlsx/util/cbf.rb +0 -333
- data/lib/axlsx/util/cfb.rb~ +0 -201
- data/lib/axlsx/util/font_tables.rb~ +0 -0
- data/lib/axlsx/util/ms_off_crypto.rb +0 -189
- data/lib/axlsx/util/ms_off_crypto.rb~ +0 -3
- data/lib/axlsx/util/ms_offcrypto.rb~ +0 -0
- data/lib/axlsx/util/parser.rb~ +0 -6
- data/lib/axlsx/util/storage.rb~ +0 -0
- data/lib/axlsx/workbook/shared_strings_table.rb~ +0 -69
- data/lib/axlsx/workbook/worksheet/cfvo.rb~ +0 -0
- data/lib/axlsx/workbook/worksheet/col.rb~ +0 -0
- data/lib/axlsx/workbook/worksheet/color_scale.rb~ +0 -46
- data/lib/axlsx/workbook/worksheet/data_bar.rb~ +0 -0
- data/lib/axlsx/workbook/worksheet/icon_set.rb~ +0 -95
- data/lib/axlsx/workbook/worksheet/shared_strings_table.rb~ +0 -0
- data/lib/axlsx/workbook/worksheet/table.rb~ +0 -97
- data/lib/schema/dc.xsd~ +0 -118
- data/lib/schema/dcterms.xsd~ +0 -331
- data/lib/schema/opc-coreProperties.xsd~ +0 -50
- data/test/drawing/tc_data_source.rb~ +0 -30
- data/test/drawing/tc_num_data.rb~ +0 -35
- data/test/drawing/tc_num_val.rb~ +0 -29
- data/test/drawing/tc_str_data.rb~ +0 -30
- data/test/drawing/tc_str_val.rb~ +0 -26
- data/test/workbook/worksheet/table/tc_table.rb~ +0 -72
- data/test/workbook/worksheet/tc_cfvo.rb~ +0 -20
- data/test/workbook/worksheet/tc_col.rb~ +0 -10
- data/test/workbook/worksheet/tc_color_scale.rb~ +0 -0
- data/test/workbook/worksheet/tc_data_bar.rb~ +0 -0
- data/test/workbook/worksheet/tc_icon_set.rb~ +0 -0
data/test/tc_package.rb
CHANGED
|
@@ -1,13 +1,79 @@
|
|
|
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.add_hyperlink :ref => ws.rows.first.cells.last, :location => 'https://github.com/randym'
|
|
11
|
+
ws.workbook.add_defined_name("#{ws.name}!A1:C2", :name => '_xlnm.Print_Titles', :hidden => true)
|
|
12
|
+
ws.protect_range('A1:C1')
|
|
13
|
+
ws.protect_range(ws.rows.last.cells)
|
|
14
|
+
ws.add_comment :author => 'alice', :text => 'Hi Bob', :ref => 'A12'
|
|
15
|
+
ws.add_comment :author => 'bob', :text => 'Hi Alice', :ref => 'F19'
|
|
16
|
+
ws.sheet_view do |vs|
|
|
17
|
+
vs.pane do |p|
|
|
18
|
+
p.active_pane = :top_right
|
|
19
|
+
p.state = :split
|
|
20
|
+
p.x_split = 11080
|
|
21
|
+
p.y_split = 5000
|
|
22
|
+
p.top_left_cell = 'C44'
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
vs.add_selection(:top_left, { :active_cell => 'A2', :sqref => 'A2' })
|
|
26
|
+
vs.add_selection(:top_right, { :active_cell => 'I10', :sqref => 'I10' })
|
|
27
|
+
vs.add_selection(:bottom_left, { :active_cell => 'E55', :sqref => 'E55' })
|
|
28
|
+
vs.add_selection(:bottom_right, { :active_cell => 'I57', :sqref => 'I57' })
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
ws.add_chart(Axlsx::Pie3DChart, :title => "これは?", :start_at => [0,3]) do |chart|
|
|
32
|
+
chart.add_series :data=>[1,2,3], :labels=>["a", "b", "c"]
|
|
33
|
+
chart.d_lbls.show_val = true
|
|
34
|
+
chart.d_lbls.d_lbl_pos = :outEnd
|
|
35
|
+
chart.d_lbls.show_percent = true
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
ws.add_chart(Axlsx::Line3DChart, :title => "axis labels") do |chart|
|
|
39
|
+
chart.valAxis.title = 'bob'
|
|
40
|
+
chart.d_lbls.show_val = true
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
ws.add_chart(Axlsx::Bar3DChart, :title => 'bar chart') do |chart|
|
|
44
|
+
chart.add_series :data => [1,4,5], :labels => %w(A B C)
|
|
45
|
+
chart.d_lbls.show_percent = true
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
ws.add_chart(Axlsx::ScatterChart, :title => 'scat man') do |chart|
|
|
49
|
+
chart.add_series :xData => [1,2,3,4], :yData => [4,3,2,1]
|
|
50
|
+
chart.d_lbls.show_val = true
|
|
51
|
+
end
|
|
52
|
+
|
|
9
53
|
@fname = 'axlsx_test_serialization.xlsx'
|
|
54
|
+
img = File.expand_path('../../examples/image1.jpeg', __FILE__)
|
|
55
|
+
ws.add_image(:image_src => img, :noSelect => true, :noMove => true, :hyperlink=>"http://axlsx.blogspot.com") do |image|
|
|
56
|
+
image.width=720
|
|
57
|
+
image.height=666
|
|
58
|
+
image.hyperlink.tooltip = "Labeled Link"
|
|
59
|
+
image.start_at 5, 5
|
|
60
|
+
end
|
|
61
|
+
ws.add_image :image_src => File.expand_path('../../examples/image1.gif', __FILE__) do |image|
|
|
62
|
+
image.start_at 0, 20
|
|
63
|
+
image.width=360
|
|
64
|
+
image.height=333
|
|
65
|
+
end
|
|
66
|
+
ws.add_image :image_src => File.expand_path('../../examples/image1.png', __FILE__) do |image|
|
|
67
|
+
image.start_at 9, 20
|
|
68
|
+
image.width = 180
|
|
69
|
+
image.height = 167
|
|
70
|
+
end
|
|
71
|
+
ws.add_table 'A1:C1'
|
|
72
|
+
end
|
|
10
73
|
|
|
74
|
+
def test_use_autowidth
|
|
75
|
+
@package.use_autowidth = false
|
|
76
|
+
assert(@package.workbook.use_autowidth == false)
|
|
11
77
|
end
|
|
12
78
|
|
|
13
79
|
def test_core_accessor
|
|
@@ -35,30 +101,26 @@ class TestPackage < Test::Unit::TestCase
|
|
|
35
101
|
end
|
|
36
102
|
|
|
37
103
|
def test_serialization
|
|
38
|
-
fname = 'axlsx_test_serialization.xlsx'
|
|
39
104
|
assert_nothing_raised do
|
|
40
105
|
begin
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
106
|
+
@package.serialize(@fname)
|
|
107
|
+
zf = Zip::ZipFile.open(@fname)
|
|
108
|
+
@package.send(:parts).each{ |part| zf.get_entry(part[:entry]) }
|
|
109
|
+
File.delete(@fname)
|
|
45
110
|
rescue Errno::EACCES
|
|
46
|
-
|
|
111
|
+
puts "WARNING:: test_serialization requires write access."
|
|
47
112
|
end
|
|
48
|
-
|
|
49
|
-
|
|
113
|
+
end
|
|
114
|
+
end
|
|
50
115
|
|
|
51
116
|
def test_validation
|
|
52
117
|
assert_equal(@package.validate.size, 0, @package.validate)
|
|
53
|
-
|
|
118
|
+
Axlsx::Workbook.send(:class_variable_set, :@@date1904, 9900)
|
|
119
|
+
assert(@package.validate.size > 0)
|
|
54
120
|
end
|
|
55
121
|
|
|
56
122
|
def test_parts
|
|
57
123
|
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
124
|
#all parts have an entry
|
|
63
125
|
assert_equal(p.select{ |part| part[:entry] =~ /_rels\/\.rels/ }.size, 1, "rels missing")
|
|
64
126
|
assert_equal(p.select{ |part| part[:entry] =~ /docProps\/core\.xml/ }.size, 1, "core missing")
|
|
@@ -72,9 +134,11 @@ class TestPackage < Test::Unit::TestCase
|
|
|
72
134
|
assert_equal(p.select{ |part| part[:entry] =~ /xl\/charts\/chart\d\.xml/ }.size, @package.workbook.charts.size, "one or more charts missing")
|
|
73
135
|
assert_equal(p.select{ |part| part[:entry] =~ /xl\/worksheets\/sheet\d\.xml/ }.size, @package.workbook.worksheets.size, "one or more sheet missing")
|
|
74
136
|
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")
|
|
137
|
+
assert_equal(p.select{ |part| part[:entry] =~ /xl\/comments\d\.xml/ }.size, @package.workbook.worksheets.size, "one or more sheet rels missing")
|
|
138
|
+
|
|
75
139
|
|
|
76
140
|
#no mystery parts
|
|
77
|
-
assert_equal(p.size,
|
|
141
|
+
assert_equal(p.size, 21)
|
|
78
142
|
|
|
79
143
|
end
|
|
80
144
|
|
|
@@ -102,11 +166,24 @@ class TestPackage < Test::Unit::TestCase
|
|
|
102
166
|
def test_content_type_added_with_shared_strings
|
|
103
167
|
@package.use_shared_strings = true
|
|
104
168
|
ct = @package.send(:content_types)
|
|
105
|
-
assert(ct.select { |
|
|
169
|
+
assert(ct.select { |type| type.ContentType == Axlsx::SHARED_STRINGS_CT }.size == 1)
|
|
106
170
|
end
|
|
107
171
|
|
|
108
172
|
def test_name_to_indices
|
|
109
173
|
assert(Axlsx::name_to_indices('A1') == [0,0])
|
|
110
174
|
assert(Axlsx::name_to_indices('A100') == [0,99], 'needs to axcept rows that contain 0')
|
|
111
175
|
end
|
|
176
|
+
|
|
177
|
+
def test_to_stream
|
|
178
|
+
stream = @package.to_stream
|
|
179
|
+
assert(stream.is_a?(StringIO))
|
|
180
|
+
# this is just a roundabout guess for a package as it is build now
|
|
181
|
+
# in testing.
|
|
182
|
+
assert(stream.size > 80000)
|
|
183
|
+
end
|
|
184
|
+
|
|
185
|
+
def test_encrypt
|
|
186
|
+
# this is no where near close to ready yet
|
|
187
|
+
assert(@package.encrypt('your_mom.xlsxl', 'has a password') == false)
|
|
188
|
+
end
|
|
112
189
|
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,99 @@ 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
|
+
#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" }
|
|
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 }
|
|
73
160
|
end
|
|
74
|
-
end
|
|
75
161
|
|
|
162
|
+
def test_range_validation
|
|
163
|
+
# exclusive
|
|
164
|
+
assert_raise(ArgumentError) { Axlsx::RangeValidator.validate('foo', 1, 10, 10, false) }
|
|
165
|
+
# inclusive by default
|
|
166
|
+
assert_nothing_raised { Axlsx::RangeValidator.validate('foo', 1, 10, 10) }
|
|
167
|
+
end
|
|
168
|
+
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
|
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
require 'tc_helper.rb'
|
|
2
|
+
|
|
3
|
+
class TestAutoFilter < Test::Unit::TestCase
|
|
4
|
+
|
|
5
|
+
def setup
|
|
6
|
+
ws = Axlsx::Package.new.workbook.add_worksheet
|
|
7
|
+
3.times { |index| ws.add_row [1*index,2*index,3*index] }
|
|
8
|
+
@auto_filter = ws.auto_filter
|
|
9
|
+
@auto_filter.range = 'A1:C3'
|
|
10
|
+
@auto_filter.add_column 0, :filters, :filter_items => [1]
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def test_defined_name
|
|
14
|
+
assert_equal("'Sheet1'!$A$1:$C$3", @auto_filter.defined_name)
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def test_to_xml_string
|
|
18
|
+
doc = Nokogiri::XML(@auto_filter.to_xml_string)
|
|
19
|
+
assert(doc.xpath("autoFilter[@ref='#{@auto_filter.range}']"))
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def test_columns
|
|
23
|
+
assert @auto_filter.columns.is_a?(Axlsx::SimpleTypedList)
|
|
24
|
+
assert_equal @auto_filter.columns.allowed_types, [Axlsx::FilterColumn]
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def test_add_column
|
|
28
|
+
@auto_filter.add_column(0, :filters) do |column|
|
|
29
|
+
assert column.is_a? FilterColumn
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def test_applya
|
|
34
|
+
assert_equal nil, @auto_filter.worksheet.rows.last.hidden
|
|
35
|
+
@auto_filter.apply
|
|
36
|
+
assert_equal true, @auto_filter.worksheet.rows.last.hidden
|
|
37
|
+
end
|
|
38
|
+
end
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
require 'tc_helper.rb'
|
|
2
|
+
|
|
3
|
+
class TestFilterColumn < Test::Unit::TestCase
|
|
4
|
+
|
|
5
|
+
def setup
|
|
6
|
+
@filter_column = Axlsx::FilterColumn.new(0, :filters, :filter_items => [200])
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
def test_initialize_col_id
|
|
11
|
+
assert_raise ArgumentError do
|
|
12
|
+
Axlsx::FilterColumn.new(0, :bobs_house_of_filter)
|
|
13
|
+
end
|
|
14
|
+
assert_raise ArgumentError do
|
|
15
|
+
Axlsx::FilterColumn.new(:penut, :filters)
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def test_initailize_filter_type
|
|
20
|
+
assert @filter_column.filter.is_a?(Axlsx::Filters)
|
|
21
|
+
assert_equal 1, @filter_column.filter.filter_items.size
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def test_initialize_filter_type_filters_with_options
|
|
25
|
+
assert_equal 200, @filter_column.filter.filter_items.first.val
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def test_initialize_with_block
|
|
29
|
+
filter_column = Axlsx::FilterColumn.new(0, :filters) do |filters|
|
|
30
|
+
filters.filter_items = [700, 100, 5]
|
|
31
|
+
end
|
|
32
|
+
assert_equal 3, filter_column.filter.filter_items.size
|
|
33
|
+
assert_equal 700, filter_column.filter.filter_items.first.val
|
|
34
|
+
assert_equal 5, filter_column.filter.filter_items.last.val
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def test_default_show_button
|
|
38
|
+
assert_equal true, @filter_column.show_button
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def test_default_hidden_button
|
|
42
|
+
assert_equal false, @filter_column.hidden_button
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def test_show_button
|
|
46
|
+
assert_raise ArgumentError do
|
|
47
|
+
@filter_column.show_button = :foo
|
|
48
|
+
end
|
|
49
|
+
assert_nothing_raised { @filter_column.show_button = false }
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
def test_hidden_button
|
|
53
|
+
assert_raise ArgumentError do
|
|
54
|
+
@filter_column.hidden_button = :hoge
|
|
55
|
+
end
|
|
56
|
+
assert_nothing_raised { @filter_column.hidden_button = true }
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
def test_col_id=
|
|
60
|
+
assert_raise ArgumentError do
|
|
61
|
+
@filter_column.col_id = :bar
|
|
62
|
+
end
|
|
63
|
+
assert_nothing_raised { @filter_column.col_id = 7 }
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
def test_to_xml_string
|
|
67
|
+
doc = Nokogiri::XML(@filter_column.to_xml_string)
|
|
68
|
+
assert doc.xpath("//filterColumn[@colId=#{@filter_column.col_id}]")
|
|
69
|
+
assert doc.xpath("//filterColumn[@hiddenButton=#{@filter_column.hidden_button}]")
|
|
70
|
+
assert doc.xpath("//filterColumn[@showButton=#{@filter_column.show_button}]")
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
assert doc.xpath("//filterColumn/filters")
|
|
75
|
+
end
|
|
76
|
+
end
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
require 'tc_helper.rb'
|
|
2
|
+
|
|
3
|
+
class TestFilters < Test::Unit::TestCase
|
|
4
|
+
def setup
|
|
5
|
+
@filters = Axlsx::Filters.new(:filter_items => [1, 'a'],
|
|
6
|
+
:date_group_items =>[ { :date_time_grouping => :year, :year => 2011, :month => 11, :day => 11, :hour => 0, :minute => 0, :second => 0 } ] ,
|
|
7
|
+
:blank => true)
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def test_blank
|
|
11
|
+
assert_equal true, @filters.blank
|
|
12
|
+
assert_raise(ArgumentError) { @filters.blank = :only_if_you_want_it }
|
|
13
|
+
@filters.blank = true
|
|
14
|
+
assert_equal true, @filters.blank
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def test_calendar_type
|
|
18
|
+
assert_raise(ArgumentError) { @filters.calendar_type = 'monkey calendar' }
|
|
19
|
+
@filters.calendar_type = 'japan'
|
|
20
|
+
assert_equal('japan', @filters.calendar_type)
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def test_filters_items
|
|
24
|
+
assert @filters.filter_items.is_a?(Array)
|
|
25
|
+
assert_equal 2, @filters.filter_items.size
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def test_date_group_items
|
|
29
|
+
assert @filters.date_group_items.is_a?(Array)
|
|
30
|
+
assert_equal 1, @filters.date_group_items.size
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def test_apply_is_false_for_matching_values
|
|
34
|
+
keeper = Object.new
|
|
35
|
+
def keeper.value; 'a'; end
|
|
36
|
+
assert_equal false, @filters.apply(keeper)
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def test_apply_is_true_for_non_matching_values
|
|
40
|
+
hidden = Object.new
|
|
41
|
+
def hidden.value; 'b'; end
|
|
42
|
+
assert_equal true, @filters.apply(hidden)
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def test_to_xml_string
|
|
46
|
+
doc = Nokogiri::XML(@filters.to_xml_string)
|
|
47
|
+
assert_equal(1, doc.xpath('//filters[@blank="true"]').size)
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
|
|
@@ -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
|
|
|
@@ -60,7 +60,7 @@ class TestCell < Test::Unit::TestCase
|
|
|
60
60
|
assert_raise(ArgumentError, "type must be :string, :integer, :float, :date, :time, :boolean") { @c.type = :array }
|
|
61
61
|
assert_nothing_raised("type can be changed") { @c.type = :string }
|
|
62
62
|
assert_equal(@c.value, "1.0", "changing type casts the value")
|
|
63
|
-
|
|
63
|
+
assert_equal(:float, @row.add_cell(1.0/10**7).type, 'properly identify exponential floats as float type')
|
|
64
64
|
assert_equal(@row.add_cell(Time.now).type, :time, 'time should be time')
|
|
65
65
|
assert_equal(@row.add_cell(Date.today).type, :date, 'date should be date')
|
|
66
66
|
assert_equal(@row.add_cell(true).type, :boolean, 'boolean should be boolean')
|
|
@@ -88,6 +88,7 @@ class TestCell < Test::Unit::TestCase
|
|
|
88
88
|
assert_equal(@c.send(:cell_type_from_value, -1), :integer)
|
|
89
89
|
assert_equal(@c.send(:cell_type_from_value, true), :boolean)
|
|
90
90
|
assert_equal(@c.send(:cell_type_from_value, false), :boolean)
|
|
91
|
+
assert_equal(@c.send(:cell_type_from_value, 1.0/10**6), :float)
|
|
91
92
|
end
|
|
92
93
|
|
|
93
94
|
def test_cast_value
|
|
@@ -197,19 +198,17 @@ class TestCell < Test::Unit::TestCase
|
|
|
197
198
|
end
|
|
198
199
|
|
|
199
200
|
def test_merge_with_string
|
|
200
|
-
assert_equal(@c.row.worksheet.merged_cells.size, 0)
|
|
201
201
|
@c.row.add_cell 2
|
|
202
202
|
@c.row.add_cell 3
|
|
203
203
|
@c.merge "A2"
|
|
204
|
-
assert_equal(@c.row.worksheet.merged_cells.last, "A1:A2")
|
|
204
|
+
assert_equal(@c.row.worksheet.send(:merged_cells).last, "A1:A2")
|
|
205
205
|
end
|
|
206
206
|
|
|
207
207
|
def test_merge_with_cell
|
|
208
|
-
assert_equal(@c.row.worksheet.merged_cells.size, 0)
|
|
209
208
|
@c.row.add_cell 2
|
|
210
209
|
@c.row.add_cell 3
|
|
211
210
|
@c.merge @row.cells.last
|
|
212
|
-
assert_equal(@c.row.worksheet.merged_cells.last, "A1:C1")
|
|
211
|
+
assert_equal(@c.row.worksheet.send(:merged_cells).last, "A1:C1")
|
|
213
212
|
end
|
|
214
213
|
|
|
215
214
|
def test_ssti
|
|
@@ -244,9 +243,56 @@ class TestCell < Test::Unit::TestCase
|
|
|
244
243
|
c_xml = Nokogiri::XML(@c.to_xml_string(1,1))
|
|
245
244
|
assert_equal(c_xml.xpath("/c[@s=1]").size, 1)
|
|
246
245
|
end
|
|
246
|
+
|
|
247
|
+
def test_to_xml_string_nil
|
|
248
|
+
@c.value = nil
|
|
249
|
+
c_xml = Nokogiri::XML(@c.to_xml_string(1,1))
|
|
250
|
+
assert_equal(c_xml.xpath("/c[@s=1]").size, 1)
|
|
251
|
+
end
|
|
252
|
+
|
|
253
|
+
def test_to_xml_string_with_run
|
|
254
|
+
@c.b = true
|
|
255
|
+
@c.type = :string
|
|
256
|
+
@c.value = "a"
|
|
257
|
+
@c.font_name = 'arial'
|
|
258
|
+
@c.color = 'FF0000'
|
|
259
|
+
c_xml = Nokogiri::XML(@c.to_xml_string(1,1))
|
|
260
|
+
assert(c_xml.xpath("//b"))
|
|
261
|
+
end
|
|
262
|
+
def test_to_xml_string_formula
|
|
263
|
+
p = Axlsx::Package.new
|
|
264
|
+
ws = p.workbook.add_worksheet do |sheet|
|
|
265
|
+
sheet.add_row ["=IF(2+2=4,4,5)"]
|
|
266
|
+
end
|
|
267
|
+
doc = Nokogiri::XML(ws.to_xml_string)
|
|
268
|
+
assert(doc.xpath("//f[@text()='IF(2+2=4,4,5)']"))
|
|
269
|
+
|
|
270
|
+
end
|
|
271
|
+
|
|
272
|
+
def test_font_size_with_custom_style_and_no_sz
|
|
273
|
+
@c.style = @c.row.worksheet.workbook.styles.add_style :bg_color => 'FF00FF'
|
|
274
|
+
sz = @c.send(:font_size)
|
|
275
|
+
assert_equal(sz, @c.row.worksheet.workbook.styles.fonts.first.sz)
|
|
276
|
+
end
|
|
277
|
+
|
|
278
|
+
def test_font_size_with_bolding
|
|
279
|
+
@c.style = @c.row.worksheet.workbook.styles.add_style :b => true
|
|
280
|
+
assert_equal(@c.row.worksheet.workbook.styles.fonts.first.sz * 1.5, @c.send(:font_size))
|
|
281
|
+
end
|
|
282
|
+
|
|
283
|
+
def test_font_size_with_custom_sz
|
|
284
|
+
@c.style = @c.row.worksheet.workbook.styles.add_style :sz => 52
|
|
285
|
+
sz = @c.send(:font_size)
|
|
286
|
+
assert_equal(sz, 52)
|
|
287
|
+
end
|
|
288
|
+
|
|
289
|
+
def test_cell_with_sz
|
|
290
|
+
@c.sz = 25
|
|
291
|
+
assert_equal(25, @c.send(:font_size))
|
|
292
|
+
end
|
|
247
293
|
def test_to_xml
|
|
248
294
|
# TODO This could use some much more stringent testing related to the xml content generated!
|
|
249
|
-
|
|
295
|
+
@ws.add_row [Time.now, Date.today, true, 1, 1.0, "text", "=sum(A1:A2)"]
|
|
250
296
|
schema = Nokogiri::XML::Schema(File.open(Axlsx::SML_XSD))
|
|
251
297
|
doc = Nokogiri::XML(@ws.to_xml_string)
|
|
252
298
|
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
|
|