axlsx 1.2.0 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.yardopts +3 -2
- data/.yardopts_guide +19 -0
- data/CHANGELOG.md +64 -1
- data/README.md +105 -87
- data/Rakefile +0 -5
- data/examples/2010_comments.rb +17 -0
- data/examples/anchor_swapping.rb +28 -0
- data/examples/auto_filter.rb +16 -0
- data/examples/basic_charts.rb +4 -0
- data/examples/colored_links.rb +59 -0
- data/examples/conditional_formatting/example_conditional_formatting.rb +4 -2
- data/examples/example.rb +569 -258
- data/examples/ios_preview.rb +14 -0
- data/examples/page_setup.rb +11 -0
- data/examples/pivot_table.rb +39 -0
- data/examples/skydrive/real_example.rb +8 -8
- data/examples/styles.rb +66 -0
- data/examples/underline.rb +13 -0
- data/examples/wrap_text.rb +21 -0
- data/lib/axlsx/content_type/abstract_content_type.rb +32 -0
- data/lib/axlsx/content_type/content_type.rb +1 -1
- data/lib/axlsx/content_type/default.rb +6 -37
- data/lib/axlsx/content_type/override.rb +6 -38
- data/lib/axlsx/doc_props/app.rb +10 -7
- data/lib/axlsx/doc_props/core.rb +6 -1
- data/lib/axlsx/drawing/axes.rb +61 -0
- data/lib/axlsx/drawing/axis.rb +20 -17
- data/lib/axlsx/drawing/bar_3D_chart.rb +31 -22
- data/lib/axlsx/drawing/cat_axis.rb +2 -10
- data/lib/axlsx/drawing/chart.rb +33 -6
- data/lib/axlsx/drawing/d_lbls.rb +21 -31
- data/lib/axlsx/drawing/drawing.rb +11 -17
- data/lib/axlsx/drawing/graphic_frame.rb +3 -3
- data/lib/axlsx/drawing/hyperlink.rb +42 -36
- data/lib/axlsx/drawing/line_3D_chart.rb +28 -70
- data/lib/axlsx/drawing/line_chart.rb +99 -0
- data/lib/axlsx/drawing/line_series.rb +20 -2
- data/lib/axlsx/drawing/marker.rb +38 -18
- data/lib/axlsx/drawing/num_data.rb +6 -6
- data/lib/axlsx/drawing/num_data_source.rb +17 -16
- data/lib/axlsx/drawing/one_cell_anchor.rb +28 -21
- data/lib/axlsx/drawing/pic.rb +43 -45
- data/lib/axlsx/drawing/picture_locking.rb +12 -44
- data/lib/axlsx/drawing/pie_3D_chart.rb +2 -1
- data/lib/axlsx/drawing/scaling.rb +13 -13
- data/lib/axlsx/drawing/scatter_chart.rb +32 -21
- data/lib/axlsx/drawing/ser_axis.rb +15 -16
- data/lib/axlsx/drawing/series.rb +3 -6
- data/lib/axlsx/drawing/str_data.rb +3 -3
- data/lib/axlsx/drawing/str_val.rb +7 -8
- data/lib/axlsx/drawing/two_cell_anchor.rb +7 -27
- data/lib/axlsx/drawing/val_axis.rb +14 -13
- data/lib/axlsx/drawing/view_3D.rb +52 -38
- data/lib/axlsx/drawing/vml_shape.rb +20 -79
- data/lib/axlsx/package.rb +58 -28
- data/lib/axlsx/rels/relationship.rb +75 -9
- data/lib/axlsx/rels/relationships.rb +8 -1
- data/lib/axlsx/stylesheet/border.rb +29 -20
- data/lib/axlsx/stylesheet/border_pr.rb +5 -4
- data/lib/axlsx/stylesheet/cell_alignment.rb +55 -29
- data/lib/axlsx/stylesheet/cell_protection.rb +7 -4
- data/lib/axlsx/stylesheet/cell_style.rb +19 -14
- data/lib/axlsx/stylesheet/color.rb +20 -17
- data/lib/axlsx/stylesheet/dxf.rb +4 -4
- data/lib/axlsx/stylesheet/font.rb +22 -22
- data/lib/axlsx/stylesheet/gradient_fill.rb +45 -21
- data/lib/axlsx/stylesheet/num_fmt.rb +23 -14
- data/lib/axlsx/stylesheet/pattern_fill.rb +12 -21
- data/lib/axlsx/stylesheet/styles.rb +37 -22
- data/lib/axlsx/stylesheet/table_style.rb +17 -16
- data/lib/axlsx/stylesheet/table_style_element.rb +15 -11
- data/lib/axlsx/stylesheet/table_styles.rb +14 -11
- data/lib/axlsx/stylesheet/xf.rb +28 -26
- data/lib/axlsx/util/accessors.rb +64 -0
- data/lib/axlsx/util/constants.rb +127 -6
- data/lib/axlsx/util/options_parser.rb +15 -0
- data/lib/axlsx/util/serialized_attributes.rb +79 -0
- data/lib/axlsx/util/simple_typed_list.rb +50 -15
- data/lib/axlsx/util/validators.rb +51 -16
- data/lib/axlsx/version.rb +2 -2
- data/lib/axlsx/workbook/defined_name.rb +14 -59
- data/lib/axlsx/workbook/shared_strings_table.rb +13 -4
- data/lib/axlsx/workbook/workbook.rb +85 -6
- data/lib/axlsx/workbook/worksheet/auto_filter/auto_filter.rb +77 -0
- data/lib/axlsx/workbook/worksheet/auto_filter/filter_column.rb +94 -0
- data/lib/axlsx/workbook/worksheet/auto_filter/filters.rb +246 -0
- data/lib/axlsx/workbook/worksheet/break.rb +37 -0
- data/lib/axlsx/workbook/worksheet/cell.rb +109 -107
- data/lib/axlsx/workbook/worksheet/cell_serializer.rb +144 -0
- data/lib/axlsx/workbook/worksheet/cfvo.rb +15 -15
- data/lib/axlsx/workbook/worksheet/cfvos.rb +15 -0
- data/lib/axlsx/workbook/worksheet/col.rb +43 -29
- data/lib/axlsx/workbook/worksheet/col_breaks.rb +35 -0
- data/lib/axlsx/workbook/worksheet/color_scale.rb +62 -28
- data/lib/axlsx/workbook/worksheet/comment.rb +28 -37
- data/lib/axlsx/workbook/worksheet/comments.rb +3 -3
- data/lib/axlsx/workbook/worksheet/conditional_formatting.rb +11 -11
- data/lib/axlsx/workbook/worksheet/conditional_formatting_rule.rb +31 -27
- data/lib/axlsx/workbook/worksheet/data_bar.rb +75 -41
- data/lib/axlsx/workbook/worksheet/data_validation.rb +61 -62
- data/lib/axlsx/workbook/worksheet/date_time_converter.rb +6 -5
- data/lib/axlsx/workbook/worksheet/dimension.rb +0 -1
- data/lib/axlsx/workbook/worksheet/header_footer.rb +54 -0
- data/lib/axlsx/workbook/worksheet/icon_set.rb +20 -20
- data/lib/axlsx/workbook/worksheet/page_margins.rb +21 -19
- data/lib/axlsx/workbook/worksheet/page_set_up_pr.rb +44 -0
- data/lib/axlsx/workbook/worksheet/page_setup.rb +152 -23
- data/lib/axlsx/workbook/worksheet/pane.rb +48 -51
- data/lib/axlsx/workbook/worksheet/pivot_table.rb +273 -0
- data/lib/axlsx/workbook/worksheet/pivot_table_cache_definition.rb +66 -0
- data/lib/axlsx/workbook/worksheet/pivot_tables.rb +24 -0
- data/lib/axlsx/workbook/worksheet/print_options.rb +8 -30
- data/lib/axlsx/workbook/worksheet/protected_range.rb +16 -13
- data/lib/axlsx/workbook/worksheet/row.rb +59 -83
- data/lib/axlsx/workbook/worksheet/row_breaks.rb +33 -0
- data/lib/axlsx/workbook/worksheet/selection.rb +30 -38
- data/lib/axlsx/workbook/worksheet/sheet_calc_pr.rb +29 -0
- data/lib/axlsx/workbook/worksheet/sheet_format_pr.rb +60 -0
- data/lib/axlsx/workbook/worksheet/sheet_pr.rb +49 -4
- data/lib/axlsx/workbook/worksheet/sheet_protection.rb +51 -155
- data/lib/axlsx/workbook/worksheet/sheet_view.rb +68 -234
- data/lib/axlsx/workbook/worksheet/table.rb +25 -19
- data/lib/axlsx/workbook/worksheet/table_style_info.rb +51 -0
- data/lib/axlsx/workbook/worksheet/tables.rb +1 -1
- data/lib/axlsx/workbook/worksheet/worksheet.rb +174 -35
- data/lib/axlsx/workbook/worksheet/worksheet_comments.rb +6 -5
- data/lib/axlsx/workbook/worksheet/worksheet_drawing.rb +4 -10
- data/lib/axlsx/workbook/worksheet/worksheet_hyperlink.rb +74 -0
- data/lib/axlsx/workbook/worksheet/worksheet_hyperlinks.rb +38 -0
- data/lib/axlsx.rb +55 -5
- data/lib/schema/sml.xsd +4 -0
- data/test/axlsx.qcachegrind +2226 -0
- data/test/benchmark.rb +2 -3
- data/test/content_type/tc_default.rb +0 -11
- data/test/content_type/tc_override.rb +0 -13
- data/test/doc_props/tc_core.rb +7 -0
- data/test/drawing/tc_axes.rb +8 -0
- data/test/drawing/tc_axis.rb +15 -17
- data/test/drawing/tc_bar_3D_chart.rb +6 -0
- data/test/drawing/tc_cat_axis.rb +9 -9
- data/test/drawing/tc_chart.rb +20 -0
- data/test/drawing/tc_d_lbls.rb +14 -4
- data/test/drawing/tc_drawing.rb +0 -5
- data/test/drawing/tc_graphic_frame.rb +5 -3
- data/test/drawing/tc_hyperlink.rb +0 -4
- data/test/drawing/tc_line_chart.rb +39 -0
- data/test/drawing/tc_line_series.rb +8 -2
- data/test/drawing/tc_pic.rb +14 -3
- data/test/drawing/tc_ser_axis.rb +13 -12
- data/test/drawing/tc_two_cell_anchor.rb +3 -3
- data/test/drawing/tc_val_axis.rb +6 -6
- data/test/drawing/tc_vml_shape.rb +9 -3
- data/test/profile.rb +11 -21
- data/test/rels/tc_relationship.rb +32 -9
- data/test/rels/tc_relationships.rb +12 -1
- data/test/stylesheet/tc_color.rb +6 -0
- data/test/stylesheet/tc_styles.rb +15 -2
- data/test/tc_axlsx.rb +35 -2
- data/test/tc_helper.rb +7 -1
- data/test/tc_package.rb +44 -5
- data/test/util/tc_serialized_attributes.rb +19 -0
- data/test/util/tc_validators.rb +26 -1
- data/test/workbook/tc_defined_name.rb +2 -2
- data/test/workbook/tc_shared_strings_table.rb +6 -0
- data/test/workbook/tc_workbook.rb +38 -1
- data/test/workbook/worksheet/auto_filter/tc_auto_filter.rb +38 -0
- data/test/workbook/worksheet/auto_filter/tc_filter_column.rb +76 -0
- data/test/workbook/worksheet/auto_filter/tc_filters.rb +50 -0
- data/test/workbook/worksheet/tc_break.rb +49 -0
- data/test/workbook/worksheet/tc_cell.rb +40 -6
- data/test/workbook/worksheet/tc_col.rb +11 -1
- data/test/workbook/worksheet/tc_color_scale.rb +31 -2
- data/test/workbook/worksheet/tc_comment.rb +21 -6
- data/test/workbook/worksheet/tc_comments.rb +2 -2
- data/test/workbook/worksheet/tc_conditional_formatting.rb +7 -0
- data/test/workbook/worksheet/tc_data_bar.rb +7 -0
- data/test/workbook/worksheet/tc_date_time_converter.rb +3 -11
- data/test/workbook/worksheet/tc_header_footer.rb +151 -0
- data/test/workbook/worksheet/tc_page_set_up_pr.rb +15 -0
- data/test/workbook/worksheet/tc_page_setup.rb +6 -1
- data/test/workbook/worksheet/tc_pane.rb +5 -45
- data/test/workbook/worksheet/tc_pivot_table.rb +120 -0
- data/test/workbook/worksheet/tc_pivot_table_cache_definition.rb +54 -0
- data/test/workbook/worksheet/tc_row.rb +4 -4
- data/test/workbook/worksheet/tc_selection.rb +9 -48
- data/test/workbook/worksheet/tc_sheet_calc_pr.rb +18 -0
- data/test/workbook/worksheet/tc_sheet_format_pr.rb +88 -0
- data/test/workbook/worksheet/tc_sheet_pr.rb +27 -0
- data/test/workbook/worksheet/tc_sheet_view.rb +39 -39
- data/test/workbook/worksheet/{table/tc_table.rb → tc_table.rb} +8 -3
- data/test/workbook/worksheet/tc_table_style_info.rb +53 -0
- data/test/workbook/worksheet/tc_worksheet.rb +131 -16
- data/test/workbook/worksheet/tc_worksheet_hyperlink.rb +55 -0
- metadata +97 -64
- data/examples/example.xlsx +0 -0
- data/examples/example_streamed.xlsx +0 -0
- data/examples/extractive.pdf +0 -0
- data/examples/image1.gif +0 -0
- data/examples/image1.jpg +0 -0
- data/examples/image1.png +0 -0
- data/examples/no-use_autowidth.xlsx +0 -0
- data/examples/sample.png +0 -0
- data/examples/scraping_html.rb +0 -91
- data/examples/shared_strings_example.xlsx +0 -0
- data/examples/sheet_view.rb +0 -34
- data/examples/two_cell_anchor_image.rb +0 -11
- data/lib/axlsx/workbook/worksheet/auto_filter.rb +0 -34
data/test/benchmark.rb
CHANGED
|
@@ -1,14 +1,13 @@
|
|
|
1
1
|
#!/usr/bin/env ruby -s
|
|
2
|
-
# -*- coding: utf-8 -*-
|
|
3
2
|
$:.unshift "#{File.dirname(__FILE__)}/../lib"
|
|
4
3
|
require 'axlsx'
|
|
5
4
|
require 'csv'
|
|
6
5
|
require 'benchmark'
|
|
7
|
-
|
|
6
|
+
Axlsx::trust_input = true
|
|
8
7
|
row = []
|
|
9
8
|
input = (32..126).to_a.pack('U*').chars.to_a
|
|
10
9
|
20.times { row << input.shuffle.join}
|
|
11
|
-
times =
|
|
10
|
+
times = 3000
|
|
12
11
|
Benchmark.bmbm(30) do |x|
|
|
13
12
|
|
|
14
13
|
x.report('axlsx_noautowidth') {
|
|
@@ -3,14 +3,6 @@ require 'tc_helper.rb'
|
|
|
3
3
|
|
|
4
4
|
class TestDefault < Test::Unit::TestCase
|
|
5
5
|
|
|
6
|
-
def test_initialization_requires_Extension_and_ContentType
|
|
7
|
-
assert_raise(ArgumentError, "raises argument error if Extension and/or ContentType are not specified") { Axlsx::Default.new }
|
|
8
|
-
assert_raise(ArgumentError, "raises argument error if Extension and/or ContentType are not specified") { Axlsx::Default.new :Extension=>"xml" }
|
|
9
|
-
assert_raise(ArgumentError, "raises argument error if Extension and/or ContentType are not specified") { Axlsx::Default.new :ContentType=>"asdf" }
|
|
10
|
-
|
|
11
|
-
assert_nothing_raised {Axlsx::Default.new :Extension=>"foo", :ContentType=>Axlsx::XML_CT}
|
|
12
|
-
|
|
13
|
-
end
|
|
14
6
|
def test_content_type_restriction
|
|
15
7
|
assert_raise(ArgumentError, "raises argument error if invlalid ContentType is") { Axlsx::Default.new :ContentType=>"asdf" }
|
|
16
8
|
end
|
|
@@ -20,8 +12,5 @@ class TestDefault < Test::Unit::TestCase
|
|
|
20
12
|
doc = Nokogiri::XML(type.to_xml_string)
|
|
21
13
|
assert_equal(doc.xpath("Default[@ContentType='#{Axlsx::XML_CT}']").size, 1)
|
|
22
14
|
assert_equal(doc.xpath("Default[@Extension='xml']").size, 1)
|
|
23
|
-
|
|
24
15
|
end
|
|
25
|
-
|
|
26
|
-
|
|
27
16
|
end
|
|
@@ -1,16 +1,6 @@
|
|
|
1
|
-
# -*- coding: utf-8 -*-
|
|
2
1
|
require 'tc_helper.rb'
|
|
3
|
-
|
|
4
2
|
class TestOverride < Test::Unit::TestCase
|
|
5
3
|
|
|
6
|
-
def test_initialization_requires_Extension_and_ContentType
|
|
7
|
-
err = "requires PartName and ContentType options"
|
|
8
|
-
assert_raise(ArgumentError, err) { Axlsx::Override.new }
|
|
9
|
-
assert_raise(ArgumentError, err) { Axlsx::Override.new :PartName=>"xml" }
|
|
10
|
-
assert_raise(ArgumentError, err) { Axlsx::Override.new :ContentType=>"asdf" }
|
|
11
|
-
assert_nothing_raised {Axlsx::Override.new :PartName=>"foo", :ContentType=>Axlsx::CHART_CT}
|
|
12
|
-
end
|
|
13
|
-
|
|
14
4
|
def test_content_type_restriction
|
|
15
5
|
assert_raise(ArgumentError, "requires known content type") { Axlsx::Override.new :ContentType=>"asdf" }
|
|
16
6
|
end
|
|
@@ -20,8 +10,5 @@ class TestOverride < Test::Unit::TestCase
|
|
|
20
10
|
doc = Nokogiri::XML(type.to_xml_string)
|
|
21
11
|
assert_equal(doc.xpath("Override[@ContentType='#{Axlsx::CHART_CT}']").size, 1)
|
|
22
12
|
assert_equal(doc.xpath("Override[@PartName='somechart.xml']").size, 1)
|
|
23
|
-
|
|
24
13
|
end
|
|
25
|
-
|
|
26
|
-
|
|
27
14
|
end
|
data/test/doc_props/tc_core.rb
CHANGED
|
@@ -23,6 +23,13 @@ class TestCore < Test::Unit::TestCase
|
|
|
23
23
|
assert_equal(@doc.xpath('//dcterms:created').text, @time, "dcterms:created incorrect")
|
|
24
24
|
end
|
|
25
25
|
|
|
26
|
+
def test_created_as_option
|
|
27
|
+
time = Time.utc(2013, 1, 1, 12, 00)
|
|
28
|
+
c = Axlsx::Core.new :created => time
|
|
29
|
+
doc = Nokogiri::XML(c.to_xml_string)
|
|
30
|
+
assert_equal(doc.xpath('//dcterms:created').text, time.xmlschema, "dcterms:created incorrect")
|
|
31
|
+
end
|
|
32
|
+
|
|
26
33
|
def test_populates_default_name
|
|
27
34
|
assert_equal(@doc.xpath('//dc:creator').text, "axlsx", "Default name not populated")
|
|
28
35
|
end
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
require 'tc_helper.rb'
|
|
2
|
+
|
|
3
|
+
class TestAxes < Test::Unit::TestCase
|
|
4
|
+
def test_constructor_requires_cat_axis_first
|
|
5
|
+
assert_raise(ArgumentError) { Axlsx::Axes.new(:val_axis => Axlsx::ValAxis, :cat_axis => Axlsx::CatAxis) }
|
|
6
|
+
assert_nothing_raised { Axlsx::Axes.new(:cat_axis => Axlsx::CatAxis, :val_axis => Axlsx::ValAxis) }
|
|
7
|
+
end
|
|
8
|
+
end
|
data/test/drawing/tc_axis.rb
CHANGED
|
@@ -2,25 +2,22 @@ require 'tc_helper.rb'
|
|
|
2
2
|
|
|
3
3
|
class TestAxis < Test::Unit::TestCase
|
|
4
4
|
def setup
|
|
5
|
-
|
|
6
|
-
@axis = Axlsx::Axis.new 12345, 54321, :gridlines => false, :title => 'Foo'
|
|
5
|
+
@axis = Axlsx::Axis.new :gridlines => false, :title => 'Foo'
|
|
7
6
|
end
|
|
8
7
|
|
|
9
|
-
def teardown
|
|
10
|
-
end
|
|
11
8
|
|
|
12
9
|
def test_initialization
|
|
13
|
-
assert_equal(@axis.
|
|
14
|
-
assert_equal(@axis.
|
|
15
|
-
assert_equal(@axis.
|
|
10
|
+
assert_equal(@axis.ax_pos, :b, "axis position default incorrect")
|
|
11
|
+
assert_equal(@axis.tick_lbl_pos, :nextTo, "tick label position default incorrect")
|
|
12
|
+
assert_equal(@axis.tick_lbl_pos, :nextTo, "tick label position default incorrect")
|
|
16
13
|
assert_equal(@axis.crosses, :autoZero, "tick label position default incorrect")
|
|
17
14
|
assert(@axis.scaling.is_a?(Axlsx::Scaling) && @axis.scaling.orientation == :minMax, "scaling default incorrect")
|
|
18
|
-
assert_raise(ArgumentError) { Axlsx::Axis.new( -1234, 'abcd') }
|
|
19
15
|
assert_equal('Foo', @axis.title.text)
|
|
20
16
|
end
|
|
21
17
|
|
|
22
18
|
def test_color
|
|
23
19
|
@axis.color = "00FF00"
|
|
20
|
+
@axis.cross_axis = Axlsx::CatAxis.new
|
|
24
21
|
str = '<?xml version="1.0" encoding="UTF-8"?>'
|
|
25
22
|
str << '<c:chartSpace xmlns:c="' << Axlsx::XML_NS_C << '" xmlns:a="' << Axlsx::XML_NS_A << '">'
|
|
26
23
|
doc = Nokogiri::XML(@axis.to_xml_string(str))
|
|
@@ -35,15 +32,15 @@ class TestAxis < Test::Unit::TestCase
|
|
|
35
32
|
sheet.add_row ['cat', 7, 9, 10]
|
|
36
33
|
sheet.add_chart(Axlsx::Line3DChart) do |chart|
|
|
37
34
|
chart.add_series :data => sheet['B2:D2'], :labels => sheet['B1']
|
|
38
|
-
chart.
|
|
39
|
-
assert_equal('battle victories', chart.
|
|
35
|
+
chart.val_axis.title = sheet['A1']
|
|
36
|
+
assert_equal('battle victories', chart.val_axis.title.text)
|
|
40
37
|
end
|
|
41
38
|
end
|
|
42
39
|
end
|
|
43
40
|
|
|
44
41
|
def test_axis_position
|
|
45
|
-
assert_raise(ArgumentError, "requires valid axis position") { @axis.
|
|
46
|
-
assert_nothing_raised("accepts valid axis position") { @axis.
|
|
42
|
+
assert_raise(ArgumentError, "requires valid axis position") { @axis.ax_pos = :nowhere }
|
|
43
|
+
assert_nothing_raised("accepts valid axis position") { @axis.ax_pos = :r }
|
|
47
44
|
end
|
|
48
45
|
|
|
49
46
|
def test_label_rotation
|
|
@@ -55,13 +52,13 @@ class TestAxis < Test::Unit::TestCase
|
|
|
55
52
|
end
|
|
56
53
|
|
|
57
54
|
def test_tick_label_position
|
|
58
|
-
assert_raise(ArgumentError, "requires valid tick label position") { @axis.
|
|
59
|
-
assert_nothing_raised("accepts valid tick label position") { @axis.
|
|
55
|
+
assert_raise(ArgumentError, "requires valid tick label position") { @axis.tick_lbl_pos = :nowhere }
|
|
56
|
+
assert_nothing_raised("accepts valid tick label position") { @axis.tick_lbl_pos = :high }
|
|
60
57
|
end
|
|
61
58
|
|
|
62
59
|
def test_format_code
|
|
63
|
-
assert_raise(ArgumentError, "requires valid format code") { @axis.format_code =
|
|
64
|
-
assert_nothing_raised("accepts valid format code") { @axis.
|
|
60
|
+
assert_raise(ArgumentError, "requires valid format code") { @axis.format_code = :high }
|
|
61
|
+
assert_nothing_raised("accepts valid format code") { @axis.format_code = "00.##" }
|
|
65
62
|
end
|
|
66
63
|
|
|
67
64
|
def test_crosses
|
|
@@ -75,12 +72,13 @@ class TestAxis < Test::Unit::TestCase
|
|
|
75
72
|
end
|
|
76
73
|
|
|
77
74
|
def test_to_xml_string
|
|
75
|
+
@axis.cross_axis = Axlsx::CatAxis.new
|
|
78
76
|
str = '<?xml version="1.0" encoding="UTF-8"?>'
|
|
79
77
|
str << '<c:chartSpace xmlns:c="' << Axlsx::XML_NS_C << '" xmlns:a="' << Axlsx::XML_NS_A << '">'
|
|
80
78
|
doc = Nokogiri::XML(@axis.to_xml_string(str))
|
|
81
79
|
assert(doc.xpath('//a:noFill'))
|
|
82
80
|
assert(doc.xpath("//c:crosses[@val='#{@axis.crosses.to_s}']"))
|
|
83
|
-
assert(doc.xpath("//c:crossAx[@val='#{@axis.
|
|
81
|
+
assert(doc.xpath("//c:crossAx[@val='#{@axis.cross_axis.to_s}']"))
|
|
84
82
|
assert(doc.xpath("//a:bodyPr[@rot='#{@axis.label_rotation.to_s}']"))
|
|
85
83
|
assert(doc.xpath("//a:t[text()='Foo']"))
|
|
86
84
|
end
|
|
@@ -62,4 +62,10 @@ class TestBar3DChart < Test::Unit::TestCase
|
|
|
62
62
|
assert(errors.empty?, "error free validation")
|
|
63
63
|
end
|
|
64
64
|
|
|
65
|
+
def test_to_xml_string_has_axes_in_correct_order
|
|
66
|
+
str = @chart.to_xml_string
|
|
67
|
+
cat_axis_position = str.index(@chart.axes[:cat_axis].id.to_s)
|
|
68
|
+
val_axis_position = str.index(@chart.axes[:val_axis].id.to_s)
|
|
69
|
+
assert(cat_axis_position < val_axis_position, "cat_axis must occur earlier than val_axis in the XML")
|
|
70
|
+
end
|
|
65
71
|
end
|
data/test/drawing/tc_cat_axis.rb
CHANGED
|
@@ -2,15 +2,15 @@ require 'tc_helper.rb'
|
|
|
2
2
|
|
|
3
3
|
class TestCatAxis < Test::Unit::TestCase
|
|
4
4
|
def setup
|
|
5
|
-
@axis = Axlsx::CatAxis.new
|
|
5
|
+
@axis = Axlsx::CatAxis.new
|
|
6
6
|
end
|
|
7
7
|
def teardown
|
|
8
8
|
end
|
|
9
9
|
|
|
10
10
|
def test_initialization
|
|
11
11
|
assert_equal(@axis.auto, 1, "axis auto default incorrect")
|
|
12
|
-
assert_equal(@axis.
|
|
13
|
-
assert_equal(@axis.
|
|
12
|
+
assert_equal(@axis.lbl_algn, :ctr, "label align default incorrect")
|
|
13
|
+
assert_equal(@axis.lbl_offset, "100", "label offset default incorrect")
|
|
14
14
|
end
|
|
15
15
|
|
|
16
16
|
def test_auto
|
|
@@ -18,14 +18,14 @@ class TestCatAxis < Test::Unit::TestCase
|
|
|
18
18
|
assert_nothing_raised("accepts valid auto") { @axis.auto = false }
|
|
19
19
|
end
|
|
20
20
|
|
|
21
|
-
def
|
|
22
|
-
assert_raise(ArgumentError, "requires valid label alignment") { @axis.
|
|
23
|
-
assert_nothing_raised("accepts valid label alignment") { @axis.
|
|
21
|
+
def test_lbl_algn
|
|
22
|
+
assert_raise(ArgumentError, "requires valid label alignment") { @axis.lbl_algn = :nowhere }
|
|
23
|
+
assert_nothing_raised("accepts valid label alignment") { @axis.lbl_algn = :r }
|
|
24
24
|
end
|
|
25
25
|
|
|
26
|
-
def
|
|
27
|
-
assert_raise(ArgumentError, "requires valid label offset") { @axis.
|
|
28
|
-
assert_nothing_raised("accepts valid label offset") { @axis.
|
|
26
|
+
def test_lbl_offset
|
|
27
|
+
assert_raise(ArgumentError, "requires valid label offset") { @axis.lbl_offset = 'foo' }
|
|
28
|
+
assert_nothing_raised("accepts valid label offset") { @axis.lbl_offset = "20" }
|
|
29
29
|
end
|
|
30
30
|
|
|
31
31
|
end
|
data/test/drawing/tc_chart.rb
CHANGED
|
@@ -37,6 +37,21 @@ class TestChart < Test::Unit::TestCase
|
|
|
37
37
|
assert_nothing_raised { @chart.style = 2 }
|
|
38
38
|
assert_equal(@chart.style, 2)
|
|
39
39
|
end
|
|
40
|
+
|
|
41
|
+
def test_vary_colors
|
|
42
|
+
assert_equal(true, @chart.vary_colors)
|
|
43
|
+
assert_raise(ArgumentError) { @chart.vary_colors = 7 }
|
|
44
|
+
assert_nothing_raised { @chart.vary_colors = false }
|
|
45
|
+
assert_equal(false, @chart.vary_colors)
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
def test_display_blanks_as
|
|
49
|
+
assert_equal(:gap, @chart.display_blanks_as, "default is not :gap")
|
|
50
|
+
assert_raise(ArgumentError, "did not validate possible values") { @chart.display_blanks_as = :hole }
|
|
51
|
+
assert_nothing_raised { @chart.display_blanks_as = :zero }
|
|
52
|
+
assert_nothing_raised { @chart.display_blanks_as = :span }
|
|
53
|
+
assert_equal(:span, @chart.display_blanks_as)
|
|
54
|
+
end
|
|
40
55
|
|
|
41
56
|
def test_start_at
|
|
42
57
|
@chart.start_at 15, 25
|
|
@@ -87,4 +102,9 @@ class TestChart < Test::Unit::TestCase
|
|
|
87
102
|
assert(errors.empty?, "error free validation")
|
|
88
103
|
end
|
|
89
104
|
|
|
105
|
+
def test_to_xml_string_for_display_blanks_as
|
|
106
|
+
@chart.display_blanks_as = :span
|
|
107
|
+
doc = Nokogiri::XML(@chart.to_xml_string)
|
|
108
|
+
assert_equal("span", doc.xpath("//c:dispBlanksAs").attr("val").value, "did not use the display_blanks_as configuration")
|
|
109
|
+
end
|
|
90
110
|
end
|
data/test/drawing/tc_d_lbls.rb
CHANGED
|
@@ -4,19 +4,29 @@ class TestDLbls < Test::Unit::TestCase
|
|
|
4
4
|
|
|
5
5
|
def setup
|
|
6
6
|
@d_lbls = Axlsx::DLbls.new(Axlsx::Pie3DChart)
|
|
7
|
+
@boolean_attributes =[:show_legend_key,
|
|
8
|
+
:show_val,
|
|
9
|
+
:show_cat_name,
|
|
10
|
+
:show_ser_name,
|
|
11
|
+
:show_percent,
|
|
12
|
+
:show_bubble_size,
|
|
13
|
+
:show_leader_lines]
|
|
7
14
|
end
|
|
8
15
|
|
|
9
16
|
def test_initialization
|
|
10
17
|
assert_equal(:bestFit, @d_lbls.d_lbl_pos)
|
|
11
|
-
|
|
18
|
+
@boolean_attributes.each do |attr|
|
|
12
19
|
assert_equal(false, @d_lbls.send(attr))
|
|
13
20
|
end
|
|
14
21
|
end
|
|
15
22
|
|
|
16
23
|
def test_initialization_with_optoins
|
|
17
|
-
|
|
24
|
+
|
|
25
|
+
options_hash = Hash[*[@boolean_attributes.map { |name| [name, true] }] ]
|
|
26
|
+
|
|
18
27
|
d_lbls = Axlsx::DLbls.new(Axlsx::Pie3DChart, options_hash.merge( { :d_lbl_pos => :t }))
|
|
19
|
-
|
|
28
|
+
|
|
29
|
+
@boolean_attributes.each do |attr|
|
|
20
30
|
assert_equal(true, d_lbls.send(attr), "boolean attributes set by options")
|
|
21
31
|
end
|
|
22
32
|
assert_equal(:t, d_lbls.d_lbl_pos, "d_lbl_pos set by options")
|
|
@@ -27,7 +37,7 @@ class TestDLbls < Test::Unit::TestCase
|
|
|
27
37
|
end
|
|
28
38
|
|
|
29
39
|
def test_boolean_attributes
|
|
30
|
-
|
|
40
|
+
@boolean_attributes.each do |attr|
|
|
31
41
|
assert_raise(ArgumentError, "rejects non boolean value for #{attr}") { @d_lbls.send("#{attr}=", :foo) }
|
|
32
42
|
assert_nothing_raised("accepts boolean value for #{attr}") { @d_lbls.send("#{attr}=", true) }
|
|
33
43
|
assert_nothing_raised("accepts boolean value for #{attr}") { @d_lbls.send("#{attr}=", false) }
|
data/test/drawing/tc_drawing.rb
CHANGED
|
@@ -53,11 +53,6 @@ class TestDrawing < Test::Unit::TestCase
|
|
|
53
53
|
assert_equal(@ws.drawing.rels_pn, "drawings/_rels/drawing1.xml.rels")
|
|
54
54
|
end
|
|
55
55
|
|
|
56
|
-
def test_rId
|
|
57
|
-
@ws.add_chart(Axlsx::Pie3DChart)
|
|
58
|
-
assert_equal(@ws.drawing.rId, "rId1")
|
|
59
|
-
end
|
|
60
|
-
|
|
61
56
|
def test_index
|
|
62
57
|
@ws.add_chart(Axlsx::Pie3DChart)
|
|
63
58
|
assert_equal(@ws.drawing.index, @ws.workbook.drawings.index(@ws.drawing))
|
|
@@ -17,9 +17,11 @@ class TestGraphicFrame < Test::Unit::TestCase
|
|
|
17
17
|
end
|
|
18
18
|
|
|
19
19
|
def test_rId
|
|
20
|
-
assert_equal(@frame.rId
|
|
21
|
-
chart = @ws.add_chart Axlsx::Chart
|
|
22
|
-
assert_equal(chart.graphic_frame.rId, "rId2")
|
|
20
|
+
assert_equal @ws.drawing.relationships.for(@chart).Id, @frame.rId
|
|
23
21
|
end
|
|
24
22
|
|
|
23
|
+
def test_to_xml_has_correct_rId
|
|
24
|
+
doc = Nokogiri::XML(@frame.to_xml_string)
|
|
25
|
+
assert_equal @frame.rId, doc.xpath("//c:chart", doc.collect_namespaces).first["r:id"]
|
|
26
|
+
end
|
|
25
27
|
end
|
|
@@ -51,10 +51,6 @@ class TestHyperlink < Test::Unit::TestCase
|
|
|
51
51
|
assert_equal(@hyperlink.highlightClick, false )
|
|
52
52
|
end
|
|
53
53
|
|
|
54
|
-
def test_id
|
|
55
|
-
assert_equal(@hyperlink.send(:id), 2)
|
|
56
|
-
end
|
|
57
|
-
|
|
58
54
|
def test_history
|
|
59
55
|
assert_nothing_raised { @hyperlink.history = false }
|
|
60
56
|
assert_raise(ArgumentError) {@hyperlink.history = "bob"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
require 'tc_helper.rb'
|
|
2
|
+
|
|
3
|
+
class TestLineChart < Test::Unit::TestCase
|
|
4
|
+
|
|
5
|
+
def setup
|
|
6
|
+
@p = Axlsx::Package.new
|
|
7
|
+
ws = @p.workbook.add_worksheet
|
|
8
|
+
@row = ws.add_row ["one", 1, Time.now]
|
|
9
|
+
@chart = ws.add_chart Axlsx::LineChart, :title => "fishery"
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def teardown
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def test_initialization
|
|
16
|
+
assert_equal(@chart.grouping, :standard, "grouping defualt incorrect")
|
|
17
|
+
assert_equal(@chart.series_type, Axlsx::LineSeries, "series type incorrect")
|
|
18
|
+
assert(@chart.cat_axis.is_a?(Axlsx::CatAxis), "category axis not created")
|
|
19
|
+
assert(@chart.val_axis.is_a?(Axlsx::ValAxis), "value access not created")
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def test_grouping
|
|
23
|
+
assert_raise(ArgumentError, "require valid grouping") { @chart.grouping = :inverted }
|
|
24
|
+
assert_nothing_raised("allow valid grouping") { @chart.grouping = :stacked }
|
|
25
|
+
assert(@chart.grouping == :stacked)
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def test_to_xml
|
|
29
|
+
schema = Nokogiri::XML::Schema(File.open(Axlsx::DRAWING_XSD))
|
|
30
|
+
doc = Nokogiri::XML(@chart.to_xml_string)
|
|
31
|
+
errors = []
|
|
32
|
+
schema.validate(doc).each do |error|
|
|
33
|
+
errors.push error
|
|
34
|
+
puts error.message
|
|
35
|
+
end
|
|
36
|
+
assert(errors.empty?, "error free validation")
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
end
|
|
@@ -6,7 +6,7 @@ class TestLineSeries < Test::Unit::TestCase
|
|
|
6
6
|
p = Axlsx::Package.new
|
|
7
7
|
@ws = p.workbook.add_worksheet :name=>"hmmm"
|
|
8
8
|
chart = @ws.add_chart Axlsx::Line3DChart, :title => "fishery"
|
|
9
|
-
@series = chart.add_series :data=>[0,1,2], :labels=>["zero", "one", "two"], :title=>"bob", :color => "#FF0000"
|
|
9
|
+
@series = chart.add_series :data=>[0,1,2], :labels=>["zero", "one", "two"], :title=>"bob", :color => "#FF0000", :show_marker => true
|
|
10
10
|
end
|
|
11
11
|
|
|
12
12
|
def test_initialize
|
|
@@ -15,10 +15,16 @@ class TestLineSeries < Test::Unit::TestCase
|
|
|
15
15
|
assert_equal(@series.data.class, Axlsx::NumDataSource)
|
|
16
16
|
|
|
17
17
|
end
|
|
18
|
-
|
|
18
|
+
|
|
19
|
+
def test_show_marker
|
|
20
|
+
assert_equal(true, @series.show_marker)
|
|
21
|
+
@series.show_marker = false
|
|
22
|
+
assert_equal(false, @series.show_marker)
|
|
23
|
+
end
|
|
19
24
|
def test_to_xml_string
|
|
20
25
|
doc = Nokogiri::XML(@series.to_xml_string)
|
|
21
26
|
assert(doc.xpath("//srgbClr[@val='#{@series.color}']"))
|
|
27
|
+
assert(doc.xpath("//marker"))
|
|
22
28
|
end
|
|
23
29
|
#TODO serialization testing
|
|
24
30
|
end
|
data/test/drawing/tc_pic.rb
CHANGED
|
@@ -6,6 +6,7 @@ class TestPic < Test::Unit::TestCase
|
|
|
6
6
|
@p = Axlsx::Package.new
|
|
7
7
|
ws = @p.workbook.add_worksheet
|
|
8
8
|
@test_img = File.dirname(__FILE__) + "/../../examples/image1.jpeg"
|
|
9
|
+
@test_img_up = File.dirname(__FILE__) + "/../../examples/IMAGE1UP.JPEG"
|
|
9
10
|
@image = ws.add_image :image_src => @test_img, :hyperlink => 'https://github.com/randym', :tooltip => "What's up doc?"
|
|
10
11
|
end
|
|
11
12
|
|
|
@@ -21,21 +22,21 @@ class TestPic < Test::Unit::TestCase
|
|
|
21
22
|
def test_anchor_swapping
|
|
22
23
|
#swap from one cell to two cell when end_at is specified
|
|
23
24
|
assert(@image.anchor.is_a?(Axlsx::OneCellAnchor))
|
|
24
|
-
start_at = @image.anchor.from
|
|
25
|
+
start_at = @image.anchor.from
|
|
25
26
|
@image.end_at 10,5
|
|
26
27
|
assert(@image.anchor.is_a?(Axlsx::TwoCellAnchor))
|
|
27
28
|
assert_equal(start_at.col, @image.anchor.from.col)
|
|
28
29
|
assert_equal(start_at.row, @image.anchor.from.row)
|
|
29
30
|
assert_equal(10,@image.anchor.to.col)
|
|
30
31
|
assert_equal(5, @image.anchor.to.row)
|
|
31
|
-
|
|
32
|
+
|
|
32
33
|
#swap from two cell to one cell when width or height are specified
|
|
33
34
|
@image.width = 200
|
|
34
35
|
assert(@image.anchor.is_a?(Axlsx::OneCellAnchor))
|
|
35
36
|
assert_equal(start_at.col, @image.anchor.from.col)
|
|
36
37
|
assert_equal(start_at.row, @image.anchor.from.row)
|
|
37
38
|
assert_equal(200, @image.width)
|
|
38
|
-
|
|
39
|
+
|
|
39
40
|
end
|
|
40
41
|
def test_hyperlink
|
|
41
42
|
assert_equal(@image.hyperlink.href, "https://github.com/randym")
|
|
@@ -76,6 +77,10 @@ class TestPic < Test::Unit::TestCase
|
|
|
76
77
|
assert_equal(@image.image_src, @test_img)
|
|
77
78
|
end
|
|
78
79
|
|
|
80
|
+
def test_image_src_downcase
|
|
81
|
+
assert_nothing_raised { @image.image_src = @test_img_up }
|
|
82
|
+
end
|
|
83
|
+
|
|
79
84
|
def test_descr
|
|
80
85
|
assert_raise(ArgumentError) { @image.descr = 49 }
|
|
81
86
|
assert_nothing_raised { @image.descr = "test" }
|
|
@@ -93,4 +98,10 @@ class TestPic < Test::Unit::TestCase
|
|
|
93
98
|
assert(errors.empty?, "error free validation")
|
|
94
99
|
end
|
|
95
100
|
|
|
101
|
+
def test_to_xml_has_correct_r_id
|
|
102
|
+
r_id = @image.anchor.drawing.relationships.for(@image).Id
|
|
103
|
+
doc = Nokogiri::XML(@image.anchor.drawing.to_xml_string)
|
|
104
|
+
assert_equal r_id, doc.xpath("//a:blip").first["r:embed"]
|
|
105
|
+
end
|
|
106
|
+
|
|
96
107
|
end
|
data/test/drawing/tc_ser_axis.rb
CHANGED
|
@@ -2,29 +2,30 @@ require 'tc_helper.rb'
|
|
|
2
2
|
|
|
3
3
|
class TestSerAxis < Test::Unit::TestCase
|
|
4
4
|
def setup
|
|
5
|
-
@axis = Axlsx::SerAxis.new
|
|
5
|
+
@axis = Axlsx::SerAxis.new
|
|
6
6
|
end
|
|
7
|
+
|
|
7
8
|
def teardown
|
|
8
9
|
end
|
|
9
10
|
|
|
10
11
|
def test_options
|
|
11
|
-
a = Axlsx::SerAxis.new
|
|
12
|
-
assert_equal(a.
|
|
13
|
-
assert_equal(a.
|
|
12
|
+
a = Axlsx::SerAxis.new(:tick_lbl_skip => 9, :tick_mark_skip => 7)
|
|
13
|
+
assert_equal(a.tick_lbl_skip, 9)
|
|
14
|
+
assert_equal(a.tick_mark_skip, 7)
|
|
14
15
|
end
|
|
15
16
|
|
|
16
17
|
|
|
17
|
-
def
|
|
18
|
-
assert_raise(ArgumentError, "requires valid
|
|
19
|
-
assert_nothing_raised("accepts valid
|
|
20
|
-
assert_equal(@axis.
|
|
18
|
+
def test_tick_lbl_skip
|
|
19
|
+
assert_raise(ArgumentError, "requires valid tick_lbl_skip") { @axis.tick_lbl_skip = -1 }
|
|
20
|
+
assert_nothing_raised("accepts valid tick_lbl_skip") { @axis.tick_lbl_skip = 1 }
|
|
21
|
+
assert_equal(@axis.tick_lbl_skip, 1)
|
|
21
22
|
end
|
|
22
23
|
|
|
23
24
|
|
|
24
|
-
def
|
|
25
|
-
assert_raise(ArgumentError, "requires valid
|
|
26
|
-
assert_nothing_raised("accepts valid
|
|
27
|
-
assert_equal(@axis.
|
|
25
|
+
def test_tick_mark_skip
|
|
26
|
+
assert_raise(ArgumentError, "requires valid tick_mark_skip") { @axis.tick_mark_skip = :my_eyes }
|
|
27
|
+
assert_nothing_raised("accepts valid tick_mark_skip") { @axis.tick_mark_skip = 2 }
|
|
28
|
+
assert_equal(@axis.tick_mark_skip, 2)
|
|
28
29
|
end
|
|
29
30
|
|
|
30
31
|
end
|
|
@@ -10,9 +10,6 @@ class TestTwoCellAnchor < Test::Unit::TestCase
|
|
|
10
10
|
@anchor = chart.graphic_frame.anchor
|
|
11
11
|
end
|
|
12
12
|
|
|
13
|
-
def teardown
|
|
14
|
-
end
|
|
15
|
-
|
|
16
13
|
def test_initialization
|
|
17
14
|
assert(@anchor.from.col == 0)
|
|
18
15
|
assert(@anchor.from.row == 0)
|
|
@@ -20,6 +17,9 @@ class TestTwoCellAnchor < Test::Unit::TestCase
|
|
|
20
17
|
assert(@anchor.to.row == 10)
|
|
21
18
|
end
|
|
22
19
|
|
|
20
|
+
def test_index
|
|
21
|
+
assert_equal(@anchor.index, @anchor.drawing.anchors.index(@anchor))
|
|
22
|
+
end
|
|
23
23
|
|
|
24
24
|
def test_options
|
|
25
25
|
assert_raise(ArgumentError, 'invalid start_at') { @ws.add_chart Axlsx::Chart, :start_at=>"1" }
|
data/test/drawing/tc_val_axis.rb
CHANGED
|
@@ -2,23 +2,23 @@ require 'tc_helper.rb'
|
|
|
2
2
|
|
|
3
3
|
class TestValAxis < Test::Unit::TestCase
|
|
4
4
|
def setup
|
|
5
|
-
@axis = Axlsx::ValAxis.new
|
|
5
|
+
@axis = Axlsx::ValAxis.new
|
|
6
6
|
end
|
|
7
7
|
def teardown
|
|
8
8
|
end
|
|
9
9
|
|
|
10
10
|
def test_initialization
|
|
11
|
-
assert_equal(@axis.
|
|
11
|
+
assert_equal(@axis.cross_between, :between, "axis crossBetween default incorrect")
|
|
12
12
|
end
|
|
13
13
|
|
|
14
14
|
def test_options
|
|
15
|
-
a = Axlsx::ValAxis.new
|
|
16
|
-
assert_equal(a.
|
|
15
|
+
a = Axlsx::ValAxis.new(:cross_between => :midCat)
|
|
16
|
+
assert_equal(:midCat, a.cross_between)
|
|
17
17
|
end
|
|
18
18
|
|
|
19
19
|
def test_crossBetween
|
|
20
|
-
assert_raise(ArgumentError, "requires valid crossBetween") { @axis.
|
|
21
|
-
assert_nothing_raised("accepts valid crossBetween") { @axis.
|
|
20
|
+
assert_raise(ArgumentError, "requires valid crossBetween") { @axis.cross_between = :my_eyes }
|
|
21
|
+
assert_nothing_raised("accepts valid crossBetween") { @axis.cross_between = :midCat }
|
|
22
22
|
end
|
|
23
23
|
|
|
24
24
|
end
|
|
@@ -6,8 +6,8 @@ class TestVmlShape < Test::Unit::TestCase
|
|
|
6
6
|
p = Axlsx::Package.new
|
|
7
7
|
wb = p.workbook
|
|
8
8
|
@ws = wb.add_worksheet
|
|
9
|
-
@ws.add_comment :ref => 'A1', :text => 'penut machine', :author => 'crank'
|
|
10
|
-
@ws.add_comment :ref => 'C3', :text => 'rust bucket', :author => 'PO'
|
|
9
|
+
@ws.add_comment :ref => 'A1', :text => 'penut machine', :author => 'crank', :visible => true
|
|
10
|
+
@ws.add_comment :ref => 'C3', :text => 'rust bucket', :author => 'PO', :visible => false
|
|
11
11
|
@comments = @ws.comments
|
|
12
12
|
end
|
|
13
13
|
|
|
@@ -84,11 +84,17 @@ class TestVmlShape < Test::Unit::TestCase
|
|
|
84
84
|
assert(shape.top_row == 3)
|
|
85
85
|
assert_raise(ArgumentError) { shape.top_row = [] }
|
|
86
86
|
end
|
|
87
|
-
|
|
87
|
+
def test_visible
|
|
88
|
+
shape = @comments.first.vml_shape
|
|
89
|
+
shape.visible = false
|
|
90
|
+
assert(shape.visible == false)
|
|
91
|
+
assert_raise(ArgumentError) { shape.visible = 'foo' }
|
|
92
|
+
end
|
|
88
93
|
def test_to_xml_string
|
|
89
94
|
str = @comments.vml_drawing.to_xml_string()
|
|
90
95
|
doc = Nokogiri::XML(str)
|
|
91
96
|
assert_equal(doc.xpath("//v:shape").size, 2)
|
|
97
|
+
assert_equal(1, doc.xpath("//x:Visible").size, 'ClientData/x:Visible element rendering')
|
|
92
98
|
@comments.each do |comment|
|
|
93
99
|
shape = comment.vml_shape
|
|
94
100
|
assert(doc.xpath("//v:shape/x:ClientData/x:Row[text()='#{shape.row}']").size == 1)
|
data/test/profile.rb
CHANGED
|
@@ -1,34 +1,24 @@
|
|
|
1
1
|
#!/usr/bin/env ruby -s
|
|
2
|
-
# -*- coding: utf-8 -*-
|
|
3
|
-
|
|
4
|
-
# Usage:
|
|
5
|
-
# > ruby test/profile.rb
|
|
6
|
-
# > pprof.rb --gif /tmp/axlsx_noautowidth > /tmp/axlsx_noautowidth.gif
|
|
7
|
-
# > open /tmp/axlsx_noautowidth.gif
|
|
8
2
|
|
|
9
3
|
$:.unshift "#{File.dirname(__FILE__)}/../lib"
|
|
10
4
|
require 'axlsx'
|
|
11
|
-
require '
|
|
12
|
-
|
|
13
|
-
#
|
|
14
|
-
require 'perftools'
|
|
5
|
+
require 'ruby-prof'
|
|
6
|
+
#RubyProf.measure_mode = RubyProf::MEMORY
|
|
7
|
+
#
|
|
15
8
|
row = []
|
|
9
|
+
# Taking worst case scenario of all string data
|
|
16
10
|
input = (32..126).to_a.pack('U*').chars.to_a
|
|
17
11
|
20.times { row << input.shuffle.join}
|
|
18
|
-
times = 3000
|
|
19
12
|
|
|
20
|
-
|
|
13
|
+
profile = RubyProf.profile do
|
|
21
14
|
p = Axlsx::Package.new
|
|
22
|
-
p.
|
|
23
|
-
|
|
24
|
-
wb = p.workbook
|
|
25
|
-
|
|
26
|
-
#A Simple Workbook
|
|
27
|
-
|
|
28
|
-
wb.add_worksheet do |sheet|
|
|
29
|
-
times.times do
|
|
15
|
+
p.workbook.add_worksheet do |sheet|
|
|
16
|
+
10000.times do
|
|
30
17
|
sheet << row
|
|
31
18
|
end
|
|
32
19
|
end
|
|
33
|
-
p.
|
|
20
|
+
p.to_stream
|
|
34
21
|
end
|
|
22
|
+
|
|
23
|
+
printer = RubyProf::FlatPrinter.new(profile)
|
|
24
|
+
printer.print(STDOUT, {})
|