caxlsx 2.0.2

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 (305) 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 +256 -0
  7. data/Rakefile +31 -0
  8. data/examples/2010_comments.rb +17 -0
  9. data/examples/anchor_swapping.rb +28 -0
  10. data/examples/auto_filter.rb +16 -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 +74 -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 +777 -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/page_setup.rb +11 -0
  25. data/examples/pivot_table.rb +39 -0
  26. data/examples/sheet_protection.rb +10 -0
  27. data/examples/skydrive/real_example.rb +63 -0
  28. data/examples/styles.rb +66 -0
  29. data/examples/underline.rb +13 -0
  30. data/examples/wrap_text.rb +21 -0
  31. data/lib/axlsx.rb +152 -0
  32. data/lib/axlsx/content_type/abstract_content_type.rb +32 -0
  33. data/lib/axlsx/content_type/content_type.rb +26 -0
  34. data/lib/axlsx/content_type/default.rb +25 -0
  35. data/lib/axlsx/content_type/override.rb +25 -0
  36. data/lib/axlsx/doc_props/app.rb +235 -0
  37. data/lib/axlsx/doc_props/core.rb +39 -0
  38. data/lib/axlsx/drawing/ax_data_source.rb +26 -0
  39. data/lib/axlsx/drawing/axes.rb +61 -0
  40. data/lib/axlsx/drawing/axis.rb +187 -0
  41. data/lib/axlsx/drawing/bar_3D_chart.rb +151 -0
  42. data/lib/axlsx/drawing/bar_series.rb +82 -0
  43. data/lib/axlsx/drawing/cat_axis.rb +85 -0
  44. data/lib/axlsx/drawing/chart.rb +232 -0
  45. data/lib/axlsx/drawing/d_lbls.rb +90 -0
  46. data/lib/axlsx/drawing/drawing.rb +162 -0
  47. data/lib/axlsx/drawing/graphic_frame.rb +54 -0
  48. data/lib/axlsx/drawing/hyperlink.rb +102 -0
  49. data/lib/axlsx/drawing/line_3D_chart.rb +68 -0
  50. data/lib/axlsx/drawing/line_chart.rb +99 -0
  51. data/lib/axlsx/drawing/line_series.rb +81 -0
  52. data/lib/axlsx/drawing/marker.rb +84 -0
  53. data/lib/axlsx/drawing/num_data.rb +52 -0
  54. data/lib/axlsx/drawing/num_data_source.rb +62 -0
  55. data/lib/axlsx/drawing/num_val.rb +32 -0
  56. data/lib/axlsx/drawing/one_cell_anchor.rb +98 -0
  57. data/lib/axlsx/drawing/pic.rb +205 -0
  58. data/lib/axlsx/drawing/picture_locking.rb +44 -0
  59. data/lib/axlsx/drawing/pie_3D_chart.rb +48 -0
  60. data/lib/axlsx/drawing/pie_series.rb +74 -0
  61. data/lib/axlsx/drawing/scaling.rb +60 -0
  62. data/lib/axlsx/drawing/scatter_chart.rb +74 -0
  63. data/lib/axlsx/drawing/scatter_series.rb +65 -0
  64. data/lib/axlsx/drawing/ser_axis.rb +45 -0
  65. data/lib/axlsx/drawing/series.rb +69 -0
  66. data/lib/axlsx/drawing/series_title.rb +23 -0
  67. data/lib/axlsx/drawing/str_data.rb +42 -0
  68. data/lib/axlsx/drawing/str_val.rb +32 -0
  69. data/lib/axlsx/drawing/title.rb +78 -0
  70. data/lib/axlsx/drawing/two_cell_anchor.rb +92 -0
  71. data/lib/axlsx/drawing/val_axis.rb +37 -0
  72. data/lib/axlsx/drawing/view_3D.rb +115 -0
  73. data/lib/axlsx/drawing/vml_drawing.rb +42 -0
  74. data/lib/axlsx/drawing/vml_shape.rb +66 -0
  75. data/lib/axlsx/package.rb +352 -0
  76. data/lib/axlsx/rels/relationship.rb +129 -0
  77. data/lib/axlsx/rels/relationships.rb +29 -0
  78. data/lib/axlsx/stylesheet/border.rb +71 -0
  79. data/lib/axlsx/stylesheet/border_pr.rb +71 -0
  80. data/lib/axlsx/stylesheet/cell_alignment.rb +134 -0
  81. data/lib/axlsx/stylesheet/cell_protection.rb +43 -0
  82. data/lib/axlsx/stylesheet/cell_style.rb +74 -0
  83. data/lib/axlsx/stylesheet/color.rb +78 -0
  84. data/lib/axlsx/stylesheet/dxf.rb +79 -0
  85. data/lib/axlsx/stylesheet/fill.rb +35 -0
  86. data/lib/axlsx/stylesheet/font.rb +148 -0
  87. data/lib/axlsx/stylesheet/gradient_fill.rb +103 -0
  88. data/lib/axlsx/stylesheet/gradient_stop.rb +37 -0
  89. data/lib/axlsx/stylesheet/num_fmt.rb +79 -0
  90. data/lib/axlsx/stylesheet/pattern_fill.rb +73 -0
  91. data/lib/axlsx/stylesheet/styles.rb +420 -0
  92. data/lib/axlsx/stylesheet/table_style.rb +54 -0
  93. data/lib/axlsx/stylesheet/table_style_element.rb +79 -0
  94. data/lib/axlsx/stylesheet/table_styles.rb +46 -0
  95. data/lib/axlsx/stylesheet/xf.rb +147 -0
  96. data/lib/axlsx/util/accessors.rb +64 -0
  97. data/lib/axlsx/util/constants.rb +392 -0
  98. data/lib/axlsx/util/options_parser.rb +15 -0
  99. data/lib/axlsx/util/parser.rb +44 -0
  100. data/lib/axlsx/util/serialized_attributes.rb +79 -0
  101. data/lib/axlsx/util/simple_typed_list.rb +203 -0
  102. data/lib/axlsx/util/storage.rb +146 -0
  103. data/lib/axlsx/util/validators.rb +300 -0
  104. data/lib/axlsx/version.rb +5 -0
  105. data/lib/axlsx/workbook/defined_name.rb +129 -0
  106. data/lib/axlsx/workbook/defined_names.rb +21 -0
  107. data/lib/axlsx/workbook/shared_strings_table.rb +77 -0
  108. data/lib/axlsx/workbook/workbook.rb +354 -0
  109. data/lib/axlsx/workbook/worksheet/auto_filter/auto_filter.rb +77 -0
  110. data/lib/axlsx/workbook/worksheet/auto_filter/filter_column.rb +94 -0
  111. data/lib/axlsx/workbook/worksheet/auto_filter/filters.rb +246 -0
  112. data/lib/axlsx/workbook/worksheet/break.rb +37 -0
  113. data/lib/axlsx/workbook/worksheet/cell.rb +416 -0
  114. data/lib/axlsx/workbook/worksheet/cell_serializer.rb +144 -0
  115. data/lib/axlsx/workbook/worksheet/cfvo.rb +62 -0
  116. data/lib/axlsx/workbook/worksheet/cfvos.rb +15 -0
  117. data/lib/axlsx/workbook/worksheet/col.rb +144 -0
  118. data/lib/axlsx/workbook/worksheet/col_breaks.rb +35 -0
  119. data/lib/axlsx/workbook/worksheet/color_scale.rb +110 -0
  120. data/lib/axlsx/workbook/worksheet/cols.rb +20 -0
  121. data/lib/axlsx/workbook/worksheet/comment.rb +92 -0
  122. data/lib/axlsx/workbook/worksheet/comments.rb +85 -0
  123. data/lib/axlsx/workbook/worksheet/conditional_formatting.rb +82 -0
  124. data/lib/axlsx/workbook/worksheet/conditional_formatting_rule.rb +220 -0
  125. data/lib/axlsx/workbook/worksheet/conditional_formattings.rb +25 -0
  126. data/lib/axlsx/workbook/worksheet/data_bar.rb +131 -0
  127. data/lib/axlsx/workbook/worksheet/data_validation.rb +244 -0
  128. data/lib/axlsx/workbook/worksheet/data_validations.rb +28 -0
  129. data/lib/axlsx/workbook/worksheet/date_time_converter.rb +30 -0
  130. data/lib/axlsx/workbook/worksheet/dimension.rb +64 -0
  131. data/lib/axlsx/workbook/worksheet/header_footer.rb +54 -0
  132. data/lib/axlsx/workbook/worksheet/icon_set.rb +83 -0
  133. data/lib/axlsx/workbook/worksheet/merged_cells.rb +35 -0
  134. data/lib/axlsx/workbook/worksheet/page_margins.rb +99 -0
  135. data/lib/axlsx/workbook/worksheet/page_set_up_pr.rb +44 -0
  136. data/lib/axlsx/workbook/worksheet/page_setup.rb +242 -0
  137. data/lib/axlsx/workbook/worksheet/pane.rb +141 -0
  138. data/lib/axlsx/workbook/worksheet/pivot_table.rb +273 -0
  139. data/lib/axlsx/workbook/worksheet/pivot_table_cache_definition.rb +66 -0
  140. data/lib/axlsx/workbook/worksheet/pivot_tables.rb +24 -0
  141. data/lib/axlsx/workbook/worksheet/print_options.rb +41 -0
  142. data/lib/axlsx/workbook/worksheet/protected_range.rb +49 -0
  143. data/lib/axlsx/workbook/worksheet/protected_ranges.rb +34 -0
  144. data/lib/axlsx/workbook/worksheet/row.rb +172 -0
  145. data/lib/axlsx/workbook/worksheet/row_breaks.rb +33 -0
  146. data/lib/axlsx/workbook/worksheet/selection.rb +103 -0
  147. data/lib/axlsx/workbook/worksheet/sheet_calc_pr.rb +29 -0
  148. data/lib/axlsx/workbook/worksheet/sheet_data.rb +25 -0
  149. data/lib/axlsx/workbook/worksheet/sheet_format_pr.rb +60 -0
  150. data/lib/axlsx/workbook/worksheet/sheet_pr.rb +69 -0
  151. data/lib/axlsx/workbook/worksheet/sheet_protection.rb +120 -0
  152. data/lib/axlsx/workbook/worksheet/sheet_view.rb +213 -0
  153. data/lib/axlsx/workbook/worksheet/table.rb +102 -0
  154. data/lib/axlsx/workbook/worksheet/table_style_info.rb +51 -0
  155. data/lib/axlsx/workbook/worksheet/tables.rb +31 -0
  156. data/lib/axlsx/workbook/worksheet/worksheet.rb +769 -0
  157. data/lib/axlsx/workbook/worksheet/worksheet_comments.rb +58 -0
  158. data/lib/axlsx/workbook/worksheet/worksheet_drawing.rb +58 -0
  159. data/lib/axlsx/workbook/worksheet/worksheet_hyperlink.rb +74 -0
  160. data/lib/axlsx/workbook/worksheet/worksheet_hyperlinks.rb +38 -0
  161. data/lib/schema/dc.xsd +118 -0
  162. data/lib/schema/dcmitype.xsd +52 -0
  163. data/lib/schema/dcterms.xsd +331 -0
  164. data/lib/schema/dml-chart.xsd +1499 -0
  165. data/lib/schema/dml-chartDrawing.xsd +146 -0
  166. data/lib/schema/dml-compatibility.xsd +14 -0
  167. data/lib/schema/dml-diagram.xsd +1091 -0
  168. data/lib/schema/dml-lockedCanvas.xsd +11 -0
  169. data/lib/schema/dml-main.xsd +3048 -0
  170. data/lib/schema/dml-picture.xsd +23 -0
  171. data/lib/schema/dml-spreadsheetDrawing.xsd +185 -0
  172. data/lib/schema/dml-wordprocessingDrawing.xsd +185 -0
  173. data/lib/schema/opc-contentTypes.xsd +42 -0
  174. data/lib/schema/opc-coreProperties.xsd +54 -0
  175. data/lib/schema/opc-digSig.xsd +49 -0
  176. data/lib/schema/opc-relationships.xsd +33 -0
  177. data/lib/schema/pml.xsd +1676 -0
  178. data/lib/schema/shared-additionalCharacteristics.xsd +28 -0
  179. data/lib/schema/shared-bibliography.xsd +144 -0
  180. data/lib/schema/shared-commonSimpleTypes.xsd +166 -0
  181. data/lib/schema/shared-customXmlDataProperties.xsd +25 -0
  182. data/lib/schema/shared-customXmlSchemaProperties.xsd +18 -0
  183. data/lib/schema/shared-documentPropertiesCustom.xsd +59 -0
  184. data/lib/schema/shared-documentPropertiesExtended.xsd +56 -0
  185. data/lib/schema/shared-documentPropertiesVariantTypes.xsd +195 -0
  186. data/lib/schema/shared-math.xsd +582 -0
  187. data/lib/schema/shared-relationshipReference.xsd +25 -0
  188. data/lib/schema/sml.xsd +4434 -0
  189. data/lib/schema/vml-main.xsd +569 -0
  190. data/lib/schema/vml-officeDrawing.xsd +509 -0
  191. data/lib/schema/vml-presentationDrawing.xsd +12 -0
  192. data/lib/schema/vml-spreadsheetDrawing.xsd +108 -0
  193. data/lib/schema/vml-wordprocessingDrawing.xsd +96 -0
  194. data/lib/schema/wml.xsd +3644 -0
  195. data/lib/schema/xml.xsd +116 -0
  196. data/test/benchmark.rb +72 -0
  197. data/test/content_type/tc_content_type.rb +76 -0
  198. data/test/content_type/tc_default.rb +16 -0
  199. data/test/content_type/tc_override.rb +14 -0
  200. data/test/doc_props/tc_app.rb +43 -0
  201. data/test/doc_props/tc_core.rb +42 -0
  202. data/test/drawing/tc_axes.rb +8 -0
  203. data/test/drawing/tc_axis.rb +85 -0
  204. data/test/drawing/tc_bar_3D_chart.rb +71 -0
  205. data/test/drawing/tc_bar_series.rb +37 -0
  206. data/test/drawing/tc_cat_axis.rb +31 -0
  207. data/test/drawing/tc_cat_axis_data.rb +27 -0
  208. data/test/drawing/tc_chart.rb +110 -0
  209. data/test/drawing/tc_d_lbls.rb +57 -0
  210. data/test/drawing/tc_data_source.rb +17 -0
  211. data/test/drawing/tc_drawing.rb +80 -0
  212. data/test/drawing/tc_graphic_frame.rb +27 -0
  213. data/test/drawing/tc_hyperlink.rb +64 -0
  214. data/test/drawing/tc_line_3d_chart.rb +47 -0
  215. data/test/drawing/tc_line_chart.rb +39 -0
  216. data/test/drawing/tc_line_series.rb +30 -0
  217. data/test/drawing/tc_marker.rb +44 -0
  218. data/test/drawing/tc_named_axis_data.rb +27 -0
  219. data/test/drawing/tc_num_data.rb +31 -0
  220. data/test/drawing/tc_num_val.rb +29 -0
  221. data/test/drawing/tc_one_cell_anchor.rb +66 -0
  222. data/test/drawing/tc_pic.rb +107 -0
  223. data/test/drawing/tc_picture_locking.rb +72 -0
  224. data/test/drawing/tc_pie_3D_chart.rb +28 -0
  225. data/test/drawing/tc_pie_series.rb +32 -0
  226. data/test/drawing/tc_scaling.rb +36 -0
  227. data/test/drawing/tc_scatter_chart.rb +48 -0
  228. data/test/drawing/tc_scatter_series.rb +21 -0
  229. data/test/drawing/tc_ser_axis.rb +31 -0
  230. data/test/drawing/tc_series.rb +23 -0
  231. data/test/drawing/tc_series_title.rb +33 -0
  232. data/test/drawing/tc_str_data.rb +18 -0
  233. data/test/drawing/tc_str_val.rb +21 -0
  234. data/test/drawing/tc_title.rb +49 -0
  235. data/test/drawing/tc_two_cell_anchor.rb +36 -0
  236. data/test/drawing/tc_val_axis.rb +24 -0
  237. data/test/drawing/tc_view_3D.rb +54 -0
  238. data/test/drawing/tc_vml_drawing.rb +25 -0
  239. data/test/drawing/tc_vml_shape.rb +106 -0
  240. data/test/profile.rb +24 -0
  241. data/test/rels/tc_relationship.rb +44 -0
  242. data/test/rels/tc_relationships.rb +37 -0
  243. data/test/stylesheet/tc_border.rb +37 -0
  244. data/test/stylesheet/tc_border_pr.rb +32 -0
  245. data/test/stylesheet/tc_cell_alignment.rb +81 -0
  246. data/test/stylesheet/tc_cell_protection.rb +29 -0
  247. data/test/stylesheet/tc_cell_style.rb +57 -0
  248. data/test/stylesheet/tc_color.rb +43 -0
  249. data/test/stylesheet/tc_dxf.rb +81 -0
  250. data/test/stylesheet/tc_fill.rb +18 -0
  251. data/test/stylesheet/tc_font.rb +121 -0
  252. data/test/stylesheet/tc_gradient_fill.rb +72 -0
  253. data/test/stylesheet/tc_gradient_stop.rb +31 -0
  254. data/test/stylesheet/tc_num_fmt.rb +30 -0
  255. data/test/stylesheet/tc_pattern_fill.rb +43 -0
  256. data/test/stylesheet/tc_styles.rb +235 -0
  257. data/test/stylesheet/tc_table_style.rb +44 -0
  258. data/test/stylesheet/tc_table_style_element.rb +45 -0
  259. data/test/stylesheet/tc_table_styles.rb +29 -0
  260. data/test/stylesheet/tc_xf.rb +120 -0
  261. data/test/tc_axlsx.rb +72 -0
  262. data/test/tc_helper.rb +10 -0
  263. data/test/tc_package.rb +227 -0
  264. data/test/util/tc_serialized_attributes.rb +19 -0
  265. data/test/util/tc_simple_typed_list.rb +78 -0
  266. data/test/util/tc_validators.rb +186 -0
  267. data/test/workbook/tc_defined_name.rb +41 -0
  268. data/test/workbook/tc_shared_strings_table.rb +44 -0
  269. data/test/workbook/tc_workbook.rb +125 -0
  270. data/test/workbook/worksheet/auto_filter/tc_auto_filter.rb +38 -0
  271. data/test/workbook/worksheet/auto_filter/tc_filter_column.rb +76 -0
  272. data/test/workbook/worksheet/auto_filter/tc_filters.rb +50 -0
  273. data/test/workbook/worksheet/tc_break.rb +49 -0
  274. data/test/workbook/worksheet/tc_cell.rb +319 -0
  275. data/test/workbook/worksheet/tc_cfvo.rb +31 -0
  276. data/test/workbook/worksheet/tc_col.rb +78 -0
  277. data/test/workbook/worksheet/tc_color_scale.rb +58 -0
  278. data/test/workbook/worksheet/tc_comment.rb +72 -0
  279. data/test/workbook/worksheet/tc_comments.rb +57 -0
  280. data/test/workbook/worksheet/tc_conditional_formatting.rb +224 -0
  281. data/test/workbook/worksheet/tc_data_bar.rb +46 -0
  282. data/test/workbook/worksheet/tc_data_validation.rb +265 -0
  283. data/test/workbook/worksheet/tc_date_time_converter.rb +124 -0
  284. data/test/workbook/worksheet/tc_header_footer.rb +151 -0
  285. data/test/workbook/worksheet/tc_icon_set.rb +45 -0
  286. data/test/workbook/worksheet/tc_page_margins.rb +97 -0
  287. data/test/workbook/worksheet/tc_page_set_up_pr.rb +15 -0
  288. data/test/workbook/worksheet/tc_page_setup.rb +143 -0
  289. data/test/workbook/worksheet/tc_pane.rb +54 -0
  290. data/test/workbook/worksheet/tc_pivot_table.rb +120 -0
  291. data/test/workbook/worksheet/tc_pivot_table_cache_definition.rb +54 -0
  292. data/test/workbook/worksheet/tc_print_options.rb +72 -0
  293. data/test/workbook/worksheet/tc_protected_range.rb +17 -0
  294. data/test/workbook/worksheet/tc_row.rb +117 -0
  295. data/test/workbook/worksheet/tc_selection.rb +55 -0
  296. data/test/workbook/worksheet/tc_sheet_calc_pr.rb +18 -0
  297. data/test/workbook/worksheet/tc_sheet_format_pr.rb +88 -0
  298. data/test/workbook/worksheet/tc_sheet_pr.rb +27 -0
  299. data/test/workbook/worksheet/tc_sheet_protection.rb +117 -0
  300. data/test/workbook/worksheet/tc_sheet_view.rb +214 -0
  301. data/test/workbook/worksheet/tc_table.rb +68 -0
  302. data/test/workbook/worksheet/tc_table_style_info.rb +53 -0
  303. data/test/workbook/worksheet/tc_worksheet.rb +538 -0
  304. data/test/workbook/worksheet/tc_worksheet_hyperlink.rb +55 -0
  305. metadata +546 -0
