axlsx 1.1.4 → 1.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (242) hide show
  1. data/.yardopts +6 -2
  2. data/CHANGELOG.md +72 -0
  3. data/README.md +114 -31
  4. data/Rakefile +11 -3
  5. data/examples/auto_filter.rb +16 -0
  6. data/examples/auto_filter.xlsx +0 -0
  7. data/examples/basic_charts.rb +58 -0
  8. data/examples/chart_colors.rb +17 -2
  9. data/examples/data_validation.rb +50 -0
  10. data/examples/example.rb +171 -60
  11. data/examples/example.xlsx +0 -0
  12. data/examples/example_streamed.xlsx +0 -0
  13. data/examples/extractive.pdf +0 -0
  14. data/examples/extractive.rb +3 -0
  15. data/examples/extractive.xlsx +0 -0
  16. data/examples/hyperlinks.rb +23 -0
  17. data/examples/hyperlinks.xlsx +0 -0
  18. data/examples/no-use_autowidth.xlsx +0 -0
  19. data/examples/page_setup.rb +11 -0
  20. data/examples/page_setup.xlsx +0 -0
  21. data/examples/scraping_html.rb +91 -0
  22. data/examples/shared_strings_example.xlsx +0 -0
  23. data/examples/sheet_protection.rb +10 -0
  24. data/examples/sheet_view.rb +34 -0
  25. data/examples/skydrive/axlsx.csv +1 -0
  26. data/examples/skydrive/axlsx.xlsx +0 -0
  27. data/examples/skydrive/real_example.rb +8 -8
  28. data/examples/sprk2012/Screen Shot 2012-09-11 at 10.42.06 PM.png +0 -0
  29. data/examples/sprk2012/Screen Shot 2012-09-11 at 11.07.48 PM.png +0 -0
  30. data/examples/sprk2012/Screen Shot 2012-09-11 at 8.31.50 PM.png +0 -0
  31. data/examples/sprk2012/Screen Shot 2012-09-11 at 9.23.27 PM.png +0 -0
  32. data/examples/sprk2012/Screen Shot 2012-09-11 at 9.32.06 PM.png +0 -0
  33. data/examples/sprk2012/Screen Shot 2012-09-11 at 9.33.35 PM.png +0 -0
  34. data/examples/sprk2012/Screen Shot 2012-09-11 at 9.46.44 PM.png +0 -0
  35. data/examples/sprk2012/Screen Shot 2012-09-12 at 5.07.23 PM.png +0 -0
  36. data/examples/sprk2012/basics.rb +11 -0
  37. data/examples/sprk2012/basics.xlsx +0 -0
  38. data/examples/sprk2012/gravatar.jpeg +0 -0
  39. data/examples/sprk2012/hair_club.jpg +0 -0
  40. data/examples/sprk2012/images.rb +9 -0
  41. data/examples/sprk2012/images.xlsx +0 -0
  42. data/examples/sprk2012/line_chart.rb +56 -0
  43. data/examples/sprk2012/line_chart.xlsx +0 -0
  44. data/examples/sprk2012/sprk2012.key +0 -0
  45. data/examples/sprk2012/styles.rb +20 -0
  46. data/examples/sprk2012/styles.xlsx +0 -0
  47. data/examples/styles.rb +62 -0
  48. data/examples/styles.xlsx +0 -0
  49. data/examples/two_cell_anchor_image.rb +11 -0
  50. data/lib/axlsx/content_type/content_type.rb +2 -0
  51. data/lib/axlsx/content_type/default.rb +30 -15
  52. data/lib/axlsx/content_type/override.rb +29 -14
  53. data/lib/axlsx/doc_props/app.rb +161 -104
  54. data/lib/axlsx/doc_props/core.rb +9 -5
  55. data/lib/axlsx/drawing/ax_data_source.rb +7 -6
  56. data/lib/axlsx/drawing/axis.rb +82 -36
  57. data/lib/axlsx/drawing/bar_3D_chart.rb +49 -45
  58. data/lib/axlsx/drawing/bar_series.rb +2 -1
  59. data/lib/axlsx/drawing/cat_axis.rb +43 -39
  60. data/lib/axlsx/drawing/chart.rb +65 -54
  61. data/lib/axlsx/drawing/d_lbls.rb +100 -0
  62. data/lib/axlsx/drawing/drawing.rb +20 -8
  63. data/lib/axlsx/drawing/graphic_frame.rb +2 -1
  64. data/lib/axlsx/drawing/line_3D_chart.rb +3 -10
  65. data/lib/axlsx/drawing/num_data.rb +2 -2
  66. data/lib/axlsx/drawing/num_data_source.rb +4 -1
  67. data/lib/axlsx/drawing/pic.rb +44 -4
  68. data/lib/axlsx/drawing/pie_3D_chart.rb +10 -7
  69. data/lib/axlsx/drawing/scatter_chart.rb +2 -8
  70. data/lib/axlsx/drawing/title.rb +21 -9
  71. data/lib/axlsx/drawing/two_cell_anchor.rb +46 -9
  72. data/lib/axlsx/drawing/view_3D.rb +42 -32
  73. data/lib/axlsx/drawing/vml_drawing.rb +42 -0
  74. data/lib/axlsx/drawing/vml_shape.rb +125 -0
  75. data/lib/axlsx/package.rb +43 -16
  76. data/lib/axlsx/rels/relationship.rb +3 -3
  77. data/lib/axlsx/rels/relationships.rb +1 -11
  78. data/lib/axlsx/stylesheet/gradient_fill.rb +1 -1
  79. data/lib/axlsx/stylesheet/styles.rb +11 -2
  80. data/lib/axlsx/stylesheet/table_style.rb +3 -3
  81. data/lib/axlsx/util/constants.rb +131 -2
  82. data/lib/axlsx/util/simple_typed_list.rb +18 -22
  83. data/lib/axlsx/util/validators.rb +100 -9
  84. data/lib/axlsx/version.rb +2 -7
  85. data/lib/axlsx/workbook/defined_name.rb +174 -0
  86. data/lib/axlsx/workbook/defined_names.rb +21 -0
  87. data/lib/axlsx/workbook/workbook.rb +70 -13
  88. data/lib/axlsx/workbook/worksheet/auto_filter/auto_filter.rb +77 -0
  89. data/lib/axlsx/workbook/worksheet/auto_filter/filter_column.rb +102 -0
  90. data/lib/axlsx/workbook/worksheet/auto_filter/filters.rb +253 -0
  91. data/lib/axlsx/workbook/worksheet/cell.rb +41 -8
  92. data/lib/axlsx/workbook/worksheet/col.rb +15 -0
  93. data/lib/axlsx/workbook/worksheet/cols.rb +20 -0
  94. data/lib/axlsx/workbook/worksheet/comment.rb +101 -0
  95. data/lib/axlsx/workbook/worksheet/comments.rb +85 -0
  96. data/lib/axlsx/workbook/worksheet/conditional_formattings.rb +25 -0
  97. data/lib/axlsx/workbook/worksheet/data_bar.rb +1 -1
  98. data/lib/axlsx/workbook/worksheet/data_validation.rb +245 -0
  99. data/lib/axlsx/workbook/worksheet/data_validations.rb +28 -0
  100. data/lib/axlsx/workbook/worksheet/date_time_converter.rb +1 -1
  101. data/lib/axlsx/workbook/worksheet/dimension.rb +65 -0
  102. data/lib/axlsx/workbook/worksheet/merged_cells.rb +35 -0
  103. data/lib/axlsx/workbook/worksheet/page_set_up_pr.rb +47 -0
  104. data/lib/axlsx/workbook/worksheet/page_setup.rb +241 -0
  105. data/lib/axlsx/workbook/worksheet/pane.rb +144 -0
  106. data/lib/axlsx/workbook/worksheet/print_options.rb +63 -0
  107. data/lib/axlsx/workbook/worksheet/protected_range.rb +46 -0
  108. data/lib/axlsx/workbook/worksheet/protected_ranges.rb +34 -0
  109. data/lib/axlsx/workbook/worksheet/row.rb +36 -20
  110. data/lib/axlsx/workbook/worksheet/selection.rb +111 -0
  111. data/lib/axlsx/workbook/worksheet/sheet_calc_pr.rb +49 -0
  112. data/lib/axlsx/workbook/worksheet/sheet_data.rb +25 -0
  113. data/lib/axlsx/workbook/worksheet/sheet_pr.rb +107 -0
  114. data/lib/axlsx/workbook/worksheet/sheet_protection.rb +224 -0
  115. data/lib/axlsx/workbook/worksheet/sheet_view.rb +379 -0
  116. data/lib/axlsx/workbook/worksheet/table.rb +10 -3
  117. data/lib/axlsx/workbook/worksheet/table_style_info.rb +68 -0
  118. data/lib/axlsx/workbook/worksheet/tables.rb +31 -0
  119. data/lib/axlsx/workbook/worksheet/worksheet.rb +414 -254
  120. data/lib/axlsx/workbook/worksheet/worksheet_comments.rb +57 -0
  121. data/lib/axlsx/workbook/worksheet/worksheet_drawing.rb +64 -0
  122. data/lib/axlsx/workbook/worksheet/worksheet_hyperlink.rb +101 -0
  123. data/lib/axlsx/workbook/worksheet/worksheet_hyperlinks.rb +38 -0
  124. data/lib/axlsx.rb +38 -16
  125. data/test/content_type/tc_content_type.rb +1 -6
  126. data/test/doc_props/tc_app.rb +31 -1
  127. data/test/doc_props/tc_core.rb +3 -1
  128. data/test/drawing/tc_axis.rb +38 -3
  129. data/test/drawing/tc_bar_3D_chart.rb +12 -12
  130. data/test/drawing/tc_bar_series.rb +1 -2
  131. data/test/drawing/tc_cat_axis.rb +3 -3
  132. data/test/drawing/tc_chart.rb +29 -9
  133. data/test/drawing/tc_d_lbls.rb +47 -0
  134. data/test/drawing/tc_drawing.rb +11 -5
  135. data/test/drawing/tc_hyperlink.rb +4 -5
  136. data/test/drawing/tc_line_series.rb +7 -3
  137. data/test/drawing/tc_num_data.rb +5 -1
  138. data/test/drawing/tc_pic.rb +22 -2
  139. data/test/drawing/tc_pie_3D_chart.rb +4 -8
  140. data/test/drawing/tc_pie_series.rb +7 -2
  141. data/test/drawing/tc_scatter_chart.rb +6 -1
  142. data/test/drawing/tc_scatter_series.rb +1 -1
  143. data/test/drawing/tc_series.rb +1 -1
  144. data/test/drawing/tc_title.rb +16 -0
  145. data/test/drawing/tc_two_cell_anchor.rb +1 -2
  146. data/test/drawing/tc_view_3D.rb +18 -18
  147. data/test/drawing/tc_vml_drawing.rb +25 -0
  148. data/test/drawing/tc_vml_shape.rb +100 -0
  149. data/test/rels/tc_relationship.rb +1 -0
  150. data/test/stylesheet/tc_gradient_fill.rb +8 -0
  151. data/test/stylesheet/tc_pattern_fill.rb +7 -1
  152. data/test/stylesheet/tc_styles.rb +16 -4
  153. data/test/stylesheet/tc_table_style.rb +8 -0
  154. data/test/stylesheet/tc_table_style_element.rb +10 -1
  155. data/test/tc_helper.rb +1 -0
  156. data/test/tc_package.rb +94 -17
  157. data/test/util/tc_simple_typed_list.rb +13 -0
  158. data/test/util/tc_validators.rb +101 -8
  159. data/test/workbook/tc_defined_name.rb +41 -0
  160. data/test/workbook/tc_workbook.rb +5 -3
  161. data/test/workbook/worksheet/auto_filter/tc_auto_filter.rb +38 -0
  162. data/test/workbook/worksheet/auto_filter/tc_filter_column.rb +76 -0
  163. data/test/workbook/worksheet/auto_filter/tc_filters.rb +50 -0
  164. data/test/workbook/worksheet/tc_cell.rb +53 -7
  165. data/test/workbook/worksheet/tc_col.rb +9 -0
  166. data/test/workbook/worksheet/tc_comment.rb +57 -0
  167. data/test/workbook/worksheet/tc_comments.rb +57 -0
  168. data/test/workbook/worksheet/tc_conditional_formatting.rb +44 -0
  169. data/test/workbook/worksheet/tc_data_bar.rb +1 -1
  170. data/test/workbook/worksheet/tc_data_validation.rb +265 -0
  171. data/test/workbook/worksheet/tc_page_set_up_pr.rb +15 -0
  172. data/test/workbook/worksheet/tc_page_setup.rb +143 -0
  173. data/test/workbook/worksheet/tc_pane.rb +94 -0
  174. data/test/workbook/worksheet/tc_print_options.rb +72 -0
  175. data/test/workbook/worksheet/tc_protected_range.rb +17 -0
  176. data/test/workbook/worksheet/tc_row.rb +32 -14
  177. data/test/workbook/worksheet/tc_selection.rb +94 -0
  178. data/test/workbook/worksheet/tc_sheet_calc_pr.rb +18 -0
  179. data/test/workbook/worksheet/tc_sheet_pr.rb +27 -0
  180. data/test/workbook/worksheet/tc_sheet_protection.rb +117 -0
  181. data/test/workbook/worksheet/tc_sheet_view.rb +214 -0
  182. data/test/workbook/worksheet/{table/tc_table.rb → tc_table.rb} +9 -12
  183. data/test/workbook/worksheet/tc_table_style_info.rb +53 -0
  184. data/test/workbook/worksheet/tc_worksheet.rb +155 -51
  185. data/test/workbook/worksheet/tc_worksheet_hyperlink.rb +64 -0
  186. metadata +194 -81
  187. data/examples/#extractive.csv# +0 -0
  188. data/examples/#extractive.rb# +0 -45
  189. data/examples/chart_colors.rb~ +0 -0
  190. data/examples/chart_colors.xlsx +0 -0
  191. data/examples/colored_series_data.xlsx +0 -0
  192. data/examples/conditional_formatting/getting_barred.xlsx +0 -0
  193. data/examples/example.csv +0 -1000
  194. data/examples/extractive.csv +0 -1
  195. data/examples/extractive.csv~ +0 -1
  196. data/examples/extractive.rb~ +0 -3
  197. data/examples/stack.rb +0 -21
  198. data/examples/stack.rb~ +0 -27
  199. data/examples/stack.xlsx +0 -0
  200. data/examples/~$chart_colors.xlsx +0 -0
  201. data/examples/~$extractive.xlsx +0 -0
  202. data/lib/axlsx/drawing/ax_data_source.rb~ +0 -55
  203. data/lib/axlsx/drawing/data_source.rb~ +0 -51
  204. data/lib/axlsx/drawing/hlink_click.rb~ +0 -0
  205. data/lib/axlsx/drawing/hyperlink.rb~ +0 -64
  206. data/lib/axlsx/drawing/num_data.rb~ +0 -51
  207. data/lib/axlsx/drawing/num_data_source.rb~ +0 -54
  208. data/lib/axlsx/drawing/num_val.rb~ +0 -40
  209. data/lib/axlsx/drawing/picture_locking.rb~ +0 -36
  210. data/lib/axlsx/drawing/ref.rb~ +0 -41
  211. data/lib/axlsx/drawing/str_data.rb~ +0 -58
  212. data/lib/axlsx/drawing/str_val.rb~ +0 -35
  213. data/lib/axlsx/util/cbf.rb +0 -333
  214. data/lib/axlsx/util/cfb.rb~ +0 -201
  215. data/lib/axlsx/util/font_tables.rb~ +0 -0
  216. data/lib/axlsx/util/ms_off_crypto.rb +0 -189
  217. data/lib/axlsx/util/ms_off_crypto.rb~ +0 -3
  218. data/lib/axlsx/util/ms_offcrypto.rb~ +0 -0
  219. data/lib/axlsx/util/parser.rb~ +0 -6
  220. data/lib/axlsx/util/storage.rb~ +0 -0
  221. data/lib/axlsx/workbook/shared_strings_table.rb~ +0 -69
  222. data/lib/axlsx/workbook/worksheet/cfvo.rb~ +0 -0
  223. data/lib/axlsx/workbook/worksheet/col.rb~ +0 -0
  224. data/lib/axlsx/workbook/worksheet/color_scale.rb~ +0 -46
  225. data/lib/axlsx/workbook/worksheet/data_bar.rb~ +0 -0
  226. data/lib/axlsx/workbook/worksheet/icon_set.rb~ +0 -95
  227. data/lib/axlsx/workbook/worksheet/shared_strings_table.rb~ +0 -0
  228. data/lib/axlsx/workbook/worksheet/table.rb~ +0 -97
  229. data/lib/schema/dc.xsd~ +0 -118
  230. data/lib/schema/dcterms.xsd~ +0 -331
  231. data/lib/schema/opc-coreProperties.xsd~ +0 -50
  232. data/test/drawing/tc_data_source.rb~ +0 -30
  233. data/test/drawing/tc_num_data.rb~ +0 -35
  234. data/test/drawing/tc_num_val.rb~ +0 -29
  235. data/test/drawing/tc_str_data.rb~ +0 -30
  236. data/test/drawing/tc_str_val.rb~ +0 -26
  237. data/test/workbook/worksheet/table/tc_table.rb~ +0 -72
  238. data/test/workbook/worksheet/tc_cfvo.rb~ +0 -20
  239. data/test/workbook/worksheet/tc_col.rb~ +0 -10
  240. data/test/workbook/worksheet/tc_color_scale.rb~ +0 -0
  241. data/test/workbook/worksheet/tc_data_bar.rb~ +0 -0
  242. data/test/workbook/worksheet/tc_icon_set.rb~ +0 -0
