axlsx-alt 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (330) hide show
  1. checksums.yaml +7 -0
  2. data/.yardopts +9 -0
  3. data/.yardopts_guide +19 -0
  4. data/CHANGELOG.md +244 -0
  5. data/LICENSE +22 -0
  6. data/README.md +180 -0
  7. data/Rakefile +29 -0
  8. data/examples/2010_comments.rb +17 -0
  9. data/examples/anchor_swapping.rb +28 -0
  10. data/examples/auto_filter.rb +25 -0
  11. data/examples/basic_charts.rb +58 -0
  12. data/examples/chart_colors.rb +88 -0
  13. data/examples/colored_links.rb +59 -0
  14. data/examples/conditional_formatting/example_conditional_formatting.rb +89 -0
  15. data/examples/conditional_formatting/getting_barred.rb +37 -0
  16. data/examples/conditional_formatting/hitting_the_high_notes.rb +37 -0
  17. data/examples/conditional_formatting/scaled_colors.rb +39 -0
  18. data/examples/conditional_formatting/stop_and_go.rb +37 -0
  19. data/examples/data_validation.rb +67 -0
  20. data/examples/example.rb +885 -0
  21. data/examples/extractive.rb +45 -0
  22. data/examples/image1.jpeg +0 -0
  23. data/examples/ios_preview.rb +14 -0
  24. data/examples/merge_cells.rb +17 -0
  25. data/examples/no_grid_with_borders.rb +18 -0
  26. data/examples/page_setup.rb +11 -0
  27. data/examples/pivot_table.rb +39 -0
  28. data/examples/pivot_test.rb +63 -0
  29. data/examples/sheet_protection.rb +10 -0
  30. data/examples/skydrive/real_example.rb +63 -0
  31. data/examples/split.rb +16 -0
  32. data/examples/styles.rb +66 -0
  33. data/examples/underline.rb +13 -0
  34. data/examples/wrap_text.rb +21 -0
  35. data/lib/axlsx.rb +171 -0
  36. data/lib/axlsx/content_type/abstract_content_type.rb +32 -0
  37. data/lib/axlsx/content_type/content_type.rb +26 -0
  38. data/lib/axlsx/content_type/default.rb +25 -0
  39. data/lib/axlsx/content_type/override.rb +25 -0
  40. data/lib/axlsx/doc_props/app.rb +235 -0
  41. data/lib/axlsx/doc_props/core.rb +39 -0
  42. data/lib/axlsx/drawing/area_chart.rb +99 -0
  43. data/lib/axlsx/drawing/area_series.rb +110 -0
  44. data/lib/axlsx/drawing/ax_data_source.rb +26 -0
  45. data/lib/axlsx/drawing/axes.rb +61 -0
  46. data/lib/axlsx/drawing/axis.rb +190 -0
  47. data/lib/axlsx/drawing/bar_3D_chart.rb +151 -0
  48. data/lib/axlsx/drawing/bar_chart.rb +143 -0
  49. data/lib/axlsx/drawing/bar_series.rb +82 -0
  50. data/lib/axlsx/drawing/bubble_chart.rb +59 -0
  51. data/lib/axlsx/drawing/bubble_series.rb +63 -0
  52. data/lib/axlsx/drawing/cat_axis.rb +85 -0
  53. data/lib/axlsx/drawing/chart.rb +276 -0
  54. data/lib/axlsx/drawing/d_lbls.rb +90 -0
  55. data/lib/axlsx/drawing/drawing.rb +167 -0
  56. data/lib/axlsx/drawing/graphic_frame.rb +54 -0
  57. data/lib/axlsx/drawing/hyperlink.rb +100 -0
  58. data/lib/axlsx/drawing/line_3D_chart.rb +68 -0
  59. data/lib/axlsx/drawing/line_chart.rb +99 -0
  60. data/lib/axlsx/drawing/line_series.rb +110 -0
  61. data/lib/axlsx/drawing/marker.rb +84 -0
  62. data/lib/axlsx/drawing/num_data.rb +52 -0
  63. data/lib/axlsx/drawing/num_data_source.rb +62 -0
  64. data/lib/axlsx/drawing/num_val.rb +34 -0
  65. data/lib/axlsx/drawing/one_cell_anchor.rb +99 -0
  66. data/lib/axlsx/drawing/pic.rb +211 -0
  67. data/lib/axlsx/drawing/picture_locking.rb +42 -0
  68. data/lib/axlsx/drawing/pie_3D_chart.rb +47 -0
  69. data/lib/axlsx/drawing/pie_series.rb +74 -0
  70. data/lib/axlsx/drawing/scaling.rb +60 -0
  71. data/lib/axlsx/drawing/scatter_chart.rb +74 -0
  72. data/lib/axlsx/drawing/scatter_series.rb +98 -0
  73. data/lib/axlsx/drawing/ser_axis.rb +45 -0
  74. data/lib/axlsx/drawing/series.rb +69 -0
  75. data/lib/axlsx/drawing/series_title.rb +23 -0
  76. data/lib/axlsx/drawing/str_data.rb +42 -0
  77. data/lib/axlsx/drawing/str_val.rb +34 -0
  78. data/lib/axlsx/drawing/title.rb +96 -0
  79. data/lib/axlsx/drawing/two_cell_anchor.rb +97 -0
  80. data/lib/axlsx/drawing/val_axis.rb +37 -0
  81. data/lib/axlsx/drawing/view_3D.rb +115 -0
  82. data/lib/axlsx/drawing/vml_drawing.rb +42 -0
  83. data/lib/axlsx/drawing/vml_shape.rb +66 -0
  84. data/lib/axlsx/package.rb +358 -0
  85. data/lib/axlsx/rels/relationship.rb +137 -0
  86. data/lib/axlsx/rels/relationships.rb +32 -0
  87. data/lib/axlsx/stylesheet/border.rb +71 -0
  88. data/lib/axlsx/stylesheet/border_pr.rb +71 -0
  89. data/lib/axlsx/stylesheet/cell_alignment.rb +132 -0
  90. data/lib/axlsx/stylesheet/cell_protection.rb +41 -0
  91. data/lib/axlsx/stylesheet/cell_style.rb +72 -0
  92. data/lib/axlsx/stylesheet/color.rb +76 -0
  93. data/lib/axlsx/stylesheet/dxf.rb +79 -0
  94. data/lib/axlsx/stylesheet/fill.rb +35 -0
  95. data/lib/axlsx/stylesheet/font.rb +148 -0
  96. data/lib/axlsx/stylesheet/gradient_fill.rb +103 -0
  97. data/lib/axlsx/stylesheet/gradient_stop.rb +37 -0
  98. data/lib/axlsx/stylesheet/num_fmt.rb +86 -0
  99. data/lib/axlsx/stylesheet/pattern_fill.rb +73 -0
  100. data/lib/axlsx/stylesheet/styles.rb +420 -0
  101. data/lib/axlsx/stylesheet/table_style.rb +54 -0
  102. data/lib/axlsx/stylesheet/table_style_element.rb +77 -0
  103. data/lib/axlsx/stylesheet/table_styles.rb +46 -0
  104. data/lib/axlsx/stylesheet/xf.rb +147 -0
  105. data/lib/axlsx/util/accessors.rb +64 -0
  106. data/lib/axlsx/util/constants.rb +400 -0
  107. data/lib/axlsx/util/mime_type_utils.rb +11 -0
  108. data/lib/axlsx/util/options_parser.rb +16 -0
  109. data/lib/axlsx/util/parser.rb +44 -0
  110. data/lib/axlsx/util/serialized_attributes.rb +89 -0
  111. data/lib/axlsx/util/simple_typed_list.rb +179 -0
  112. data/lib/axlsx/util/storage.rb +146 -0
  113. data/lib/axlsx/util/validators.rb +312 -0
  114. data/lib/axlsx/version.rb +3 -0
  115. data/lib/axlsx/workbook/defined_name.rb +128 -0
  116. data/lib/axlsx/workbook/defined_names.rb +21 -0
  117. data/lib/axlsx/workbook/shared_strings_table.rb +77 -0
  118. data/lib/axlsx/workbook/workbook.rb +379 -0
  119. data/lib/axlsx/workbook/workbook_view.rb +80 -0
  120. data/lib/axlsx/workbook/workbook_views.rb +22 -0
  121. data/lib/axlsx/workbook/worksheet/auto_filter/auto_filter.rb +77 -0
  122. data/lib/axlsx/workbook/worksheet/auto_filter/filter_column.rb +94 -0
  123. data/lib/axlsx/workbook/worksheet/auto_filter/filters.rb +244 -0
  124. data/lib/axlsx/workbook/worksheet/break.rb +35 -0
  125. data/lib/axlsx/workbook/worksheet/cell.rb +478 -0
  126. data/lib/axlsx/workbook/worksheet/cell_serializer.rb +164 -0
  127. data/lib/axlsx/workbook/worksheet/cfvo.rb +60 -0
  128. data/lib/axlsx/workbook/worksheet/cfvos.rb +18 -0
  129. data/lib/axlsx/workbook/worksheet/col.rb +141 -0
  130. data/lib/axlsx/workbook/worksheet/col_breaks.rb +35 -0
  131. data/lib/axlsx/workbook/worksheet/color_scale.rb +110 -0
  132. data/lib/axlsx/workbook/worksheet/cols.rb +23 -0
  133. data/lib/axlsx/workbook/worksheet/comment.rb +90 -0
  134. data/lib/axlsx/workbook/worksheet/comments.rb +97 -0
  135. data/lib/axlsx/workbook/worksheet/conditional_formatting.rb +82 -0
  136. data/lib/axlsx/workbook/worksheet/conditional_formatting_rule.rb +220 -0
  137. data/lib/axlsx/workbook/worksheet/conditional_formattings.rb +25 -0
  138. data/lib/axlsx/workbook/worksheet/data_bar.rb +129 -0
  139. data/lib/axlsx/workbook/worksheet/data_validation.rb +246 -0
  140. data/lib/axlsx/workbook/worksheet/data_validations.rb +28 -0
  141. data/lib/axlsx/workbook/worksheet/date_time_converter.rb +30 -0
  142. data/lib/axlsx/workbook/worksheet/dimension.rb +64 -0
  143. data/lib/axlsx/workbook/worksheet/header_footer.rb +52 -0
  144. data/lib/axlsx/workbook/worksheet/icon_set.rb +81 -0
  145. data/lib/axlsx/workbook/worksheet/merged_cells.rb +37 -0
  146. data/lib/axlsx/workbook/worksheet/outline_pr.rb +33 -0
  147. data/lib/axlsx/workbook/worksheet/page_margins.rb +97 -0
  148. data/lib/axlsx/workbook/worksheet/page_set_up_pr.rb +44 -0
  149. data/lib/axlsx/workbook/worksheet/page_setup.rb +240 -0
  150. data/lib/axlsx/workbook/worksheet/pane.rb +139 -0
  151. data/lib/axlsx/workbook/worksheet/pivot_table.rb +289 -0
  152. data/lib/axlsx/workbook/worksheet/pivot_table_cache_definition.rb +66 -0
  153. data/lib/axlsx/workbook/worksheet/pivot_tables.rb +24 -0
  154. data/lib/axlsx/workbook/worksheet/print_options.rb +39 -0
  155. data/lib/axlsx/workbook/worksheet/protected_range.rb +47 -0
  156. data/lib/axlsx/workbook/worksheet/protected_ranges.rb +37 -0
  157. data/lib/axlsx/workbook/worksheet/rich_text.rb +55 -0
  158. data/lib/axlsx/workbook/worksheet/rich_text_run.rb +250 -0
  159. data/lib/axlsx/workbook/worksheet/row.rb +161 -0
  160. data/lib/axlsx/workbook/worksheet/row_breaks.rb +33 -0
  161. data/lib/axlsx/workbook/worksheet/selection.rb +101 -0
  162. data/lib/axlsx/workbook/worksheet/sheet_calc_pr.rb +29 -0
  163. data/lib/axlsx/workbook/worksheet/sheet_data.rb +27 -0
  164. data/lib/axlsx/workbook/worksheet/sheet_format_pr.rb +60 -0
  165. data/lib/axlsx/workbook/worksheet/sheet_pr.rb +87 -0
  166. data/lib/axlsx/workbook/worksheet/sheet_protection.rb +118 -0
  167. data/lib/axlsx/workbook/worksheet/sheet_view.rb +213 -0
  168. data/lib/axlsx/workbook/worksheet/table.rb +102 -0
  169. data/lib/axlsx/workbook/worksheet/table_style_info.rb +49 -0
  170. data/lib/axlsx/workbook/worksheet/tables.rb +34 -0
  171. data/lib/axlsx/workbook/worksheet/worksheet.rb +756 -0
  172. data/lib/axlsx/workbook/worksheet/worksheet_comments.rb +58 -0
  173. data/lib/axlsx/workbook/worksheet/worksheet_drawing.rb +58 -0
  174. data/lib/axlsx/workbook/worksheet/worksheet_hyperlink.rb +74 -0
  175. data/lib/axlsx/workbook/worksheet/worksheet_hyperlinks.rb +38 -0
  176. data/lib/schema/dc.xsd +118 -0
  177. data/lib/schema/dcmitype.xsd +52 -0
  178. data/lib/schema/dcterms.xsd +331 -0
  179. data/lib/schema/dml-chart.xsd +1499 -0
  180. data/lib/schema/dml-chartDrawing.xsd +146 -0
  181. data/lib/schema/dml-compatibility.xsd +14 -0
  182. data/lib/schema/dml-diagram.xsd +1091 -0
  183. data/lib/schema/dml-lockedCanvas.xsd +11 -0
  184. data/lib/schema/dml-main.xsd +3048 -0
  185. data/lib/schema/dml-picture.xsd +23 -0
  186. data/lib/schema/dml-spreadsheetDrawing.xsd +185 -0
  187. data/lib/schema/dml-wordprocessingDrawing.xsd +185 -0
  188. data/lib/schema/opc-contentTypes.xsd +42 -0
  189. data/lib/schema/opc-coreProperties.xsd +54 -0
  190. data/lib/schema/opc-digSig.xsd +49 -0
  191. data/lib/schema/opc-relationships.xsd +33 -0
  192. data/lib/schema/pml.xsd +1676 -0
  193. data/lib/schema/shared-additionalCharacteristics.xsd +28 -0
  194. data/lib/schema/shared-bibliography.xsd +144 -0
  195. data/lib/schema/shared-commonSimpleTypes.xsd +166 -0
  196. data/lib/schema/shared-customXmlDataProperties.xsd +25 -0
  197. data/lib/schema/shared-customXmlSchemaProperties.xsd +18 -0
  198. data/lib/schema/shared-documentPropertiesCustom.xsd +59 -0
  199. data/lib/schema/shared-documentPropertiesExtended.xsd +56 -0
  200. data/lib/schema/shared-documentPropertiesVariantTypes.xsd +195 -0
  201. data/lib/schema/shared-math.xsd +582 -0
  202. data/lib/schema/shared-relationshipReference.xsd +25 -0
  203. data/lib/schema/sml.xsd +4434 -0
  204. data/lib/schema/vml-main.xsd +569 -0
  205. data/lib/schema/vml-officeDrawing.xsd +509 -0
  206. data/lib/schema/vml-presentationDrawing.xsd +12 -0
  207. data/lib/schema/vml-spreadsheetDrawing.xsd +108 -0
  208. data/lib/schema/vml-wordprocessingDrawing.xsd +96 -0
  209. data/lib/schema/wml.xsd +3644 -0
  210. data/lib/schema/xml.xsd +116 -0
  211. data/test/benchmark.rb +72 -0
  212. data/test/content_type/tc_content_type.rb +76 -0
  213. data/test/content_type/tc_default.rb +16 -0
  214. data/test/content_type/tc_override.rb +14 -0
  215. data/test/doc_props/tc_app.rb +43 -0
  216. data/test/doc_props/tc_core.rb +42 -0
  217. data/test/drawing/tc_area_chart.rb +39 -0
  218. data/test/drawing/tc_area_series.rb +71 -0
  219. data/test/drawing/tc_axes.rb +8 -0
  220. data/test/drawing/tc_axis.rb +112 -0
  221. data/test/drawing/tc_bar_3D_chart.rb +71 -0
  222. data/test/drawing/tc_bar_chart.rb +71 -0
  223. data/test/drawing/tc_bar_series.rb +37 -0
  224. data/test/drawing/tc_bubble_chart.rb +44 -0
  225. data/test/drawing/tc_bubble_series.rb +21 -0
  226. data/test/drawing/tc_cat_axis.rb +31 -0
  227. data/test/drawing/tc_cat_axis_data.rb +27 -0
  228. data/test/drawing/tc_chart.rb +123 -0
  229. data/test/drawing/tc_d_lbls.rb +57 -0
  230. data/test/drawing/tc_data_source.rb +23 -0
  231. data/test/drawing/tc_drawing.rb +80 -0
  232. data/test/drawing/tc_graphic_frame.rb +27 -0
  233. data/test/drawing/tc_hyperlink.rb +64 -0
  234. data/test/drawing/tc_line_3d_chart.rb +47 -0
  235. data/test/drawing/tc_line_chart.rb +39 -0
  236. data/test/drawing/tc_line_series.rb +71 -0
  237. data/test/drawing/tc_marker.rb +44 -0
  238. data/test/drawing/tc_named_axis_data.rb +27 -0
  239. data/test/drawing/tc_num_data.rb +31 -0
  240. data/test/drawing/tc_num_val.rb +29 -0
  241. data/test/drawing/tc_one_cell_anchor.rb +66 -0
  242. data/test/drawing/tc_pic.rb +103 -0
  243. data/test/drawing/tc_picture_locking.rb +72 -0
  244. data/test/drawing/tc_pie_3D_chart.rb +28 -0
  245. data/test/drawing/tc_pie_series.rb +32 -0
  246. data/test/drawing/tc_scaling.rb +36 -0
  247. data/test/drawing/tc_scatter_chart.rb +48 -0
  248. data/test/drawing/tc_scatter_series.rb +56 -0
  249. data/test/drawing/tc_ser_axis.rb +31 -0
  250. data/test/drawing/tc_series.rb +23 -0
  251. data/test/drawing/tc_series_title.rb +33 -0
  252. data/test/drawing/tc_str_data.rb +18 -0
  253. data/test/drawing/tc_str_val.rb +30 -0
  254. data/test/drawing/tc_title.rb +54 -0
  255. data/test/drawing/tc_two_cell_anchor.rb +36 -0
  256. data/test/drawing/tc_val_axis.rb +24 -0
  257. data/test/drawing/tc_view_3D.rb +54 -0
  258. data/test/drawing/tc_vml_drawing.rb +25 -0
  259. data/test/drawing/tc_vml_shape.rb +106 -0
  260. data/test/profile.rb +24 -0
  261. data/test/rels/tc_relationship.rb +44 -0
  262. data/test/rels/tc_relationships.rb +37 -0
  263. data/test/stylesheet/tc_border.rb +37 -0
  264. data/test/stylesheet/tc_border_pr.rb +32 -0
  265. data/test/stylesheet/tc_cell_alignment.rb +81 -0
  266. data/test/stylesheet/tc_cell_protection.rb +29 -0
  267. data/test/stylesheet/tc_cell_style.rb +57 -0
  268. data/test/stylesheet/tc_color.rb +43 -0
  269. data/test/stylesheet/tc_dxf.rb +81 -0
  270. data/test/stylesheet/tc_fill.rb +18 -0
  271. data/test/stylesheet/tc_font.rb +121 -0
  272. data/test/stylesheet/tc_gradient_fill.rb +72 -0
  273. data/test/stylesheet/tc_gradient_stop.rb +31 -0
  274. data/test/stylesheet/tc_num_fmt.rb +30 -0
  275. data/test/stylesheet/tc_pattern_fill.rb +43 -0
  276. data/test/stylesheet/tc_styles.rb +235 -0
  277. data/test/stylesheet/tc_table_style.rb +44 -0
  278. data/test/stylesheet/tc_table_style_element.rb +45 -0
  279. data/test/stylesheet/tc_table_styles.rb +29 -0
  280. data/test/stylesheet/tc_xf.rb +120 -0
  281. data/test/tc_axlsx.rb +103 -0
  282. data/test/tc_helper.rb +12 -0
  283. data/test/tc_package.rb +245 -0
  284. data/test/util/tc_mime_type_utils.rb +13 -0
  285. data/test/util/tc_serialized_attributes.rb +19 -0
  286. data/test/util/tc_simple_typed_list.rb +77 -0
  287. data/test/util/tc_validators.rb +210 -0
  288. data/test/workbook/tc_defined_name.rb +49 -0
  289. data/test/workbook/tc_shared_strings_table.rb +59 -0
  290. data/test/workbook/tc_workbook.rb +160 -0
  291. data/test/workbook/tc_workbook_view.rb +50 -0
  292. data/test/workbook/worksheet/auto_filter/tc_auto_filter.rb +38 -0
  293. data/test/workbook/worksheet/auto_filter/tc_filter_column.rb +76 -0
  294. data/test/workbook/worksheet/auto_filter/tc_filters.rb +50 -0
  295. data/test/workbook/worksheet/tc_break.rb +49 -0
  296. data/test/workbook/worksheet/tc_cell.rb +387 -0
  297. data/test/workbook/worksheet/tc_cfvo.rb +31 -0
  298. data/test/workbook/worksheet/tc_col.rb +78 -0
  299. data/test/workbook/worksheet/tc_color_scale.rb +58 -0
  300. data/test/workbook/worksheet/tc_comment.rb +72 -0
  301. data/test/workbook/worksheet/tc_comments.rb +57 -0
  302. data/test/workbook/worksheet/tc_conditional_formatting.rb +224 -0
  303. data/test/workbook/worksheet/tc_data_bar.rb +46 -0
  304. data/test/workbook/worksheet/tc_data_validation.rb +265 -0
  305. data/test/workbook/worksheet/tc_date_time_converter.rb +124 -0
  306. data/test/workbook/worksheet/tc_header_footer.rb +151 -0
  307. data/test/workbook/worksheet/tc_icon_set.rb +45 -0
  308. data/test/workbook/worksheet/tc_outline_pr.rb +19 -0
  309. data/test/workbook/worksheet/tc_page_margins.rb +97 -0
  310. data/test/workbook/worksheet/tc_page_set_up_pr.rb +15 -0
  311. data/test/workbook/worksheet/tc_page_setup.rb +143 -0
  312. data/test/workbook/worksheet/tc_pane.rb +54 -0
  313. data/test/workbook/worksheet/tc_pivot_table.rb +135 -0
  314. data/test/workbook/worksheet/tc_pivot_table_cache_definition.rb +54 -0
  315. data/test/workbook/worksheet/tc_print_options.rb +72 -0
  316. data/test/workbook/worksheet/tc_protected_range.rb +17 -0
  317. data/test/workbook/worksheet/tc_rich_text.rb +44 -0
  318. data/test/workbook/worksheet/tc_rich_text_run.rb +172 -0
  319. data/test/workbook/worksheet/tc_row.rb +122 -0
  320. data/test/workbook/worksheet/tc_selection.rb +55 -0
  321. data/test/workbook/worksheet/tc_sheet_calc_pr.rb +18 -0
  322. data/test/workbook/worksheet/tc_sheet_format_pr.rb +88 -0
  323. data/test/workbook/worksheet/tc_sheet_pr.rb +49 -0
  324. data/test/workbook/worksheet/tc_sheet_protection.rb +117 -0
  325. data/test/workbook/worksheet/tc_sheet_view.rb +214 -0
  326. data/test/workbook/worksheet/tc_table.rb +67 -0
  327. data/test/workbook/worksheet/tc_table_style_info.rb +53 -0
  328. data/test/workbook/worksheet/tc_worksheet.rb +597 -0
  329. data/test/workbook/worksheet/tc_worksheet_hyperlink.rb +55 -0
  330. metadata +601 -0