@@ -0,0 +1,538 @@
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_no_autowidth
77
+ @ws.workbook.use_autowidth = false
78
+ @ws.add_row [1,2,3,4]
79
+ assert_equal(@ws.column_info[0].width, nil)
80
+ end
81
+
82
+ def test_initialization_options
83
+ page_margins = {:left => 2, :right => 2, :bottom => 2, :top => 2, :header => 2, :footer => 2}
84
+ page_setup = {:fit_to_height => 1, :fit_to_width => 1, :orientation => :landscape, :paper_width => "210mm", :paper_height => "297mm", :scale => 80}
85
+ print_options = {:grid_lines => true, :headings => true, :horizontal_centered => true, :vertical_centered => true}
86
+ header_footer = {:different_first => false, :different_odd_even => false, :odd_header => 'Header'}
87
+ 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)
88
+ page_margins.keys.each do |key|
89
+ assert_equal(page_margins[key], optioned.page_margins.send(key))
90
+ end
91
+ page_setup.keys.each do |key|
92
+ assert_equal(page_setup[key], optioned.page_setup.send(key))
93
+ end
94
+ print_options.keys.each do |key|
95
+ assert_equal(print_options[key], optioned.print_options.send(key))
96
+ end
97
+ header_footer.keys.each do |key|
98
+ assert_equal(header_footer[key], optioned.header_footer.send(key))
99
+ end
100
+ assert_equal(optioned.name, 'bob')
101
+ assert_equal(optioned.selected, true)
102
+ assert_equal(optioned.show_gridlines, false)
103
+
104
+ end
105
+
106
+
107
+ def test_use_gridlines
108
+ assert_raise(ArgumentError) { @ws.show_gridlines = -1.1 }
109
+ assert_nothing_raised { @ws.show_gridlines = false }
110
+ assert_equal(@ws.show_gridlines, false)
111
+ end
112
+
113
+ def test_selected
114
+ assert_raise(ArgumentError) { @ws.selected = -1.1 }
115
+ assert_nothing_raised { @ws.selected = true }
116
+ assert_equal(@ws.selected, true)
117
+ end
118
+
119
+ def test_rels_pn
120
+ assert_equal(@ws.rels_pn, "worksheets/_rels/sheet1.xml.rels")
121
+ ws = @ws.workbook.add_worksheet
122
+ assert_equal(ws.rels_pn, "worksheets/_rels/sheet2.xml.rels")
123
+ end
124
+
125
+ def test_rId
126
+ assert_equal @ws.workbook.relationships.for(@ws).Id, @ws.rId
127
+ end
128
+
129
+ def test_index
130
+ assert_equal(@ws.index, @ws.workbook.worksheets.index(@ws))
131
+ end
132
+
133
+ def test_dimension
134
+ @ws.add_row [1, 2, 3]
135
+ @ws.add_row [4, 5, 6]
136
+ assert_equal @ws.dimension.sqref, "A1:C2"
137
+ end
138
+
139
+ def test_dimension_with_empty_row
140
+ @ws.add_row
141
+ assert_equal "A1:AA200", @ws.dimension.sqref
142
+ end
143
+
144
+ def test_referencing
145
+ @ws.add_row [1, 2, 3]
146
+ @ws.add_row [4, 5, 6]
147
+ range = @ws["A1:C2"]
148
+ first_row = @ws[0]
149
+ last_row = @ws[1]
150
+ assert_equal(@ws.rows[0],first_row)
151
+ assert_equal(@ws.rows[1],last_row)
152
+ assert_equal(range.size, 6)
153
+ assert_equal(range.first, @ws.rows.first.cells.first)
154
+ assert_equal(range.last, @ws.rows.last.cells.last)
155
+ end
156
+
157
+ def test_add_row
158
+ assert(@ws.rows.empty?, "sheet has no rows by default")
159
+ r = @ws.add_row([1,2,3])
160
+ assert_equal(@ws.rows.size, 1, "add_row adds a row")
161
+ assert_equal(@ws.rows.first, r, "the row returned is the row added")
162
+ end
163
+
164
+ def test_add_chart
165
+ assert(@ws.workbook.charts.empty?, "the sheet's workbook should not have any charts by default")
166
+ @ws.add_chart Axlsx::Pie3DChart
167
+ assert_equal(@ws.workbook.charts.size, 1, "add_chart adds a chart to the workbook")
168
+ end
169
+
170
+ def test_add_page_break_with_string_cell_ref
171
+ assert(@ws.row_breaks.empty?)
172
+ assert(@ws.col_breaks.empty?)
173
+ @ws.add_page_break("B1")
174
+ assert_equal(1, @ws.row_breaks.size)
175
+ assert_equal(1, @ws.col_breaks.size)
176
+ end
177
+
178
+ def test_add_page_break_with_cell
179
+ @ws.add_row [1, 2, 3, 4]
180
+ @ws.add_row [1, 2, 3, 4]
181
+
182
+
183
+ assert(@ws.row_breaks.empty?)
184
+ assert(@ws.col_breaks.empty?)
185
+ @ws.add_page_break(@ws.rows.last.cells[1])
186
+ assert_equal(1, @ws.row_breaks.size)
187
+ assert_equal(1, @ws.col_breaks.size)
188
+ end
189
+
190
+
191
+ def test_drawing
192
+ assert @ws.drawing == nil
193
+ @ws.add_chart(Axlsx::Pie3DChart)
194
+ assert @ws.drawing.is_a?(Axlsx::Drawing)
195
+ end
196
+
197
+ def test_add_pivot_table
198
+ assert(@ws.workbook.pivot_tables.empty?, "the sheet's workbook should not have any pivot tables by default")
199
+ @ws.add_pivot_table 'G5:G6', 'A1:D:10'
200
+ assert_equal(@ws.workbook.pivot_tables.size, 1, "add_pivot_tables adds a pivot_table to the workbook")
201
+ end
202
+
203
+ def test_col_style
204
+ @ws.add_row [1,2,3,4]
205
+ @ws.add_row [1,2,3,4]
206
+ @ws.add_row [1,2,3,4]
207
+ @ws.add_row [1,2,3,4]
208
+ @ws.col_style( (1..2), 1, :row_offset=>1)
209
+ @ws.rows[(1..-1)].each do | r |
210
+ assert_equal(r.cells[1].style, 1)
211
+ assert_equal(r.cells[2].style, 1)
212
+ end
213
+ assert_equal(@ws.rows.first.cells[1].style, 0)
214
+ assert_equal(@ws.rows.first.cells[0].style, 0)
215
+ end
216
+
217
+ def test_col_style_with_empty_column
218
+ @ws.add_row [1,2,3,4]
219
+ @ws.add_row [1]
220
+ @ws.add_row [1,2,3,4]
221
+ assert_nothing_raised {@ws.col_style(1, 1)}
222
+ end
223
+
224
+ def test_cols
225
+ @ws.add_row [1,2,3,4]
226
+ @ws.add_row [1,2,3,4]
227
+ @ws.add_row [1,2,3]
228
+ @ws.add_row [1,2,3,4]
229
+ c = @ws.cols[1]
230
+ assert_equal(c.size, 4)
231
+ assert_equal(c[0].value, 2)
232
+ end
233
+
234
+ def test_cols_with_block
235
+ @ws.add_row [1,2,3]
236
+ @ws.add_row [1]
237
+ cols = @ws.cols {|row, column| :foo }
238
+ assert_equal(:foo, cols[1][1])
239
+ end
240
+
241
+ def test_row_style
242
+ @ws.add_row [1,2,3,4]
243
+ @ws.add_row [1,2,3,4]
244
+ @ws.add_row [1,2,3,4]
245
+ @ws.add_row [1,2,3,4]
246
+ @ws.row_style 1, 1, :col_offset=>1
247
+ @ws.rows[1].cells[(1..-1)].each do | c |
248
+ assert_equal(c.style, 1)
249
+ end
250
+ assert_equal(@ws.rows[1].cells[0].style, 0)
251
+ assert_equal(@ws.rows[2].cells[1].style, 0)
252
+ @ws.row_style( 1..2, 1, :col_offset => 2)
253
+ @ws.rows[(1..2)].each do |r|
254
+ r.cells[(2..-1)].each do |c|
255
+ assert_equal(c.style, 1)
256
+ end
257
+ end
258
+ end
259
+
260
+ def test_to_xml_string_fit_to_page
261
+ @ws.page_setup.fit_to_width = 1
262
+ doc = Nokogiri::XML(@ws.to_xml_string)
263
+ assert_equal(doc.xpath('//xmlns:worksheet/xmlns:sheetPr/xmlns:pageSetUpPr[@fitToPage="true"]').size, 1)
264
+ end
265
+
266
+ def test_to_xml_string_dimensions
267
+ @ws.add_row [1,2,3]
268
+ doc = Nokogiri::XML(@ws.to_xml_string)
269
+ assert_equal(doc.xpath('//xmlns:worksheet/xmlns:dimension[@ref="A1:C1"]').size, 1)
270
+ end
271
+
272
+ def test_fit_to_page_assignation_does_nothing
273
+ @ws.fit_to_page = true
274
+ assert_equal(@ws.fit_to_page?, false)
275
+ end
276
+
277
+ def test_to_xml_string_selected
278
+ @ws.selected = true
279
+ doc = Nokogiri::XML(@ws.to_xml_string)
280
+ assert_equal(doc.xpath('//xmlns:worksheet/xmlns:sheetViews/xmlns:sheetView[@tabSelected="true"]').size, 1)
281
+ end
282
+
283
+ def test_to_xml_string_show_gridlines
284
+ @ws.show_gridlines = false
285
+ doc = Nokogiri::XML(@ws.to_xml_string)
286
+ assert_equal(doc.xpath('//xmlns:worksheet/xmlns:sheetViews/xmlns:sheetView[@showGridLines="false"]').size, 1)
287
+ end
288
+
289
+ def test_to_xml_string_auto_fit_data
290
+ @ws.add_row [1, "two"]
291
+ doc = Nokogiri::XML(@ws.to_xml_string)
292
+ assert_equal(doc.xpath('//xmlns:worksheet/xmlns:cols/xmlns:col').size, 2)
293
+ end
294
+
295
+ def test_to_xml_string_sheet_data
296
+ @ws.add_row [1, "two"]
297
+ doc = Nokogiri::XML(@ws.to_xml_string)
298
+ assert_equal(doc.xpath('//xmlns:worksheet/xmlns:sheetData/xmlns:row').size, 1)
299
+ end
300
+
301
+ def test_to_xml_string_auto_filter
302
+ @ws.add_row [1, "two"]
303
+ @ws.auto_filter.range = "A1:B1"
304
+ doc = Nokogiri::XML(@ws.to_xml_string)
305
+ assert_equal(doc.xpath('//xmlns:worksheet/xmlns:autoFilter[@ref="A1:B1"]').size, 1)
306
+ end
307
+
308
+ def test_to_xml_string_merge_cells
309
+ @ws.add_row [1, "two"]
310
+ @ws.merge_cells "A1:D1"
311
+ @ws.merge_cells "E1:F1"
312
+ doc = Nokogiri::XML(@ws.to_xml_string)
313
+ assert_equal(doc.xpath('//xmlns:worksheet/xmlns:mergeCells/xmlns:mergeCell[@ref="A1:D1"]').size, 1)
314
+ assert_equal(doc.xpath('//xmlns:worksheet/xmlns:mergeCells/xmlns:mergeCell[@ref="E1:F1"]').size, 1)
315
+ end
316
+
317
+ def test_to_xml_string_row_breaks
318
+ @ws.add_page_break("A1")
319
+ doc = Nokogiri::XML(@ws.to_xml_string)
320
+ assert_equal(doc.xpath('//xmlns:worksheet/xmlns:rowBreaks/xmlns:brk[@id="0"]').size, 1)
321
+ end
322
+
323
+ def test_to_xml_string_sheet_protection
324
+ @ws.sheet_protection.password = 'fish'
325
+ doc = Nokogiri::XML(@ws.to_xml_string)
326
+ assert(doc.xpath('//xmlns:sheetProtection'))
327
+ end
328
+
329
+ def test_to_xml_string_page_margins
330
+ @ws.page_margins do |pm|
331
+ pm.left = 9
332
+ pm.right = 7
333
+ end
334
+ doc = Nokogiri::XML(@ws.to_xml_string)
335
+ assert_equal(doc.xpath('//xmlns:worksheet/xmlns:pageMargins[@left="9"][@right="7"]').size, 1)
336
+ end
337
+
338
+ def test_to_xml_string_page_setup
339
+ @ws.page_setup do |ps|
340
+ ps.paper_width = "210mm"
341
+ ps.scale = 80
342
+ end
343
+ doc = Nokogiri::XML(@ws.to_xml_string)
344
+ assert_equal(doc.xpath('//xmlns:worksheet/xmlns:pageSetup[@paperWidth="210mm"][@scale="80"]').size, 1)
345
+ end
346
+
347
+ def test_to_xml_string_print_options
348
+ @ws.print_options do |po|
349
+ po.grid_lines = true
350
+ po.horizontal_centered = true
351
+ end
352
+ doc = Nokogiri::XML(@ws.to_xml_string)
353
+ assert_equal(doc.xpath('//xmlns:worksheet/xmlns:printOptions[@gridLines="true"][@horizontalCentered="true"]').size, 1)
354
+ end
355
+
356
+ def test_to_xml_string_header_footer
357
+ @ws.header_footer do |hf|
358
+ hf.different_first = false
359
+ hf.different_odd_even = false
360
+ hf.odd_header = 'Test Header'
361
+ end
362
+ doc = Nokogiri::XML(@ws.to_xml_string)
363
+ assert_equal(doc.xpath('//xmlns:worksheet/xmlns:headerFooter[@differentFirst="false"][@differentOddEven="false"]').size, 1)
364
+ end
365
+
366
+ def test_to_xml_string_drawing
367
+ @ws.add_chart Axlsx::Pie3DChart
368
+ doc = Nokogiri::XML(@ws.to_xml_string)
369
+ assert_equal @ws.send(:worksheet_drawing).relationship.Id, doc.xpath('//xmlns:worksheet/xmlns:drawing').first["r:id"]
370
+ end
371
+
372
+ def test_to_xml_string_tables
373
+ @ws.add_row ["one", "two"]
374
+ @ws.add_row [1, 2]
375
+ table = @ws.add_table "A1:B2"
376
+ doc = Nokogiri::XML(@ws.to_xml_string)
377
+ assert_equal(doc.xpath('//xmlns:worksheet/xmlns:tableParts[@count="1"]').size, 1)
378
+ assert_equal table.rId, doc.xpath('//xmlns:worksheet/xmlns:tableParts/xmlns:tablePart').first["r:id"]
379
+ end
380
+
381
+ def test_to_xml_string
382
+ schema = Nokogiri::XML::Schema(File.open(Axlsx::SML_XSD))
383
+ doc = Nokogiri::XML(@ws.to_xml_string)
384
+ assert(schema.validate(doc).map{ |e| puts e.message; e }.empty?, "error free validation")
385
+ end
386
+
387
+ def test_styles
388
+ assert(@ws.styles.is_a?(Axlsx::Styles), 'worksheet provides access to styles')
389
+ end
390
+
391
+ def test_to_xml_string_with_illegal_chars
392
+ nasties = "\v\u2028\u0001\u0002\u0003\u0004\u0005\u0006\u0007\u0008\u001f"
393
+ @ws.add_row [nasties]
394
+ assert_equal(0, @ws.rows.last.cells.last.value.index("\v"))
395
+ assert_equal(nil,@ws.to_xml_string.index("\v"))
396
+ end
397
+
398
+ def test_to_xml_string_with_newlines
399
+ cell_with_newline = "foo\n\r\nbar"
400
+ @ws.add_row [cell_with_newline]
401
+ assert_equal("foo\n\r\nbar", @ws.rows.last.cells.last.value)
402
+ assert_not_nil(@ws.to_xml_string.index("foo\n\r\nbar"))
403
+ end
404
+ # Make sure the XML for all optional elements (like pageMargins, autoFilter, ...)
405
+ # is generated in correct order.
406
+ def test_valid_with_optional_elements
407
+ @ws.page_margins.set :left => 9
408
+ @ws.page_setup.set :fit_to_width => 1
409
+ @ws.print_options.set :headings => true
410
+ @ws.auto_filter.range = "A1:C3"
411
+ @ws.merge_cells "A4:A5"
412
+ @ws.add_chart Axlsx::Pie3DChart
413
+ @ws.add_table "E1:F3"
414
+ @ws.add_pivot_table 'G5:G6', 'A1:D10'
415
+ schema = Nokogiri::XML::Schema(File.open(Axlsx::SML_XSD))
416
+ doc = Nokogiri::XML(@ws.to_xml_string)
417
+ assert(schema.validate(doc).map { |e| puts e.message; e }.empty?, schema.validate(doc).map { |e| e.message }.join('\n'))
418
+ end
419
+
420
+ def test_relationships
421
+ @ws.add_row [1,2,3]
422
+ assert(@ws.relationships.empty?, "No Drawing relationship until you add a chart")
423
+ c = @ws.add_chart Axlsx::Pie3DChart
424
+ assert_equal(@ws.relationships.size, 1, "adding a chart creates the relationship")
425
+ c = @ws.add_chart Axlsx::Pie3DChart
426
+ assert_equal(@ws.relationships.size, 1, "multiple charts still only result in one relationship")
427
+ c = @ws.add_comment :text => 'builder', :author => 'bob', :ref => @ws.rows.last.cells.last
428
+ assert_equal(@ws.relationships.size, 4, "adding a comment adds 3 relationships")
429
+ c = @ws.add_comment :text => 'not that is a comment!', :author => 'travis', :ref => "A1"
430
+ assert_equal(@ws.relationships.size, 4, "adding multiple comments in the same worksheet should not add any additional comment relationships")
431
+ c = @ws.add_pivot_table 'G5:G6', 'A1:D10'
432
+ assert_equal(@ws.relationships.size, 5, "adding a pivot table adds 1 relationship")
433
+ end
434
+
435
+
436
+ def test_name_unique
437
+ assert_raise(ArgumentError, "worksheet name must be unique") { n = @ws.name; @ws.workbook.add_worksheet(:name=> n) }
438
+ end
439
+
440
+ def test_name_unique_only_checks_other_worksheet_names
441
+ assert_nothing_raised { @ws.name = @ws.name }
442
+ assert_nothing_raised { Axlsx::Package.new.workbook.add_worksheet :name => 'Sheet1' }
443
+ end
444
+
445
+ def test_name_size
446
+ assert_raise(ArgumentError, "name too long!") { @ws.name = Array.new(32, "A").join() }
447
+ assert_nothing_raised { @ws.name = Array.new(31, "A").join() }
448
+ end
449
+
450
+ def test_set_fixed_width_column
451
+ @ws.add_row ["mule", "donkey", "horse"], :widths => [20, :ignore, nil]
452
+ assert(@ws.column_info.size == 3, "a data item for each column")
453
+ assert_equal(20, @ws.column_info[0].width, "adding a row with fixed width updates :fixed attribute")
454
+ assert_equal(@ws.column_info[1].width, nil, ":ignore does not set any data")
455
+ end
456
+
457
+ def test_fixed_height
458
+ @ws.add_row [1, 2, 3], :height => 40
459
+ assert_equal(40, @ws.rows[-1].height)
460
+ end
461
+
462
+ def test_set_column_width
463
+ @ws.add_row ["chasing windmills", "penut"]
464
+ @ws.column_widths nil, 0.5
465
+ assert_equal(@ws.column_info[1].width, 0.5, 'eat my width')
466
+ assert_raise(ArgumentError, 'only accept unsigned ints') { @ws.column_widths 2, 7, -1 }
467
+ assert_raise(ArgumentError, 'only accept Integer, Float or Fixnum') { @ws.column_widths 2, 7, "-1" }
468
+ end
469
+
470
+ def test_protect_range
471
+ assert(@ws.send(:protected_ranges).is_a?(Axlsx::SimpleTypedList))
472
+ assert_equal(0, @ws.send(:protected_ranges).size)
473
+ @ws.protect_range('A1:A3')
474
+ assert_equal('A1:A3', @ws.send(:protected_ranges).last.sqref)
475
+ end
476
+
477
+ def test_protect_range_with_cells
478
+ @ws.add_row [1, 2, 3]
479
+ assert_nothing_raised {@ws.protect_range(@ws.rows.first.cells) }
480
+ assert_equal('A1:C1', @ws.send(:protected_ranges).last.sqref)
481
+
482
+ end
483
+ def test_merge_cells
484
+ @ws.add_row [1,2,3]
485
+ @ws.add_row [4,5,6]
486
+ @ws.add_row [7,8,9]
487
+ @ws.merge_cells "A1:A2"
488
+ @ws.merge_cells "B2:C3"
489
+ @ws.merge_cells @ws.rows.last.cells[(0..1)]
490
+ assert_equal(@ws.send(:merged_cells).size, 3)
491
+ assert_equal(@ws.send(:merged_cells).last, "A3:B3")
492
+ end
493
+
494
+ def test_merge_cells_sorts_correctly_by_row_when_given_array
495
+ 10.times do |i|
496
+ @ws.add_row [i]
497
+ end
498
+ @ws.merge_cells [@ws.rows[8].cells.first, @ws.rows[9].cells.first]
499
+ assert_equal "A9:A10", @ws.send(:merged_cells).first
500
+ end
501
+
502
+ def test_auto_filter
503
+ assert(@ws.auto_filter.range.nil?)
504
+ assert_raise(ArgumentError) { @ws.auto_filter = 123 }
505
+ @ws.auto_filter.range = "A1:D9"
506
+ assert_equal(@ws.auto_filter.range, "A1:D9")
507
+ end
508
+
509
+ def test_sheet_pr_for_auto_filter
510
+ @ws.auto_filter.range = 'A1:D9'
511
+ @ws.auto_filter.add_column 0, :filters, :filter_items => [1]
512
+ doc = Nokogiri::XML(@ws.to_xml_string)
513
+ assert(doc.xpath('//sheetPr[@filterMode="true"]'))
514
+ end
515
+
516
+ def test_outline_level_rows
517
+ 3.times { @ws.add_row [1,2,3] }
518
+ @ws.outline_level_rows 0, 2
519
+ assert_equal(1, @ws.rows[0].outline_level)
520
+ assert_equal(true, @ws.rows[2].hidden)
521
+ assert_equal(true, @ws.sheet_view.show_outline_symbols)
522
+ end
523
+
524
+ def test_outline_level_columns
525
+ 3.times { @ws.add_row [1,2,3] }
526
+ @ws.outline_level_columns 0, 2
527
+ assert_equal(1, @ws.column_info[0].outline_level)
528
+ assert_equal(true, @ws.column_info[2].hidden)
529
+ assert_equal(true, @ws.sheet_view.show_outline_symbols)
530
+ end
531
+
532
+ def test_worksheet_does_not_get_added_to_workbook_on_initialize_failure
533
+ assert_equal(1, @wb.worksheets.size)
534
+ assert_raise(ArgumentError) { @wb.add_worksheet(:name => 'Sheet1') }
535
+ assert_equal(1, @wb.worksheets.size)
536
+ end
537
+
538
+ end