@@ -0,0 +1,47 @@
1
+ require 'tc_helper'
2
+
3
+ class TestDLbls < Test::Unit::TestCase
4
+
5
+ def setup
6
+ @d_lbls = Axlsx::DLbls.new(Axlsx::Pie3DChart)
7
+ end
8
+
9
+ def test_initialization
10
+ assert_equal(:bestFit, @d_lbls.d_lbl_pos)
11
+ Axlsx::DLbls::BOOLEAN_ATTRIBUTES.each do |attr|
12
+ assert_equal(false, @d_lbls.send(attr))
13
+ end
14
+ end
15
+
16
+ def test_initialization_with_optoins
17
+ options_hash = Hash[*[Axlsx::DLbls::BOOLEAN_ATTRIBUTES.map { |name| [name, true] }] ]
18
+ d_lbls = Axlsx::DLbls.new(Axlsx::Pie3DChart, options_hash.merge( { :d_lbl_pos => :t }))
19
+ Axlsx::DLbls::BOOLEAN_ATTRIBUTES.each do |attr|
20
+ assert_equal(true, d_lbls.send(attr), "boolean attributes set by options")
21
+ end
22
+ assert_equal(:t, d_lbls.d_lbl_pos, "d_lbl_pos set by options")
23
+ end
24
+ def test_d_lbl_pos
25
+ assert_raise(ArgumentError, 'invlaid label positions are rejected') { @d_lbls.d_lbl_pos = :upside_down }
26
+ assert_nothing_raised('accepts valid label position') { @d_lbls.d_lbl_pos = :ctr }
27
+ end
28
+
29
+ def test_boolean_attributes
30
+ Axlsx::DLbls::BOOLEAN_ATTRIBUTES.each do |attr|
31
+ assert_raise(ArgumentError, "rejects non boolean value for #{attr}") { @d_lbls.send("#{attr}=", :foo) }
32
+ assert_nothing_raised("accepts boolean value for #{attr}") { @d_lbls.send("#{attr}=", true) }
33
+ assert_nothing_raised("accepts boolean value for #{attr}") { @d_lbls.send("#{attr}=", false) }
34
+ end
35
+ end
36
+
37
+ def test_to_xml_string
38
+ str = '<?xml version="1.0" encoding="UTF-8"?>'
39
+ str << '<c:chartSpace xmlns:c="' << Axlsx::XML_NS_C << '" xmlns:a="' << Axlsx::XML_NS_A << '" xmlns:r="' << Axlsx::XML_NS_R << '">'
40
+ @d_lbls.to_xml_string(str)
41
+ str << '</c:chartSpace>'
42
+ doc = Nokogiri::XML(str)
43
+ @d_lbls.instance_values.each do |name, value|
44
+ assert(doc.xpath("//c:#{Axlsx::camel(name, false)}[@val='#{value}']"), "#{name} is properly serialized")
45
+ end
46
+ end
47
+ end
@@ -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,8 +5,8 @@ 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
@@ -15,6 +15,10 @@ class TestLineSeries < Test::Unit::TestCase
15
15
  assert_equal(@series.data.class, Axlsx::NumDataSource)