@@ -0,0 +1,8 @@
1
+ require 'tc_helper.rb'
2
+
3
+ class TestAxes < Test::Unit::TestCase
4
+ def test_constructor_requires_cat_axis_first
5
+ assert_raise(ArgumentError) { Axlsx::Axes.new(:val_axis => Axlsx::ValAxis, :cat_axis => Axlsx::CatAxis) }
6
+ assert_nothing_raised { Axlsx::Axes.new(:cat_axis => Axlsx::CatAxis, :val_axis => Axlsx::ValAxis) }
7
+ end
8
+ end
@@ -0,0 +1,112 @@
1
+ require 'tc_helper.rb'
2
+
3
+ class TestAxis < Test::Unit::TestCase
4
+ def setup
5
+ @axis = Axlsx::Axis.new :gridlines => false, :title => 'Foo'
6
+ end
7
+
8
+
9
+ def test_initialization
10
+ assert_equal(@axis.ax_pos, :b, "axis position default incorrect")
11
+ assert_equal(@axis.tick_lbl_pos, :nextTo, "tick label position default incorrect")
12
+ assert_equal(@axis.tick_lbl_pos, :nextTo, "tick label position default incorrect")
13
+ assert_equal(@axis.crosses, :autoZero, "tick label position default incorrect")
14
+ assert(@axis.scaling.is_a?(Axlsx::Scaling) && @axis.scaling.orientation == :minMax, "scaling default incorrect")
15
+ assert_equal('Foo', @axis.title.text)
16
+ end
17
+
18
+ def test_color
19
+ @axis.color = "00FF00"
20
+ @axis.cross_axis = Axlsx::CatAxis.new
21
+ str = '<?xml version="1.0" encoding="UTF-8"?>'
22
+ str << '<c:chartSpace xmlns:c="' << Axlsx::XML_NS_C << '" xmlns:a="' << Axlsx::XML_NS_A << '">'
23
+ doc = Nokogiri::XML(@axis.to_xml_string(str))
24
+ assert(doc.xpath("//a:srgbClr[@val='00FF00']"))
25
+ end
26
+
27
+ def test_cell_based_axis_title
28
+ p = Axlsx::Package.new
29
+ p.workbook.add_worksheet(:name=>'foosheet') do |sheet|
30
+ sheet.add_row ['battle victories']
31
+ sheet.add_row ['bird', 1, 2, 1]
32
+ sheet.add_row ['cat', 7, 9, 10]
33
+ sheet.add_chart(Axlsx::Line3DChart) do |chart|
34
+ chart.add_series :data => sheet['B2:D2'], :labels => sheet['B1']
35
+ chart.val_axis.title = sheet['A1']
36
+ assert_equal('battle victories', chart.val_axis.title.text)
37
+ end
38
+ end
39
+ end
40
+
41
+ def test_axis_position
42
+ assert_raise(ArgumentError, "requires valid axis position") { @axis.ax_pos = :nowhere }
43
+ assert_nothing_raised("accepts valid axis position") { @axis.ax_pos = :r }
44
+ end
45
+
46
+ def test_label_rotation
47
+ assert_raise(ArgumentError, "requires valid angle") { @axis.label_rotation = :nowhere }
48
+ assert_raise(ArgumentError, "requires valid angle") { @axis.label_rotation = 91 }
49
+ assert_raise(ArgumentError, "requires valid angle") { @axis.label_rotation = -91 }
50
+ assert_nothing_raised("accepts valid angle") { @axis.label_rotation = 45 }
51
+ assert_equal(@axis.label_rotation, 45 * 60000)
52
+ end
53
+
54
+ def test_tick_label_position
55
+ assert_raise(ArgumentError, "requires valid tick label position") { @axis.tick_lbl_pos = :nowhere }
56
+ assert_nothing_raised("accepts valid tick label position") { @axis.tick_lbl_pos = :high }
57
+ end
58
+
59
+ def test_format_code
60
+ assert_raise(ArgumentError, "requires valid format code") { @axis.format_code = :high }
61
+ assert_nothing_raised("accepts valid format code") { @axis.format_code = "00.##" }
62
+ end
63
+
64
+ def create_chart_with_formatting(format_string=nil)
65
+ p = Axlsx::Package.new
66
+ p.workbook.add_worksheet(:name => "Formatting Test") do |sheet|
67
+ sheet.add_row(['test', 20])
68
+ sheet.add_chart(Axlsx::Bar3DChart, :start_at => [0,5], :end_at => [10, 20], :title => "Test Formatting") do |chart|
69
+ chart.add_series :data => sheet["B1:B1"], :labels => sheet["A1:A1"]
70
+ chart.val_axis.format_code = format_string if format_string
71
+ doc = Nokogiri::XML(chart.to_xml_string)
72
+ yield doc
73
+ end
74
+ end
75
+ end
76
+
77
+ def test_format_code_resets_source_linked
78
+ create_chart_with_formatting("#,##0.00") do |doc|
79
+ assert_equal(doc.xpath("//c:valAx/c:numFmt[@formatCode='#,##0.00']").size, 1)
80
+ assert_equal(doc.xpath("//c:valAx/c:numFmt[@sourceLinked='0']").size, 1)
81
+ end
82
+ end
83
+
84
+ def test_no_format_code_keeps_source_linked
85
+ create_chart_with_formatting do |doc|
86
+ assert_equal(doc.xpath("//c:valAx/c:numFmt[@formatCode='General']").size, 1)
87
+ assert_equal(doc.xpath("//c:valAx/c:numFmt[@sourceLinked='1']").size, 1)
88
+ end
89
+ end
90
+
91
+ def test_crosses
92
+ assert_raise(ArgumentError, "requires valid crosses") { @axis.crosses = 1 }
93
+ assert_nothing_raised("accepts valid crosses") { @axis.crosses = :min }
94
+ end
95
+
96
+ def test_gridlines
97
+ assert_raise(ArgumentError, "requires valid gridlines") { @axis.gridlines = 'alice' }
98
+ assert_nothing_raised("accepts valid crosses") { @axis.gridlines = false }
99
+ end
100
+
101
+ def test_to_xml_string
102
+ @axis.cross_axis = Axlsx::CatAxis.new
103
+ str = '<?xml version="1.0" encoding="UTF-8"?>'
104
+ str << '<c:chartSpace xmlns:c="' << Axlsx::XML_NS_C << '" xmlns:a="' << Axlsx::XML_NS_A << '">'
105
+ doc = Nokogiri::XML(@axis.to_xml_string(str))
106
+ assert(doc.xpath('//a:noFill'))
107
+ assert(doc.xpath("//c:crosses[@val='#{@axis.crosses.to_s}']"))
108
+ assert(doc.xpath("//c:crossAx[@val='#{@axis.cross_axis.to_s}']"))
109
+ assert(doc.xpath("//a:bodyPr[@rot='#{@axis.label_rotation.to_s}']"))
110
+ assert(doc.xpath("//a:t[text()='Foo']"))
111
+ end
112
+ end
@@ -0,0 +1,71 @@
1
+ require 'tc_helper.rb'
2
+
3
+ class TestBar3DChart < Test::Unit::TestCase
4
+
5
+ def setup
6
+ @p = Axlsx::Package.new
7
+ ws = @p.workbook.add_worksheet
8
+ @row = ws.add_row ["one", 1, Time.now]
9
+ @chart = ws.add_chart Axlsx::Bar3DChart, :title => "fishery"
10
+ end
11
+
12
+ def teardown
13
+ end
14
+
15
+ def test_initialization
16
+ assert_equal(@chart.grouping, :clustered, "grouping defualt incorrect")
17
+ assert_equal(@chart.series_type, Axlsx::BarSeries, "series type incorrect")
18
+ assert_equal(@chart.bar_dir, :bar, " bar direction incorrect")
19
+ assert(@chart.cat_axis.is_a?(Axlsx::CatAxis), "category axis not created")
20
+ assert(@chart.val_axis.is_a?(Axlsx::ValAxis), "value access not created")
21
+ end
22
+
23
+ def test_bar_direction
24
+ assert_raise(ArgumentError, "require valid bar direction") { @chart.bar_dir = :left }
25
+ assert_nothing_raised("allow valid bar direction") { @chart.bar_dir = :col }
26
+ assert(@chart.bar_dir == :col)
27
+ end
28
+
29
+ def test_grouping
30
+ assert_raise(ArgumentError, "require valid grouping") { @chart.grouping = :inverted }
31
+ assert_nothing_raised("allow valid grouping") { @chart.grouping = :standard }
32
+ assert(@chart.grouping == :standard)
33
+ end
34
+
35
+
36
+ def test_gapWidth
37
+ assert_raise(ArgumentError, "require valid gap width") { @chart.gap_width = 200 }
38
+ assert_nothing_raised("allow valid gapWidth") { @chart.gap_width = "200%" }
39
+ assert(@chart.gap_width == "200%")
40
+ end
41
+
42
+ def test_gapDepth
43
+ assert_raise(ArgumentError, "require valid gap_depth") { @chart.gap_depth = 200 }
44
+ assert_nothing_raised("allow valid gap_depth") { @chart.gap_depth = "200%" }
45
+ assert(@chart.gap_depth == "200%")
46
+ end
47
+
48
+ def test_shape
49
+ assert_raise(ArgumentError, "require valid shape") { @chart.shape = :star }
50
+ assert_nothing_raised("allow valid shape") { @chart.shape = :cone }
51
+ assert(@chart.shape == :cone)
52
+ end
53
+
54
+ def test_to_xml_string
55
+ schema = Nokogiri::XML::Schema(File.open(Axlsx::DRAWING_XSD))
56
+ doc = Nokogiri::XML(@chart.to_xml_string)
57
+ errors = []
58
+ schema.validate(doc).each do |error|
59
+ errors.push error
60
+ puts error.message
61
+ end
62
+ assert(errors.empty?, "error free validation")
63
+ end
64
+
65
+ def test_to_xml_string_has_axes_in_correct_order
66
+ str = @chart.to_xml_string
67
+ cat_axis_position = str.index(@chart.axes[:cat_axis].id.to_s)
68
+ val_axis_position = str.index(@chart.axes[:val_axis].id.to_s)
69
+ assert(cat_axis_position < val_axis_position, "cat_axis must occur earlier than val_axis in the XML")
70
+ end
71
+ end
@@ -0,0 +1,71 @@
1
+ require 'tc_helper.rb'
2
+
3
+ class TestBarChart < Test::Unit::TestCase
4
+
5
+ def setup
6
+ @p = Axlsx::Package.new
7
+ ws = @p.workbook.add_worksheet
8
+ @row = ws.add_row ["one", 1, Time.now]
9
+ @chart = ws.add_chart Axlsx::BarChart, :title => "fishery"
10
+ end
11
+
12
+ def teardown
13
+ end
14
+
15
+ def test_initialization
16
+ assert_equal(@chart.grouping, :clustered, "grouping defualt incorrect")
17
+ assert_equal(@chart.series_type, Axlsx::BarSeries, "series type incorrect")
18
+ assert_equal(@chart.bar_dir, :bar, " bar direction incorrect")
19
+ assert(@chart.cat_axis.is_a?(Axlsx::CatAxis), "category axis not created")
20
+ assert(@chart.val_axis.is_a?(Axlsx::ValAxis), "value access not created")
21
+ end
22
+
23
+ def test_bar_direction
24
+ assert_raise(ArgumentError, "require valid bar direction") { @chart.bar_dir = :left }
25
+ assert_nothing_raised("allow valid bar direction") { @chart.bar_dir = :col }
26
+ assert(@chart.bar_dir == :col)
27
+ end
28
+
29
+ def test_grouping
30
+ assert_raise(ArgumentError, "require valid grouping") { @chart.grouping = :inverted }
31
+ assert_nothing_raised("allow valid grouping") { @chart.grouping = :standard }
32
+ assert(@chart.grouping == :standard)
33
+ end
34
+
35
+
36
+ def test_gapWidth
37
+ assert_raise(ArgumentError, "require valid gap width") { @chart.gap_width = 200 }
38
+ assert_nothing_raised("allow valid gapWidth") { @chart.gap_width = "200%" }
39
+ assert(@chart.gap_width == "200%")
40
+ end
41
+
42
+ def test_gapDepth
43
+ assert_raise(ArgumentError, "require valid gap_depth") { @chart.gap_depth = 200 }
44
+ assert_nothing_raised("allow valid gap_depth") { @chart.gap_depth = "200%" }
45
+ assert(@chart.gap_depth == "200%")
46
+ end
47
+
48
+ def test_shape
49
+ assert_raise(ArgumentError, "require valid shape") { @chart.shape = :star }
50
+ assert_nothing_raised("allow valid shape") { @chart.shape = :cone }
51
+ assert(@chart.shape == :cone)
52
+ end
53
+
54
+ def test_to_xml_string
55
+ schema = Nokogiri::XML::Schema(File.open(Axlsx::DRAWING_XSD))
56
+ doc = Nokogiri::XML(@chart.to_xml_string)
57
+ errors = []
58
+ schema.validate(doc).each do |error|
59
+ errors.push error
60
+ puts error.message
61
+ end
62
+ assert(errors.empty?, "error free validation")
63
+ end
64
+
65
+ def test_to_xml_string_has_axes_in_correct_order
66
+ str = @chart.to_xml_string
67
+ cat_axis_position = str.index(@chart.axes[:cat_axis].id.to_s)
68
+ val_axis_position = str.index(@chart.axes[:val_axis].id.to_s)
69
+ assert(cat_axis_position < val_axis_position, "cat_axis must occur earlier than val_axis in the XML")
70
+ end
71
+ end
@@ -0,0 +1,37 @@
1
+ require 'tc_helper.rb'
2
+
3
+ class TestBarSeries < Test::Unit::TestCase
4
+
5
+ def setup
6
+ p = Axlsx::Package.new
7
+ @ws = p.workbook.add_worksheet :name=>"hmmm"
8
+ @chart = @ws.add_chart Axlsx::Bar3DChart, :title => "fishery"
9
+ @series = @chart.add_series :data=>[0,1,2], :labels=>["zero", "one", "two"], :title=>"bob", :colors => ['FF0000', '00FF00', '0000FF'], :shape => :cone
10
+ end
11
+
12
+ def test_initialize
13
+ assert_equal(@series.title.text, "bob", "series title has been applied")
14
+ assert_equal(@series.data.class, Axlsx::NumDataSource, "data option applied")
15
+ assert_equal(@series.shape, :cone, "series shape has been applied")
16
+ assert(@series.data.is_a?(Axlsx::NumDataSource))
17
+ assert(@series.labels.is_a?(Axlsx::AxDataSource))
18
+ end
19
+
20
+ def test_colors
21
+ assert_equal(@series.colors.size, 3)
22
+ end
23
+
24
+ def test_shape
25
+ assert_raise(ArgumentError, "require valid shape") { @series.shape = :teardropt }
26
+ assert_nothing_raised("allow valid shape") { @series.shape = :box }
27
+ assert(@series.shape == :box)
28
+ end
29
+
30
+ def test_to_xml_string
31
+ doc = Nokogiri::XML(@chart.to_xml_string)
32
+ @series.colors.each_with_index do |color, index|
33
+ assert_equal(doc.xpath("//c:dPt/c:idx[@val='#{index}']").size,1)
34
+ assert_equal(doc.xpath("//c:dPt/c:spPr/a:solidFill/a:srgbClr[@val='#{@series.colors[index]}']").size,1)
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,44 @@
1
+ require 'tc_helper.rb'
2
+
3
+ class TestBubbleChart < Test::Unit::TestCase
4
+ def setup
5
+ @p = Axlsx::Package.new
6
+ @chart = nil
7
+ @p.workbook.add_worksheet do |sheet|
8
+ sheet.add_row ["First", 1, 5, 7, 9]
9
+ sheet.add_row ["", 1, 25, 49, 81]
10
+ sheet.add_row ["", 1, 42, 60, 75]
11
+ sheet.add_row ["Second", 5, 2, 14, 9]
12
+ sheet.add_row ["", 5, 10, 15, 20]
13
+ sheet.add_row ["", 5, 28, 92, 13]
14
+ sheet.add_chart(Axlsx::BubbleChart, :title => "example: Bubble Chart") do |chart|
15
+ chart.start_at 0, 4
16
+ chart.end_at 10, 19
17
+ chart.add_series :xData => sheet["B1:E1"], :yData => sheet["B2:E2"], :bubbleSize => sheet["B3:E3"], :title => sheet["A1"]
18
+ chart.add_series :xData => sheet["B4:E4"], :yData => sheet["B5:E5"], :bubbleSize => sheet["B6:E6"], :title => sheet["A3"]
19
+ @chart = chart
20
+ end
21
+ end
22
+ end
23
+
24
+ def teardown
25
+ end
26
+
27
+ def test_initialization
28
+ assert_equal(@chart.series_type, Axlsx::BubbleSeries, "series type incorrect")
29
+ assert(@chart.xValAxis.is_a?(Axlsx::ValAxis), "independant value axis not created")
30
+ assert(@chart.yValAxis.is_a?(Axlsx::ValAxis), "dependant value axis not created")
31
+ end
32
+
33
+ def test_to_xml_string
34
+ schema = Nokogiri::XML::Schema(File.open(Axlsx::DRAWING_XSD))
35
+ doc = Nokogiri::XML(@chart.to_xml_string)
36
+ errors = []
37
+ schema.validate(doc).each do |error|
38
+ errors.push error
39
+ puts error.message
40
+ end
41
+ assert(errors.empty?, "error free validation")
42
+ end
43
+
44
+ end
@@ -0,0 +1,21 @@
1
+ require 'tc_helper.rb'
2
+
3
+ class TestBubbleSeries < Test::Unit::TestCase
4
+
5
+ def setup
6
+ p = Axlsx::Package.new
7
+ @ws = p.workbook.add_worksheet :name=>"hmmm"
8
+ @chart = @ws.add_chart Axlsx::BubbleChart, :title => "Bubble Chart"
9
+ @series = @chart.add_series :xData=>[1,2,4], :yData=>[1,3,9], :bubbleSize=>[1,5,7], :title=>"GDP", :color => 'FF0000'
10
+ end
11
+
12
+ def test_initialize
13
+ assert_equal(@series.title.text, "GDP", "series title has been applied")
14
+ end
15
+
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,2)
19
+ end
20
+
21
+ end
@@ -0,0 +1,31 @@
1
+ require 'tc_helper.rb'
2
+
3
+ class TestCatAxis < Test::Unit::TestCase
4
+ def setup
5
+ @axis = Axlsx::CatAxis.new
6
+ end
7
+ def teardown
8
+ end
9
+
10
+ def test_initialization
11
+ assert_equal(@axis.auto, 1, "axis auto default incorrect")
12
+ assert_equal(@axis.lbl_algn, :ctr, "label align default incorrect")
13
+ assert_equal(@axis.lbl_offset, "100", "label offset default incorrect")
14
+ end
15
+
16
+ def test_auto
17
+ assert_raise(ArgumentError, "requires valid auto") { @axis.auto = :nowhere }
18
+ assert_nothing_raised("accepts valid auto") { @axis.auto = false }
19
+ end
20
+
21
+ def test_lbl_algn
22
+ assert_raise(ArgumentError, "requires valid label alignment") { @axis.lbl_algn = :nowhere }
23
+ assert_nothing_raised("accepts valid label alignment") { @axis.lbl_algn = :r }
24
+ end
25
+
26
+ def test_lbl_offset
27
+ assert_raise(ArgumentError, "requires valid label offset") { @axis.lbl_offset = 'foo' }
28
+ assert_nothing_raised("accepts valid label offset") { @axis.lbl_offset = "20" }
29
+ end
30
+
31
+ end
@@ -0,0 +1,27 @@
1
+ # require 'tc_helper.rb'
2
+
3
+ # class TestCatAxisData < 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::Bar3DChart
9
+ # @series = @chart.add_series :labels=>["zero", "one", "two"]
10
+ # end
11
+
12
+ # def test_initialize
13
+ # assert(@series.labels.is_a?Axlsx::SimpleTypedList)
14
+ # assert_equal(@series.labels, ["zero", "one", "two"])
15
+ # end
16
+
17
+ # def test_to_xml_string
18
+ # doc = Nokogiri::XML(@chart.to_xml_string)
19
+ # assert_equal(doc.xpath("//c:cat/c:strRef/c:f").size,1)
20
+ # assert_equal(doc.xpath("//c:strCache/c:ptCount[@val='#{@series.labels.size}']").size,1)
21
+ # @series.labels.each_with_index do |label, index|
22
+ # assert_equal(doc.xpath("//c:strCache/c:pt[@idx='#{index}']").size,1)
23
+ # assert_equal(doc.xpath("//c:strCache/c:pt/c:v[text()='#{label}']").size,1)
24
+ # end
25
+ # end
26
+
27
+ # end
@@ -0,0 +1,123 @@
1
+ require 'tc_helper.rb'
2
+
3
+ class TestChart < Test::Unit::TestCase
4
+
5
+ def setup
6
+ @p = Axlsx::Package.new
7
+ ws = @p.workbook.add_worksheet
8
+ @row = ws.add_row ["one", 1, Time.now]
9
+ @chart = ws.add_chart Axlsx::Bar3DChart, :title => "fishery", :bg_color => "000000"
10
+ end
11
+
12
+ def teardown
13
+ end
14
+
15
+ def test_initialization
16
+ assert_equal(@p.workbook.charts.last,@chart, "the chart is in the workbook")
17
+ assert_equal(@chart.title.text, "fishery", "the title option has been applied")
18
+ assert((@chart.series.is_a?(Axlsx::SimpleTypedList) && @chart.series.empty?), "The series is initialized and empty")
19
+ end
20
+
21
+ def test_title
22
+ @chart.title.text = 'wowzer'
23
+ assert_equal(@chart.title.text, "wowzer", "the title text via a string")
24
+ assert_equal(@chart.title.cell, nil, "the title cell is nil as we set the title with text.")
25
+ @chart.title = @row.cells.first
26
+ assert_equal(@chart.title.text, "one", "the title text was set via cell reference")
27
+ assert_equal(@chart.title.cell, @row.cells.first)
28
+ end
29
+
30
+ def test_style
31
+ assert_raise(ArgumentError) { @chart.style = 49 }
32
+ assert_nothing_raised { @chart.style = 2 }
33
+ assert_equal(@chart.style, 2)
34
+ end
35
+
36
+ def test_to_from_marker_access
37
+ assert(@chart.to.is_a?(Axlsx::Marker))
38
+ assert(@chart.from.is_a?(Axlsx::Marker))
39
+ end
40
+
41
+ def test_bg_color
42
+ assert_raise(ArgumentError) { @chart.bg_color = 2 }
43
+ assert_nothing_raised { @chart.bg_color = "FFFFFF" }
44
+ assert_equal(@chart.bg_color, "FFFFFF")
45
+
46
+ end
47
+
48
+ def test_title_size
49
+ assert_raise(ArgumentError) { @chart.title_size = 2 }
50
+ assert_nothing_raised { @chart.title_size = "100" }
51
+ assert_equal(@chart.title.text_size, "100")
52
+ end
53
+
54
+ def test_vary_colors
55
+ assert_equal(true, @chart.vary_colors)
56
+ assert_raise(ArgumentError) { @chart.vary_colors = 7 }
57
+ assert_nothing_raised { @chart.vary_colors = false }
58
+ assert_equal(false, @chart.vary_colors)
59
+ end
60
+
61
+ def test_display_blanks_as
62
+ assert_equal(:gap, @chart.display_blanks_as, "default is not :gap")
63
+ assert_raise(ArgumentError, "did not validate possible values") { @chart.display_blanks_as = :hole }
64
+ assert_nothing_raised { @chart.display_blanks_as = :zero }
65
+ assert_nothing_raised { @chart.display_blanks_as = :span }
66
+ assert_equal(:span, @chart.display_blanks_as)
67
+ end
68
+
69
+ def test_start_at
70
+ @chart.start_at 15, 25
71
+ assert_equal(@chart.graphic_frame.anchor.from.col, 15)
72
+ assert_equal(@chart.graphic_frame.anchor.from.row, 25)
73
+ @chart.start_at @row.cells.first
74
+ assert_equal(@chart.graphic_frame.anchor.from.col, 0)
75
+ assert_equal(@chart.graphic_frame.anchor.from.row, 0)
76
+ @chart.start_at [5,6]
77
+ assert_equal(@chart.graphic_frame.anchor.from.col, 5)
78
+ assert_equal(@chart.graphic_frame.anchor.from.row, 6)
79
+
80
+ end
81
+
82
+ def test_end_at
83
+ @chart.end_at 25, 90
84
+ assert_equal(@chart.graphic_frame.anchor.to.col, 25)
85
+ assert_equal(@chart.graphic_frame.anchor.to.row, 90)
86
+ @chart.end_at @row.cells.last
87
+ assert_equal(@chart.graphic_frame.anchor.to.col, 2)
88
+ assert_equal(@chart.graphic_frame.anchor.to.row, 0)
89
+ @chart.end_at [10,11]
90
+ assert_equal(@chart.graphic_frame.anchor.to.col, 10)
91
+ assert_equal(@chart.graphic_frame.anchor.to.row, 11)
92
+
93
+ end
94
+
95
+ def test_add_series
96
+ s = @chart.add_series :data=>[0,1,2,3], :labels => ["one", 1, "anything"], :title=>"bob"
97
+ assert_equal(@chart.series.last, s, "series has been added to chart series collection")
98
+ assert_equal(s.title.text, "bob", "series title has been applied")
99
+ end
100
+
101
+ def test_pn
102
+ assert_equal(@chart.pn, "charts/chart1.xml")
103
+ end
104
+
105
+ def test_d_lbls
106
+ assert_equal(nil, @chart.instance_values[:d_lbls])
107
+ @chart.d_lbls.d_lbl_pos = :t
108
+ assert(@chart.d_lbls.is_a?(Axlsx::DLbls), 'DLbls instantiated on access')
109
+ end
110
+
111
+ def test_to_xml_string
112
+ schema = Nokogiri::XML::Schema(File.open(Axlsx::DRAWING_XSD))
113
+ doc = Nokogiri::XML(@chart.to_xml_string)
114
+ errors = schema.validate(doc).map { |error| puts error.message; error }
115
+ assert(errors.empty?, "error free validation")
116
+ end
117
+
118
+ def test_to_xml_string_for_display_blanks_as
119
+ @chart.display_blanks_as = :span
120
+ doc = Nokogiri::XML(@chart.to_xml_string)
121
+ assert_equal("span", doc.xpath("//c:dispBlanksAs").attr("val").value, "did not use the display_blanks_as configuration")
122
+ end
123
+ end