axlsx 1.1.3 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (187) hide show
  1. data/.yardopts +5 -2
  2. data/CHANGELOG.md +60 -0
  3. data/LICENSE +1 -1
  4. data/README.md +115 -415
  5. data/Rakefile +11 -3
  6. data/examples/basic_charts.rb +54 -0
  7. data/examples/chart_colors.rb +88 -0
  8. data/examples/data_validation.rb +50 -0
  9. data/examples/example.rb +299 -155
  10. data/examples/example.xlsx +0 -0
  11. data/examples/example_streamed.xlsx +0 -0
  12. data/examples/extractive.pdf +0 -0
  13. data/examples/extractive.rb +45 -0
  14. data/examples/no-use_autowidth.xlsx +0 -0
  15. data/examples/scraping_html.rb +91 -0
  16. data/examples/shared_strings_example.xlsx +0 -0
  17. data/examples/sheet_protection.rb +10 -0
  18. data/examples/sheet_view.rb +34 -0
  19. data/examples/two_cell_anchor_image.rb +11 -0
  20. data/lib/axlsx/content_type/content_type.rb +2 -0
  21. data/lib/axlsx/content_type/default.rb +30 -15
  22. data/lib/axlsx/content_type/override.rb +29 -14
  23. data/lib/axlsx/doc_props/app.rb +161 -104
  24. data/lib/axlsx/doc_props/core.rb +9 -5
  25. data/lib/axlsx/drawing/ax_data_source.rb +26 -0
  26. data/lib/axlsx/drawing/axis.rb +92 -37
  27. data/lib/axlsx/drawing/bar_3D_chart.rb +49 -45
  28. data/lib/axlsx/drawing/bar_series.rb +25 -7
  29. data/lib/axlsx/drawing/cat_axis.rb +50 -22
  30. data/lib/axlsx/drawing/chart.rb +69 -56
  31. data/lib/axlsx/drawing/d_lbls.rb +100 -0
  32. data/lib/axlsx/drawing/drawing.rb +28 -12
  33. data/lib/axlsx/drawing/graphic_frame.rb +2 -1
  34. data/lib/axlsx/drawing/line_3D_chart.rb +3 -10
  35. data/lib/axlsx/drawing/line_series.rb +20 -4
  36. data/lib/axlsx/drawing/num_data.rb +52 -0
  37. data/lib/axlsx/drawing/num_data_source.rb +61 -0
  38. data/lib/axlsx/drawing/num_val.rb +32 -0
  39. data/lib/axlsx/drawing/pic.rb +44 -4
  40. data/lib/axlsx/drawing/pie_3D_chart.rb +10 -7
  41. data/lib/axlsx/drawing/pie_series.rb +18 -4
  42. data/lib/axlsx/drawing/scatter_chart.rb +2 -8
  43. data/lib/axlsx/drawing/scatter_series.rb +28 -2
  44. data/lib/axlsx/drawing/ser_axis.rb +1 -1
  45. data/lib/axlsx/drawing/series.rb +1 -1
  46. data/lib/axlsx/drawing/str_data.rb +42 -0
  47. data/lib/axlsx/drawing/str_val.rb +33 -0
  48. data/lib/axlsx/drawing/title.rb +21 -9
  49. data/lib/axlsx/drawing/two_cell_anchor.rb +46 -9
  50. data/lib/axlsx/drawing/view_3D.rb +44 -31
  51. data/lib/axlsx/drawing/vml_drawing.rb +42 -0
  52. data/lib/axlsx/drawing/vml_shape.rb +125 -0
  53. data/lib/axlsx/package.rb +44 -16
  54. data/lib/axlsx/rels/relationship.rb +3 -3
  55. data/lib/axlsx/rels/relationships.rb +1 -11
  56. data/lib/axlsx/stylesheet/gradient_fill.rb +1 -1
  57. data/lib/axlsx/stylesheet/styles.rb +1 -1
  58. data/lib/axlsx/stylesheet/table_style.rb +3 -3
  59. data/lib/axlsx/util/constants.rb +28 -0
  60. data/lib/axlsx/util/simple_typed_list.rb +15 -21
  61. data/lib/axlsx/util/validators.rb +81 -8
  62. data/lib/axlsx/version.rb +2 -7
  63. data/lib/axlsx/workbook/defined_name.rb +174 -0
  64. data/lib/axlsx/workbook/defined_names.rb +21 -0
  65. data/lib/axlsx/workbook/workbook.rb +65 -13
  66. data/lib/axlsx/workbook/worksheet/auto_filter.rb +34 -0
  67. data/lib/axlsx/workbook/worksheet/cell.rb +35 -7
  68. data/lib/axlsx/workbook/worksheet/col.rb +17 -1
  69. data/lib/axlsx/workbook/worksheet/cols.rb +20 -0
  70. data/lib/axlsx/workbook/worksheet/comment.rb +101 -0
  71. data/lib/axlsx/workbook/worksheet/comments.rb +85 -0
  72. data/lib/axlsx/workbook/worksheet/conditional_formattings.rb +25 -0
  73. data/lib/axlsx/workbook/worksheet/data_bar.rb +1 -1
  74. data/lib/axlsx/workbook/worksheet/data_validation.rb +245 -0
  75. data/lib/axlsx/workbook/worksheet/data_validations.rb +28 -0
  76. data/lib/axlsx/workbook/worksheet/dimension.rb +65 -0
  77. data/lib/axlsx/workbook/worksheet/merged_cells.rb +35 -0
  78. data/lib/axlsx/workbook/worksheet/page_setup.rb +113 -0
  79. data/lib/axlsx/workbook/worksheet/pane.rb +144 -0
  80. data/lib/axlsx/workbook/worksheet/print_options.rb +63 -0
  81. data/lib/axlsx/workbook/worksheet/protected_range.rb +46 -0
  82. data/lib/axlsx/workbook/worksheet/protected_ranges.rb +34 -0
  83. data/lib/axlsx/workbook/worksheet/row.rb +67 -12
  84. data/lib/axlsx/workbook/worksheet/selection.rb +111 -0
  85. data/lib/axlsx/workbook/worksheet/sheet_data.rb +25 -0
  86. data/lib/axlsx/workbook/worksheet/sheet_pr.rb +24 -0
  87. data/lib/axlsx/workbook/worksheet/sheet_protection.rb +224 -0
  88. data/lib/axlsx/workbook/worksheet/sheet_view.rb +379 -0
  89. data/lib/axlsx/workbook/worksheet/table.rb +3 -3
  90. data/lib/axlsx/workbook/worksheet/tables.rb +31 -0
  91. data/lib/axlsx/workbook/worksheet/worksheet.rb +377 -255
  92. data/lib/axlsx/workbook/worksheet/worksheet_comments.rb +57 -0
  93. data/lib/axlsx/workbook/worksheet/worksheet_drawing.rb +64 -0
  94. data/lib/axlsx.rb +30 -15
  95. data/test/content_type/tc_content_type.rb +1 -6
  96. data/test/doc_props/tc_app.rb +31 -1
  97. data/test/doc_props/tc_core.rb +3 -1
  98. data/test/drawing/tc_axis.rb +38 -3
  99. data/test/drawing/tc_bar_3D_chart.rb +12 -12
  100. data/test/drawing/tc_bar_series.rb +17 -13
  101. data/test/drawing/tc_cat_axis.rb +3 -3
  102. data/test/drawing/tc_cat_axis_data.rb +23 -13
  103. data/test/drawing/tc_chart.rb +29 -11
  104. data/test/drawing/tc_d_lbls.rb +47 -0
  105. data/test/drawing/tc_data_source.rb +17 -0
  106. data/test/drawing/tc_drawing.rb +11 -5
  107. data/test/drawing/tc_hyperlink.rb +4 -5
  108. data/test/drawing/tc_line_series.rb +9 -11
  109. data/test/drawing/tc_named_axis_data.rb +27 -0
  110. data/test/drawing/tc_num_data.rb +31 -0
  111. data/test/drawing/tc_num_val.rb +29 -0
  112. data/test/drawing/tc_pic.rb +22 -2
  113. data/test/drawing/tc_pie_3D_chart.rb +4 -8
  114. data/test/drawing/tc_pie_series.rb +11 -13
  115. data/test/drawing/tc_scatter_chart.rb +6 -1
  116. data/test/drawing/tc_scatter_series.rb +6 -5
  117. data/test/drawing/tc_series.rb +1 -1
  118. data/test/drawing/tc_str_data.rb +18 -0
  119. data/test/drawing/tc_str_val.rb +21 -0
  120. data/test/drawing/tc_title.rb +16 -0
  121. data/test/drawing/tc_two_cell_anchor.rb +2 -3
  122. data/test/drawing/tc_view_3D.rb +18 -18
  123. data/test/drawing/tc_vml_drawing.rb +25 -0
  124. data/test/drawing/tc_vml_shape.rb +100 -0
  125. data/test/rels/tc_relationship.rb +1 -0
  126. data/test/stylesheet/tc_gradient_fill.rb +8 -0
  127. data/test/stylesheet/tc_pattern_fill.rb +7 -1
  128. data/test/stylesheet/tc_styles.rb +3 -4
  129. data/test/stylesheet/tc_table_style.rb +8 -0
  130. data/test/stylesheet/tc_table_style_element.rb +10 -1
  131. data/test/tc_helper.rb +1 -0
  132. data/test/tc_package.rb +93 -17
  133. data/test/util/tc_simple_typed_list.rb +13 -0
  134. data/test/util/tc_validators.rb +95 -9
  135. data/test/workbook/tc_defined_name.rb +41 -0
  136. data/test/workbook/tc_workbook.rb +5 -3
  137. data/test/workbook/worksheet/table/tc_table.rb +3 -11
  138. data/test/workbook/worksheet/tc_cell.rb +30 -6
  139. data/test/workbook/worksheet/tc_col.rb +9 -0
  140. data/test/workbook/worksheet/tc_comment.rb +57 -0
  141. data/test/workbook/worksheet/tc_comments.rb +57 -0
  142. data/test/workbook/worksheet/tc_conditional_formatting.rb +44 -0
  143. data/test/workbook/worksheet/tc_data_bar.rb +1 -1
  144. data/test/workbook/worksheet/tc_data_validation.rb +265 -0
  145. data/test/workbook/worksheet/tc_page_setup.rb +138 -0
  146. data/test/workbook/worksheet/tc_pane.rb +94 -0
  147. data/test/workbook/worksheet/tc_print_options.rb +72 -0
  148. data/test/workbook/worksheet/tc_protected_range.rb +17 -0
  149. data/test/workbook/worksheet/tc_row.rb +36 -12
  150. data/test/workbook/worksheet/tc_selection.rb +94 -0
  151. data/test/workbook/worksheet/tc_sheet_protection.rb +117 -0
  152. data/test/workbook/worksheet/tc_sheet_view.rb +214 -0
  153. data/test/workbook/worksheet/tc_worksheet.rb +138 -48
  154. metadata +164 -52
  155. data/examples/example.csv +0 -1000
  156. data/lib/axlsx/drawing/cat_axis_data.rb +0 -34
  157. data/lib/axlsx/drawing/hlink_click.rb~ +0 -0
  158. data/lib/axlsx/drawing/hyperlink.rb~ +0 -64
  159. data/lib/axlsx/drawing/named_axis_data.rb +0 -36
  160. data/lib/axlsx/drawing/picture_locking.rb~ +0 -36
  161. data/lib/axlsx/drawing/val_axis_data.rb +0 -27
  162. data/lib/axlsx/util/cbf.rb +0 -333
  163. data/lib/axlsx/util/cfb.rb~ +0 -201
  164. data/lib/axlsx/util/font_tables.rb~ +0 -0
  165. data/lib/axlsx/util/ms_off_crypto.rb +0 -189
  166. data/lib/axlsx/util/ms_off_crypto.rb~ +0 -3
  167. data/lib/axlsx/util/ms_offcrypto.rb~ +0 -0
  168. data/lib/axlsx/util/parser.rb~ +0 -6
  169. data/lib/axlsx/util/storage.rb~ +0 -0
  170. data/lib/axlsx/workbook/shared_strings_table.rb~ +0 -69
  171. data/lib/axlsx/workbook/worksheet/cfvo.rb~ +0 -0
  172. data/lib/axlsx/workbook/worksheet/col.rb~ +0 -0
  173. data/lib/axlsx/workbook/worksheet/color_scale.rb~ +0 -46
  174. data/lib/axlsx/workbook/worksheet/data_bar.rb~ +0 -0
  175. data/lib/axlsx/workbook/worksheet/icon_set.rb~ +0 -95
  176. data/lib/axlsx/workbook/worksheet/shared_strings_table.rb~ +0 -0
  177. data/lib/axlsx/workbook/worksheet/table.rb~ +0 -97
  178. data/lib/schema/dc.xsd~ +0 -118
  179. data/lib/schema/dcterms.xsd~ +0 -331
  180. data/lib/schema/opc-coreProperties.xsd~ +0 -50
  181. data/test/drawing/tc_val_axis_data.rb +0 -17
  182. data/test/workbook/worksheet/table/tc_table.rb~ +0 -72
  183. data/test/workbook/worksheet/tc_cfvo.rb~ +0 -20
  184. data/test/workbook/worksheet/tc_col.rb~ +0 -10
  185. data/test/workbook/worksheet/tc_color_scale.rb~ +0 -0
  186. data/test/workbook/worksheet/tc_data_bar.rb~ +0 -0
  187. data/test/workbook/worksheet/tc_icon_set.rb~ +0 -0