16
16
 
17
17
  end
18
-
18
+
19
+ def test_to_xml_string
20
+ doc = Nokogiri::XML(@series.to_xml_string)
21
+ assert(doc.xpath("//srgbClr[@val='#{@series.color}']"))
22
+ end
19
23
  #TODO serialization testing
20
24
  end
@@ -9,7 +9,11 @@ class TestNumData < Test::Unit::TestCase
9
9
  def test_initialize
10
10
  assert_equal(@num_data.format_code, "General")
11
11
  end
12
-
12
+
13
+ def test_formula_based_cell
14
+
15
+ end
16
+
13
17
  def test_format_code
14
18
  assert_raise(ArgumentError) {@num_data.format_code = 7}
15
19
  assert_nothing_raised {@num_data.format_code = 'foo_bar'}
@@ -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,8 +5,8 @@ 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
@@ -22,6 +22,11 @@ class TestPieSeries < Test::Unit::TestCase
22
22
  assert(@series.explosion == 20)
23
23
  end
24
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
25
30
  #TODO test unique serialization parts
26
31
 
27
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,7 +5,7 @@ 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"
8
+ @chart = @ws.add_chart Axlsx::ScatterChart, :title => "Scatter Chart"
9
9
  @series = @chart.add_series :xData=>[1,2,4], :yData=>[1,3,9], :title=>"exponents", :color => 'FF0000'
