dg-axlsx 2.1.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 (324) hide show
  1. checksums.yaml +7 -0
  2. data/.yardopts +9 -0
  3. data/.yardopts_guide +19 -0
  4. data/CHANGELOG.md +239 -0
  5. data/LICENSE +22 -0
  6. data/README.md +259 -0
  7. data/Rakefile +30 -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 +50 -0
  20. data/examples/example.rb +875 -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 +168 -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/ax_data_source.rb +26 -0
  43. data/lib/axlsx/drawing/axes.rb +61 -0
  44. data/lib/axlsx/drawing/axis.rb +190 -0
  45. data/lib/axlsx/drawing/bar_3D_chart.rb +151 -0
  46. data/lib/axlsx/drawing/bar_series.rb +82 -0
  47. data/lib/axlsx/drawing/bubble_chart.rb +59 -0
  48. data/lib/axlsx/drawing/bubble_series.rb +63 -0
  49. data/lib/axlsx/drawing/cat_axis.rb +85 -0
  50. data/lib/axlsx/drawing/chart.rb +269 -0
  51. data/lib/axlsx/drawing/d_lbls.rb +90 -0
  52. data/lib/axlsx/drawing/drawing.rb +164 -0
  53. data/lib/axlsx/drawing/graphic_frame.rb +54 -0
  54. data/lib/axlsx/drawing/hyperlink.rb +100 -0
  55. data/lib/axlsx/drawing/line_3D_chart.rb +68 -0
  56. data/lib/axlsx/drawing/line_chart.rb +99 -0
  57. data/lib/axlsx/drawing/line_series.rb +110 -0
  58. data/lib/axlsx/drawing/marker.rb +84 -0
  59. data/lib/axlsx/drawing/num_data.rb +52 -0
  60. data/lib/axlsx/drawing/num_data_source.rb +62 -0
  61. data/lib/axlsx/drawing/num_val.rb +32 -0
  62. data/lib/axlsx/drawing/one_cell_anchor.rb +98 -0
  63. data/lib/axlsx/drawing/pic.rb +213 -0
  64. data/lib/axlsx/drawing/picture_locking.rb +42 -0
  65. data/lib/axlsx/drawing/pie_3D_chart.rb +47 -0
  66. data/lib/axlsx/drawing/pie_series.rb +74 -0
  67. data/lib/axlsx/drawing/scaling.rb +60 -0
  68. data/lib/axlsx/drawing/scatter_chart.rb +74 -0
  69. data/lib/axlsx/drawing/scatter_series.rb +84 -0
  70. data/lib/axlsx/drawing/ser_axis.rb +45 -0
  71. data/lib/axlsx/drawing/series.rb +69 -0
  72. data/lib/axlsx/drawing/series_title.rb +23 -0
  73. data/lib/axlsx/drawing/str_data.rb +42 -0
  74. data/lib/axlsx/drawing/str_val.rb +32 -0
  75. data/lib/axlsx/drawing/title.rb +78 -0
  76. data/lib/axlsx/drawing/two_cell_anchor.rb +92 -0
  77. data/lib/axlsx/drawing/val_axis.rb +37 -0
  78. data/lib/axlsx/drawing/view_3D.rb +115 -0
  79. data/lib/axlsx/drawing/vml_drawing.rb +42 -0
  80. data/lib/axlsx/drawing/vml_shape.rb +66 -0
  81. data/lib/axlsx/package.rb +363 -0
  82. data/lib/axlsx/rels/relationship.rb +129 -0
  83. data/lib/axlsx/rels/relationships.rb +29 -0
  84. data/lib/axlsx/stylesheet/border.rb +71 -0
  85. data/lib/axlsx/stylesheet/border_pr.rb +71 -0
  86. data/lib/axlsx/stylesheet/cell_alignment.rb +132 -0
  87. data/lib/axlsx/stylesheet/cell_protection.rb +41 -0
  88. data/lib/axlsx/stylesheet/cell_style.rb +72 -0
  89. data/lib/axlsx/stylesheet/color.rb +76 -0
  90. data/lib/axlsx/stylesheet/dxf.rb +79 -0
  91. data/lib/axlsx/stylesheet/fill.rb +35 -0
  92. data/lib/axlsx/stylesheet/font.rb +148 -0
  93. data/lib/axlsx/stylesheet/gradient_fill.rb +103 -0
  94. data/lib/axlsx/stylesheet/gradient_stop.rb +37 -0
  95. data/lib/axlsx/stylesheet/num_fmt.rb +77 -0
  96. data/lib/axlsx/stylesheet/pattern_fill.rb +73 -0
  97. data/lib/axlsx/stylesheet/styles.rb +420 -0
  98. data/lib/axlsx/stylesheet/table_style.rb +54 -0
  99. data/lib/axlsx/stylesheet/table_style_element.rb +77 -0
  100. data/lib/axlsx/stylesheet/table_styles.rb +46 -0
  101. data/lib/axlsx/stylesheet/xf.rb +147 -0
  102. data/lib/axlsx/util/accessors.rb +64 -0
  103. data/lib/axlsx/util/constants.rb +397 -0
  104. data/lib/axlsx/util/mime_type_utils.rb +11 -0
  105. data/lib/axlsx/util/options_parser.rb +16 -0
  106. data/lib/axlsx/util/parser.rb +44 -0
  107. data/lib/axlsx/util/serialized_attributes.rb +89 -0
  108. data/lib/axlsx/util/simple_typed_list.rb +179 -0
  109. data/lib/axlsx/util/storage.rb +146 -0
  110. data/lib/axlsx/util/string.rb +7 -0
  111. data/lib/axlsx/util/validators.rb +311 -0
  112. data/lib/axlsx/version.rb +5 -0
  113. data/lib/axlsx/workbook/defined_name.rb +128 -0
  114. data/lib/axlsx/workbook/defined_names.rb +21 -0
  115. data/lib/axlsx/workbook/shared_strings_table.rb +77 -0
  116. data/lib/axlsx/workbook/workbook.rb +361 -0
  117. data/lib/axlsx/workbook/workbook_view.rb +78 -0
  118. data/lib/axlsx/workbook/workbook_views.rb +22 -0
  119. data/lib/axlsx/workbook/worksheet/auto_filter/auto_filter.rb +77 -0
  120. data/lib/axlsx/workbook/worksheet/auto_filter/filter_column.rb +94 -0
  121. data/lib/axlsx/workbook/worksheet/auto_filter/filters.rb +244 -0
  122. data/lib/axlsx/workbook/worksheet/break.rb +35 -0
  123. data/lib/axlsx/workbook/worksheet/cell.rb +475 -0
  124. data/lib/axlsx/workbook/worksheet/cell_serializer.rb +154 -0
  125. data/lib/axlsx/workbook/worksheet/cfvo.rb +60 -0
  126. data/lib/axlsx/workbook/worksheet/cfvos.rb +15 -0
  127. data/lib/axlsx/workbook/worksheet/col.rb +141 -0
  128. data/lib/axlsx/workbook/worksheet/col_breaks.rb +35 -0
  129. data/lib/axlsx/workbook/worksheet/color_scale.rb +110 -0
  130. data/lib/axlsx/workbook/worksheet/cols.rb +20 -0
  131. data/lib/axlsx/workbook/worksheet/comment.rb +91 -0
  132. data/lib/axlsx/workbook/worksheet/comments.rb +82 -0
  133. data/lib/axlsx/workbook/worksheet/conditional_formatting.rb +82 -0
  134. data/lib/axlsx/workbook/worksheet/conditional_formatting_rule.rb +220 -0
  135. data/lib/axlsx/workbook/worksheet/conditional_formattings.rb +25 -0
  136. data/lib/axlsx/workbook/worksheet/data_bar.rb +129 -0
  137. data/lib/axlsx/workbook/worksheet/data_validation.rb +246 -0
  138. data/lib/axlsx/workbook/worksheet/data_validations.rb +28 -0
  139. data/lib/axlsx/workbook/worksheet/date_time_converter.rb +30 -0
  140. data/lib/axlsx/workbook/worksheet/dimension.rb +64 -0
  141. data/lib/axlsx/workbook/worksheet/header_footer.rb +52 -0
  142. data/lib/axlsx/workbook/worksheet/icon_set.rb +81 -0
  143. data/lib/axlsx/workbook/worksheet/merged_cells.rb +35 -0
  144. data/lib/axlsx/workbook/worksheet/page_margins.rb +97 -0
  145. data/lib/axlsx/workbook/worksheet/page_set_up_pr.rb +44 -0
  146. data/lib/axlsx/workbook/worksheet/page_setup.rb +240 -0
  147. data/lib/axlsx/workbook/worksheet/pane.rb +139 -0
  148. data/lib/axlsx/workbook/worksheet/pivot_table.rb +266 -0
  149. data/lib/axlsx/workbook/worksheet/pivot_table_cache_definition.rb +66 -0
  150. data/lib/axlsx/workbook/worksheet/pivot_tables.rb +24 -0
  151. data/lib/axlsx/workbook/worksheet/print_options.rb +39 -0
  152. data/lib/axlsx/workbook/worksheet/protected_range.rb +47 -0
  153. data/lib/axlsx/workbook/worksheet/protected_ranges.rb +34 -0
  154. data/lib/axlsx/workbook/worksheet/rich_text.rb +35 -0
  155. data/lib/axlsx/workbook/worksheet/rich_text_run.rb +254 -0
  156. data/lib/axlsx/workbook/worksheet/row.rb +154 -0
  157. data/lib/axlsx/workbook/worksheet/row_breaks.rb +33 -0
  158. data/lib/axlsx/workbook/worksheet/selection.rb +101 -0
  159. data/lib/axlsx/workbook/worksheet/sheet_calc_pr.rb +29 -0
  160. data/lib/axlsx/workbook/worksheet/sheet_data.rb +27 -0
  161. data/lib/axlsx/workbook/worksheet/sheet_format_pr.rb +60 -0
  162. data/lib/axlsx/workbook/worksheet/sheet_pr.rb +79 -0
  163. data/lib/axlsx/workbook/worksheet/sheet_protection.rb +118 -0
  164. data/lib/axlsx/workbook/worksheet/sheet_view.rb +213 -0
  165. data/lib/axlsx/workbook/worksheet/table.rb +102 -0
  166. data/lib/axlsx/workbook/worksheet/table_style_info.rb +49 -0
  167. data/lib/axlsx/workbook/worksheet/tables.rb +31 -0
  168. data/lib/axlsx/workbook/worksheet/worksheet.rb +798 -0
  169. data/lib/axlsx/workbook/worksheet/worksheet_comments.rb +58 -0
  170. data/lib/axlsx/workbook/worksheet/worksheet_drawing.rb +58 -0
  171. data/lib/axlsx/workbook/worksheet/worksheet_hyperlink.rb +74 -0
  172. data/lib/axlsx/workbook/worksheet/worksheet_hyperlinks.rb +38 -0
  173. data/lib/dg-axlsx.rb +1 -0
  174. data/lib/schema/dc.xsd +118 -0
  175. data/lib/schema/dcmitype.xsd +52 -0
  176. data/lib/schema/dcterms.xsd +331 -0
  177. data/lib/schema/dml-chart.xsd +1499 -0
  178. data/lib/schema/dml-chartDrawing.xsd +146 -0
  179. data/lib/schema/dml-compatibility.xsd +14 -0
  180. data/lib/schema/dml-diagram.xsd +1091 -0
  181. data/lib/schema/dml-lockedCanvas.xsd +11 -0
  182. data/lib/schema/dml-main.xsd +3048 -0
  183. data/lib/schema/dml-picture.xsd +23 -0
  184. data/lib/schema/dml-spreadsheetDrawing.xsd +185 -0
  185. data/lib/schema/dml-wordprocessingDrawing.xsd +185 -0
  186. data/lib/schema/opc-contentTypes.xsd +42 -0
  187. data/lib/schema/opc-coreProperties.xsd +54 -0
  188. data/lib/schema/opc-digSig.xsd +49 -0
  189. data/lib/schema/opc-relationships.xsd +33 -0
  190. data/lib/schema/pml.xsd +1676 -0
  191. data/lib/schema/shared-additionalCharacteristics.xsd +28 -0
  192. data/lib/schema/shared-bibliography.xsd +144 -0
  193. data/lib/schema/shared-commonSimpleTypes.xsd +166 -0
  194. data/lib/schema/shared-customXmlDataProperties.xsd +25 -0
  195. data/lib/schema/shared-customXmlSchemaProperties.xsd +18 -0
  196. data/lib/schema/shared-documentPropertiesCustom.xsd +59 -0
  197. data/lib/schema/shared-documentPropertiesExtended.xsd +56 -0
  198. data/lib/schema/shared-documentPropertiesVariantTypes.xsd +195 -0
  199. data/lib/schema/shared-math.xsd +582 -0
  200. data/lib/schema/shared-relationshipReference.xsd +25 -0
  201. data/lib/schema/sml.xsd +4434 -0
  202. data/lib/schema/vml-main.xsd +569 -0
  203. data/lib/schema/vml-officeDrawing.xsd +509 -0
  204. data/lib/schema/vml-presentationDrawing.xsd +12 -0
  205. data/lib/schema/vml-spreadsheetDrawing.xsd +108 -0
  206. data/lib/schema/vml-wordprocessingDrawing.xsd +96 -0
  207. data/lib/schema/wml.xsd +3644 -0
  208. data/lib/schema/xml.xsd +116 -0
  209. data/test/benchmark.rb +72 -0
  210. data/test/content_type/tc_content_type.rb +76 -0
  211. data/test/content_type/tc_default.rb +16 -0
  212. data/test/content_type/tc_override.rb +14 -0
  213. data/test/doc_props/tc_app.rb +43 -0
  214. data/test/doc_props/tc_core.rb +42 -0
  215. data/test/drawing/tc_axes.rb +8 -0
  216. data/test/drawing/tc_axis.rb +112 -0
  217. data/test/drawing/tc_bar_3D_chart.rb +71 -0
  218. data/test/drawing/tc_bar_series.rb +37 -0
  219. data/test/drawing/tc_bubble_chart.rb +44 -0
  220. data/test/drawing/tc_bubble_series.rb +21 -0
  221. data/test/drawing/tc_cat_axis.rb +31 -0
  222. data/test/drawing/tc_cat_axis_data.rb +27 -0
  223. data/test/drawing/tc_chart.rb +110 -0
  224. data/test/drawing/tc_d_lbls.rb +57 -0
  225. data/test/drawing/tc_data_source.rb +23 -0
  226. data/test/drawing/tc_drawing.rb +80 -0
  227. data/test/drawing/tc_graphic_frame.rb +27 -0
  228. data/test/drawing/tc_hyperlink.rb +64 -0
  229. data/test/drawing/tc_line_3d_chart.rb +47 -0
  230. data/test/drawing/tc_line_chart.rb +39 -0
  231. data/test/drawing/tc_line_series.rb +71 -0
  232. data/test/drawing/tc_marker.rb +44 -0
  233. data/test/drawing/tc_named_axis_data.rb +27 -0
  234. data/test/drawing/tc_num_data.rb +31 -0
  235. data/test/drawing/tc_num_val.rb +29 -0
  236. data/test/drawing/tc_one_cell_anchor.rb +66 -0
  237. data/test/drawing/tc_pic.rb +106 -0
  238. data/test/drawing/tc_picture_locking.rb +72 -0
  239. data/test/drawing/tc_pie_3D_chart.rb +28 -0
  240. data/test/drawing/tc_pie_series.rb +32 -0
  241. data/test/drawing/tc_scaling.rb +36 -0
  242. data/test/drawing/tc_scatter_chart.rb +48 -0
  243. data/test/drawing/tc_scatter_series.rb +45 -0
  244. data/test/drawing/tc_ser_axis.rb +31 -0
  245. data/test/drawing/tc_series.rb +23 -0
  246. data/test/drawing/tc_series_title.rb +33 -0
  247. data/test/drawing/tc_str_data.rb +18 -0
  248. data/test/drawing/tc_str_val.rb +21 -0
  249. data/test/drawing/tc_title.rb +49 -0
  250. data/test/drawing/tc_two_cell_anchor.rb +36 -0
  251. data/test/drawing/tc_val_axis.rb +24 -0
  252. data/test/drawing/tc_view_3D.rb +54 -0
  253. data/test/drawing/tc_vml_drawing.rb +25 -0
  254. data/test/drawing/tc_vml_shape.rb +106 -0
  255. data/test/profile.rb +24 -0
  256. data/test/rels/tc_relationship.rb +44 -0
  257. data/test/rels/tc_relationships.rb +37 -0
  258. data/test/stylesheet/tc_border.rb +37 -0
  259. data/test/stylesheet/tc_border_pr.rb +32 -0
  260. data/test/stylesheet/tc_cell_alignment.rb +81 -0
  261. data/test/stylesheet/tc_cell_protection.rb +29 -0
  262. data/test/stylesheet/tc_cell_style.rb +57 -0
  263. data/test/stylesheet/tc_color.rb +43 -0
  264. data/test/stylesheet/tc_dxf.rb +81 -0
  265. data/test/stylesheet/tc_fill.rb +18 -0
  266. data/test/stylesheet/tc_font.rb +121 -0
  267. data/test/stylesheet/tc_gradient_fill.rb +72 -0
  268. data/test/stylesheet/tc_gradient_stop.rb +31 -0
  269. data/test/stylesheet/tc_num_fmt.rb +30 -0
  270. data/test/stylesheet/tc_pattern_fill.rb +43 -0
  271. data/test/stylesheet/tc_styles.rb +235 -0
  272. data/test/stylesheet/tc_table_style.rb +44 -0
  273. data/test/stylesheet/tc_table_style_element.rb +45 -0
  274. data/test/stylesheet/tc_table_styles.rb +29 -0
  275. data/test/stylesheet/tc_xf.rb +120 -0
  276. data/test/tc_axlsx.rb +72 -0
  277. data/test/tc_helper.rb +10 -0
  278. data/test/tc_package.rb +233 -0
  279. data/test/util/tc_mime_type_utils.rb +13 -0
  280. data/test/util/tc_serialized_attributes.rb +19 -0
  281. data/test/util/tc_simple_typed_list.rb +77 -0
  282. data/test/util/tc_validators.rb +210 -0
  283. data/test/workbook/tc_defined_name.rb +49 -0
  284. data/test/workbook/tc_shared_strings_table.rb +58 -0
  285. data/test/workbook/tc_workbook.rb +139 -0
  286. data/test/workbook/tc_workbook_view.rb +50 -0
  287. data/test/workbook/worksheet/auto_filter/tc_auto_filter.rb +38 -0
  288. data/test/workbook/worksheet/auto_filter/tc_filter_column.rb +76 -0
  289. data/test/workbook/worksheet/auto_filter/tc_filters.rb +50 -0
  290. data/test/workbook/worksheet/tc_break.rb +49 -0
  291. data/test/workbook/worksheet/tc_cell.rb +358 -0
  292. data/test/workbook/worksheet/tc_cfvo.rb +31 -0
  293. data/test/workbook/worksheet/tc_col.rb +78 -0
  294. data/test/workbook/worksheet/tc_color_scale.rb +58 -0
  295. data/test/workbook/worksheet/tc_comment.rb +72 -0
  296. data/test/workbook/worksheet/tc_comments.rb +57 -0
  297. data/test/workbook/worksheet/tc_conditional_formatting.rb +224 -0
  298. data/test/workbook/worksheet/tc_data_bar.rb +46 -0
  299. data/test/workbook/worksheet/tc_data_validation.rb +265 -0
  300. data/test/workbook/worksheet/tc_date_time_converter.rb +124 -0
  301. data/test/workbook/worksheet/tc_header_footer.rb +151 -0
  302. data/test/workbook/worksheet/tc_icon_set.rb +45 -0
  303. data/test/workbook/worksheet/tc_page_margins.rb +97 -0
  304. data/test/workbook/worksheet/tc_page_set_up_pr.rb +15 -0
  305. data/test/workbook/worksheet/tc_page_setup.rb +143 -0
  306. data/test/workbook/worksheet/tc_pane.rb +54 -0
  307. data/test/workbook/worksheet/tc_pivot_table.rb +120 -0
  308. data/test/workbook/worksheet/tc_pivot_table_cache_definition.rb +54 -0
  309. data/test/workbook/worksheet/tc_print_options.rb +72 -0
  310. data/test/workbook/worksheet/tc_protected_range.rb +17 -0
  311. data/test/workbook/worksheet/tc_rich_text.rb +44 -0
  312. data/test/workbook/worksheet/tc_rich_text_run.rb +172 -0
  313. data/test/workbook/worksheet/tc_row.rb +117 -0
  314. data/test/workbook/worksheet/tc_selection.rb +55 -0
  315. data/test/workbook/worksheet/tc_sheet_calc_pr.rb +18 -0
  316. data/test/workbook/worksheet/tc_sheet_format_pr.rb +88 -0
  317. data/test/workbook/worksheet/tc_sheet_pr.rb +49 -0
  318. data/test/workbook/worksheet/tc_sheet_protection.rb +117 -0
  319. data/test/workbook/worksheet/tc_sheet_view.rb +214 -0
  320. data/test/workbook/worksheet/tc_table.rb +68 -0
  321. data/test/workbook/worksheet/tc_table_style_info.rb +53 -0
  322. data/test/workbook/worksheet/tc_worksheet.rb +577 -0
  323. data/test/workbook/worksheet/tc_worksheet_hyperlink.rb +55 -0
  324. metadata +583 -0