@@ -9,8 +9,6 @@ class TestDrawing < Test::Unit::TestCase
9
9
 
10
10
  def test_initialization
11
11
  assert(@ws.workbook.drawings.empty?)
12
- assert_equal(@ws.drawing, @ws.workbook.drawings.last, "drawing is added to workbook")
13
- assert(@ws.drawing.anchors.is_a?(Axlsx::SimpleTypedList) && @ws.drawing.anchors.empty?, "anchor list is created and empty")
14
12
  end
15
13
 
16
14
  def test_add_chart
@@ -32,9 +30,13 @@ class TestDrawing < Test::Unit::TestCase
32
30
  assert_equal(600, image.width)
33
31
  assert_equal(400, image.height)
34
32
  end
35
-
33
+ def test_add_two_cell_anchor_image
34
+ src = File.dirname(__FILE__) + "/../../examples/image1.jpeg"
35
+ image = @ws.add_image(:image_src => src, :start_at=>[0,0], :end_at => [15,0])
36
+ assert(@ws.drawing.anchors.last.is_a?(Axlsx::TwoCellAnchor))
37
+ assert(image.is_a?(Axlsx::Pic))
38
+ end
36
39
  def test_charts
37
- assert(@ws.drawing.charts.empty?)
38
40
  chart = @ws.add_chart(Axlsx::Pie3DChart, :title=>"bob", :start_at=>[0,0], :end_at=>[1,1])