10
10
  end
11
11
 
@@ -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
 
@@ -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
@@ -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
@@ -33,5 +33,11 @@ class TestPatternFill < Test::Unit::TestCase
33
33
  assert_nothing_raised { @item.patternType = :lightUp }
34
34
  assert_equal(@item.patternType, :lightUp)
35
35
  end
36
-
36
+
37
+ def test_to_xml_string
38
+ @item = Axlsx::PatternFill.new :bgColor => Axlsx::Color.new(:rgb => "FF0000"), :fgColor => Axlsx::Color.new(:rgb=>"00FF00")
39
+ doc = Nokogiri::XML(@item.to_xml_string)
40
+ assert(doc.xpath('//color[@rgb="FFFF0000"]'))
41
+ assert(doc.xpath('//color[@rgb="FF00FF00"]'))
42
+ end
37
43
  end
@@ -19,7 +19,7 @@ class TestStyles < Test::Unit::TestCase
19
19
  end
20
20
  def test_add_style_border_hash
21
21
  border_count = @styles.borders.size
22
- s = @styles.add_style :border => {:style => :thin, :color => "FFFF0000"}
22
+ @styles.add_style :border => {:style => :thin, :color => "FFFF0000"}
23
23
  assert_equal(@styles.borders.size, border_count + 1)
