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,13 @@
1
+ require 'tc_helper.rb'
2
+ class TestMimeTypeUtils < Test::Unit::TestCase
3
+ def setup
4
+ @test_img = File.dirname(__FILE__) + "/../../examples/image1.jpeg"
5
+ end
6
+
7
+ def teardown
8
+ end
9
+
10
+ def test_mime_type_utils
11
+ assert_equal(Axlsx::MimeTypeUtils::get_mime_type(@test_img), 'image/jpeg')
12
+ end
13
+ end
@@ -0,0 +1,19 @@
1
+ require 'tc_helper.rb'
2
+ class Funk
3
+ include Axlsx::Accessors
4
+ include Axlsx::SerializedAttributes
5
+ serializable_attributes :camel_symbol, :boolean, :integer
6
+
7
+ attr_accessor :camel_symbol, :boolean, :integer
8
+ end
9
+
10
+ class TestSeralizedAttributes < Test::Unit::TestCase
11
+ def setup
12
+ @object = Funk.new
13
+ end
14
+
15
+ def test_camel_symbol
16
+ @object.camel_symbol = :foo_bar
17
+ assert_equal('camelSymbol="fooBar" ', @object.serialized_attributes)
18
+ end
19
+ end
@@ -0,0 +1,77 @@
1
+ require 'tc_helper.rb'
2
+ class TestSimpleTypedList < Test::Unit::TestCase
3
+ def setup
4
+ @list = Axlsx::SimpleTypedList.new Fixnum
5
+ end
6
+
7
+ def teardown
8
+ end
9
+
10
+ def test_type_is_a_class_or_array_of_class
11
+ assert_nothing_raised { Axlsx::SimpleTypedList.new Integer }
12
+ assert_nothing_raised { Axlsx::SimpleTypedList.new [Integer,String] }
13
+ assert_raise(ArgumentError) { Axlsx::SimpleTypedList.new }
14
+ assert_raise(ArgumentError) { Axlsx::SimpleTypedList.new "1" }
15
+ assert_raise(ArgumentError) { Axlsx::SimpleTypedList.new [Integer, "Class"] }
16
+ end
17
+
18
+ def test_indexed_based_assignment
19
+ #should not allow nil assignment
20
+ assert_raise(ArgumentError) { @list[0] = nil }
21
+ assert_raise(ArgumentError) { @list[0] = "1" }
22
+ assert_nothing_raised { @list[0] = 1 }
23
+ end
24
+
25
+ def test_concat_assignment
26
+ assert_raise(ArgumentError) { @list << nil }
27
+ assert_raise(ArgumentError) { @list << "1" }
28
+ assert_nothing_raised { @list << 1 }
29
+ end
30
+
31
+ def test_concat_should_return_index
32
+ assert( @list.size == 0 )
33
+ assert( @list << 1 == 0 )
34
+ assert( @list << 2 == 1 )
35
+ @list.delete_at 0
36
+ assert( @list << 3 == 1 )
37
+ assert( @list.index(2) == 0 )
38
+ end
39
+
40
+ def test_push_should_return_index
41
+ assert( @list.push(1) == 0 )
42
+ assert( @list.push(2) == 1 )
43
+ @list.delete_at 0
44
+ assert( @list.push(3) == 1 )
45
+ assert( @list.index(2) == 0 )
46
+ end
47
+
48
+ def test_locking
49
+ @list.push 1
50
+ @list.push 2
51
+ @list.push 3
52
+ @list.lock
53
+
54
+ assert_raise(ArgumentError) { @list.delete 1 }
55
+ assert_raise(ArgumentError) { @list.delete_at 1 }
56
+ assert_raise(ArgumentError) { @list.delete_at 2 }
57
+ @list.push 4
58
+ assert_nothing_raised { @list.delete_at 3 }
59
+ @list.unlock
60
+ #ignore garbage
61
+ assert_nothing_raised { @list.delete 0 }
62
+ assert_nothing_raised { @list.delete 9 }
63
+ end
64
+
65
+ def test_delete
66
+ @list.push 1
67
+ assert(@list.size == 1)
68
+ @list.delete 1
69
+ assert(@list.empty?)
70
+ end
71
+
72
+ def test_equality
73
+ @list.push 1
74
+ @list.push 2
75
+ assert_equal(@list.to_ary, [1,2])
76
+ end
77
+ end
@@ -0,0 +1,210 @@
1
+ require 'tc_helper.rb'
2
+ class TestValidators < Test::Unit::TestCase
3
+ def setup
4
+ end
5
+ def teardown
6
+ end
7
+
8
+ def test_validators
9
+ #unsigned_int
10
+ assert_nothing_raised { Axlsx.validate_unsigned_int 1 }
11
+ assert_nothing_raised { Axlsx.validate_unsigned_int(+1) }
12
+ assert_raise(ArgumentError) { Axlsx.validate_unsigned_int(-1)}
13
+ assert_raise(ArgumentError) { Axlsx.validate_unsigned_int('1') }
14
+
15
+ #int
16
+ assert_nothing_raised { Axlsx.validate_int(1) }
17
+ assert_nothing_raised { Axlsx.validate_int(-1) }
18
+ assert_raise(ArgumentError) { Axlsx.validate_int('a')}
19
+ assert_raise(ArgumentError) { Axlsx.validate_int(Array) }
20
+
21
+ #boolean (as 0 or 1, :true, :false, true, false, or "true," "false")
22
+ [0,1,:true, :false, true, false, "true", "false"].each do |v|
23
+ assert_nothing_raised { Axlsx.validate_boolean 0 }
24
+ end
25
+ assert_raise(ArgumentError) { Axlsx.validate_boolean 2 }
26
+
27
+ #string
28
+ assert_nothing_raised { Axlsx.validate_string "1" }
29
+ assert_raise(ArgumentError) { Axlsx.validate_string 2 }
30
+ assert_raise(ArgumentError) { Axlsx.validate_string false }
31
+
32
+ #float
33
+ assert_nothing_raised { Axlsx.validate_float 1.0 }
34
+ assert_raise(ArgumentError) { Axlsx.validate_float 2 }
35
+ assert_raise(ArgumentError) { Axlsx.validate_float false }
36
+
37
+ #pattern_type
38
+ assert_nothing_raised { Axlsx.validate_pattern_type :none }
39
+ assert_raise(ArgumentError) { Axlsx.validate_pattern_type "none" }
40
+ assert_raise(ArgumentError) { Axlsx.validate_pattern_type "crazy_pattern" }
41
+ assert_raise(ArgumentError) { Axlsx.validate_pattern_type false }
42
+
43
+ #gradient_type
44
+ assert_nothing_raised { Axlsx.validate_gradient_type :path }
45
+ assert_raise(ArgumentError) { Axlsx.validate_gradient_type nil }
46
+ assert_raise(ArgumentError) { Axlsx.validate_gradient_type "fractal" }
47
+ assert_raise(ArgumentError) { Axlsx.validate_gradient_type false }
48
+
49
+ #horizontal alignment
50
+ assert_nothing_raised { Axlsx.validate_horizontal_alignment :general }
51
+ assert_raise(ArgumentError) { Axlsx.validate_horizontal_alignment nil }
52
+ assert_raise(ArgumentError) { Axlsx.validate_horizontal_alignment "wavy" }
53
+ assert_raise(ArgumentError) { Axlsx.validate_horizontal_alignment false }
54
+
55
+ #vertical alignment
56
+ assert_nothing_raised { Axlsx.validate_vertical_alignment :top }
57
+ assert_raise(ArgumentError) { Axlsx.validate_vertical_alignment nil }
58
+ assert_raise(ArgumentError) { Axlsx.validate_vertical_alignment "dynamic" }
59
+ assert_raise(ArgumentError) { Axlsx.validate_vertical_alignment false }
60
+
61
+ #contentType
62
+ assert_nothing_raised { Axlsx.validate_content_type Axlsx::WORKBOOK_CT }
63
+ assert_raise(ArgumentError) { Axlsx.validate_content_type nil }
64
+ assert_raise(ArgumentError) { Axlsx.validate_content_type "http://some.url" }
65
+ assert_raise(ArgumentError) { Axlsx.validate_content_type false }
66
+
67
+ #relationshipType
68
+ assert_nothing_raised { Axlsx.validate_relationship_type Axlsx::WORKBOOK_R }
69
+ assert_raise(ArgumentError) { Axlsx.validate_relationship_type nil }
70
+ assert_raise(ArgumentError) { Axlsx.validate_relationship_type "http://some.url" }
71
+ assert_raise(ArgumentError) { Axlsx.validate_relationship_type false }
72
+
73
+ #number_with_unit
74
+ assert_nothing_raised { Axlsx.validate_number_with_unit "210mm" }
75
+ assert_nothing_raised { Axlsx.validate_number_with_unit "8.5in" }
76
+ assert_nothing_raised { Axlsx.validate_number_with_unit "29.7cm" }
77
+ assert_nothing_raised { Axlsx.validate_number_with_unit "120pt" }
78
+ assert_nothing_raised { Axlsx.validate_number_with_unit "0pc" }
79
+ assert_nothing_raised { Axlsx.validate_number_with_unit "12.34pi" }
80
+ assert_raise(ArgumentError) { Axlsx.validate_number_with_unit nil }
81
+ assert_raise(ArgumentError) { Axlsx.validate_number_with_unit "210" }
82
+ assert_raise(ArgumentError) { Axlsx.validate_number_with_unit 210 }
83
+ assert_raise(ArgumentError) { Axlsx.validate_number_with_unit "mm" }
84
+ assert_raise(ArgumentError) { Axlsx.validate_number_with_unit "-29cm" }
85
+
86
+ #scale_10_400
87
+ assert_nothing_raised { Axlsx.validate_scale_10_400 10 }
88
+ assert_nothing_raised { Axlsx.validate_scale_10_400 100 }
89
+ assert_nothing_raised { Axlsx.validate_scale_10_400 400 }
90
+ assert_raise(ArgumentError) { Axlsx.validate_scale_10_400 9 }
91
+ assert_raise(ArgumentError) { Axlsx.validate_scale_10_400 10.0 }
92
+ assert_raise(ArgumentError) { Axlsx.validate_scale_10_400 400.1 }
93
+ assert_raise(ArgumentError) { Axlsx.validate_scale_10_400 "99" }
94
+
95
+ #scale_0_10_400
96
+ assert_nothing_raised { Axlsx.validate_scale_0_10_400 0 }
97
+ assert_nothing_raised { Axlsx.validate_scale_0_10_400 10 }
98
+ assert_nothing_raised { Axlsx.validate_scale_0_10_400 100 }
99
+ assert_nothing_raised { Axlsx.validate_scale_0_10_400 400 }
100
+ assert_raise(ArgumentError) { Axlsx.validate_scale_0_10_400 9 }
101
+ assert_raise(ArgumentError) { Axlsx.validate_scale_0_10_400 10.0 }
102
+ assert_raise(ArgumentError) { Axlsx.validate_scale_0_10_400 400.1 }
103
+ assert_raise(ArgumentError) { Axlsx.validate_scale_0_10_400 "99" }
104
+
105
+ #page_orientation
106
+ assert_nothing_raised { Axlsx.validate_page_orientation :default }
107
+ assert_nothing_raised { Axlsx.validate_page_orientation :landscape }
108
+ assert_nothing_raised { Axlsx.validate_page_orientation :portrait }
109
+ assert_raise(ArgumentError) { Axlsx.validate_page_orientation nil }
110
+ assert_raise(ArgumentError) { Axlsx.validate_page_orientation 1 }
111
+ assert_raise(ArgumentError) { Axlsx.validate_page_orientation "landscape" }
112
+
113
+ #data_validation_error_style
114
+ [:information, :stop, :warning].each do |sym|
115
+ assert_nothing_raised { Axlsx.validate_data_validation_error_style sym }
116
+ end
117
+ assert_raise(ArgumentError) { Axlsx.validate_data_validation_error_style :other_symbol }
118
+ assert_raise(ArgumentError) { Axlsx.validate_data_validation_error_style 'warning' }
119
+ assert_raise(ArgumentError) { Axlsx.validate_data_validation_error_style 0 }
120
+
121
+ #data_validation_operator
122
+ [:lessThan, :lessThanOrEqual, :equal, :notEqual, :greaterThanOrEqual, :greaterThan, :between, :notBetween].each do |sym|
123
+ assert_nothing_raised { Axlsx.validate_data_validation_operator sym }
124
+ end
125
+ assert_raise(ArgumentError) { Axlsx.validate_data_validation_error_style :other_symbol }
126
+ assert_raise(ArgumentError) { Axlsx.validate_data_validation_error_style 'lessThan' }
127
+ assert_raise(ArgumentError) { Axlsx.validate_data_validation_error_style 0 }
128
+
129
+ #data_validation_type
130
+ [:custom, :data, :decimal, :list, :none, :textLength, :time, :whole].each do |sym|
131
+ assert_nothing_raised { Axlsx.validate_data_validation_type sym }
132
+ end
133
+ assert_raise(ArgumentError) { Axlsx.validate_data_validation_error_style :other_symbol }
134
+ assert_raise(ArgumentError) { Axlsx.validate_data_validation_error_style 'decimal' }
135
+ assert_raise(ArgumentError) { Axlsx.validate_data_validation_error_style 0 }
136
+
137
+ #sheet_view_type
138
+ [:normal, :page_break_preview, :page_layout].each do |sym|
139
+ assert_nothing_raised { Axlsx.validate_sheet_view_type sym }
140
+ end
141
+ assert_raise(ArgumentError) { Axlsx.validate_data_validation_error_style :other_symbol }
142
+ assert_raise(ArgumentError) { Axlsx.validate_data_validation_error_style 'page_layout' }
143
+ assert_raise(ArgumentError) { Axlsx.validate_data_validation_error_style 0 }
144
+
145
+ #active_pane_type
146
+ [:bottom_left, :bottom_right, :top_left, :top_right].each do |sym|
147
+ assert_nothing_raised { Axlsx.validate_pane_type sym }
148
+ end
149
+ assert_raise(ArgumentError) { Axlsx.validate_pane_type :other_symbol }
150
+ assert_raise(ArgumentError) { Axlsx.validate_pane_type 'bottom_left' }
151
+ assert_raise(ArgumentError) { Axlsx.validate_pane_type 0 }
152
+
153
+ #split_state_type
154
+ [:frozen, :frozen_split, :split].each do |sym|
155
+ assert_nothing_raised { Axlsx.validate_split_state_type sym }
156
+ end
157
+ assert_raise(ArgumentError) { Axlsx.validate_split_state_type :other_symbol }
158
+ assert_raise(ArgumentError) { Axlsx.validate_split_state_type 'frozen_split' }
159
+ assert_raise(ArgumentError) { Axlsx.validate_split_state_type 0 }
160
+
161
+ #display_blanks_as
162
+ [:gap, :span, :zero].each do |sym|
163
+ assert_nothing_raised { Axlsx.validate_display_blanks_as sym }
164
+ end
165
+ assert_raise(ArgumentError) { Axlsx.validate_display_blanks_as :other_symbol }
166
+ assert_raise(ArgumentError) { Axlsx.validate_display_blanks_as 'other_blank' }
167
+ assert_raise(ArgumentError) { Axlsx.validate_display_blanks_as 0 }
168
+
169
+ #view_visibility
170
+ [:visible, :hidden, :very_hidden].each do |sym|
171
+ assert_nothing_raised { Axlsx.validate_view_visibility sym }
172
+ end
173
+ assert_raise(ArgumentError) { Axlsx.validate_view_visibility :other_symbol }
174
+ assert_raise(ArgumentError) { Axlsx.validate_view_visibility 'other_visibility' }
175
+ assert_raise(ArgumentError) { Axlsx.validate_view_visibility 0 }
176
+
177
+ #marker_symbol
178
+ [:default, :circle, :dash, :diamond, :dot, :picture, :plus, :square, :star, :triangle, :x].each do |sym|
179
+ assert_nothing_raised { Axlsx.validate_marker_symbol sym }
180
+ end
181
+ assert_raise(ArgumentError) { Axlsx.validate_marker_symbol :other_symbol }
182
+ assert_raise(ArgumentError) { Axlsx.validate_marker_symbol 'other_marker' }
183
+ assert_raise(ArgumentError) { Axlsx.validate_marker_symbol 0 }
184
+ end
185
+
186
+ def test_validate_integerish
187
+ assert_raise(ArgumentError) { Axlsx.validate_integerish Axlsx }
188
+ [1, 1.4, "a"].each { |test_value| assert_nothing_raised { Axlsx.validate_integerish test_value } }
189
+ end
190
+ def test_validate_family
191
+ assert_raise(ArgumentError) { Axlsx.validate_family 0 }
192
+ (1..5).each do |item|
193
+ assert_nothing_raised { Axlsx.validate_family item }
194
+ end
195
+ end
196
+
197
+ def test_validate_u
198
+ assert_raise(ArgumentError) { Axlsx.validate_cell_u :hoge }
199
+ [:none, :single, :double, :singleAccounting, :doubleAccounting].each do |sym|
200
+ assert_nothing_raised { Axlsx.validate_cell_u sym }
201
+ end
202
+ end
203
+
204
+ def test_range_validation
205
+ # exclusive
206
+ assert_raise(ArgumentError) { Axlsx::RangeValidator.validate('foo', 1, 10, 10, false) }
207
+ # inclusive by default
208
+ assert_nothing_raised { Axlsx::RangeValidator.validate('foo', 1, 10, 10) }
209
+ end
210
+ end
@@ -0,0 +1,49 @@
1
+ require 'tc_helper'
2
+
3
+ class TestDefinedNames < Test::Unit::TestCase
4
+ def setup
5
+ @dn = Axlsx::DefinedName.new('Sheet1!A1:A1')
6
+ end
7
+
8
+ def test_initialize
9
+ assert_equal('Sheet1!A1:A1', @dn.formula)
10
+ end
11
+
12
+ def test_string_attributes
13
+ %w(short_cut_key status_bar help description custom_menu comment).each do |attr|
14
+ assert_raise(ArgumentError, 'only strings allowed in string attributes') { @dn.send("#{attr}=", 1) }
15
+ assert_nothing_raised { @dn.send("#{attr}=", '_xlnm.Sheet_Title') }
16
+ end
17
+ end
18
+
19
+ def test_boolean_attributes
20
+ %w(workbook_parameter publish_to_server xlm vb_proceedure function hidden).each do |attr|
21
+ assert_raise(ArgumentError, 'only booleanish allowed in string attributes') { @dn.send("#{attr}=", 'foo') }
22
+ assert_nothing_raised { @dn.send("#{attr}=", 1) }
23
+ end
24
+
25
+ end
26
+
27
+ def test_local_sheet_id
28
+ assert_raise(ArgumentError, 'local_sheet_id must be an unsigned int') { @dn.local_sheet_id = -1 }
29
+ assert_nothing_raised { @dn.local_sheet_id = 1 }
30
+ end
31
+
32
+ def test_do_not_camelcase_value_for_name
33
+ @dn.name = '_xlnm._FilterDatabase'
34
+ doc = Nokogiri::XML(@dn.to_xml_string)
35
+ assert_equal(doc.xpath("//definedName[@name='_xlnm._FilterDatabase']").size, 1)
36
+ assert_equal('Sheet1!A1:A1', doc.xpath('//definedName').text)
37
+ end
38
+
39
+ def test_to_xml_string
40
+ assert_raise(ArgumentError, 'name is required for serialization') { @dn.to_xml_string }
41
+ @dn.name = '_xlnm.Print_Titles'
42
+ @dn.hidden = true
43
+ doc = Nokogiri::XML(@dn.to_xml_string)
44
+ assert_equal(doc.xpath("//definedName[@name='_xlnm.Print_Titles']").size, 1)
45
+ assert_equal(doc.xpath("//definedName[@hidden='1']").size, 1)
46
+ assert_equal('Sheet1!A1:A1', doc.xpath('//definedName').text)
47
+ end
48
+
49
+ end
@@ -0,0 +1,58 @@
1
+ require 'tc_helper.rb'
2
+
3
+ class TestSharedStringsTable < Test::Unit::TestCase
4
+
5
+ def setup
6
+ @p = Axlsx::Package.new :use_shared_strings=>true
7
+ ws = @p.workbook.add_worksheet
8
+ ws.add_row ['a', 1, 'b']
9
+ ws.add_row ['b', 1, 'c']
10
+ ws.add_row ['c', 1, 'd']
11
+ end
12
+
13
+ def test_workbook_has_shared_strings
14
+ assert(@p.workbook.shared_strings.is_a?(Axlsx::SharedStringsTable), "shared string table was not created")
15
+ end
16
+
17
+ def test_count
18
+ sst = @p.workbook.shared_strings
19
+ assert_equal(sst.count, 6)
20
+ end
21
+
22
+ def test_unique_count
23
+ sst = @p.workbook.shared_strings
24
+ assert_equal(sst.unique_count, 4)
25
+ end
26
+
27
+ def test_uses_workbook_xml_space
28
+ assert_equal(@p.workbook.xml_space, @p.workbook.shared_strings.xml_space)
29
+ @p.workbook.xml_space = :default
30
+ assert_equal(:default, @p.workbook.shared_strings.xml_space)
31
+ end
32
+
33
+ def test_valid_document
34
+ schema = Nokogiri::XML::Schema(File.open(Axlsx::SML_XSD))
35
+ doc = Nokogiri::XML(@p.workbook.shared_strings.to_xml_string)
36
+ errors = []
37
+ schema.validate(doc).each do |error|
38
+ puts error.message
39
+ errors << error
40
+ end
41
+ assert_equal(errors.size, 0, "sharedStirngs.xml Invalid" + errors.map{ |e| e.message }.to_s)
42
+ end
43
+
44
+ def test_remove_control_characters_in_xml_serialization
45
+ nasties = "hello\x10\x00\x1C\x1Eworld"
46
+ @p.workbook.worksheets[0].add_row [nasties]
47
+
48
+ # test that the nasty string was added to the shared strings
49
+ assert @p.workbook.shared_strings.unique_cells.has_key?(nasties)
50
+
51
+ # test that none of the control characters are in the XML output for shared strings
52
+ assert_no_match /#{Axlsx::CONTROL_CHARS}/, @p.workbook.shared_strings.to_xml_string
53
+
54
+ # assert that the shared string was normalized to remove the control characters
55
+ assert_not_nil @p.workbook.shared_strings.to_xml_string.index("helloworld")
56
+ end
57
+
58
+ end
@@ -0,0 +1,139 @@
1
+ require 'tc_helper.rb'
2
+
3
+ class TestWorkbook < Test::Unit::TestCase
4
+ def setup
5
+ p = Axlsx::Package.new
6
+ @wb = p.workbook
7
+ end
8
+
9
+ def teardown
10
+ end
11
+
12
+ def test_worksheet_users_xml_space
13
+ sheet = @wb.add_worksheet(:name => 'foo')
14
+ ws_xml = Nokogiri::XML(sheet.to_xml_string)
15
+ assert(ws_xml.xpath("//xmlns:worksheet/@xml:space='preserve'"))
16
+
17
+ @wb.xml_space = :default
18
+ ws_xml = Nokogiri::XML(sheet.to_xml_string)
19
+ assert(ws_xml.xpath("//xmlns:worksheet/@xml:space='default'"))
20
+ end
21
+
22
+ def test_xml_space
23
+ assert_equal(:preserve, @wb.xml_space)
24
+ @wb.xml_space = :default
25
+ assert_equal(:default, @wb.xml_space)
26
+ assert_raise(ArgumentError) { @wb.xml_space = :none }
27
+ end
28
+
29
+ def test_no_autowidth
30
+ assert_equal(@wb.use_autowidth, true)
31
+ assert_raise(ArgumentError) {@wb.use_autowidth = 0.1}
32
+ assert_nothing_raised {@wb.use_autowidth = false}
33
+ assert_equal(@wb.use_autowidth, false)
34
+ end
35
+
36
+
37
+ def test_sheet_by_name_retrieval
38
+ @wb.add_worksheet(:name=>'foo')
39
+ @wb.add_worksheet(:name=>'bar')
40
+ assert_equal('foo', @wb.sheet_by_name('foo').name)
41
+
42
+ end
43
+ def test_date1904
44
+ assert_equal(Axlsx::Workbook.date1904, @wb.date1904)
45
+ @wb.date1904 = :false
46
+ assert_equal(Axlsx::Workbook.date1904, @wb.date1904)
47
+ Axlsx::Workbook.date1904 = :true
48
+ assert_equal(Axlsx::Workbook.date1904, @wb.date1904)
49
+ end
50
+
51
+ def test_add_defined_name
52
+ @wb.add_defined_name 'Sheet1!1:1', :name => '_xlnm.Print_Titles', :hidden => true
53
+ assert_equal(1, @wb.defined_names.size)
54
+ end
55
+
56
+ def test_add_view
57
+ @wb.add_view visibility: :hidden, window_width: 800
58
+ assert_equal(1, @wb.views.size)
59
+ end
60
+
61
+ def test_shared_strings
62
+ assert_equal(@wb.use_shared_strings, nil)
63
+ assert_raise(ArgumentError) {@wb.use_shared_strings = 'bpb'}
64
+ assert_nothing_raised {@wb.use_shared_strings = :true}
65
+ end
66
+
67
+ def test_add_worksheet
68
+ assert(@wb.worksheets.empty?, "worbook has no worksheets by default")
69
+ ws = @wb.add_worksheet(:name=>"bob")
70
+ assert_equal(@wb.worksheets.size, 1, "add_worksheet adds a worksheet!")
71
+ assert_equal(@wb.worksheets.first, ws, "the worksheet returned is the worksheet added")
72
+ assert_equal(ws.name, "bob", "name option gets passed to worksheet")
73
+ end
74
+
75
+ def test_insert_worksheet
76
+ @wb.add_worksheet(:name => 'A')
77
+ @wb.add_worksheet(:name => 'B')
78
+ ws3 = @wb.insert_worksheet(0, :name => 'C')
79
+ assert_equal(ws3.name, @wb.worksheets.first.name)
80
+ end
81
+
82
+ def test_relationships
83
+ #current relationship size is 1 due to style relation
84
+ assert(@wb.relationships.size == 1)
85
+ @wb.add_worksheet
86
+ assert(@wb.relationships.size == 2)
87
+ @wb.use_shared_strings = true
88
+ assert(@wb.relationships.size == 3)
89
+ end
90
+
91
+ def test_to_xml
92
+ schema = Nokogiri::XML::Schema(File.open(Axlsx::SML_XSD))
93
+ doc = Nokogiri::XML(@wb.to_xml_string)
94
+ errors = []
95
+ schema.validate(doc).each do |error|
96
+ errors.push error
97
+ puts error.message
98
+ end
99
+ assert(errors.empty?, "error free validation")
100
+ end
101
+ def test_range_requires__valid_sheet
102
+ ws = @wb.add_worksheet :name=>'fish'
103
+ ws.add_row [1,2,3]
104
+ ws.add_row [4,5,6]
105
+ assert_raise(ArgumentError, "no sheet name part") { @wb["A1:C2"]}
106
+ assert_equal @wb['fish!A1:C2'].size, 6
107
+ end
108
+
109
+ def test_to_xml_adds_worksheet_when_worksheets_is_empty
110
+ assert(@wb.worksheets.empty?)
111
+ @wb.to_xml_string
112
+ assert(@wb.worksheets.size == 1)
113
+ end
114
+
115
+ def test_to_xml_string_defined_names
116
+ @wb.add_worksheet do |sheet|
117
+ sheet.add_row [1, "two"]
118
+ sheet.auto_filter = "A1:B1"
119
+ end
120
+ doc = Nokogiri::XML(@wb.to_xml_string)
121
+ assert_equal(doc.xpath('//xmlns:workbook/xmlns:definedNames/xmlns:definedName').inner_text, @wb.worksheets[0].auto_filter.defined_name)
122
+ end
123
+
124
+ def test_to_xml_string_book_views
125
+ @wb.add_worksheet do |sheet|
126
+ sheet.add_row [1, "two"]
127
+ end
128
+ @wb.add_view active_tab: 0, first_sheet: 0
129
+ doc = Nokogiri::XML(@wb.to_xml_string)
130
+ assert_equal(1, doc.xpath('//xmlns:workbook/xmlns:bookViews/xmlns:workbookView[@activeTab=0]').size)
131
+ end
132
+
133
+ def test_to_xml_uses_correct_rIds_for_pivotCache
134
+ ws = @wb.add_worksheet
135
+ pivot_table = ws.add_pivot_table('G5:G6', 'A1:D5')
136
+ doc = Nokogiri::XML(@wb.to_xml_string)
137
+ assert_equal pivot_table.cache_definition.rId, doc.xpath("//xmlns:pivotCache").first["r:id"]
138
+ end
139
+ end