39
41
  assert_equal(@ws.drawing.charts.last, chart, "add chart is returned")
40
42
  chart = @ws.add_chart(Axlsx::Pie3DChart, :title=>"nancy", :start_at=>[1,5], :end_at=>[5,10])
@@ -42,23 +44,26 @@ class TestDrawing < Test::Unit::TestCase
42
44
  end
43
45
 
44
46
  def test_pn
47
+ @ws.add_chart(Axlsx::Pie3DChart)
45
48
  assert_equal(@ws.drawing.pn, "drawings/drawing1.xml")
46
49
  end
47
50
 
48
51
  def test_rels_pn
52
+ @ws.add_chart(Axlsx::Pie3DChart)
49
53
  assert_equal(@ws.drawing.rels_pn, "drawings/_rels/drawing1.xml.rels")
50
54
  end
51
55
 
52
56
  def test_rId
57
+ @ws.add_chart(Axlsx::Pie3DChart)
53
58
  assert_equal(@ws.drawing.rId, "rId1")
54
59
  end
55
60
 
56
61
  def test_index
62
+ @ws.add_chart(Axlsx::Pie3DChart)
57
63
  assert_equal(@ws.drawing.index, @ws.workbook.drawings.index(@ws.drawing))
58
64
  end
59
65
 
60
66
  def test_relationships
61
- assert(@ws.drawing.relationships.empty?)
62
67
  chart = @ws.add_chart(Axlsx::Pie3DChart, :title=>"bob", :start_at=>[0,0], :end_at=>[1,1])
63
68
  assert_equal(@ws.drawing.relationships.size, 1, "adding a chart adds a relationship")