24
24
  assert_equal(@styles.borders.last.prs.last.color.rgb, "FFFF0000")
25
25
  assert_raise(ArgumentError) { @styles.add_style :border => {:color => "FFFF0000"} }
@@ -27,7 +27,7 @@ class TestStyles < Test::Unit::TestCase
27
27
  end
28
28
 
29
29
  def test_add_style_border_edges
30
- s = @styles.add_style :border => { :style => :thin, :color => "0000FFFF", :edges => [:top, :bottom] }
30
+ @styles.add_style :border => { :style => :thin, :color => "0000FFFF", :edges => [:top, :bottom] }
31
31
  parts = @styles.borders.last.prs
32
32
  parts.each { |pr| assert_equal(pr.color.rgb, "0000FFFF", "Style is applied to #{pr.name} properly") }
33
33
  assert((parts.map { |pr| pr.name.to_s }.sort && ['bottom', 'top']).size == 2, "specify two edges, and you get two border prs")
@@ -44,7 +44,6 @@ class TestStyles < Test::Unit::TestCase
44
44
  def test_parse_num_fmt
45
45
  f_code = {:format_code => "YYYY/MM"}
46
46
  num_fmt = {:num_fmt => 5}
47
- both = { :format_code => "#000", :num_fmt => 0 }
48
47
  assert_equal(@styles.parse_num_fmt_options, nil, 'noop if neither :format_code or :num_fmt exist')
