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,68 @@
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
+ table = @ws.add_table("A1:D5")
51
+ assert_equal(@ws.relationships.size, 1, "adding a table adds a relationship")
52
+ table = @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
+
68
+ 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,577 @@
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, :selected => true, :show_gridlines => false)
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
+ assert_equal(optioned.selected, true)
111
+ assert_equal(optioned.show_gridlines, false)
112
+
113
+ end
114
+
115
+
116
+ def test_use_gridlines
117
+ assert_raise(ArgumentError) { @ws.show_gridlines = -1.1 }
118
+ assert_nothing_raised { @ws.show_gridlines = false }
119
+ assert_equal(@ws.show_gridlines, false)
120
+ end
121
+
122
+ def test_selected
123
+ assert_raise(ArgumentError) { @ws.selected = -1.1 }
124
+ assert_nothing_raised { @ws.selected = true }
125
+ assert_equal(@ws.selected, true)
126
+ end
127
+
128
+ def test_rels_pn
129
+ assert_equal(@ws.rels_pn, "worksheets/_rels/sheet1.xml.rels")
130
+ ws = @ws.workbook.add_worksheet
131
+ assert_equal(ws.rels_pn, "worksheets/_rels/sheet2.xml.rels")
132
+ end
133
+
134
+ def test_rId
135
+ assert_equal @ws.workbook.relationships.for(@ws).Id, @ws.rId
136
+ end
137
+
138
+ def test_index
139
+ assert_equal(@ws.index, @ws.workbook.worksheets.index(@ws))
140
+ end
141
+
142
+ def test_dimension
143
+ @ws.add_row [1, 2, 3]
144
+ @ws.add_row [4, 5, 6]
145
+ assert_equal @ws.dimension.sqref, "A1:C2"
146
+ end
147
+
148
+ def test_dimension_with_empty_row
149
+ @ws.add_row
150
+ assert_equal "A1:AA200", @ws.dimension.sqref
151
+ end
152
+
153
+ def test_referencing
154
+ @ws.add_row [1, 2, 3]
155
+ @ws.add_row [4, 5, 6]
156
+ range = @ws["A1:C2"]
157
+ first_row = @ws[0]
158
+ last_row = @ws[1]
159
+ assert_equal(@ws.rows[0],first_row)
160
+ assert_equal(@ws.rows[1],last_row)
161
+ assert_equal(range.size, 6)
162
+ assert_equal(range.first, @ws.rows.first.cells.first)
163
+ assert_equal(range.last, @ws.rows.last.cells.last)
164
+ end
165
+
166
+ def test_add_row
167
+ assert(@ws.rows.empty?, "sheet has no rows by default")
168
+ r = @ws.add_row([1,2,3])
169
+ assert_equal(@ws.rows.size, 1, "add_row adds a row")
170
+ assert_equal(@ws.rows.first, r, "the row returned is the row added")
171
+ end
172
+
173
+ def test_add_chart
174
+ assert(@ws.workbook.charts.empty?, "the sheet's workbook should not have any charts by default")
175
+ @ws.add_chart Axlsx::Pie3DChart
176
+ assert_equal(@ws.workbook.charts.size, 1, "add_chart adds a chart to the workbook")
177
+ end
178
+
179
+ def test_add_page_break_with_string_cell_ref
180
+ assert(@ws.row_breaks.empty?)
181
+ assert(@ws.col_breaks.empty?)
182
+ @ws.add_page_break("B1")
183
+ assert_equal(1, @ws.row_breaks.size)
184
+ assert_equal(1, @ws.col_breaks.size)
185
+ end
186
+
187
+ def test_add_page_break_with_cell
188
+ @ws.add_row [1, 2, 3, 4]
189
+ @ws.add_row [1, 2, 3, 4]
190
+
191
+
192
+ assert(@ws.row_breaks.empty?)
193
+ assert(@ws.col_breaks.empty?)
194
+ @ws.add_page_break(@ws.rows.last.cells[1])
195
+ assert_equal(1, @ws.row_breaks.size)
196
+ assert_equal(1, @ws.col_breaks.size)
197
+ end
198
+
199
+
200
+ def test_drawing
201
+ assert @ws.drawing == nil
202
+ @ws.add_chart(Axlsx::Pie3DChart)
203
+ assert @ws.drawing.is_a?(Axlsx::Drawing)
204
+ end
205
+
206
+ def test_add_pivot_table
207
+ assert(@ws.workbook.pivot_tables.empty?, "the sheet's workbook should not have any pivot tables by default")
208
+ @ws.add_pivot_table 'G5:G6', 'A1:D:10'
209
+ assert_equal(@ws.workbook.pivot_tables.size, 1, "add_pivot_tables adds a pivot_table to the workbook")
210
+ end
211
+
212
+ def test_col_style
213
+ @ws.add_row [1,2,3,4]
214
+ @ws.add_row [1,2,3,4]
215
+ @ws.add_row [1,2,3,4]
216
+ @ws.add_row [1,2,3,4]
217
+ @ws.col_style( (1..2), 1, :row_offset=>1)
218
+ @ws.rows[(1..-1)].each do | r |
219
+ assert_equal(r.cells[1].style, 1)
220
+ assert_equal(r.cells[2].style, 1)
221
+ end
222
+ assert_equal(@ws.rows.first.cells[1].style, 0)
223
+ assert_equal(@ws.rows.first.cells[0].style, 0)
224
+ end
225
+
226
+ def test_col_style_with_empty_column
227
+ @ws.add_row [1,2,3,4]
228
+ @ws.add_row [1]
229
+ @ws.add_row [1,2,3,4]
230
+ assert_nothing_raised {@ws.col_style(1, 1)}
231
+ end
232
+
233
+ def test_cols
234
+ @ws.add_row [1,2,3,4]
235
+ @ws.add_row [1,2,3,4]
236
+ @ws.add_row [1,2,3]
237
+ @ws.add_row [1,2,3,4]
238
+ c = @ws.cols[1]
239
+ assert_equal(c.size, 4)
240
+ assert_equal(c[0].value, 2)
241
+ end
242
+
243
+ def test_cols_with_block
244
+ @ws.add_row [1,2,3]
245
+ @ws.add_row [1]
246
+ cols = @ws.cols {|row, column| :foo }
247
+ assert_equal(:foo, cols[1][1])
248
+ end
249
+
250
+ def test_row_style
251
+ @ws.add_row [1,2,3,4]
252
+ @ws.add_row [1,2,3,4]
253
+ @ws.add_row [1,2,3,4]
254
+ @ws.add_row [1,2,3,4]
255
+ @ws.row_style 1, 1, :col_offset=>1
256
+ @ws.rows[1].cells[(1..-1)].each do | c |
257
+ assert_equal(c.style, 1)
258
+ end
259
+ assert_equal(@ws.rows[1].cells[0].style, 0)
260
+ assert_equal(@ws.rows[2].cells[1].style, 0)
261
+ @ws.row_style( 1..2, 1, :col_offset => 2)
262
+ @ws.rows[(1..2)].each do |r|
263
+ r.cells[(2..-1)].each do |c|
264
+ assert_equal(c.style, 1)
265
+ end
266
+ end
267
+ end
268
+
269
+ def test_to_xml_string_fit_to_page
270
+ @ws.page_setup.fit_to_width = 1
271
+ doc = Nokogiri::XML(@ws.to_xml_string)
272
+ assert_equal(doc.xpath('//xmlns:worksheet/xmlns:sheetPr/xmlns:pageSetUpPr[@fitToPage=1]').size, 1)
273
+ end
274
+
275
+ def test_to_xml_string_dimensions
276
+ @ws.add_row [1,2,3]
277
+ doc = Nokogiri::XML(@ws.to_xml_string)
278
+ assert_equal(doc.xpath('//xmlns:worksheet/xmlns:dimension[@ref="A1:C1"]').size, 1)
279
+ end
280
+
281
+ def test_fit_to_page_assignation_does_nothing
282
+ @ws.fit_to_page = true
283
+ assert_equal(@ws.fit_to_page?, false)
284
+ end
285
+
286
+ def test_to_xml_string_selected
287
+ @ws.selected = true
288
+ doc = Nokogiri::XML(@ws.to_xml_string)
289
+ assert_equal(doc.xpath('//xmlns:worksheet/xmlns:sheetViews/xmlns:sheetView[@tabSelected=1]').size, 1)
290
+ end
291
+
292
+ def test_to_xml_string_show_gridlines
293
+ @ws.show_gridlines = false
294
+ doc = Nokogiri::XML(@ws.to_xml_string)
295
+ assert_equal(doc.xpath('//xmlns:worksheet/xmlns:sheetViews/xmlns:sheetView[@showGridLines=0]').size, 1)
296
+ end
297
+
298
+ def test_to_xml_string_auto_fit_data
299
+ @ws.add_row [1, "two"]
300
+ doc = Nokogiri::XML(@ws.to_xml_string)
301
+ assert_equal(doc.xpath('//xmlns:worksheet/xmlns:cols/xmlns:col').size, 2)
302
+ end
303
+
304
+ def test_to_xml_string_sheet_data
305
+ @ws.add_row [1, "two"]
306
+ doc = Nokogiri::XML(@ws.to_xml_string)
307
+ assert_equal(doc.xpath('//xmlns:worksheet/xmlns:sheetData/xmlns:row').size, 1)
308
+ end
309
+
310
+ def test_to_xml_string_auto_filter
311
+ @ws.add_row [1, "two"]
312
+ @ws.auto_filter.range = "A1:B1"
313
+ doc = Nokogiri::XML(@ws.to_xml_string)
314
+ assert_equal(doc.xpath('//xmlns:worksheet/xmlns:autoFilter[@ref="A1:B1"]').size, 1)
315
+ end
316
+
317
+ def test_to_xml_string_merge_cells
318
+ @ws.add_row [1, "two"]
319
+ @ws.merge_cells "A1:D1"
320
+ @ws.merge_cells "E1:F1"
321
+ doc = Nokogiri::XML(@ws.to_xml_string)
322
+ assert_equal(doc.xpath('//xmlns:worksheet/xmlns:mergeCells/xmlns:mergeCell[@ref="A1:D1"]').size, 1)
323
+ assert_equal(doc.xpath('//xmlns:worksheet/xmlns:mergeCells/xmlns:mergeCell[@ref="E1:F1"]').size, 1)
324
+ end
325
+
326
+ def test_to_xml_string_row_breaks
327
+ @ws.add_page_break("A1")
328
+ doc = Nokogiri::XML(@ws.to_xml_string)
329
+ assert_equal(doc.xpath('//xmlns:worksheet/xmlns:rowBreaks/xmlns:brk[@id="0"]').size, 1)
330
+ end
331
+
332
+ def test_to_xml_string_sheet_protection
333
+ @ws.sheet_protection.password = 'fish'
334
+ doc = Nokogiri::XML(@ws.to_xml_string)
335
+ assert(doc.xpath('//xmlns:sheetProtection'))
336
+ end
337
+
338
+ def test_to_xml_string_page_margins
339
+ @ws.page_margins do |pm|
340
+ pm.left = 9
341
+ pm.right = 7
342
+ end
343
+ doc = Nokogiri::XML(@ws.to_xml_string)
344
+ assert_equal(doc.xpath('//xmlns:worksheet/xmlns:pageMargins[@left="9"][@right="7"]').size, 1)
345
+ end
346
+
347
+ def test_to_xml_string_page_setup
348
+ @ws.page_setup do |ps|
349
+ ps.paper_width = "210mm"
350
+ ps.scale = 80
351
+ end
352
+ doc = Nokogiri::XML(@ws.to_xml_string)
353
+ assert_equal(doc.xpath('//xmlns:worksheet/xmlns:pageSetup[@paperWidth="210mm"][@scale="80"]').size, 1)
354
+ end
355
+
356
+ def test_to_xml_string_print_options
357
+ @ws.print_options do |po|
358
+ po.grid_lines = true
359
+ po.horizontal_centered = true
360
+ end
361
+ doc = Nokogiri::XML(@ws.to_xml_string)
362
+ assert_equal(doc.xpath('//xmlns:worksheet/xmlns:printOptions[@gridLines=1][@horizontalCentered=1]').size, 1)
363
+ end
364
+
365
+ def test_to_xml_string_header_footer
366
+ @ws.header_footer do |hf|
367
+ hf.different_first = false
368
+ hf.different_odd_even = false
369
+ hf.odd_header = 'Test Header'
370
+ end
371
+ doc = Nokogiri::XML(@ws.to_xml_string)
372
+ assert_equal(doc.xpath('//xmlns:worksheet/xmlns:headerFooter[@differentFirst=0][@differentOddEven=0]').size, 1)
373
+ end
374
+
375
+ def test_to_xml_string_drawing
376
+ @ws.add_chart Axlsx::Pie3DChart
377
+ doc = Nokogiri::XML(@ws.to_xml_string)
378
+ assert_equal @ws.send(:worksheet_drawing).relationship.Id, doc.xpath('//xmlns:worksheet/xmlns:drawing').first["r:id"]
379
+ end
380
+
381
+ def test_to_xml_string_tables
382
+ @ws.add_row ["one", "two"]
383
+ @ws.add_row [1, 2]
384
+ table = @ws.add_table "A1:B2"
385
+ doc = Nokogiri::XML(@ws.to_xml_string)
386
+ assert_equal(doc.xpath('//xmlns:worksheet/xmlns:tableParts[@count="1"]').size, 1)
387
+ assert_equal table.rId, doc.xpath('//xmlns:worksheet/xmlns:tableParts/xmlns:tablePart').first["r:id"]
388
+ end
389
+
390
+ def test_to_xml_string
391
+ schema = Nokogiri::XML::Schema(File.open(Axlsx::SML_XSD))
392
+ doc = Nokogiri::XML(@ws.to_xml_string)
393
+ assert(schema.validate(doc).map{ |e| puts e.message; e }.empty?, "error free validation")
394
+ end
395
+
396
+ def test_styles
397
+ assert(@ws.styles.is_a?(Axlsx::Styles), 'worksheet provides access to styles')
398
+ end
399
+
400
+ def test_to_xml_string_with_illegal_chars
401
+ old = Axlsx::trust_input
402
+ Axlsx::trust_input = false
403
+ nasties = "\v\u2028\u0001\u0002\u0003\u0004\u0005\u0006\u0007\u0008\u001f"
404
+ @ws.add_row [nasties]
405
+ assert_equal(0, @ws.rows.last.cells.last.value.index("\v"))
406
+ assert_equal(nil, @ws.to_xml_string.index("\v"))
407
+ Axlsx::trust_input = old
408
+ end
409
+
410
+ def test_to_xml_string_with_newlines
411
+ cell_with_newline = "foo\n\r\nbar"
412
+ @ws.add_row [cell_with_newline]
413
+ assert_equal("foo\n\r\nbar", @ws.rows.last.cells.last.value)
414
+ assert_not_nil(@ws.to_xml_string.index("foo\n\r\nbar"))
415
+ end
416
+ # Make sure the XML for all optional elements (like pageMargins, autoFilter, ...)
417
+ # is generated in correct order.
418
+ def test_valid_with_optional_elements
419
+ @ws.page_margins.set :left => 9
420
+ @ws.page_setup.set :fit_to_width => 1
421
+ @ws.print_options.set :headings => true
422
+ @ws.auto_filter.range = "A1:C3"
423
+ @ws.merge_cells "A4:A5"
424
+ @ws.add_chart Axlsx::Pie3DChart
425
+ @ws.add_table "E1:F3"
426
+ @ws.add_pivot_table 'G5:G6', 'A1:D10'
427
+ schema = Nokogiri::XML::Schema(File.open(Axlsx::SML_XSD))
428
+ doc = Nokogiri::XML(@ws.to_xml_string)
429
+ assert(schema.validate(doc).map { |e| puts e.message; e }.empty?, schema.validate(doc).map { |e| e.message }.join('\n'))
430
+ end
431
+
432
+ def test_relationships
433
+ @ws.add_row [1,2,3]
434
+ assert(@ws.relationships.empty?, "No Drawing relationship until you add a chart")
435
+ c = @ws.add_chart Axlsx::Pie3DChart
436
+ assert_equal(@ws.relationships.size, 1, "adding a chart creates the relationship")
437
+ c = @ws.add_chart Axlsx::Pie3DChart
438
+ assert_equal(@ws.relationships.size, 1, "multiple charts still only result in one relationship")
439
+ c = @ws.add_comment :text => 'builder', :author => 'bob', :ref => @ws.rows.last.cells.last
440
+ assert_equal(@ws.relationships.size, 3, "adding a comment adds 2 relationships")
441
+ c = @ws.add_comment :text => 'not that is a comment!', :author => 'travis', :ref => "A1"
442
+ assert_equal(@ws.relationships.size, 3, "adding multiple comments in the same worksheet should not add any additional comment relationships")
443
+ c = @ws.add_pivot_table 'G5:G6', 'A1:D10'
444
+ assert_equal(@ws.relationships.size, 4, "adding a pivot table adds 1 relationship")
445
+ end
446
+
447
+
448
+ def test_name_unique
449
+ assert_raise(ArgumentError, "worksheet name must be unique") { n = @ws.name; @ws.workbook.add_worksheet(:name=> n) }
450
+ end
451
+
452
+ def test_name_unique_only_checks_other_worksheet_names
453
+ assert_nothing_raised { @ws.name = @ws.name }
454
+ assert_nothing_raised { Axlsx::Package.new.workbook.add_worksheet :name => 'Sheet1' }
455
+ end
456
+
457
+ def test_name_size
458
+ assert_raise(ArgumentError, "name too long!") { @ws.name = Array.new(32, "A").join() }
459
+ assert_nothing_raised { @ws.name = Array.new(31, "A").join() }
460
+ end
461
+
462
+ def test_set_fixed_width_column
463
+ @ws.add_row ["mule", "donkey", "horse"], :widths => [20, :ignore, nil]
464
+ assert(@ws.column_info.size == 3, "a data item for each column")
465
+ assert_equal(20, @ws.column_info[0].width, "adding a row with fixed width updates :fixed attribute")
466
+ assert_equal(@ws.column_info[1].width, nil, ":ignore does not set any data")
467
+ end
468
+
469
+ def test_fixed_height
470
+ @ws.add_row [1, 2, 3], :height => 40
471
+ assert_equal(40, @ws.rows[-1].height)
472
+ end
473
+
474
+ def test_set_column_width
475
+ @ws.add_row ["chasing windmills", "penut"]
476
+ @ws.column_widths nil, 0.5
477
+ assert_equal(@ws.column_info[1].width, 0.5, 'eat my width')
478
+ assert_raise(ArgumentError, 'only accept unsigned ints') { @ws.column_widths 2, 7, -1 }
479
+ assert_raise(ArgumentError, 'only accept Integer, Float or Fixnum') { @ws.column_widths 2, 7, "-1" }
480
+ end
481
+
482
+ def test_protect_range
483
+ assert(@ws.send(:protected_ranges).is_a?(Axlsx::SimpleTypedList))
484
+ assert_equal(0, @ws.send(:protected_ranges).size)
485
+ @ws.protect_range('A1:A3')
486
+ assert_equal('A1:A3', @ws.send(:protected_ranges).last.sqref)
487
+ end
488
+
489
+ def test_protect_range_with_cells
490
+ @ws.add_row [1, 2, 3]
491
+ assert_nothing_raised {@ws.protect_range(@ws.rows.first.cells) }
492
+ assert_equal('A1:C1', @ws.send(:protected_ranges).last.sqref)
493
+
494
+ end
495
+ def test_merge_cells
496
+ @ws.add_row [1,2,3]
497
+ @ws.add_row [4,5,6]
498
+ @ws.add_row [7,8,9]
499
+ @ws.merge_cells "A1:A2"
500
+ @ws.merge_cells "B2:C3"
501
+ @ws.merge_cells @ws.rows.last.cells[(0..1)]
502
+ assert_equal(@ws.send(:merged_cells).size, 3)
503
+ assert_equal(@ws.send(:merged_cells).last, "A3:B3")
504
+ end
505
+
506
+ def test_merge_cells_sorts_correctly_by_row_when_given_array
507
+ 10.times do |i|
508
+ @ws.add_row [i]
509
+ end
510
+ @ws.merge_cells [@ws.rows[8].cells.first, @ws.rows[9].cells.first]
511
+ assert_equal "A9:A10", @ws.send(:merged_cells).first
512
+ end
513
+
514
+ def test_auto_filter
515
+ assert(@ws.auto_filter.range.nil?)
516
+ assert(@wb.defined_names.none?{|defined_name| defined_name.name=='_xlnm._FilterDatabase'})
517
+ assert_raise(ArgumentError) { @ws.auto_filter = 123 }
518
+ @ws.auto_filter.range = "A1:D9"
519
+ assert_equal(@ws.auto_filter.range, "A1:D9")
520
+ @ws.to_xml_string
521
+ assert(@wb.defined_names.any?{|defined_name| defined_name.name=='_xlnm._FilterDatabase'})
522
+ end
523
+
524
+ def test_auto_filter_assign
525
+ other_ws = @wb.add_worksheet
526
+
527
+ assert(@ws.auto_filter.range.nil?)
528
+ assert(other_ws.auto_filter.range.nil?)
529
+ assert(@wb.defined_names.none?{|defined_name| defined_name.name=='_xlnm._FilterDatabase'})
530
+ assert_raise(ArgumentError) { @ws.auto_filter = 123 }
531
+
532
+ @ws.auto_filter = "A1:D9"
533
+ assert_equal(@ws.auto_filter.range, "A1:D9")
534
+
535
+ other_ws.auto_filter = "A1:D2"
536
+ assert_equal(other_ws.auto_filter.range, "A1:D2")
537
+
538
+ @ws.to_xml_string
539
+ other_ws.to_xml_string
540
+
541
+ filter_database = @wb.defined_names.select{|defined_name| defined_name.name=='_xlnm._FilterDatabase'}
542
+ assert_equal(2, filter_database.size)
543
+ assert_equal(@ws.index, filter_database[0].local_sheet_id)
544
+ assert_equal(other_ws.index, filter_database[1].local_sheet_id)
545
+ end
546
+
547
+
548
+ def test_sheet_pr_for_auto_filter
549
+ @ws.auto_filter.range = 'A1:D9'
550
+ @ws.auto_filter.add_column 0, :filters, :filter_items => [1]
551
+ doc = Nokogiri::XML(@ws.to_xml_string)
552
+ assert(doc.xpath('//sheetPr[@filterMode=1]'))
553
+ end
554
+
555
+ def test_outline_level_rows
556
+ 3.times { @ws.add_row [1,2,3] }
557
+ @ws.outline_level_rows 0, 2
558
+ assert_equal(1, @ws.rows[0].outline_level)
559
+ assert_equal(true, @ws.rows[2].hidden)
560
+ assert_equal(true, @ws.sheet_view.show_outline_symbols)
561
+ end
562
+
563
+ def test_outline_level_columns
564
+ 3.times { @ws.add_row [1,2,3] }
565
+ @ws.outline_level_columns 0, 2
566
+ assert_equal(1, @ws.column_info[0].outline_level)
567
+ assert_equal(true, @ws.column_info[2].hidden)
568
+ assert_equal(true, @ws.sheet_view.show_outline_symbols)
569
+ end
570
+
571
+ def test_worksheet_does_not_get_added_to_workbook_on_initialize_failure
572
+ assert_equal(1, @wb.worksheets.size)
573
+ assert_raise(ArgumentError) { @wb.add_worksheet(:name => 'Sheet1') }
574
+ assert_equal(1, @wb.worksheets.size)
575
+ end
576
+
577
+ end