64
69
  chart = @ws.add_chart(Axlsx::Pie3DChart, :title=>"nancy", :start_at=>[1,5], :end_at=>[5,10])
@@ -67,6 +72,7 @@ class TestDrawing < Test::Unit::TestCase
67
72
 
68
73
  def test_to_xml
69
74
  schema = Nokogiri::XML::Schema(File.open(Axlsx::DRAWING_XSD))
75
+ @ws.add_chart(Axlsx::Pie3DChart)
70
76
  doc = Nokogiri::XML(@ws.drawing.to_xml_string)
71
77
  errors = []
72
78
  schema.validate(doc).each do |error|
@@ -19,11 +19,6 @@ class TestHyperlink < Test::Unit::TestCase
19
19
  assert_equal(@hyperlink.href, "http://axlsx.blogspot.com")
20
20
  end
21
21
 
22
- def test_invalidUrl
23
- assert_nothing_raised { @hyperlink.invalidUrl = "http://axlsx.blogspot.com" }
24
- assert_equal(@hyperlink.invalidUrl, "http://axlsx.blogspot.com")
25
- end
26
-
27
22
  def test_tgtFrame
28
23
  assert_nothing_raised { @hyperlink.tgtFrame = "http://axlsx.blogspot.com" }
29
24
  assert_equal(@hyperlink.tgtFrame, "http://axlsx.blogspot.com")
@@ -66,4 +61,8 @@ class TestHyperlink < Test::Unit::TestCase
66
61
  assert_equal(@hyperlink.history, false )
67
62
  end
68
63
 
64
+ def test_to_xml_string
65
+ doc = Nokogiri::XML(@p.workbook.worksheets.first.drawing.to_xml_string)
66
+ assert(doc.xpath("//a:hlinkClick"))
67
+ end
69
68
  end
@@ -5,22 +5,20 @@ class TestLineSeries < Test::Unit::TestCase
5
5
  def setup
6
6
  p = Axlsx::Package.new
7
7
  @ws = p.workbook.add_worksheet :name=>"hmmm"
8
- chart = @ws.drawing.add_chart Axlsx::Line3DChart, :title => "fishery"
9
- @series = chart.add_series :data=>[0,1,2], :labels=>["zero", "one", "two"], :title=>"bob"
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"
10
10
  end
11
11
 
12
12
  def test_initialize
13
13
  assert_equal(@series.title.text, "bob", "series title has been applied")
14
- assert_equal(@series.data, [0,1,2], "data option applied")
15
- assert_equal(@series.labels, ["zero", "one","two"], "labels option applied")
16
- end
14
+ assert_equal(@series.labels.class, Axlsx::AxDataSource)
15
+ assert_equal(@series.data.class, Axlsx::NumDataSource)
17
16
 
18
- def test_data
19
- assert_equal(@series.data, [0,1,2])
20
17
  end
21
-
22
- def test_labels
23
- assert_equal(@series.labels, ["zero", "one", "two"])
18
+
19
+ def test_to_xml_string
20
+ doc = Nokogiri::XML(@series.to_xml_string)
21
+ assert(doc.xpath("//srgbClr[@val='#{@series.color}']"))
24
22
  end
25
-
23
+ #TODO serialization testing
26
24
  end
@@ -0,0 +1,27 @@
1
+ # require 'tc_helper.rb'
2
+
3
+ # class TestNamedAxisData < Test::Unit::TestCase
4
+
5
+ # def setup
6
+ # p = Axlsx::Package.new
7
+ # @ws = p.workbook.add_worksheet
8
+ # @chart = @ws.drawing.add_chart Axlsx::Line3DChart
9
+ # @series = @chart.add_series :data=>[0,1,2]
10
+ # end
11
+
12
+ # def test_initialize
13
+ # assert(@series.data.is_a?Axlsx::SimpleTypedList)
14
+ # assert_equal(@series.data, [0,1,2])
15
+ # end
16
+
17
+ # def test_to_xml_string
18
+ # doc = Nokogiri::XML(@chart.to_xml_string)
19
+ # assert_equal(doc.xpath("//c:val/c:numRef/c:f").size,1)
20
+ # assert_equal(doc.xpath("//c:numCache/c:ptCount[@val='#{@series.data.size}']").size,1)
21
+ # @series.data.each_with_index do |datum, index|
22
+ # assert_equal(doc.xpath("//c:numCache/c:pt[@idx='#{index}']").size,1)
23
+ # assert_equal(doc.xpath("//c:numCache/c:pt/c:v[text()='#{datum}']").size,1)
24
+ # end
25
+ # end
26
+
27
+ # end
@@ -0,0 +1,31 @@
1
+ require 'tc_helper.rb'
2
+
3
+ class TestNumData < Test::Unit::TestCase
4
+
5
+ def setup
6
+ @num_data = Axlsx::NumData.new :data => [1, 2, 3]
7
+ end
8
+
9
+ def test_initialize
10
+ assert_equal(@num_data.format_code, "General")
11
+ end
12
+
13
+ def test_formula_based_cell
14
+
15
+ end
16
+
17
+ def test_format_code
18
+ assert_raise(ArgumentError) {@num_data.format_code = 7}
19
+ assert_nothing_raised {@num_data.format_code = 'foo_bar'}
20
+ end
21
+
22
+ def test_to_xml_string
23
+ str = '<?xml version="1.0" encoding="UTF-8"?>'
24
+ str << '<c:chartSpace xmlns:c="' << Axlsx::XML_NS_C << '">'
25
+ str << @num_data.to_xml_string
26
+ doc = Nokogiri::XML(str)
27
+ assert_equal(doc.xpath("//c:numLit/c:ptCount[@val=3]").size, 1)
28
+ assert_equal(doc.xpath("//c:numLit/c:pt/c:v[text()='1']").size, 1)
29
+ end
30
+
31
+ end
@@ -0,0 +1,29 @@
1
+ require 'tc_helper.rb'
2
+
3
+ class TestNumVal < Test::Unit::TestCase
4
+
5
+ def setup
6
+ @num_val = Axlsx::NumVal.new :v => 1
7
+ end
8
+
9
+ def test_initialize
10
+ assert_equal(@num_val.format_code, "General")
11
+ assert_equal(@num_val.v, "1")
12
+ end
13
+
14
+ def test_format_code
15
+ assert_raise(ArgumentError) {@num_val.format_code = 7}
16
+ assert_nothing_raised {@num_val.format_code = 'foo_bar'}
17
+ end
18
+
19
+ def test_to_xml_string
20
+ str = '<?xml version="1.0" encoding="UTF-8"?>'
21
+ str << '<c:chartSpace xmlns:c="' << Axlsx::XML_NS_C << '">'
22
+ str << @num_val.to_xml_string(0)
23
+ doc = Nokogiri::XML(str)
24
+ # lets see if this works?
25
+ assert_equal(doc.xpath("//c:pt/c:v[text()='1']").size, 1)
26
+
27
+ end
28
+
29
+ end
@@ -6,7 +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
- @image = ws.add_image :image_src => @test_img
9
+ @image = ws.add_image :image_src => @test_img, :hyperlink => 'https://github.com/randym', :tooltip => "What's up doc?"
10
10
  end