49
48
  max = @styles.numFmts.map{ |nf| nf.numFmtId }.max
50
49
  @styles.parse_num_fmt_options(f_code)
@@ -106,6 +105,19 @@ class TestStyles < Test::Unit::TestCase
106
105
  assert(@styles.parse_alignment_options(:alignment => {}).is_a?(Axlsx::CellAlignment))
107
106
  end
108
107
 
108
+ def test_parse_font_using_defaults
109
+ original = @styles.fonts.first
110
+ @styles.add_style :b => 1, :sz => 99
111
+ created = @styles.fonts.last
112
+ original_attributes = original.instance_values
113
+ assert_equal(1, created.b)
114
+ assert_equal(99, created.sz)
115
+ copied = original_attributes.reject{ |key, value| %w(b sz).include? key }
116
+ copied.each do |key, value|
117
+ assert_equal(created.instance_values[key], value)
118
+ end
119
+ end
120
+
109
121
  def test_parse_font_options
110
122
  options = {
111
123
  :fg_color => "FF050505",
@@ -181,7 +193,7 @@ class TestStyles < Test::Unit::TestCase
181
193
 
182
194
  def test_basic_add_style_dxf
183
195
  border_count = @styles.borders.size
184
- s = @styles.add_style :border => {:style => :thin, :color => "FFFF0000"}, :type => :dxf
196
+ @styles.add_style :border => {:style => :thin, :color => "FFFF0000"}, :type => :dxf
185
197
  assert_equal(@styles.borders.size, border_count, "styles borders not affected")
186
198
  assert_equal(@styles.dxfs.last.border.prs.last.color.rgb, "FFFF0000")
187
199
  assert_raise(ArgumentError) { @styles.add_style :border => {:color => "FFFF0000"}, :type => :dxf }
@@ -13,6 +13,10 @@ class TestTableStyle < Test::Unit::TestCase
13
13
  assert_equal(@item.name, "fisher")
14
14
  assert_equal(@item.pivot, nil)
15
15
  assert_equal(@item.table, nil)
16
+ ts = Axlsx::TableStyle.new 'price', :pivot => true, :table => true
17
+ assert_equal(ts.name, 'price')
18
+ assert_equal(ts.pivot, true)
19
+ assert_equal(ts.table, true)
16
20
  end
17
21
 
18
22
  def test_name
@@ -33,4 +37,8 @@ class TestTableStyle < Test::Unit::TestCase
33
37
  assert_equal(@item.table, true)
34
38
  end
35
39
 
40
+ def test_to_xml_string
41
+ doc = Nokogiri::XML(@item.to_xml_string)
42
+ assert(doc.xpath("//tableStyle[@name='#{@item.name}']"))
43
+ end
36
44
  end
@@ -13,6 +13,10 @@ class TestTableStyleElement < Test::Unit::TestCase
13
13
  assert_equal(@item.type, nil)
14
14
  assert_equal(@item.size, nil)
15
15
  assert_equal(@item.dxfId, nil)
16
+ options = { :type => :headerRow, :size => 10, :dxfId => 1 }
17
+
18
+ tse = Axlsx::TableStyleElement.new options
19
+ options.each { |key, value| assert_equal(tse.send(key.to_sym), value) }
16
20
  end
17
21
 
18
22
  def test_type
@@ -32,5 +36,10 @@ class TestTableStyleElement < Test::Unit::TestCase
32
36
  assert_nothing_raised { @item.dxfId = 7 }
33
37
  assert_equal(@item.dxfId, 7)
34
38
  end
35
-
39
+
40
+ def test_to_xml_string
41
+ doc = Nokogiri::XML(@item.to_xml_string)
42
+ @item.type = :headerRow
43
+ assert(doc.xpath("//tableStyleElement[@type='#{@item.type.to_s}']"))
44
+ end
36
45
  end
data/test/tc_helper.rb CHANGED
@@ -1,3 +1,4 @@
1
1
  $LOAD_PATH.unshift "#{File.dirname(__FILE__)}/../lib"
2
+ require 'cover_me' unless RUBY_VERSION == '1.8.7'
2
3
  require 'test/unit'
3
4
  require "axlsx.rb"