@@ -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
@@ -0,0 +1,49 @@
1
+ $LOAD_PATH.unshift "#{File.dirname(__FILE__)}/../"
2
+
3
+ require 'tc_helper.rb'
4
+
5
+ class TestTitle < Test::Unit::TestCase
6
+ def setup
7
+ @p = Axlsx::Package.new
8
+ ws = @p.workbook.add_worksheet
9
+ @row = ws.add_row ["one", 1, Time.now]
10
+ @title = Axlsx::Title.new
11
+ @chart = ws.add_chart Axlsx::Bar3DChart
12
+ end
13
+
14
+ def teardown
15
+ end
16
+
17
+ def test_initialization
18
+ assert(@title.text == "")
19
+ assert(@title.cell == nil)
20
+ end
21
+
22
+ def test_text
23
+ assert_raise(ArgumentError, "text must be a string") { @title.text = 123 }
24
+ @title.cell = @row.cells.first
25
+ @title.text = "bob"
26
+ assert(@title.cell == nil, "setting title with text clears the cell")
27
+ end
28
+
29
+ def test_cell
30
+ assert_raise(ArgumentError, "cell must be a Cell") { @title.cell = "123" }
31
+ @title.cell = @row.cells.first
32
+ assert(@title.text == "one")
33
+ end
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
+
49
+ end
@@ -0,0 +1,36 @@
1
+ require 'tc_helper.rb'
2
+
3
+ class TestTwoCellAnchor < Test::Unit::TestCase
4
+
5
+ def setup
6
+ p = Axlsx::Package.new
7
+ @ws = p.workbook.add_worksheet
8
+ @ws.add_row ["one", 1, Time.now]
9
+ chart = @ws.add_chart Axlsx::Bar3DChart
10
+ @anchor = chart.graphic_frame.anchor
11
+ end
12
+
13
+ def test_initialization
14
+ assert(@anchor.from.col == 0)
15
+ assert(@anchor.from.row == 0)
16
+ assert(@anchor.to.col == 5)
17
+ assert(@anchor.to.row == 10)
18
+ end
19
+
20
+ def test_index
21
+ assert_equal(@anchor.index, @anchor.drawing.anchors.index(@anchor))
22
+ end
23
+
24
+ def test_options
25
+ assert_raise(ArgumentError, 'invalid start_at') { @ws.add_chart Axlsx::Chart, :start_at=>"1" }
26
+ assert_raise(ArgumentError, 'invalid end_at') { @ws.add_chart Axlsx::Chart, :start_at=>[1,2], :end_at => ["a", 4] }
27
+ # this is actually raised in the graphic frame
28
+ assert_raise(ArgumentError, 'invalid Chart') { @ws.add_chart Axlsx::TwoCellAnchor }
29
+ a = @ws.add_chart Axlsx::Chart, :start_at => [15, 35], :end_at => [90, 45]
30
+ assert_equal(a.graphic_frame.anchor.from.col, 15)
31
+ assert_equal(a.graphic_frame.anchor.from.row, 35)
32
+ assert_equal(a.graphic_frame.anchor.to.col, 90)
33
+ assert_equal(a.graphic_frame.anchor.to.row, 45)
34
+ end
35
+
36
+ end
@@ -0,0 +1,24 @@
1
+ require 'tc_helper.rb'
2
+
3
+ class TestValAxis < Test::Unit::TestCase
4
+ def setup
5
+ @axis = Axlsx::ValAxis.new
6
+ end
7
+ def teardown
8
+ end
9
+
10
+ def test_initialization
11
+ assert_equal(@axis.cross_between, :between, "axis crossBetween default incorrect")
12
+ end
13
+
14
+ def test_options
15
+ a = Axlsx::ValAxis.new(:cross_between => :midCat)
16
+ assert_equal(:midCat, a.cross_between)
17
+ end
18
+
19
+ def test_crossBetween
20
+ assert_raise(ArgumentError, "requires valid crossBetween") { @axis.cross_between = :my_eyes }
21
+ assert_nothing_raised("accepts valid crossBetween") { @axis.cross_between = :midCat }
22
+ end
23
+
24
+ end
@@ -0,0 +1,54 @@
1
+ require 'tc_helper.rb'
2
+
3
+ class TestView3D < Test::Unit::TestCase
4
+ def setup
5
+ @view = Axlsx::View3D.new
6
+ end
7
+
8
+ def teardown
9
+ end
10
+
11
+ def test_options
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
+ assert_equal(v.perspective, 10)
19
+ end
20
+
21
+ def test_rot_x
22
+ assert_raise(ArgumentError) {@view.rot_x = "bob"}
23
+ assert_nothing_raised {@view.rot_x = -90}
24
+ end
25
+
26
+ def test_rot_y
27
+ assert_raise(ArgumentError) {@view.rot_y = "bob"}
28
+ assert_nothing_raised {@view.rot_y = 90}
29
+ end
30
+
31
+ def test_h_percent
32
+ assert_raise(ArgumentError) {@view.h_percent = "bob"}
33
+ assert_nothing_raised {@view.h_percent = "500%"}
34
+ end
35
+
36
+ def test_depth_percent
37
+ assert_raise(ArgumentError) {@view.depth_percent = "bob"}
38
+ assert_nothing_raised {@view.depth_percent = "20%"}
39
+ end
40
+
41
+
42
+ def test_rAngAx
43
+ assert_raise(ArgumentError) {@view.rAngAx = "bob"}
44
+ assert_nothing_raised {@view.rAngAx = true}
45
+ end
46
+
47
+ def test_perspective
48
+ assert_raise(ArgumentError) {@view.perspective = "bob"}
49
+ assert_nothing_raised {@view.perspective = 30}
50
+ end
51
+
52
+
53
+
54
+ end
@@ -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,106 @@
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', :visible => true
10
+ @ws.add_comment :ref => 'C3', :text => 'rust bucket', :author => 'PO', :visible => false
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
+ def test_visible
88
+ shape = @comments.first.vml_shape
89
+ shape.visible = false
90
+ assert(shape.visible == false)
91
+ assert_raise(ArgumentError) { shape.visible = 'foo' }
92
+ end
93
+ def test_to_xml_string
94
+ str = @comments.vml_drawing.to_xml_string()
95
+ doc = Nokogiri::XML(str)
96
+ assert_equal(doc.xpath("//v:shape").size, 2)
97
+ assert_equal(1, doc.xpath("//x:Visible").size, 'ClientData/x:Visible element rendering')
98
+ @comments.each do |comment|
99
+ shape = comment.vml_shape
100
+ assert(doc.xpath("//v:shape/x:ClientData/x:Row[text()='#{shape.row}']").size == 1)
101
+ assert(doc.xpath("//v:shape/x:ClientData/x:Column[text()='#{shape.column}']").size == 1)
102
+ 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)
103
+ end
104
+ end
105
+
106
+ end
@@ -0,0 +1,24 @@
1
+ #!/usr/bin/env ruby -s
2
+
3
+ $:.unshift "#{File.dirname(__FILE__)}/../lib"
4
+ require 'axlsx'
5
+ require 'ruby-prof'
6
+ #RubyProf.measure_mode = RubyProf::MEMORY
7
+ #
8
+ row = []
9
+ # Taking worst case scenario of all string data
10
+ input = (32..126).to_a.pack('U*').chars.to_a
11
+ 20.times { row << input.shuffle.join}
12
+
13
+ profile = RubyProf.profile do
14
+ p = Axlsx::Package.new
15
+ p.workbook.add_worksheet do |sheet|
16
+ 10000.times do
17
+ sheet << row
18
+ end
19
+ end
20
+ p.to_stream
21
+ end
22
+
23
+ printer = RubyProf::FlatPrinter.new(profile)
24
+ printer.print(STDOUT, {})
@@ -0,0 +1,44 @@
1
+ require 'tc_helper.rb'
2
+
3
+ class TestRelationships < Test::Unit::TestCase
4
+
5
+ def test_instances_with_different_attributes_have_unique_ids
6
+ rel_1 = Axlsx::Relationship.new(Object.new, Axlsx::WORKSHEET_R, 'target')
7
+ rel_2 = Axlsx::Relationship.new(Object.new, Axlsx::COMMENT_R, 'foobar')
8
+ assert_not_equal rel_1.Id, rel_2.Id
9
+ end
10
+
11
+ def test_instances_with_same_attributes_share_id
12
+ source_obj = Object.new
13
+ instance = Axlsx::Relationship.new(source_obj, Axlsx::WORKSHEET_R, 'target')
14
+ assert_equal instance.Id, Axlsx::Relationship.new(source_obj, Axlsx::WORKSHEET_R, 'target').Id
15
+ end
16
+
17
+ def test_target_is_only_considered_for_same_attributes_check_if_target_mode_is_external
18
+ source_obj = Object.new
19
+ rel_1 = Axlsx::Relationship.new(source_obj, Axlsx::WORKSHEET_R, 'target')
20
+ rel_2 = Axlsx::Relationship.new(source_obj, Axlsx::WORKSHEET_R, '../target')
21
+ assert_equal rel_1.Id, rel_2.Id
22
+
23
+ rel_3 = Axlsx::Relationship.new(source_obj, Axlsx::HYPERLINK_R, 'target', :target_mode => :External)
24
+ rel_4 = Axlsx::Relationship.new(source_obj, Axlsx::HYPERLINK_R, '../target', :target_mode => :External)
25
+ assert_not_equal rel_3.Id, rel_4.Id
26
+ end
27
+
28
+ def test_type
29
+ assert_raise(ArgumentError) { Axlsx::Relationship.new nil, 'type', 'target' }
30
+ assert_nothing_raised { Axlsx::Relationship.new nil, Axlsx::WORKSHEET_R, 'target' }
31
+ assert_nothing_raised { Axlsx::Relationship.new nil, Axlsx::COMMENT_R, 'target' }
32
+ end
33
+
34
+ def test_target_mode
35
+ assert_raise(ArgumentError) { Axlsx::Relationship.new nil, 'type', 'target', :target_mode => "FISH" }
36
+ assert_nothing_raised { Axlsx::Relationship.new( nil, Axlsx::WORKSHEET_R, 'target', :target_mode => :External) }
37
+ end
38
+
39
+ def test_ampersand_escaping_in_target
40
+ r = Axlsx::Relationship.new(nil, Axlsx::HYPERLINK_R, "http://example.com?foo=1&bar=2", :target_mod => :External)
41
+ doc = Nokogiri::XML(r.to_xml_string)
42
+ assert_equal(doc.xpath("//Relationship[@Target='http://example.com?foo=1&bar=2']").size, 1)
43
+ end
44
+ end
@@ -0,0 +1,37 @@
1
+ require 'tc_helper.rb'
2
+
3
+ class TestRelationships < Test::Unit::TestCase
4
+
5
+ def test_for
6
+ source_obj_1, source_obj_2 = Object.new, Object.new
7
+ rel_1 = Axlsx::Relationship.new(source_obj_1, Axlsx::WORKSHEET_R, "bar")
8
+ rel_2 = Axlsx::Relationship.new(source_obj_2, Axlsx::WORKSHEET_R, "bar")
9
+ rels = Axlsx::Relationships.new
10
+ rels << rel_1
11
+ rels << rel_2
12
+ assert_equal rel_1, rels.for(source_obj_1)
13
+ assert_equal rel_2, rels.for(source_obj_2)
14
+ end
15
+
16
+ def test_valid_document
17
+ @rels = Axlsx::Relationships.new
18
+ schema = Nokogiri::XML::Schema(File.open(Axlsx::RELS_XSD))
19
+ doc = Nokogiri::XML(@rels.to_xml_string)
20
+ errors = []
21
+ schema.validate(doc).each do |error|
22
+ puts error.message
23
+ errors << error
24
+ end
25
+
26
+ @rels << Axlsx::Relationship.new(nil, Axlsx::WORKSHEET_R, "bar")
27
+ doc = Nokogiri::XML(@rels.to_xml_string)
28
+ errors = []
29
+ schema.validate(doc).each do |error|
30
+ puts error.message
31
+ errors << error
32
+ end
33
+
34
+ assert(errors.size == 0)
35
+ end
36
+
37
+ end