11
11
 
12
12
  def teardown
@@ -14,11 +14,31 @@ class TestPic < Test::Unit::TestCase
14
14
 
15
15
  def test_initialization
16
16
  assert_equal(@p.workbook.images.first, @image)
17
+ assert_equal(@image.file_name, 'image1.jpeg')
17
18
  assert_equal(@image.image_src, @test_img)
18
19
  end
19
20
 
21
+ def test_anchor_swapping
22
+ #swap from one cell to two cell when end_at is specified
23
+ assert(@image.anchor.is_a?(Axlsx::OneCellAnchor))
24
+ start_at = @image.anchor.from
25
+ @image.end_at 10,5
26
+ assert(@image.anchor.is_a?(Axlsx::TwoCellAnchor))
27
+ assert_equal(start_at.col, @image.anchor.from.col)
28
+ assert_equal(start_at.row, @image.anchor.from.row)
29
+ assert_equal(10,@image.anchor.to.col)
30
+ assert_equal(5, @image.anchor.to.row)
31
+
32
+ #swap from two cell to one cell when width or height are specified
33
+ @image.width = 200
34
+ assert(@image.anchor.is_a?(Axlsx::OneCellAnchor))
35
+ assert_equal(start_at.col, @image.anchor.from.col)
36
+ assert_equal(start_at.row, @image.anchor.from.row)
37
+ assert_equal(200, @image.width)
38
+
39
+ end
20
40
  def test_hyperlink
21
- assert_equal(@image.hyperlink, nil)
41
+ assert_equal(@image.hyperlink.href, "https://github.com/randym")
22
42
  @image.hyperlink = "http://axlsx.blogspot.com"
23
43
  assert_equal(@image.hyperlink.href, "http://axlsx.blogspot.com")
24
44
  end
@@ -6,26 +6,22 @@ class TestPie3DChart < Test::Unit::TestCase
6
6
  p = Axlsx::Package.new
7
7
  ws = p.workbook.add_worksheet
8
8
  @row = ws.add_row ["one", 1, Time.now]
9
- @chart = ws.drawing.add_chart Axlsx::Pie3DChart, :title => "fishery"
9
+ @chart = ws.add_chart Axlsx::Pie3DChart, :title => "fishery"
10
10
  end
11
11
 
12
12
  def teardown
13
13
  end
14
14
 
15
15
  def test_initialization
16
- assert_equal(@chart.view3D.rotX, 30, "view 3d default rotX incorrect")
17
- assert_equal(@chart.view3D.perspective, 30, "view 3d default perspective incorrect")
16
+ assert_equal(@chart.view_3D.rot_x, 30, "view 3d default rot_x incorrect")
17
+ assert_equal(@chart.view_3D.perspective, 30, "view_3d default perspective incorrect")
18
18
  assert_equal(@chart.series_type, Axlsx::PieSeries, "series type incorrect")
19
19
  end
20
20
 
21
21
  def test_to_xml
22
22
  schema = Nokogiri::XML::Schema(File.open(Axlsx::DRAWING_XSD))
23
23
  doc = Nokogiri::XML(@chart.to_xml_string)
24
- errors = []
25
- schema.validate(doc).each do |error|
26
- errors.push error
27
- puts error.message
28
- end
24
+ errors = schema.validate(doc).map {|error| puts error.message; error }
29
25
  assert(errors.empty?, "error free validation")
30
26
  end
31
27
 
@@ -5,30 +5,28 @@ class TestPieSeries < Test::Unit::TestCase
5
5
  def setup
6
6
  p = Axlsx::Package.new
7
7
  @ws = p.workbook.add_worksheet :name=>"hmmm"
8
- chart = @ws.drawing.add_chart Axlsx::Pie3DChart, :title => "fishery"
9
- @series = chart.add_series :data=>[0,1,2], :labels=>["zero", "one", "two"], :title=>"bob"
8
+ chart = @ws.add_chart Axlsx::Pie3DChart, :title => "fishery"
9
+ @series = chart.add_series :data=>[0,1,2], :labels=>["zero", "one", "two"], :title=>"bob", :colors => ["FF0000", "00FF00", "0000FF"]
10
10
  end
