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,67 @@
1
+ require 'tc_helper.rb'
2
+
3
+ class TestTable < Test::Unit::TestCase
4
+ def setup
5
+ p = Axlsx::Package.new
6
+ @ws = p.workbook.add_worksheet
7
+ 40.times do
8
+ @ws << ["aa","aa","aa","aa","aa","aa"]
9
+ end
10
+ end
11
+
12
+ def test_initialization
13
+ assert(@ws.workbook.tables.empty?)
14
+ assert(@ws.tables.empty?)
15
+
16
+ end
17
+
18
+ def test_table_style_info
19
+ table = @ws.add_table('A1:D5', :name => 'foo', :style_info => { :show_row_stripes => true, :name => "TableStyleMedium25" })
20
+ assert_equal('TableStyleMedium25', table.table_style_info.name)
21
+ assert_equal(true, table.table_style_info.show_row_stripes)
22
+ end
23
+
24
+ def test_add_table
25
+ name = "test"
26
+ table = @ws.add_table("A1:D5", :name => name)
27
+ assert(table.is_a?(Axlsx::Table), "must create a table")
28
+ assert_equal(@ws.workbook.tables.last, table, "must be added to workbook table collection")
29
+ assert_equal(@ws.tables.last, table, "must be added to worksheet table collection")
30
+ assert_equal(table.name, name, "options for name are applied")
31
+ end
32
+
33
+ def test_pn
34
+ @ws.add_table("A1:D5")
35
+ assert_equal(@ws.tables.first.pn, "tables/table1.xml")
36
+ end
37
+
38
+ def test_rId
39
+ table = @ws.add_table("A1:D5")
40
+ assert_equal @ws.relationships.for(table).Id, table.rId
41
+ end
42
+
43
+ def test_index
44
+ @ws.add_table("A1:D5")
45
+ assert_equal(@ws.tables.first.index, @ws.workbook.tables.index(@ws.tables.first))
46
+ end
47
+
48
+ def test_relationships
49
+ assert(@ws.relationships.empty?)
50
+ @ws.add_table("A1:D5")
51
+ assert_equal(@ws.relationships.size, 1, "adding a table adds a relationship")
52
+ @ws.add_table("F1:J5")
53
+ assert_equal(@ws.relationships.size, 2, "adding a table adds a relationship")
54
+ end
55
+
56
+ def test_to_xml_string
57
+ table = @ws.add_table("A1:D5")
58
+ schema = Nokogiri::XML::Schema(File.open(Axlsx::SML_XSD))
59
+ doc = Nokogiri::XML(table.to_xml_string)
60
+ errors = []
61
+ schema.validate(doc).each do |error|
62
+ errors.push error
63
+ puts error.message
64
+ end
65
+ assert(errors.empty?, "error free validation")
66
+ end
67
+ end
@@ -0,0 +1,53 @@
1
+ require 'tc_helper.rb'
2
+
3
+ class TestTableStyleInfo < Test::Unit::TestCase
4
+ def setup
5
+ p = Axlsx::Package.new
6
+ @ws = p.workbook.add_worksheet
7
+ 40.times do
8
+ @ws.add_row %w(aa bb cc dd ee ff gg hh ii jj kk)
9
+ end
10
+ @table = @ws.add_table(Axlsx::cell_range([@ws.rows.first.cells.first,@ws.rows.last.cells.last], false), :name => 'foo')
11
+ @options = { :show_first_column => 1,
12
+ :show_last_column => 1,
13
+ :show_row_stripes => 1,
14
+ :show_column_stripes => 1,
15
+ :name => "TableStyleDark4" }
16
+
17
+
18
+ end
19
+
20
+ def test_initialize
21
+ table_style = Axlsx::TableStyleInfo.new @options
22
+ @options.each do |key, value|
23
+ assert_equal(value, table_style.send(key.to_sym))
24
+ end
25
+ end
26
+
27
+ def test_boolean_properties
28
+ table_style = Axlsx::TableStyleInfo.new
29
+ @options.keys.each do |key|
30
+ assert_nothing_raised { table_style.send("#{key.to_sym}=", true) }
31
+ assert_raises(ArgumentError) { table_style.send(key.to_sym, 'foo') }
32
+ end
33
+ end
34
+ def doc
35
+ @doc ||= Nokogiri::XML(Axlsx::TableStyleInfo.new(@options).to_xml_string)
36
+ end
37
+
38
+ def test_to_xml_string_first_column
39
+ assert(doc.xpath('//tableStyleInfo[@showLastColumn=1]'))
40
+ end
41
+
42
+ def test_to_xml_string_row_stripes
43
+ assert(doc.xpath('//tableStyleInfo[@showRowStripes=1]'))
44
+ end
45
+
46
+ def test_to_xml_string_column_stripes
47
+ assert(doc.xpath('//tableStyleInfo[@showColumnStripes=1]'))
48
+ end
49
+
50
+ def test_to_xml_string_name
51
+ assert(doc.xpath("//tableStyleInfo[@name=#{@options[:name]}]"))
52
+ end
53
+ end
@@ -0,0 +1,597 @@
1
+ require 'tc_helper.rb'
2
+
3
+ class TestWorksheet < Test::Unit::TestCase
4
+ def setup
5
+ @p = Axlsx::Package.new
6
+ @wb = @p.workbook
7
+ @ws = @wb.add_worksheet
8
+ end
9
+
10
+
11
+ def test_pn
12
+ assert_equal(@ws.pn, "worksheets/sheet1.xml")
13
+ ws = @ws.workbook.add_worksheet
14
+ assert_equal(ws.pn, "worksheets/sheet2.xml")
15
+ end
16
+
17
+ def test_name_is_html_encoded
18
+ @ws.name = '<foo> & <bar>'
19
+ assert_equal(@ws.name, '&lt;foo&gt; &amp; &lt;bar&gt;')
20
+ end
21
+
22
+ def test_name_exception_on_invalid_character
23
+ assert_raises(ArgumentError) { @ws.name = 'foo:bar' }
24
+ assert_raises(ArgumentError) { @ws.name = 'foo[bar' }
25
+ assert_raises(ArgumentError) { @ws.name = 'foo]bar' }
26
+ assert_raises(ArgumentError) { @ws.name = 'foo*bar' }
27
+ assert_raises(ArgumentError) { @ws.name = 'foo/bar' }
28
+ assert_raises(ArgumentError) { @ws.name = 'foo\bar' }
29
+ assert_raises(ArgumentError) { @ws.name = 'foo?bar' }
30
+ end
31
+
32
+ def test_page_margins
33
+ assert(@ws.page_margins.is_a? Axlsx::PageMargins)
34
+ end
35
+
36
+ def test_page_margins_yeild
37
+ @ws.page_margins do |pm|
38
+ assert(pm.is_a? Axlsx::PageMargins)
39
+ assert(@ws.page_margins == pm)
40
+ end
41
+ end
42
+
43
+ def test_page_setup
44
+ assert(@ws.page_setup.is_a? Axlsx::PageSetup)
45
+ end
46
+
47
+ def test_page_setup_yield
48
+ @ws.page_setup do |ps|
49
+ assert(ps.is_a? Axlsx::PageSetup)
50
+ assert(@ws.page_setup == ps)
51
+ end
52
+ end
53
+
54
+ def test_print_options
55
+ assert(@ws.print_options.is_a? Axlsx::PrintOptions)
56
+ end
57
+
58
+ def test_print_options_yield
59
+ @ws.print_options do |po|
60
+ assert(po.is_a? Axlsx::PrintOptions)
61
+ assert(@ws.print_options == po)
62
+ end
63
+ end
64
+
65
+ def test_header_footer
66
+ assert(@ws.header_footer.is_a? Axlsx::HeaderFooter)
67
+ end
68
+
69
+ def test_header_footer_yield
70
+ @ws.header_footer do |hf|
71
+ assert(hf.is_a? Axlsx::HeaderFooter)
72
+ assert(@ws.header_footer == hf)
73
+ end
74
+ end
75
+
76
+ def test_state
77
+ assert_equal(:visible, @ws.state)
78
+ end
79
+
80
+ def test_state_validation
81
+ assert_raise(ArgumentError) { @ws.state = :dead }
82
+ assert_nothing_raised { @ws.state = :very_hidden }
83
+ end
84
+
85
+ def test_no_autowidth
86
+ @ws.workbook.use_autowidth = false
87
+ @ws.add_row [1,2,3,4]
88
+ assert_equal(@ws.column_info[0].width, nil)
89
+ end
90
+
91
+ def test_initialization_options
92
+ page_margins = {:left => 2, :right => 2, :bottom => 2, :top => 2, :header => 2, :footer => 2}
93
+ page_setup = {:fit_to_height => 1, :fit_to_width => 1, :orientation => :landscape, :paper_width => "210mm", :paper_height => "297mm", :scale => 80}
94
+ print_options = {:grid_lines => true, :headings => true, :horizontal_centered => true, :vertical_centered => true}
95
+ header_footer = {:different_first => false, :different_odd_even => false, :odd_header => 'Header'}
96
+ optioned = @ws.workbook.add_worksheet(:name => 'bob', :page_margins => page_margins, :page_setup => page_setup, :print_options => print_options, :header_footer => header_footer)
97
+ page_margins.keys.each do |key|
98
+ assert_equal(page_margins[key], optioned.page_margins.send(key))
99
+ end
100
+ page_setup.keys.each do |key|
101
+ assert_equal(page_setup[key], optioned.page_setup.send(key))
102
+ end
103
+ print_options.keys.each do |key|
104
+ assert_equal(print_options[key], optioned.print_options.send(key))
105
+ end
106
+ header_footer.keys.each do |key|
107
+ assert_equal(header_footer[key], optioned.header_footer.send(key))
108
+ end
109
+ assert_equal(optioned.name, 'bob')
110
+
111
+ end
112
+
113
+
114
+ # def test_use_gridlines
115
+ # assert_raise(ArgumentError) { @ws.show_gridlines = -1.1 }
116
+ # assert_nothing_raised { @ws.show_gridlines = false }
117
+ # assert_equal(@ws.show_gridlines, false)
118
+ # end
119
+
120
+ # def test_selected
121
+ # assert_raise(ArgumentError) { @ws.selected = -1.1 }
122
+ # assert_nothing_raised { @ws.selected = true }
123
+ # assert_equal(@ws.selected, true)
124
+ # end
125
+
126
+ def test_rels_pn
127
+ assert_equal(@ws.rels_pn, "worksheets/_rels/sheet1.xml.rels")
128
+ ws = @ws.workbook.add_worksheet
129
+ assert_equal(ws.rels_pn, "worksheets/_rels/sheet2.xml.rels")
130
+ end
131
+
132
+ def test_rId
133
+ assert_equal @ws.workbook.relationships.for(@ws).Id, @ws.rId
134
+ end
135
+
136
+ def test_index
137
+ assert_equal(@ws.index, @ws.workbook.worksheets.index(@ws))
138
+ end
139
+
140
+ def test_dimension
141
+ @ws.add_row [1, 2, 3]
142
+ @ws.add_row [4, 5, 6]
143
+ assert_equal @ws.dimension.sqref, "A1:C2"
144
+ end
145
+
146
+ def test_dimension_with_empty_row
147
+ @ws.add_row
148
+ assert_equal "A1:AA200", @ws.dimension.sqref
149
+ end
150
+
151
+ def test_referencing
152
+ @ws.add_row [1, 2, 3]
153
+ @ws.add_row [4, 5, 6]
154
+ range = @ws["A1:C2"]
155
+ first_row = @ws[0]
156
+ last_row = @ws[1]
157
+ assert_equal(@ws.rows[0],first_row)
158
+ assert_equal(@ws.rows[1],last_row)
159
+ assert_equal(range.size, 6)
160
+ assert_equal(range.first, @ws.rows.first.cells.first)
161
+ assert_equal(range.last, @ws.rows.last.cells.last)
162
+ end
163
+
164
+ def test_add_row
165
+ assert(@ws.rows.empty?, "sheet has no rows by default")
166
+ r = @ws.add_row([1,2,3])
167
+ assert_equal(@ws.rows.size, 1, "add_row adds a row")
168
+ assert_equal(@ws.rows.first, r, "the row returned is the row added")
169
+ end
170
+
171
+ def test_add_chart
172
+ assert(@ws.workbook.charts.empty?, "the sheet's workbook should not have any charts by default")
173
+ @ws.add_chart Axlsx::Pie3DChart
174
+ assert_equal(@ws.workbook.charts.size, 1, "add_chart adds a chart to the workbook")
175
+ end
176
+
177
+ def test_add_page_break_with_string_cell_ref
178
+ assert(@ws.row_breaks.empty?)
179
+ assert(@ws.col_breaks.empty?)
180
+ @ws.add_page_break("B1")
181
+ assert_equal(1, @ws.row_breaks.size)
182
+ assert_equal(1, @ws.col_breaks.size)
183
+ end
184
+
185
+ def test_add_page_break_with_cell
186
+ @ws.add_row [1, 2, 3, 4]
187
+ @ws.add_row [1, 2, 3, 4]
188
+
189
+
190
+ assert(@ws.row_breaks.empty?)
191
+ assert(@ws.col_breaks.empty?)
192
+ @ws.add_page_break(@ws.rows.last.cells[1])
193
+ assert_equal(1, @ws.row_breaks.size)
194
+ assert_equal(1, @ws.col_breaks.size)
195
+ end
196
+
197
+
198
+ def test_drawing
199
+ assert @ws.drawing == nil
200
+ @ws.add_chart(Axlsx::Pie3DChart)
201
+ assert @ws.drawing.is_a?(Axlsx::Drawing)
202
+ end
203
+
204
+ def test_add_pivot_table
205
+ assert(@ws.workbook.pivot_tables.empty?, "the sheet's workbook should not have any pivot tables by default")
206
+ @ws.add_pivot_table 'G5:G6', 'A1:D:10'
207
+ assert_equal(@ws.workbook.pivot_tables.size, 1, "add_pivot_tables adds a pivot_table to the workbook")
208
+ end
209
+
210
+ def test_col_style
211
+ @ws.add_row [1,2,3,4]
212
+ @ws.add_row [1,2,3,4]
213
+ @ws.add_row [1,2,3,4]
214
+ @ws.add_row [1,2,3,4]
215
+ @ws.col_style( (1..2), 1, :row_offset=>1)
216
+ @ws.rows[(1..-1)].each do | r |
217
+ assert_equal(r.cells[1].style, 1)
218
+ assert_equal(r.cells[2].style, 1)
219
+ end
220
+ assert_equal(@ws.rows.first.cells[1].style, 0)
221
+ assert_equal(@ws.rows.first.cells[0].style, 0)
222
+ end
223
+
224
+ def test_col_style_with_empty_column
225
+ @ws.add_row [1,2,3,4]
226
+ @ws.add_row [1]
227
+ @ws.add_row [1,2,3,4]
228
+ assert_nothing_raised {@ws.col_style(1, 1)}
229
+ end
230
+
231
+ def test_cols
232
+ @ws.add_row [1,2,3,4]
233
+ @ws.add_row [1,2,3,4]
234
+ @ws.add_row [1,2,3]
235
+ @ws.add_row [1,2,3,4]
236
+ c = @ws.cols[1]
237
+ assert_equal(c.size, 4)
238
+ assert_equal(c[0].value, 2)
239
+ end
240
+
241
+ def test_cols_with_block
242
+ @ws.add_row [1,2,3]
243
+ @ws.add_row [1]
244
+ cols = @ws.cols {|row, column| :foo }
245
+ assert_equal(:foo, cols[1][1])
246
+ end
247
+
248
+ def test_row_style
249
+ @ws.add_row [1,2,3,4]
250
+ @ws.add_row [1,2,3,4]
251
+ @ws.add_row [1,2,3,4]
252
+ @ws.add_row [1,2,3,4]
253
+ @ws.row_style 1, 1, :col_offset=>1
254
+ @ws.rows[1].cells[(1..-1)].each do | c |
255
+ assert_equal(c.style, 1)
256
+ end
257
+ assert_equal(@ws.rows[1].cells[0].style, 0)
258
+ assert_equal(@ws.rows[2].cells[1].style, 0)
259
+ @ws.row_style( 1..2, 1, :col_offset => 2)
260
+ @ws.rows[(1..2)].each do |r|
261
+ r.cells[(2..-1)].each do |c|
262
+ assert_equal(c.style, 1)
263
+ end
264
+ end
265
+ end
266
+
267
+ def test_to_sheet_node_xml_string_without_name
268
+ doc = Nokogiri::XML(@ws.to_sheet_node_xml_string)
269
+ assert_equal(doc.xpath('/sheet/@name').size, 1)
270
+ end
271
+
272
+ # def test_to_xml_string_fit_to_page
273
+ # @ws.page_setup.fit_to_width = 1
274
+ # doc = Nokogiri::XML(@ws.to_xml_string)
275
+ # assert_equal(doc.xpath('//xmlns:worksheet/xmlns:sheetPr/xmlns:pageSetUpPr[@fitToPage=1]').size, 1)
276
+ # end
277
+
278
+ def test_to_xml_string_dimensions
279
+ @ws.add_row [1,2,3]
280
+ doc = Nokogiri::XML(@ws.to_xml_string)
281
+ assert_equal(doc.xpath('//xmlns:worksheet/xmlns:dimension[@ref="A1:C1"]').size, 1)
282
+ end
283
+
284
+ # def test_fit_to_page_assignation_does_nothing
285
+ # @ws.fit_to_page = true
286
+ # assert_equal(@ws.fit_to_page?, false)
287
+ # end
288
+
289
+ # def test_to_xml_string_selected
290
+ # @ws.selected = true
291
+ # doc = Nokogiri::XML(@ws.to_xml_string)
292
+ # assert_equal(doc.xpath('//xmlns:worksheet/xmlns:sheetViews/xmlns:sheetView[@tabSelected=1]').size, 1)
293
+ # end
294
+
295
+ # def test_to_xml_string_show_gridlines
296
+ # @ws.show_gridlines = false
297
+ # doc = Nokogiri::XML(@ws.to_xml_string)
298
+ # assert_equal(doc.xpath('//xmlns:worksheet/xmlns:sheetViews/xmlns:sheetView[@showGridLines=0]').size, 1)
299
+ # end
300
+
301
+ def test_to_xml_string_auto_fit_data
302
+ @ws.add_row [1, "two"]
303
+ doc = Nokogiri::XML(@ws.to_xml_string)
304
+ assert_equal(doc.xpath('//xmlns:worksheet/xmlns:cols/xmlns:col').size, 2)
305
+ end
306
+
307
+ def test_to_xml_string_sheet_data
308
+ @ws.add_row [1, "two"]
309
+ doc = Nokogiri::XML(@ws.to_xml_string)
310
+ assert_equal(doc.xpath('//xmlns:worksheet/xmlns:sheetData/xmlns:row').size, 1)
311
+ end
312
+
313
+ def test_to_xml_string_auto_filter
314
+ @ws.add_row [1, "two"]
315
+ @ws.auto_filter.range = "A1:B1"
316
+ doc = Nokogiri::XML(@ws.to_xml_string)
317
+ assert_equal(doc.xpath('//xmlns:worksheet/xmlns:autoFilter[@ref="A1:B1"]').size, 1)
318
+ end
319
+
320
+ def test_to_xml_string_merge_cells
321
+ @ws.add_row [1, "two"]
322
+ @ws.merge_cells "A1:D1"
323
+ @ws.merge_cells "E1:F1"
324
+ doc = Nokogiri::XML(@ws.to_xml_string)
325
+ assert_equal(doc.xpath('//xmlns:worksheet/xmlns:mergeCells/xmlns:mergeCell[@ref="A1:D1"]').size, 1)
326
+ assert_equal(doc.xpath('//xmlns:worksheet/xmlns:mergeCells/xmlns:mergeCell[@ref="E1:F1"]').size, 1)
327
+ end
328
+
329
+ def test_to_xml_string_merge_cells_row
330
+ row = @ws.add_row [1, "two"]
331
+ @ws.merge_cells row
332
+ doc = Nokogiri::XML(@ws.to_xml_string)
333
+ assert_equal(doc.xpath('//xmlns:worksheet/xmlns:mergeCells/xmlns:mergeCell[@ref="A1:B1"]').size, 1)
334
+ end
335
+
336
+ def test_to_xml_string_row_breaks
337
+ @ws.add_page_break("A1")
338
+ doc = Nokogiri::XML(@ws.to_xml_string)
339
+ assert_equal(doc.xpath('//xmlns:worksheet/xmlns:rowBreaks/xmlns:brk[@id="0"]').size, 1)
340
+ end
341
+
342
+ def test_to_xml_string_sheet_protection
343
+ @ws.sheet_protection.password = 'fish'
344
+ doc = Nokogiri::XML(@ws.to_xml_string)
345
+ assert(doc.xpath('//xmlns:sheetProtection'))
346
+ end
347
+
348
+ def test_to_xml_string_page_margins
349
+ @ws.page_margins do |pm|
350
+ pm.left = 9
351
+ pm.right = 7
352
+ end
353
+ doc = Nokogiri::XML(@ws.to_xml_string)
354
+ assert_equal(doc.xpath('//xmlns:worksheet/xmlns:pageMargins[@left="9"][@right="7"]').size, 1)
355
+ end
356
+
357
+ def test_to_xml_string_page_setup
358
+ @ws.page_setup do |ps|
359
+ ps.paper_width = "210mm"
360
+ ps.scale = 80
361
+ end
362
+ doc = Nokogiri::XML(@ws.to_xml_string)
363
+ assert_equal(doc.xpath('//xmlns:worksheet/xmlns:pageSetup[@paperWidth="210mm"][@scale="80"]').size, 1)
364
+ end
365
+
366
+ def test_to_xml_string_print_options
367
+ @ws.print_options do |po|
368
+ po.grid_lines = true
369
+ po.horizontal_centered = true
370
+ end
371
+ doc = Nokogiri::XML(@ws.to_xml_string)
372
+ assert_equal(doc.xpath('//xmlns:worksheet/xmlns:printOptions[@gridLines=1][@horizontalCentered=1]').size, 1)
373
+ end
374
+
375
+ def test_to_xml_string_header_footer
376
+ @ws.header_footer do |hf|
377
+ hf.different_first = false
378
+ hf.different_odd_even = false
379
+ hf.odd_header = 'Test Header'
380
+ end
381
+ doc = Nokogiri::XML(@ws.to_xml_string)
382
+ assert_equal(doc.xpath('//xmlns:worksheet/xmlns:headerFooter[@differentFirst=0][@differentOddEven=0]').size, 1)
383
+ end
384
+
385
+ def test_to_xml_string_drawing
386
+ @ws.add_chart Axlsx::Pie3DChart
387
+ doc = Nokogiri::XML(@ws.to_xml_string)
388
+ assert_equal @ws.send(:worksheet_drawing).relationship.Id, doc.xpath('//xmlns:worksheet/xmlns:drawing').first["r:id"]
389
+ end
390
+
391
+ def test_to_xml_string_tables
392
+ @ws.add_row ["one", "two"]
393
+ @ws.add_row [1, 2]
394
+ table = @ws.add_table "A1:B2"
395
+ doc = Nokogiri::XML(@ws.to_xml_string)
396
+ assert_equal(doc.xpath('//xmlns:worksheet/xmlns:tableParts[@count="1"]').size, 1)
397
+ assert_equal table.rId, doc.xpath('//xmlns:worksheet/xmlns:tableParts/xmlns:tablePart').first["r:id"]
398
+ end
399
+
400
+ def test_to_xml_string
401
+ schema = Nokogiri::XML::Schema(File.open(Axlsx::SML_XSD))
402
+ doc = Nokogiri::XML(@ws.to_xml_string)
403
+ assert(schema.validate(doc).map{ |e| puts e.message; e }.empty?, "error free validation")
404
+ end
405
+
406
+ def test_styles
407
+ assert(@ws.styles.is_a?(Axlsx::Styles), 'worksheet provides access to styles')
408
+ end
409
+
410
+ def test_to_xml_string_with_illegal_chars
411
+ old = Axlsx::trust_input
412
+ Axlsx::trust_input = false
413
+ nasties = "\v\u2028\u0001\u0002\u0003\u0004\u0005\u0006\u0007\u0008\u001f"
414
+ @ws.add_row [nasties]
415
+ assert_equal(0, @ws.rows.last.cells.last.value.index("\v"))
416
+ assert_equal(nil, @ws.to_xml_string.index("\v"))
417
+ Axlsx::trust_input = old
418
+ end
419
+
420
+ def test_to_xml_string_with_newlines
421
+ cell_with_newline = "foo\n\r\nbar"
422
+ @ws.add_row [cell_with_newline]
423
+ assert_equal("foo\n\r\nbar", @ws.rows.last.cells.last.value)
424
+ assert_not_nil(@ws.to_xml_string.index("foo\n\r\nbar"))
425
+ end
426
+ # Make sure the XML for all optional elements (like pageMargins, autoFilter, ...)
427
+ # is generated in correct order.
428
+ def test_valid_with_optional_elements
429
+ @ws.page_margins.set :left => 9
430
+ @ws.page_setup.set :fit_to_width => 1
431
+ @ws.print_options.set :headings => true
432
+ @ws.auto_filter.range = "A1:C3"
433
+ @ws.merge_cells "A4:A5"
434
+ @ws.add_chart Axlsx::Pie3DChart
435
+ @ws.add_table "E1:F3"
436
+ @ws.add_pivot_table 'G5:G6', 'A1:D10'
437
+ schema = Nokogiri::XML::Schema(File.open(Axlsx::SML_XSD))
438
+ doc = Nokogiri::XML(@ws.to_xml_string)
439
+ assert(schema.validate(doc).map { |e| puts e.message; e }.empty?, schema.validate(doc).map { |e| e.message }.join('\n'))
440
+ end
441
+
442
+ def test_relationships
443
+ @ws.add_row [1,2,3]
444
+ assert(@ws.relationships.empty?, "No Drawing relationship until you add a chart")
445
+ @ws.add_chart Axlsx::Pie3DChart
446
+ assert_equal(@ws.relationships.size, 1, "adding a chart creates the relationship")
447
+ @ws.add_chart Axlsx::Pie3DChart
448
+ assert_equal(@ws.relationships.size, 1, "multiple charts still only result in one relationship")
449
+ @ws.add_comment :text => 'builder', :author => 'bob', :ref => @ws.rows.last.cells.last
450
+ assert_equal(@ws.relationships.size, 3, "adding a comment adds 2 relationships")
451
+ @ws.add_comment :text => 'not that is a comment!', :author => 'travis', :ref => "A1"
452
+ assert_equal(@ws.relationships.size, 3, "adding multiple comments in the same worksheet should not add any additional comment relationships")
453
+ @ws.add_pivot_table 'G5:G6', 'A1:D10'
454
+ assert_equal(@ws.relationships.size, 4, "adding a pivot table adds 1 relationship")
455
+ end
456
+
457
+
458
+ def test_name_unique
459
+ assert_raise(ArgumentError, "worksheet name must be unique") { n = @ws.name; @ws.workbook.add_worksheet(:name=> n) }
460
+ end
461
+
462
+ def test_name_unique_only_checks_other_worksheet_names
463
+ assert_nothing_raised { @ws.name = @ws.name }
464
+ assert_nothing_raised { Axlsx::Package.new.workbook.add_worksheet :name => 'Sheet1' }
465
+ end
466
+
467
+ def test_name_size
468
+ assert_raise(ArgumentError, "name too long!") { @ws.name = Array.new(32, "A").join() }
469
+ assert_nothing_raised { @ws.name = Array.new(31, "A").join() }
470
+ end
471
+
472
+ def test_set_fixed_width_column
473
+ @ws.add_row ["mule", "donkey", "horse"], :widths => [20, :ignore, nil]
474
+ assert(@ws.column_info.size == 3, "a data item for each column")
475
+ assert_equal(20, @ws.column_info[0].width, "adding a row with fixed width updates :fixed attribute")
476
+ assert_equal(@ws.column_info[1].width, nil, ":ignore does not set any data")
477
+ end
478
+
479
+ def test_fixed_height
480
+ @ws.add_row [1, 2, 3], :height => 40
481
+ assert_equal(40, @ws.rows[-1].height)
482
+ end
483
+
484
+ def test_set_column_width
485
+ @ws.add_row ["chasing windmills", "penut"]
486
+ @ws.column_widths nil, 0.5
487
+ assert_equal(@ws.column_info[1].width, 0.5, 'eat my width')
488
+ assert_raise(ArgumentError, 'only accept unsigned ints') { @ws.column_widths 2, 7, -1 }
489
+ assert_raise(ArgumentError, 'only accept Integer or Float') { @ws.column_widths 2, 7, "-1" }
490
+ end
491
+
492
+ def test_protect_range
493
+ assert(@ws.send(:protected_ranges).is_a?(Axlsx::SimpleTypedList))
494
+ assert_equal(0, @ws.send(:protected_ranges).size)
495
+ @ws.protect_range('A1:A3')
496
+ assert_equal('A1:A3', @ws.send(:protected_ranges).last.sqref)
497
+ end
498
+
499
+ def test_protect_range_with_cells
500
+ @ws.add_row [1, 2, 3]
501
+ assert_nothing_raised {@ws.protect_range(@ws.rows.first.cells) }
502
+ assert_equal('A1:C1', @ws.send(:protected_ranges).last.sqref)
503
+
504
+ end
505
+ def test_merge_cells
506
+ @ws.add_row [1,2,3]
507
+ @ws.add_row [4,5,6]
508
+ @ws.add_row [7,8,9]
509
+ @ws.merge_cells "A1:A2"
510
+ @ws.merge_cells "B2:C3"
511
+ @ws.merge_cells @ws.rows.last.cells[(0..1)]
512
+ assert_equal(@ws.send(:merged_cells).size, 3)
513
+ assert_equal(@ws.send(:merged_cells).last, "A3:B3")
514
+ end
515
+
516
+ def test_merge_cells_sorts_correctly_by_row_when_given_array
517
+ 10.times do |i|
518
+ @ws.add_row [i]
519
+ end
520
+ @ws.merge_cells [@ws.rows[8].cells.first, @ws.rows[9].cells.first]
521
+ assert_equal "A9:A10", @ws.send(:merged_cells).first
522
+ end
523
+
524
+ def test_auto_filter
525
+ assert(@ws.auto_filter.range.nil?)
526
+ assert(@wb.defined_names.none?{|defined_name| defined_name.name=='_xlnm._FilterDatabase'})
527
+ assert_raise(ArgumentError) { @ws.auto_filter = 123 }
528
+ @ws.auto_filter.range = "A1:D9"
529
+ assert_equal(@ws.auto_filter.range, "A1:D9")
530
+ @ws.to_xml_string
531
+ assert(@wb.defined_names.any?{|defined_name| defined_name.name=='_xlnm._FilterDatabase'})
532
+ end
533
+
534
+ def test_auto_filter_assign
535
+ other_ws = @wb.add_worksheet
536
+
537
+ assert(@ws.auto_filter.range.nil?)
538
+ assert(other_ws.auto_filter.range.nil?)
539
+ assert(@wb.defined_names.none?{|defined_name| defined_name.name=='_xlnm._FilterDatabase'})
540
+ assert_raise(ArgumentError) { @ws.auto_filter = 123 }
541
+
542
+ @ws.auto_filter = "A1:D9"
543
+ assert_equal(@ws.auto_filter.range, "A1:D9")
544
+
545
+ other_ws.auto_filter = "A1:D2"
546
+ assert_equal(other_ws.auto_filter.range, "A1:D2")
547
+
548
+ @ws.to_xml_string
549
+ other_ws.to_xml_string
550
+
551
+ filter_database = @wb.defined_names.select{|defined_name| defined_name.name=='_xlnm._FilterDatabase'}
552
+ assert_equal(2, filter_database.size)
553
+ assert_equal(@ws.index, filter_database[0].local_sheet_id)
554
+ assert_equal(other_ws.index, filter_database[1].local_sheet_id)
555
+ end
556
+
557
+
558
+ def test_sheet_pr_for_auto_filter
559
+ @ws.auto_filter.range = 'A1:D9'
560
+ @ws.auto_filter.add_column 0, :filters, :filter_items => [1]
561
+ doc = Nokogiri::XML(@ws.to_xml_string)
562
+ assert(doc.xpath('//sheetPr[@filterMode=1]'))
563
+ end
564
+
565
+ def test_outline_level_rows
566
+ 3.times { @ws.add_row [1,2,3] }
567
+ @ws.outline_level_rows 0, 2
568
+ assert_equal(1, @ws.rows[0].outline_level)
569
+ assert_equal(true, @ws.rows[2].hidden)
570
+ assert_equal(true, @ws.sheet_view.show_outline_symbols)
571
+ end
572
+
573
+ def test_outline_level_columns
574
+ 3.times { @ws.add_row [1,2,3] }
575
+ @ws.outline_level_columns 0, 2
576
+ assert_equal(1, @ws.column_info[0].outline_level)
577
+ assert_equal(true, @ws.column_info[2].hidden)
578
+ assert_equal(true, @ws.sheet_view.show_outline_symbols)
579
+ end
580
+
581
+ def test_worksheet_does_not_get_added_to_workbook_on_initialize_failure
582
+ assert_equal(1, @wb.worksheets.size)
583
+ assert_raise(ArgumentError) { @wb.add_worksheet(:name => 'Sheet1') }
584
+ assert_equal(1, @wb.worksheets.size)
585
+ end
586
+
587
+ def test_worksheet_only_includes_outline_pr_when_set
588
+ doc = Nokogiri::XML(@ws.to_xml_string)
589
+ assert_equal(doc.xpath('//xmlns:worksheet/xmlns:sheetPr/xmlns:outlinePr').size, 0)
590
+
591
+ @ws.sheet_pr.outline_pr.summary_below = false
592
+ @ws.sheet_pr.outline_pr.summary_right = true
593
+ doc = Nokogiri::XML(@ws.to_xml_string)
594
+ assert_equal(doc.xpath('//xmlns:worksheet/xmlns:sheetPr/xmlns:outlinePr').size, 1)
595
+ assert_equal(doc.xpath('//xmlns:worksheet/xmlns:sheetPr/xmlns:outlinePr[@summaryBelow=0][@summaryRight=1]').size, 1)
596
+ end
597
+ end