caxlsx 2.0.2 → 3.0.4
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 +4 -4
- data/CHANGELOG.md +125 -30
- data/README.md +65 -151
- data/Rakefile +9 -11
- data/examples/{image1.jpeg → assets/image1.jpeg} +0 -0
- data/examples/generate.rb +15 -0
- data/lib/axlsx.rb +35 -17
- data/lib/axlsx/content_type/abstract_content_type.rb +1 -1
- data/lib/axlsx/content_type/content_type.rb +1 -1
- data/lib/axlsx/doc_props/app.rb +1 -1
- data/lib/axlsx/doc_props/core.rb +5 -5
- data/lib/axlsx/drawing/area_chart.rb +99 -0
- data/lib/axlsx/drawing/area_series.rb +110 -0
- data/lib/axlsx/drawing/axes.rb +1 -1
- data/lib/axlsx/drawing/axis.rb +12 -9
- data/lib/axlsx/drawing/bar_3D_chart.rb +13 -13
- data/lib/axlsx/drawing/bar_chart.rb +143 -0
- data/lib/axlsx/drawing/bar_series.rb +12 -14
- data/lib/axlsx/drawing/bubble_chart.rb +59 -0
- data/lib/axlsx/drawing/bubble_series.rb +63 -0
- data/lib/axlsx/drawing/cat_axis.rb +5 -5
- data/lib/axlsx/drawing/chart.rb +52 -8
- data/lib/axlsx/drawing/d_lbls.rb +4 -4
- data/lib/axlsx/drawing/drawing.rb +6 -1
- data/lib/axlsx/drawing/graphic_frame.rb +3 -3
- data/lib/axlsx/drawing/hyperlink.rb +1 -3
- data/lib/axlsx/drawing/line_3D_chart.rb +2 -2
- data/lib/axlsx/drawing/line_chart.rb +10 -10
- data/lib/axlsx/drawing/line_series.rb +32 -3
- data/lib/axlsx/drawing/marker.rb +1 -1
- data/lib/axlsx/drawing/num_data.rb +4 -4
- data/lib/axlsx/drawing/num_data_source.rb +6 -6
- data/lib/axlsx/drawing/num_val.rb +3 -1
- data/lib/axlsx/drawing/one_cell_anchor.rb +3 -2
- data/lib/axlsx/drawing/pic.rb +25 -19
- data/lib/axlsx/drawing/picture_locking.rb +1 -3
- data/lib/axlsx/drawing/pie_3D_chart.rb +5 -6
- data/lib/axlsx/drawing/pie_series.rb +6 -6
- data/lib/axlsx/drawing/scaling.rb +6 -6
- data/lib/axlsx/drawing/scatter_chart.rb +10 -10
- data/lib/axlsx/drawing/scatter_series.rb +40 -7
- data/lib/axlsx/drawing/ser_axis.rb +2 -2
- data/lib/axlsx/drawing/series.rb +3 -3
- data/lib/axlsx/drawing/series_title.rb +4 -2
- data/lib/axlsx/drawing/str_data.rb +3 -3
- data/lib/axlsx/drawing/str_val.rb +3 -1
- data/lib/axlsx/drawing/title.rb +23 -4
- data/lib/axlsx/drawing/two_cell_anchor.rb +6 -1
- data/lib/axlsx/drawing/val_axis.rb +1 -1
- data/lib/axlsx/drawing/view_3D.rb +2 -2
- data/lib/axlsx/drawing/vml_drawing.rb +1 -1
- data/lib/axlsx/package.rb +58 -47
- data/lib/axlsx/rels/relationship.rb +27 -26
- data/lib/axlsx/rels/relationships.rb +7 -4
- data/lib/axlsx/stylesheet/border_pr.rb +2 -2
- data/lib/axlsx/stylesheet/cell_alignment.rb +1 -3
- data/lib/axlsx/stylesheet/cell_protection.rb +1 -3
- data/lib/axlsx/stylesheet/cell_style.rb +1 -3
- data/lib/axlsx/stylesheet/color.rb +1 -3
- data/lib/axlsx/stylesheet/font.rb +11 -3
- data/lib/axlsx/stylesheet/gradient_stop.rb +1 -1
- data/lib/axlsx/stylesheet/num_fmt.rb +10 -3
- data/lib/axlsx/stylesheet/pattern_fill.rb +1 -1
- data/lib/axlsx/stylesheet/styles.rb +7 -7
- data/lib/axlsx/stylesheet/table_style_element.rb +1 -3
- data/lib/axlsx/util/accessors.rb +6 -6
- data/lib/axlsx/util/constants.rb +108 -99
- data/lib/axlsx/util/mime_type_utils.rb +11 -0
- data/lib/axlsx/util/options_parser.rb +2 -1
- data/lib/axlsx/util/serialized_attributes.rb +16 -6
- data/lib/axlsx/util/simple_typed_list.rb +28 -52
- data/lib/axlsx/util/storage.rb +4 -4
- data/lib/axlsx/util/validators.rb +31 -19
- data/lib/axlsx/util/zip_command.rb +73 -0
- data/lib/axlsx/version.rb +1 -1
- data/lib/axlsx/workbook/defined_name.rb +11 -12
- data/lib/axlsx/workbook/defined_names.rb +2 -2
- data/lib/axlsx/workbook/shared_strings_table.rb +5 -5
- data/lib/axlsx/workbook/workbook.rb +36 -20
- data/lib/axlsx/workbook/workbook_view.rb +80 -0
- data/lib/axlsx/workbook/workbook_views.rb +22 -0
- data/lib/axlsx/workbook/worksheet/auto_filter/auto_filter.rb +2 -2
- data/lib/axlsx/workbook/worksheet/auto_filter/filters.rb +1 -3
- data/lib/axlsx/workbook/worksheet/break.rb +1 -3
- data/lib/axlsx/workbook/worksheet/cell.rb +164 -75
- data/lib/axlsx/workbook/worksheet/cell_serializer.rb +63 -43
- data/lib/axlsx/workbook/worksheet/cfvo.rb +1 -3
- data/lib/axlsx/workbook/worksheet/cfvos.rb +4 -1
- data/lib/axlsx/workbook/worksheet/col.rb +14 -13
- data/lib/axlsx/workbook/worksheet/col_breaks.rb +2 -2
- data/lib/axlsx/workbook/worksheet/cols.rb +5 -2
- data/lib/axlsx/workbook/worksheet/comment.rb +5 -6
- data/lib/axlsx/workbook/worksheet/comments.rb +9 -12
- data/lib/axlsx/workbook/worksheet/conditional_formatting.rb +1 -1
- data/lib/axlsx/workbook/worksheet/conditional_formatting_rule.rb +1 -1
- data/lib/axlsx/workbook/worksheet/data_bar.rb +4 -6
- data/lib/axlsx/workbook/worksheet/data_validation.rb +8 -6
- data/lib/axlsx/workbook/worksheet/dimension.rb +2 -2
- data/lib/axlsx/workbook/worksheet/header_footer.rb +6 -8
- data/lib/axlsx/workbook/worksheet/icon_set.rb +3 -5
- data/lib/axlsx/workbook/worksheet/merged_cells.rb +4 -2
- data/lib/axlsx/workbook/worksheet/outline_pr.rb +33 -0
- data/lib/axlsx/workbook/worksheet/page_margins.rb +1 -3
- data/lib/axlsx/workbook/worksheet/page_set_up_pr.rb +1 -1
- data/lib/axlsx/workbook/worksheet/page_setup.rb +21 -23
- data/lib/axlsx/workbook/worksheet/pane.rb +1 -3
- data/lib/axlsx/workbook/worksheet/pivot_table.rb +44 -28
- data/lib/axlsx/workbook/worksheet/pivot_table_cache_definition.rb +4 -4
- data/lib/axlsx/workbook/worksheet/print_options.rb +1 -3
- data/lib/axlsx/workbook/worksheet/protected_range.rb +1 -3
- data/lib/axlsx/workbook/worksheet/protected_ranges.rb +5 -2
- data/lib/axlsx/workbook/worksheet/rich_text.rb +55 -0
- data/lib/axlsx/workbook/worksheet/rich_text_run.rb +250 -0
- data/lib/axlsx/workbook/worksheet/row.rb +42 -52
- data/lib/axlsx/workbook/worksheet/row_breaks.rb +2 -2
- data/lib/axlsx/workbook/worksheet/selection.rb +1 -3
- data/lib/axlsx/workbook/worksheet/sheet_data.rb +3 -1
- data/lib/axlsx/workbook/worksheet/sheet_pr.rb +21 -3
- data/lib/axlsx/workbook/worksheet/sheet_protection.rb +1 -3
- data/lib/axlsx/workbook/worksheet/table.rb +6 -6
- data/lib/axlsx/workbook/worksheet/table_style_info.rb +1 -3
- data/lib/axlsx/workbook/worksheet/tables.rb +4 -1
- data/lib/axlsx/workbook/worksheet/worksheet.rb +76 -81
- data/lib/axlsx/workbook/worksheet/worksheet_drawing.rb +10 -10
- data/lib/axlsx/workbook/worksheet/worksheet_hyperlinks.rb +3 -3
- data/lib/caxlsx.rb +2 -0
- data/test/drawing/tc_area_chart.rb +39 -0
- data/test/drawing/tc_area_series.rb +71 -0
- data/test/drawing/tc_axis.rb +27 -0
- data/test/drawing/tc_bar_chart.rb +71 -0
- data/test/drawing/tc_bubble_chart.rb +44 -0
- data/test/drawing/tc_bubble_series.rb +21 -0
- data/test/drawing/tc_chart.rb +23 -10
- data/test/drawing/tc_data_source.rb +6 -0
- data/test/drawing/tc_drawing.rb +4 -4
- data/test/drawing/tc_hyperlink.rb +1 -1
- data/test/drawing/tc_line_chart.rb +5 -5
- data/test/drawing/tc_line_series.rb +47 -6
- data/test/drawing/tc_one_cell_anchor.rb +1 -1
- data/test/drawing/tc_pic.rb +11 -15
- data/test/drawing/tc_pie_series.rb +2 -1
- data/test/drawing/tc_scatter_series.rb +36 -1
- data/test/drawing/tc_series_title.rb +21 -0
- data/test/drawing/tc_str_val.rb +9 -0
- data/test/drawing/tc_title.rb +21 -0
- data/test/fixtures/image1.gif +0 -0
- data/test/fixtures/image1.jpeg +0 -0
- data/test/fixtures/image1.jpg +0 -0
- data/test/fixtures/image1.png +0 -0
- data/test/fixtures/image1_fake.jpg +0 -0
- data/test/rels/tc_relationship.rb +8 -0
- data/test/stylesheet/tc_font.rb +14 -2
- data/test/stylesheet/tc_styles.rb +29 -3
- data/test/tc_axlsx.rb +37 -0
- data/test/tc_helper.rb +2 -0
- data/test/tc_package.rb +50 -13
- data/test/util/tc_mime_type_utils.rb +13 -0
- data/test/util/tc_simple_typed_list.rb +2 -3
- data/test/util/tc_validators.rb +35 -11
- data/test/workbook/tc_defined_name.rb +12 -4
- data/test/workbook/tc_shared_strings_table.rb +16 -1
- data/test/workbook/tc_workbook.rb +38 -3
- data/test/workbook/tc_workbook_view.rb +50 -0
- data/test/workbook/worksheet/auto_filter/tc_filters.rb +1 -1
- data/test/workbook/worksheet/tc_break.rb +1 -1
- data/test/workbook/worksheet/tc_cell.rb +143 -9
- data/test/workbook/worksheet/tc_col.rb +18 -3
- data/test/workbook/worksheet/tc_conditional_formatting.rb +2 -2
- data/test/workbook/worksheet/tc_data_bar.rb +1 -1
- data/test/workbook/worksheet/tc_data_validation.rb +11 -11
- data/test/workbook/worksheet/tc_header_footer.rb +2 -2
- data/test/workbook/worksheet/tc_icon_set.rb +1 -1
- data/test/workbook/worksheet/tc_outline_pr.rb +19 -0
- data/test/workbook/worksheet/tc_page_setup.rb +3 -3
- data/test/workbook/worksheet/tc_pivot_table.rb +21 -6
- data/test/workbook/worksheet/tc_print_options.rb +1 -1
- data/test/workbook/worksheet/tc_rich_text.rb +44 -0
- data/test/workbook/worksheet/tc_rich_text_run.rb +173 -0
- data/test/workbook/worksheet/tc_row.rb +24 -2
- data/test/workbook/worksheet/tc_sheet_calc_pr.rb +1 -1
- data/test/workbook/worksheet/tc_sheet_format_pr.rb +4 -4
- data/test/workbook/worksheet/tc_sheet_pr.rb +26 -4
- data/test/workbook/worksheet/tc_sheet_protection.rb +5 -5
- data/test/workbook/worksheet/tc_sheet_view.rb +4 -4
- data/test/workbook/worksheet/tc_table.rb +2 -3
- data/test/workbook/worksheet/tc_worksheet.rb +123 -60
- metadata +180 -128
- data/examples/2010_comments.rb +0 -17
- data/examples/anchor_swapping.rb +0 -28
- data/examples/auto_filter.rb +0 -16
- data/examples/basic_charts.rb +0 -58
- data/examples/chart_colors.rb +0 -88
- data/examples/colored_links.rb +0 -59
- data/examples/conditional_formatting/example_conditional_formatting.rb +0 -74
- data/examples/conditional_formatting/getting_barred.rb +0 -37
- data/examples/conditional_formatting/hitting_the_high_notes.rb +0 -37
- data/examples/conditional_formatting/scaled_colors.rb +0 -39
- data/examples/conditional_formatting/stop_and_go.rb +0 -37
- data/examples/data_validation.rb +0 -50
- data/examples/example.rb +0 -777
- data/examples/extractive.rb +0 -45
- data/examples/ios_preview.rb +0 -14
- data/examples/page_setup.rb +0 -11
- data/examples/pivot_table.rb +0 -39
- data/examples/sheet_protection.rb +0 -10
- data/examples/skydrive/real_example.rb +0 -63
- data/examples/styles.rb +0 -66
- data/examples/underline.rb +0 -13
- data/examples/wrap_text.rb +0 -21
- data/lib/axlsx/util/parser.rb +0 -44
data/test/drawing/tc_drawing.rb
CHANGED
|
@@ -23,7 +23,7 @@ class TestDrawing < Test::Unit::TestCase
|
|
|
23
23
|
end
|
|
24
24
|
|
|
25
25
|
def test_add_image
|
|
26
|
-
src = File.dirname(__FILE__) + "
|
|
26
|
+
src = File.dirname(__FILE__) + "/../fixtures/image1.jpeg"
|
|
27
27
|
image = @ws.add_image(:image_src => src, :start_at=>[0,0], :width=>600, :height=>400)
|
|
28
28
|
assert(@ws.drawing.anchors.last.is_a?(Axlsx::OneCellAnchor))
|
|
29
29
|
assert(image.is_a?(Axlsx::Pic))
|
|
@@ -31,7 +31,7 @@ class TestDrawing < Test::Unit::TestCase
|
|
|
31
31
|
assert_equal(400, image.height)
|
|
32
32
|
end
|
|
33
33
|
def test_add_two_cell_anchor_image
|
|
34
|
-
src = File.dirname(__FILE__) + "
|
|
34
|
+
src = File.dirname(__FILE__) + "/../fixtures/image1.jpeg"
|
|
35
35
|
image = @ws.add_image(:image_src => src, :start_at=>[0,0], :end_at => [15,0])
|
|
36
36
|
assert(@ws.drawing.anchors.last.is_a?(Axlsx::TwoCellAnchor))
|
|
37
37
|
assert(image.is_a?(Axlsx::Pic))
|
|
@@ -59,9 +59,9 @@ class TestDrawing < Test::Unit::TestCase
|
|
|
59
59
|
end
|
|
60
60
|
|
|
61
61
|
def test_relationships
|
|
62
|
-
|
|
62
|
+
@ws.add_chart(Axlsx::Pie3DChart, :title=>"bob", :start_at=>[0,0], :end_at=>[1,1])
|
|
63
63
|
assert_equal(@ws.drawing.relationships.size, 1, "adding a chart adds a relationship")
|
|
64
|
-
|
|
64
|
+
@ws.add_chart(Axlsx::Pie3DChart, :title=>"nancy", :start_at=>[1,5], :end_at=>[5,10])
|
|
65
65
|
assert_equal(@ws.drawing.relationships.size, 2, "adding a chart adds a relationship")
|
|
66
66
|
end
|
|
67
67
|
|
|
@@ -5,7 +5,7 @@ class TestHyperlink < Test::Unit::TestCase
|
|
|
5
5
|
def setup
|
|
6
6
|
@p = Axlsx::Package.new
|
|
7
7
|
ws = @p.workbook.add_worksheet
|
|
8
|
-
@test_img = File.dirname(__FILE__) + "
|
|
8
|
+
@test_img = File.dirname(__FILE__) + "/../fixtures/image1.jpeg"
|
|
9
9
|
@image = ws.add_image :image_src => @test_img, :hyperlink => "http://axlsx.blogspot.com"
|
|
10
10
|
@hyperlink = @image.hyperlink
|
|
11
11
|
end
|
|
@@ -19,11 +19,11 @@ class TestLineChart < Test::Unit::TestCase
|
|
|
19
19
|
assert(@chart.val_axis.is_a?(Axlsx::ValAxis), "value access not created")
|
|
20
20
|
end
|
|
21
21
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
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
27
|
|
|
28
28
|
def test_to_xml
|
|
29
29
|
schema = Nokogiri::XML::Schema(File.open(Axlsx::DRAWING_XSD))
|
|
@@ -6,25 +6,66 @@ 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
|
|
9
|
+
@series = chart.add_series(
|
|
10
|
+
:data => [0,1,2],
|
|
11
|
+
:labels => ["zero", "one", "two"],
|
|
12
|
+
:title => "bob",
|
|
13
|
+
:color => "#FF0000",
|
|
14
|
+
:show_marker => true,
|
|
15
|
+
:smooth => true
|
|
16
|
+
)
|
|
10
17
|
end
|
|
11
18
|
|
|
12
19
|
def test_initialize
|
|
13
20
|
assert_equal(@series.title.text, "bob", "series title has been applied")
|
|
14
21
|
assert_equal(@series.labels.class, Axlsx::AxDataSource)
|
|
15
22
|
assert_equal(@series.data.class, Axlsx::NumDataSource)
|
|
16
|
-
|
|
17
23
|
end
|
|
18
24
|
|
|
19
25
|
def test_show_marker
|
|
20
26
|
assert_equal(true, @series.show_marker)
|
|
21
27
|
@series.show_marker = false
|
|
22
28
|
assert_equal(false, @series.show_marker)
|
|
23
|
-
end
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def test_smooth
|
|
32
|
+
assert_equal(true, @series.smooth)
|
|
33
|
+
@series.smooth = false
|
|
34
|
+
assert_equal(false, @series.smooth)
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def test_marker_symbol
|
|
38
|
+
assert_equal(:default, @series.marker_symbol)
|
|
39
|
+
@series.marker_symbol = :circle
|
|
40
|
+
assert_equal(:circle, @series.marker_symbol)
|
|
41
|
+
end
|
|
42
|
+
|
|
24
43
|
def test_to_xml_string
|
|
25
|
-
doc = Nokogiri::XML(@series
|
|
44
|
+
doc = Nokogiri::XML(wrap_with_namespaces(@series))
|
|
26
45
|
assert(doc.xpath("//srgbClr[@val='#{@series.color}']"))
|
|
27
|
-
|
|
46
|
+
assert_equal(xpath_with_namespaces(doc, "//c:marker").size, 0)
|
|
47
|
+
assert(doc.xpath("//smooth"))
|
|
48
|
+
|
|
49
|
+
@series.marker_symbol = :diamond
|
|
50
|
+
doc = Nokogiri::XML(wrap_with_namespaces(@series))
|
|
51
|
+
assert_equal(xpath_with_namespaces(doc, "//c:marker/c:symbol[@val='diamond']").size, 1)
|
|
52
|
+
|
|
53
|
+
@series.show_marker = false
|
|
54
|
+
doc = Nokogiri::XML(wrap_with_namespaces(@series))
|
|
55
|
+
assert_equal(xpath_with_namespaces(doc, "//c:marker/c:symbol[@val='none']").size, 1)
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
def wrap_with_namespaces(series)
|
|
59
|
+
'<c:chartSpace xmlns:c="' <<
|
|
60
|
+
Axlsx::XML_NS_C <<
|
|
61
|
+
'" xmlns:a="' <<
|
|
62
|
+
Axlsx::XML_NS_A <<
|
|
63
|
+
'">' <<
|
|
64
|
+
series.to_xml_string <<
|
|
65
|
+
'</c:chartSpace>'
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
def xpath_with_namespaces(doc, xpath)
|
|
69
|
+
doc.xpath(xpath, "a" => Axlsx::XML_NS_A, "c" => Axlsx::XML_NS_C)
|
|
28
70
|
end
|
|
29
|
-
#TODO serialization testing
|
|
30
71
|
end
|
|
@@ -5,7 +5,7 @@ class TestOneCellAnchor < Test::Unit::TestCase
|
|
|
5
5
|
def setup
|
|
6
6
|
@p = Axlsx::Package.new
|
|
7
7
|
@ws = @p.workbook.add_worksheet
|
|
8
|
-
@test_img = File.dirname(__FILE__) + "
|
|
8
|
+
@test_img = File.dirname(__FILE__) + "/../fixtures/image1.jpeg"
|
|
9
9
|
@image = @ws.add_image :image_src => @test_img
|
|
10
10
|
@anchor = @image.anchor
|
|
11
11
|
end
|
data/test/drawing/tc_pic.rb
CHANGED
|
@@ -5,12 +5,11 @@ class TestPic < Test::Unit::TestCase
|
|
|
5
5
|
def setup
|
|
6
6
|
@p = Axlsx::Package.new
|
|
7
7
|
ws = @p.workbook.add_worksheet
|
|
8
|
-
@test_img = File.dirname(__FILE__) + "
|
|
9
|
-
@
|
|
10
|
-
@
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
def teardown
|
|
8
|
+
@test_img = @test_img_jpg = File.dirname(__FILE__) + "/../fixtures/image1.jpeg"
|
|
9
|
+
@test_img_png = File.dirname(__FILE__) + "/../fixtures/image1.png"
|
|
10
|
+
@test_img_gif = File.dirname(__FILE__) + "/../fixtures/image1.gif"
|
|
11
|
+
@test_img_fake = File.dirname(__FILE__) + "/../fixtures/image1_fake.jpg"
|
|
12
|
+
@image = ws.add_image :image_src => @test_img, :hyperlink => 'https://github.com/randym', :tooltip => "What's up doc?", :opacity => 5
|
|
14
13
|
end
|
|
15
14
|
|
|
16
15
|
def test_initialization
|
|
@@ -38,6 +37,7 @@ class TestPic < Test::Unit::TestCase
|
|
|
38
37
|
assert_equal(200, @image.width)
|
|
39
38
|
|
|
40
39
|
end
|
|
40
|
+
|
|
41
41
|
def test_hyperlink
|
|
42
42
|
assert_equal(@image.hyperlink.href, "https://github.com/randym")
|
|
43
43
|
@image.hyperlink = "http://axlsx.blogspot.com"
|
|
@@ -70,15 +70,12 @@ class TestPic < Test::Unit::TestCase
|
|
|
70
70
|
end
|
|
71
71
|
|
|
72
72
|
def test_image_src
|
|
73
|
-
assert_raise(ArgumentError) { @image.image_src = 49 }
|
|
74
|
-
assert_raise(ArgumentError) { @image.image_src = 'Unknown' }
|
|
75
73
|
assert_raise(ArgumentError) { @image.image_src = __FILE__ }
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
assert_nothing_raised { @image.image_src = @test_img_up }
|
|
74
|
+
assert_raise(ArgumentError) { @image.image_src = @test_img_fake }
|
|
75
|
+
assert_nothing_raised { @image.image_src = @test_img_gif }
|
|
76
|
+
assert_nothing_raised { @image.image_src = @test_img_png }
|
|
77
|
+
assert_nothing_raised { @image.image_src = @test_img_jpg }
|
|
78
|
+
assert_equal(@image.image_src, @test_img_jpg)
|
|
82
79
|
end
|
|
83
80
|
|
|
84
81
|
def test_descr
|
|
@@ -103,5 +100,4 @@ class TestPic < Test::Unit::TestCase
|
|
|
103
100
|
doc = Nokogiri::XML(@image.anchor.drawing.to_xml_string)
|
|
104
101
|
assert_equal r_id, doc.xpath("//a:blip").first["r:embed"]
|
|
105
102
|
end
|
|
106
|
-
|
|
107
103
|
end
|
|
@@ -20,12 +20,13 @@ class TestPieSeries < Test::Unit::TestCase
|
|
|
20
20
|
assert_raise(ArgumentError, "require valid explosion") { @series.explosion = :lots }
|
|
21
21
|
assert_nothing_raised("allow valid explosion") { @series.explosion = 20 }
|
|
22
22
|
assert(@series.explosion == 20)
|
|
23
|
+
# issue 58 - explosion caused to_xml_string to fail - now tested
|
|
24
|
+
assert_nothing_raised("allow to_xml_string") { @series.to_xml_string }
|
|
23
25
|
end
|
|
24
26
|
|
|
25
27
|
def test_to_xml_string
|
|
26
28
|
doc = Nokogiri::XML(@series.to_xml_string)
|
|
27
29
|
assert(doc.xpath("//srgbClr[@val='#{@series.colors[0]}']"))
|
|
28
|
-
|
|
29
30
|
end
|
|
30
31
|
#TODO test unique serialization parts
|
|
31
32
|
|
|
@@ -6,16 +6,51 @@ class TestScatterSeries < 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::ScatterChart, :title => "Scatter Chart"
|
|
9
|
-
@series = @chart.add_series :xData=>[1,2,4], :yData=>[1,3,9], :title=>"exponents", :color => 'FF0000'
|
|
9
|
+
@series = @chart.add_series :xData=>[1,2,4], :yData=>[1,3,9], :title=>"exponents", :color => 'FF0000', :smooth => true
|
|
10
10
|
end
|
|
11
11
|
|
|
12
12
|
def test_initialize
|
|
13
13
|
assert_equal(@series.title.text, "exponents", "series title has been applied")
|
|
14
14
|
end
|
|
15
15
|
|
|
16
|
+
def test_smoothed_chart_default_smoothing
|
|
17
|
+
@chart = @ws.add_chart Axlsx::ScatterChart, :title => "Smooth Chart", :scatter_style => :smoothMarker
|
|
18
|
+
@series = @chart.add_series :xData=>[1,2,4], :yData=>[1,3,9], :title=>"smoothed exponents"
|
|
19
|
+
assert(@series.smooth, "series is smooth by default on smooth charts")
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def test_unsmoothed_chart_default_smoothing
|
|
23
|
+
@chart = @ws.add_chart Axlsx::ScatterChart, :title => "Unsmooth Chart", :scatter_style => :line
|
|
24
|
+
@series = @chart.add_series :xData=>[1,2,4], :yData=>[1,3,9], :title=>"unsmoothed exponents"
|
|
25
|
+
assert(!@series.smooth, "series is not smooth by default on non-smooth charts")
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def test_explicit_smoothing
|
|
29
|
+
@chart = @ws.add_chart Axlsx::ScatterChart, :title => "Unsmooth Chart, Smooth Series", :scatter_style => :line
|
|
30
|
+
@series = @chart.add_series :xData=>[1,2,4], :yData=>[1,3,9], :title=>"smoothed exponents", :smooth => true
|
|
31
|
+
assert(@series.smooth, "series is smooth when overriding chart default")
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def test_explicit_unsmoothing
|
|
35
|
+
@chart = @ws.add_chart Axlsx::ScatterChart, :title => "Smooth Chart, Unsmooth Series", :scatter_style => :smoothMarker
|
|
36
|
+
@series = @chart.add_series :xData=>[1,2,4], :yData=>[1,3,9], :title=>"unsmoothed exponents", :smooth => false
|
|
37
|
+
assert(!@series.smooth, "series is not smooth when overriding chart default")
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def test_ln_width
|
|
41
|
+
@chart = @ws.add_chart Axlsx::ScatterChart, :title => "ln width", :scatter_style => :line
|
|
42
|
+
@series = @chart.add_series :xData=>[1,2,4], :yData=>[1,3,9], :title=>"ln_width"
|
|
43
|
+
@series.ln_width = 12700
|
|
44
|
+
assert_equal(@series.ln_width, 12700, 'line width assigment is allowed')
|
|
45
|
+
end
|
|
46
|
+
|
|
16
47
|
def test_to_xml_string
|
|
48
|
+
@chart.scatter_style = :line
|
|
49
|
+
@series.ln_width = 12700
|
|
17
50
|
doc = Nokogiri::XML(@chart.to_xml_string)
|
|
51
|
+
assert_equal(12700, @series.ln_width)
|
|
18
52
|
assert_equal(doc.xpath("//a:srgbClr[@val='#{@series.color}']").size,4)
|
|
53
|
+
assert_equal(doc.xpath("//a:ln[@w='#{@series.ln_width}']").length, 1)
|
|
19
54
|
end
|
|
20
55
|
|
|
21
56
|
end
|
|
@@ -30,4 +30,25 @@ class TestSeriesTitle < Test::Unit::TestCase
|
|
|
30
30
|
assert(@title.text == "one")
|
|
31
31
|
end
|
|
32
32
|
|
|
33
|
+
def test_to_xml_string_for_special_characters
|
|
34
|
+
@chart.add_series(title: @title, data: [3, 7], labels: ['A', 'B'])
|
|
35
|
+
|
|
36
|
+
@title.text = "&><'\""
|
|
37
|
+
|
|
38
|
+
doc = Nokogiri::XML(@chart.to_xml_string)
|
|
39
|
+
errors = doc.errors
|
|
40
|
+
assert(errors.empty?, "invalid xml: #{errors.map(&:to_s).join(', ')}")
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def test_to_xml_string_for_special_characters_in_cell
|
|
44
|
+
@chart.add_series(title: @title, data: [3, 7], labels: ['A', 'B'])
|
|
45
|
+
|
|
46
|
+
cell = @row.cells.first
|
|
47
|
+
cell.value = "&><'\""
|
|
48
|
+
@title.cell = cell
|
|
49
|
+
|
|
50
|
+
doc = Nokogiri::XML(@chart.to_xml_string)
|
|
51
|
+
errors = doc.errors
|
|
52
|
+
assert(errors.empty?, "invalid xml: #{errors.map(&:to_s).join(', ')}")
|
|
53
|
+
end
|
|
33
54
|
end
|
data/test/drawing/tc_str_val.rb
CHANGED
|
@@ -4,6 +4,7 @@ class TestStrVal < Test::Unit::TestCase
|
|
|
4
4
|
|
|
5
5
|
def setup
|
|
6
6
|
@str_val = Axlsx::StrVal.new :v => "1"
|
|
7
|
+
@str_val_with_special_characters = Axlsx::StrVal.new :v => "a & b <c>"
|
|
7
8
|
end
|
|
8
9
|
|
|
9
10
|
def test_initialize
|
|
@@ -18,4 +19,12 @@ class TestStrVal < Test::Unit::TestCase
|
|
|
18
19
|
assert_equal(doc.xpath("//c:pt/c:v[text()='1']").size, 1)
|
|
19
20
|
end
|
|
20
21
|
|
|
22
|
+
def test_to_xml_string_special_characters
|
|
23
|
+
str = '<?xml version="1.0" encoding="UTF-8"?>'
|
|
24
|
+
str << '<c:chartSpace xmlns:c="' << Axlsx::XML_NS_C << '">'
|
|
25
|
+
str << @str_val_with_special_characters.to_xml_string(0)
|
|
26
|
+
doc = Nokogiri::XML(str)
|
|
27
|
+
assert_equal(doc.xpath("//c:pt/c:v[text()='a & b <c>']").size, 1)
|
|
28
|
+
end
|
|
29
|
+
|
|
21
30
|
end
|
data/test/drawing/tc_title.rb
CHANGED
|
@@ -19,6 +19,11 @@ class TestTitle < Test::Unit::TestCase
|
|
|
19
19
|
assert(@title.cell == nil)
|
|
20
20
|
end
|
|
21
21
|
|
|
22
|
+
def test_initialize_title_size
|
|
23
|
+
title = Axlsx::Title.new 'bob', 90
|
|
24
|
+
assert_equal "90", title.text_size
|
|
25
|
+
end
|
|
26
|
+
|
|
22
27
|
def test_text
|
|
23
28
|
assert_raise(ArgumentError, "text must be a string") { @title.text = 123 }
|
|
24
29
|
@title.cell = @row.cells.first
|
|
@@ -46,4 +51,20 @@ class TestTitle < Test::Unit::TestCase
|
|
|
46
51
|
assert_equal(1, doc.xpath('//c:v[text()="one"]').size)
|
|
47
52
|
end
|
|
48
53
|
|
|
54
|
+
def test_to_xml_string_for_special_characters
|
|
55
|
+
@chart.title.text = "&><'\""
|
|
56
|
+
doc = Nokogiri::XML(@chart.to_xml_string)
|
|
57
|
+
errors = doc.errors
|
|
58
|
+
assert(errors.empty?, "invalid xml: #{errors.map(&:to_s).join(', ')}")
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
def test_to_xml_string_for_special_characters_in_cell
|
|
62
|
+
cell = @row.cells.first
|
|
63
|
+
cell.value = "&><'\""
|
|
64
|
+
|
|
65
|
+
@chart.title.cell = cell
|
|
66
|
+
doc = Nokogiri::XML(@chart.to_xml_string)
|
|
67
|
+
errors = doc.errors
|
|
68
|
+
assert(errors.empty?, "invalid xml: #{errors.map(&:to_s).join(', ')}")
|
|
69
|
+
end
|
|
49
70
|
end
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
File without changes
|
|
@@ -13,6 +13,14 @@ class TestRelationships < Test::Unit::TestCase
|
|
|
13
13
|
instance = Axlsx::Relationship.new(source_obj, Axlsx::WORKSHEET_R, 'target')
|
|
14
14
|
assert_equal instance.Id, Axlsx::Relationship.new(source_obj, Axlsx::WORKSHEET_R, 'target').Id
|
|
15
15
|
end
|
|
16
|
+
|
|
17
|
+
def test_ids_cache_is_thread_safe
|
|
18
|
+
cache1, cache2 = nil
|
|
19
|
+
t1 = Thread.new { cache1 = Axlsx::Relationship.ids_cache }
|
|
20
|
+
t2 = Thread.new { cache2 = Axlsx::Relationship.ids_cache }
|
|
21
|
+
[t1, t2].each(&:join)
|
|
22
|
+
assert_not_same(cache1, cache2)
|
|
23
|
+
end
|
|
16
24
|
|
|
17
25
|
def test_target_is_only_considered_for_same_attributes_check_if_target_mode_is_external
|
|
18
26
|
source_obj = Object.new
|
data/test/stylesheet/tc_font.rb
CHANGED
|
@@ -62,11 +62,23 @@ class TestFont < Test::Unit::TestCase
|
|
|
62
62
|
assert_equal(@item.i, true)
|
|
63
63
|
end
|
|
64
64
|
|
|
65
|
-
# def u=(v) Axlsx::
|
|
65
|
+
# def u=(v) Axlsx::validate_cell_u v; @u = v end
|
|
66
66
|
def test_u
|
|
67
67
|
assert_raise(ArgumentError) { @item.u = -7 }
|
|
68
|
+
assert_nothing_raised { @item.u = :single }
|
|
69
|
+
assert_equal(@item.u, :single)
|
|
70
|
+
doc = Nokogiri::XML(@item.to_xml_string)
|
|
71
|
+
assert(doc.xpath('//u[@val="single"]'))
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
def test_u_backward_compatibility
|
|
75
|
+
# backward compatibility for true
|
|
68
76
|
assert_nothing_raised { @item.u = true }
|
|
69
|
-
assert_equal(@item.u,
|
|
77
|
+
assert_equal(@item.u, :single)
|
|
78
|
+
|
|
79
|
+
# backward compatibility for false
|
|
80
|
+
assert_nothing_raised { @item.u = false }
|
|
81
|
+
assert_equal(@item.u, :none)
|
|
70
82
|
end
|
|
71
83
|
|
|
72
84
|
# def strike=(v) Axlsx::validate_boolean v; @strike = v end
|
|
@@ -124,7 +124,7 @@ class TestStyles < Test::Unit::TestCase
|
|
|
124
124
|
:sz => 20,
|
|
125
125
|
:b => 1,
|
|
126
126
|
:i => 1,
|
|
127
|
-
:u =>
|
|
127
|
+
:u => :single,
|
|
128
128
|
:strike => 1,
|
|
129
129
|
:outline => 1,
|
|
130
130
|
:shadow => 1,
|
|
@@ -133,7 +133,7 @@ class TestStyles < Test::Unit::TestCase
|
|
|
133
133
|
:font_name => "woot font"
|
|
134
134
|
}
|
|
135
135
|
assert_equal(@styles.parse_font_options {}, nil, "noop if no font keys are set")
|
|
136
|
-
|
|
136
|
+
assert(@styles.parse_font_options(:b=>1).is_a?(Integer), "return index of font if not :dxf type")
|
|
137
137
|
assert_equal(@styles.parse_font_options(:b=>1, :type => :dxf).class, Axlsx::Font, "return font object if :dxf type")
|
|
138
138
|
|
|
139
139
|
f = @styles.parse_font_options(options.merge(:type => :dxf))
|
|
@@ -147,7 +147,7 @@ class TestStyles < Test::Unit::TestCase
|
|
|
147
147
|
|
|
148
148
|
def test_parse_fill_options
|
|
149
149
|
assert_equal(@styles.parse_fill_options {}, nil, "noop if no fill keys are set")
|
|
150
|
-
|
|
150
|
+
assert(@styles.parse_fill_options(:bg_color => "DE").is_a?(Integer), "return index of fill if not :dxf type")
|
|
151
151
|
assert_equal(@styles.parse_fill_options(:bg_color => "DE", :type => :dxf).class, Axlsx::Fill, "return fill object if :dxf type")
|
|
152
152
|
f = @styles.parse_fill_options(:bg_color => "DE", :type => :dxf)
|
|
153
153
|
assert(f.fill_type.bgColor.rgb == "FFDEDEDE")
|
|
@@ -232,4 +232,30 @@ class TestStyles < Test::Unit::TestCase
|
|
|
232
232
|
style = @styles.add_style :bg_color=>"FF000000", :fg_color=>"FFFFFFFF", :sz=>13, :alignment=>{:horizontal=>:left}, :border=>{:style => :thin, :color => "FFFF0000"}, :hidden=>true, :locked=>true, :type => :dxf
|
|
233
233
|
assert_equal(1, style, "returns the second dxfId")
|
|
234
234
|
end
|
|
235
|
+
|
|
236
|
+
def test_valid_document_with_font_options
|
|
237
|
+
font_options = {
|
|
238
|
+
:fg_color => "FF050505",
|
|
239
|
+
:sz => 20,
|
|
240
|
+
:b => 1,
|
|
241
|
+
:i => 1,
|
|
242
|
+
:u => :single,
|
|
243
|
+
:strike => 1,
|
|
244
|
+
:outline => 1,
|
|
245
|
+
:shadow => 1,
|
|
246
|
+
:charset => 9,
|
|
247
|
+
:family => 1,
|
|
248
|
+
:font_name => "woot font"
|
|
249
|
+
}
|
|
250
|
+
@styles.add_style font_options
|
|
251
|
+
|
|
252
|
+
schema = Nokogiri::XML::Schema(File.open(Axlsx::SML_XSD))
|
|
253
|
+
doc = Nokogiri::XML(@styles.to_xml_string)
|
|
254
|
+
errors = []
|
|
255
|
+
schema.validate(doc).each do |error|
|
|
256
|
+
errors.push error
|
|
257
|
+
puts error.message
|
|
258
|
+
end
|
|
259
|
+
assert(errors.size == 0)
|
|
260
|
+
end
|
|
235
261
|
end
|