11
11
 
12
12
  def test_initialize
13
13
  assert_equal(@series.title.text, "bob", "series title has been applied")
14
- assert_equal(@series.data, [0,1,2], "data option applied")
15
- assert_equal(@series.labels, ["zero", "one","two"], "labels option applied")
14
+ assert_equal(@series.labels.class, Axlsx::AxDataSource)
15
+ assert_equal(@series.data.class, Axlsx::NumDataSource)
16
16
  assert_equal(@series.explosion, nil, "series shape has been applied")
17
17
  end
18
18
 
19
- def test_data
20
- assert_equal(@series.data, [0,1,2])
21
- end
22
-
23
- def test_labels
24
- assert_equal(@series.labels, ["zero", "one", "two"])
25
-
26
- end
27
-
28
19
  def test_explosion
29
20
  assert_raise(ArgumentError, "require valid explosion") { @series.explosion = :lots }
30
21
  assert_nothing_raised("allow valid explosion") { @series.explosion = 20 }
31
22
  assert(@series.explosion == 20)
32
23
  end
33
24
 
25
+ def test_to_xml_string
26
+ doc = Nokogiri::XML(@series.to_xml_string)
27
+ assert(doc.xpath("//srgbClr[@val='#{@series.colors[0]}']"))
28
+
29
+ end
30
+ #TODO test unique serialization parts
31
+
34
32
  end
@@ -4,7 +4,7 @@ class TestScatterChart < Test::Unit::TestCase
4
4
  def setup
5
5
  @p = Axlsx::Package.new
6
6
  @chart = nil
7
- ws = @p.workbook.add_worksheet do |sheet|
7
+ @p.workbook.add_worksheet do |sheet|
8
8
  sheet.add_row ["First", 1, 5, 7, 9]
9
9
  sheet.add_row ["", 1, 25, 49, 81]
10
10
  sheet.add_row ["Second", 5, 2, 14, 9]
@@ -22,6 +22,11 @@ class TestScatterChart < Test::Unit::TestCase
22
22
  def teardown
23
23
  end
24
24
 
25
+ def test_scatter_style
26
+ @chart.scatterStyle = :marker
27
+ assert(@chart.scatterStyle == :marker)
28
+ assert_raise(ArgumentError) { @chart.scatterStyle = :buckshot }
29
+ end
25
30
  def test_initialization
26
31
  assert_equal(@chart.scatterStyle, :lineMarker, "scatterStyle defualt incorrect")
27
32
  assert_equal(@chart.series_type, Axlsx::ScatterSeries, "series type incorrect")
@@ -5,16 +5,17 @@ class TestScatterSeries < Test::Unit::TestCase
5
5
  def setup
6
6
  p = Axlsx::Package.new
7
7
  @ws = p.workbook.add_worksheet :name=>"hmmm"
8
- chart = @ws.drawing.add_chart Axlsx::ScatterChart, :title => "Scatter Chart"
9
- @series = chart.add_series :xData=>[1,2,4], :yData=>[1,3,9], :title=>"exponents"
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'
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_data
17
- assert_equal(@series.xData, [1,2,4])
18
- assert_equal(@series.yData, [1,3,9])
16
+ def test_to_xml_string
17
+ doc = Nokogiri::XML(@chart.to_xml_string)
18
+ assert_equal(doc.xpath("//a:srgbClr[@val='#{@series.color}']").size,4)
19
19
  end
20
+
20
21
  end
@@ -5,7 +5,7 @@ class TestSeries < Test::Unit::TestCase
5
5
  def setup
6
6
  p = Axlsx::Package.new
7
7
  @ws = p.workbook.add_worksheet :name=>"hmmm"
8
- chart = @ws.drawing.add_chart Axlsx::Chart, :title => "fishery"
8
+ chart = @ws.add_chart Axlsx::Chart, :title => "fishery"
9
9
  @series = chart.add_series :title=>"bob"
10
10
  end
11
11
 
@@ -0,0 +1,18 @@
1
+ require 'tc_helper.rb'
2
+
3
+ class TestStrData < Test::Unit::TestCase
4
+
5
+ def setup
6
+ @str_data = Axlsx::StrData.new :data => ["1", "2", "3"]
7
+ end
8
+
9
+ def test_to_xml_string_strLit
10
+ str = '<?xml version="1.0" encoding="UTF-8"?>'
11
+ str << '<c:chartSpace xmlns:c="' << Axlsx::XML_NS_C << '">'
12
+ str << @str_data.to_xml_string
13
+ doc = Nokogiri::XML(str)
14
+ assert_equal(doc.xpath("//c:strLit/c:ptCount[@val=3]").size, 1)
15
+ assert_equal(doc.xpath("//c:strLit/c:pt/c:v[text()='1']").size, 1)
16
+ end
17
+
18
+ end
@@ -0,0 +1,21 @@
1
+ require 'tc_helper.rb'
2
+
3
+ class TestStrVal < Test::Unit::TestCase
4
+
5
+ def setup
6
+ @str_val = Axlsx::StrVal.new :v => "1"
7
+ end
8
+
9
+ def test_initialize
10
+ assert_equal(@str_val.v, "1")
11
+ end
12
+
13
+ def test_to_xml_string
14
+ str = '<?xml version="1.0" encoding="UTF-8"?>'
15
+ str << '<c:chartSpace xmlns:c="' << Axlsx::XML_NS_C << '">'
16
+ str << @str_val.to_xml_string(0)
17
+ doc = Nokogiri::XML(str)
18
+ assert_equal(doc.xpath("//c:pt/c:v[text()='1']").size, 1)
19
+ end
20
+
21
+ end
@@ -1,3 +1,5 @@
1
+ $LOAD_PATH.unshift "#{File.dirname(__FILE__)}/../"
2
+
1
3
  require 'tc_helper.rb'
2
4
 
3
5
  class TestTitle < Test::Unit::TestCase
@@ -30,4 +32,18 @@ class TestTitle < Test::Unit::TestCase
30
32
  assert(@title.text == "one")
31
33
  end
32
34
 
35
+ def test_to_xml_string_text
36
+ @chart.title.text = 'foo'
37
+ doc = Nokogiri::XML(@chart.to_xml_string)
38
+ assert_equal(1, doc.xpath('//c:rich').size)
39
+ assert_equal(1, doc.xpath("//a:t[text()='foo']").size)
40
+ end
41
+
42
+ def test_to_xml_string_cell
43
+ @chart.title.cell = @row.cells.first
44
+ doc = Nokogiri::XML(@chart.to_xml_string)
45
+ assert_equal(1, doc.xpath('//c:strCache').size)
46
+ assert_equal(1, doc.xpath('//c:v[text()="one"]').size)
47
+ end
48
+
33
49
  end
@@ -5,8 +5,7 @@ class TestTwoCellAnchor < Test::Unit::TestCase
5
5
  def setup
6
6
  p = Axlsx::Package.new
7
7
  @ws = p.workbook.add_worksheet
8
- row = @ws.add_row ["one", 1, Time.now]
9
- title = Axlsx::Title.new
8
+ @ws.add_row ["one", 1, Time.now]
10
9
  chart = @ws.add_chart Axlsx::Bar3DChart
11
10
  @anchor = chart.graphic_frame.anchor
12
11
  end
@@ -23,7 +22,7 @@ class TestTwoCellAnchor < Test::Unit::TestCase
23
22
 
24
23
 
25
24
  def test_options
26
- assert_raise(ArgumentError, 'invalid start_at') { @ws.add_chart Axlsx::Chart, :start_at=>[1] }
25
+ assert_raise(ArgumentError, 'invalid start_at') { @ws.add_chart Axlsx::Chart, :start_at=>"1" }
27
26
  assert_raise(ArgumentError, 'invalid end_at') { @ws.add_chart Axlsx::Chart, :start_at=>[1,2], :end_at => ["a", 4] }
28
27
  # this is actually raised in the graphic frame
29
28
  assert_raise(ArgumentError, 'invalid Chart') { @ws.add_chart Axlsx::TwoCellAnchor }
@@ -9,33 +9,33 @@ class TestView3D < Test::Unit::TestCase
9
9
  end
10
10
 
11
11
  def test_options
12
- v = Axlsx::View3D.new :rotX => 10, :rotY => 5, :hPercent => "30%", :depthPercent => "45%", :rAngAx => false, :perspective => 10
13
- assert_equal(v.rotX, 10)
14
- assert_equal(v.rotY, 5)
15
- assert_equal(v.hPercent, "30%")
16
- assert_equal(v.depthPercent, "45%")
17
- assert_equal(v.rAngAx, false)
12
+ v = Axlsx::View3D.new :rot_x => 10, :rot_y => 5, :h_percent => "30%", :depth_percent => "45%", :r_ang_ax => false, :perspective => 10
13
+ assert_equal(v.rot_x, 10)
14
+ assert_equal(v.rot_y, 5)
15
+ assert_equal(v.h_percent, "30%")
16
+ assert_equal(v.depth_percent, "45%")
17
+ assert_equal(v.r_ang_ax, false)
18
18
  assert_equal(v.perspective, 10)
19
19
  end
20
20
 
21
- def test_rotX
22
- assert_raise(ArgumentError) {@view.rotX = "bob"}
23
- assert_nothing_raised {@view.rotX = -90}
21
+ def test_rot_x
22
+ assert_raise(ArgumentError) {@view.rot_x = "bob"}
23
+ assert_nothing_raised {@view.rot_x = -90}
24
24
  end
25
25
 
26
- def test_rotY
27
- assert_raise(ArgumentError) {@view.rotY = "bob"}
28
- assert_nothing_raised {@view.rotY = 90}
26
+ def test_rot_y
27
+ assert_raise(ArgumentError) {@view.rot_y = "bob"}
28
+ assert_nothing_raised {@view.rot_y = 90}
29
29
  end
30
30
 
31
- def test_hPercent
32
- assert_raise(ArgumentError) {@view.hPercent = "bob"}
33
- assert_nothing_raised {@view.hPercent = "500%"}
31
+ def test_h_percent
32
+ assert_raise(ArgumentError) {@view.h_percent = "bob"}
33
+ assert_nothing_raised {@view.h_percent = "500%"}
34
34
  end
35
35
 
36
- def test_depthPercent
37
- assert_raise(ArgumentError) {@view.depthPercent = "bob"}
38
- assert_nothing_raised {@view.depthPercent = "20%"}
36
+ def test_depth_percent
37
+ assert_raise(ArgumentError) {@view.depth_percent = "bob"}
38
+ assert_nothing_raised {@view.depth_percent = "20%"}
39
39
  end
40
40
 
41
41
 
@@ -0,0 +1,25 @@
1
+ require 'tc_helper.rb'
2
+
3
+ class TestVmlDrawing < Test::Unit::TestCase
4
+
5
+ def setup
6
+ p = Axlsx::Package.new
7
+ wb = p.workbook
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'
11
+ @vml_drawing = @ws.comments.vml_drawing
12
+ end
13
+
14
+ def test_initialize
15
+ assert_raise(ArgumentError) { Axlsx::VmlDrawing.new }
16
+ end
17
+
18
+ def test_to_xml_string
19
+ str = @vml_drawing.to_xml_string()
20
+ doc = Nokogiri::XML(str)
21
+ assert_equal(doc.xpath("//v:shape").size, 2)
22
+ assert(doc.xpath("//o:idmap[@o:data='#{@ws.index+1}']"))
23
+ end
24
+
25
+ end
@@ -0,0 +1,100 @@
1
+ require 'tc_helper.rb'
2
+
3
+ class TestVmlShape < Test::Unit::TestCase
4
+
5
+ def setup
6
+ p = Axlsx::Package.new
7
+ wb = p.workbook
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'
11
+ @comments = @ws.comments
12
+ end
13
+
14
+ def test_initialize
15
+ assert_raise(ArgumentError) { Axlsx::VmlDrawing.new }
16
+ end
17
+
18
+ def test_row
19
+ shape = @comments.first.vml_shape
20
+ assert_equal(shape.row, 0)
21
+ shape = @comments.last.vml_shape
22
+ assert_equal(shape.row, 2)
23
+ end
24
+
25
+ def test_column
26
+ shape = @comments.first.vml_shape
27
+ assert_equal(shape.column, 0)
28
+ shape = @comments.last.vml_shape
29
+ assert_equal(shape.column, 2)
30
+ end
31
+
32
+ def test_left_column
33
+ shape = @comments.first.vml_shape
34
+ shape.left_column = 3
35
+ assert(shape.left_column == 3)
36
+ assert_raise(ArgumentError) { shape.left_column = [] }
37
+ end
38
+
39
+ def test_left_offset
40
+ shape = @comments.first.vml_shape
41
+ shape.left_offset = 3
42
+ assert(shape.left_offset == 3)
43
+ assert_raise(ArgumentError) { shape.left_offset = [] }
44
+ end
45
+
46
+ def test_right_column
47
+ shape = @comments.first.vml_shape
48
+ shape.right_column = 3
49
+ assert(shape.right_column == 3)
50
+ assert_raise(ArgumentError) { shape.right_column = [] }
51
+ end
52
+
53
+ def test_right_offset
54
+ shape = @comments.first.vml_shape
55
+ shape.right_offset = 3
56
+ assert(shape.right_offset == 3)
57
+ assert_raise(ArgumentError) { shape.right_offset = [] }
58
+ end
59
+
60
+ def test_top_offset
61
+ shape = @comments.first.vml_shape
62
+ shape.top_offset = 3
63
+ assert(shape.top_offset == 3)
64
+ assert_raise(ArgumentError) { shape.top_offset = [] }
65
+ end
66
+
67
+ def test_bottom_offset
68
+ shape = @comments.first.vml_shape
69
+ shape.bottom_offset = 3
70
+ assert(shape.bottom_offset == 3)
71
+ assert_raise(ArgumentError) { shape.bottom_offset = [] }
72
+ end
73
+
74
+ def test_bottom_row
75
+ shape = @comments.first.vml_shape
76
+ shape.bottom_row = 3
77
+ assert(shape.bottom_row == 3)
78
+ assert_raise(ArgumentError) { shape.bottom_row = [] }
79
+ end
80
+
81
+ def test_top_row
82
+ shape = @comments.first.vml_shape
83
+ shape.top_row = 3
84
+ assert(shape.top_row == 3)
85
+ assert_raise(ArgumentError) { shape.top_row = [] }
86
+ end
87
+
88
+ def test_to_xml_string
89
+ str = @comments.vml_drawing.to_xml_string()
90
+ doc = Nokogiri::XML(str)
91
+ assert_equal(doc.xpath("//v:shape").size, 2)
92
+ @comments.each do |comment|
93
+ shape = comment.vml_shape
94
+ assert(doc.xpath("//v:shape/x:ClientData/x:Row[text()='#{shape.row}']").size == 1)
95
+ assert(doc.xpath("//v:shape/x:ClientData/x:Column[text()='#{shape.column}']").size == 1)
96
+ assert(doc.xpath("//v:shape/x:ClientData/x:Anchor[text()='#{shape.left_column}, #{shape.left_offset}, #{shape.top_row}, #{shape.top_offset}, #{shape.right_column}, #{shape.right_offset}, #{shape.bottom_row}, #{shape.bottom_offset}']").size == 1)
97
+ end
98
+ end
99
+
100
+ end
@@ -10,6 +10,7 @@ class TestRelationships < Test::Unit::TestCase
10
10
  def test_type
11
11
  assert_raise(ArgumentError) { Axlsx::Relationship.new 'type', 'target' }
12
12
  assert_nothing_raised { Axlsx::Relationship.new Axlsx::WORKSHEET_R, 'target' }
13
+ assert_nothing_raised { Axlsx::Relationship.new Axlsx::COMMENT_R, 'target' }
13
14
  end
14
15
 
15
16
  def test_target_mode
@@ -61,4 +61,12 @@ class TestGradientFill < Test::Unit::TestCase
61
61
  assert(@item.stop.size == 1)
62
62
  assert(@item.stop.last.is_a?(Axlsx::GradientStop))
63
63
  end
64
+
65
+ def test_to_xml_string
66
+ @item.stop << Axlsx::GradientStop.new(Axlsx::Color.new(:rgb => "000000"), 0.5)
67
+ @item.stop << Axlsx::GradientStop.new(Axlsx::Color.new(:rgb => "FFFFFF"), 0.5)
68
+ @item.type = :path
69
+ doc = Nokogiri::XML(@item.to_xml_string)
70
+ assert(doc.xpath("//color[@rgb='FF000000']"))
71
+ end
64
72
  end