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,72 @@
1
+ require 'tc_helper.rb'
2
+
3
+ class TestAxlsx < Test::Unit::TestCase
4
+
5
+ def setup_wide
6
+ @wide_test_points = { "A3" => 0,
7
+ "Z3" => 25,
8
+ "B3" => 1,
9
+ "AA3" => 1 * 26 + 0,
10
+ "AAA3" => 1 * 26**2 + 1 * 26 + 0,
11
+ "AAZ3" => 1 * 26**2 + 1 * 26 + 25,
12
+ "ABA3" => 1 * 26**2 + 2 * 26 + 0,
13
+ "BZU3" => 2 * 26**2 + 26 * 26 + 20
14
+ }
15
+ end
16
+
17
+ def test_cell_range_empty_if_no_cell
18
+ assert_equal(Axlsx.cell_range([]), "")
19
+ end
20
+
21
+ def test_do_not_trust_input_by_default
22
+ assert_equal false, Axlsx.trust_input
23
+ end
24
+
25
+
26
+ def test_trust_input_can_be_set_to_true
27
+ Axlsx.trust_input = true
28
+ assert_equal true, Axlsx.trust_input
29
+ end
30
+ def test_cell_range_relative
31
+ p = Axlsx::Package.new
32
+ ws = p.workbook.add_worksheet
33
+ row = ws.add_row
34
+ c1 = row.add_cell
35
+ c2 = row.add_cell
36
+ assert_equal(Axlsx.cell_range([c2, c1], false), "A1:B1")
37
+ end
38
+
39
+ def test_cell_range_absolute
40
+ p = Axlsx::Package.new
41
+ ws = p.workbook.add_worksheet :name => "Sheet <'>\" 1"
42
+ row = ws.add_row
43
+ c1 = row.add_cell
44
+ c2 = row.add_cell
45
+ assert_equal(Axlsx.cell_range([c2, c1], true), "'Sheet &lt;''&gt;&quot; 1'!$A$1:$B$1")
46
+ end
47
+
48
+ def test_name_to_indices
49
+ setup_wide
50
+ @wide_test_points.each do |key, value|
51
+ assert_equal(Axlsx.name_to_indices(key), [value,2])
52
+ end
53
+ end
54
+
55
+ def test_col_ref
56
+ setup_wide
57
+ @wide_test_points.each do |key, value|
58
+ assert_equal(Axlsx.col_ref(value), key.gsub(/\d+/, ''))
59
+ end
60
+ end
61
+
62
+ def test_cell_r
63
+ # todo
64
+ end
65
+
66
+ def test_range_to_a
67
+ assert_equal([['A1', 'B1', 'C1']], Axlsx::range_to_a('A1:C1'))
68
+ assert_equal([['A1', 'B1', 'C1'], ['A2', 'B2', 'C2']], Axlsx::range_to_a('A1:C2'))
69
+ assert_equal([['Z5', 'AA5', 'AB5'], ['Z6', 'AA6', 'AB6']], Axlsx::range_to_a('Z5:AB6'))
70
+ end
71
+
72
+ end
@@ -0,0 +1,10 @@
1
+ $LOAD_PATH.unshift "#{File.dirname(__FILE__)}/../lib"
2
+ require 'simplecov'
3
+ SimpleCov.start do
4
+ add_filter "/test/"
5
+ add_filter "/vendor/"
6
+ end
7
+
8
+ require 'test/unit'
9
+ require "timecop"
10
+ require "axlsx.rb"
@@ -0,0 +1,227 @@
1
+ # encoding: UTF-8
2
+ require 'tc_helper.rb'
3
+
4
+ class TestPackage < Test::Unit::TestCase
5
+ def setup
6
+ @package = Axlsx::Package.new
7
+ ws = @package.workbook.add_worksheet
8
+ ws.add_row ['Can', 'we', 'build it?']
9
+ ws.add_row ['Yes!', 'We', 'can!']
10
+ ws.outline_level_rows 0, 1
11
+ ws.outline_level_columns 0, 1
12
+ ws.add_hyperlink :ref => ws.rows.first.cells.last, :location => 'https://github.com/randym'
13
+ ws.workbook.add_defined_name("#{ws.name}!A1:C2", :name => '_xlnm.Print_Titles', :hidden => true)
14
+ ws.protect_range('A1:C1')
15
+ ws.protect_range(ws.rows.last.cells)
16
+ ws.add_comment :author => 'alice', :text => 'Hi Bob', :ref => 'A12'
17
+ ws.add_comment :author => 'bob', :text => 'Hi Alice', :ref => 'F19'
18
+ ws.sheet_view do |vs|
19
+ vs.pane do |p|
20
+ p.active_pane = :top_right
21
+ p.state = :split
22
+ p.x_split = 11080
23
+ p.y_split = 5000
24
+ p.top_left_cell = 'C44'
25
+ end
26
+
27
+ vs.add_selection(:top_left, { :active_cell => 'A2', :sqref => 'A2' })
28
+ vs.add_selection(:top_right, { :active_cell => 'I10', :sqref => 'I10' })
29
+ vs.add_selection(:bottom_left, { :active_cell => 'E55', :sqref => 'E55' })
30
+ vs.add_selection(:bottom_right, { :active_cell => 'I57', :sqref => 'I57' })
31
+ end
32
+
33
+ ws.add_chart(Axlsx::Pie3DChart, :title => "これは?", :start_at => [0,3]) do |chart|
34
+ chart.add_series :data=>[1,2,3], :labels=>["a", "b", "c"]
35
+ chart.d_lbls.show_val = true
36
+ chart.d_lbls.d_lbl_pos = :outEnd
37
+ chart.d_lbls.show_percent = true
38
+ end
39
+
40
+ ws.add_chart(Axlsx::Line3DChart, :title => "axis labels") do |chart|
41
+ chart.valAxis.title = 'bob'
42
+ chart.d_lbls.show_val = true
43
+ end
44
+
45
+ ws.add_chart(Axlsx::Bar3DChart, :title => 'bar chart') do |chart|
46
+ chart.add_series :data => [1,4,5], :labels => %w(A B C)
47
+ chart.d_lbls.show_percent = true
48
+ end
49
+
50
+ ws.add_chart(Axlsx::ScatterChart, :title => 'scat man') do |chart|
51
+ chart.add_series :xData => [1,2,3,4], :yData => [4,3,2,1]
52
+ chart.d_lbls.show_val = true
53
+ end
54
+
55
+ @fname = 'axlsx_test_serialization.xlsx'
56
+ img = File.expand_path('../../examples/image1.jpeg', __FILE__)
57
+ ws.add_image(:image_src => img, :noSelect => true, :noMove => true, :hyperlink=>"http://axlsx.blogspot.com") do |image|
58
+ image.width=720
59
+ image.height=666
60
+ image.hyperlink.tooltip = "Labeled Link"
61
+ image.start_at 5, 5
62
+ image.end_at 10, 10
63
+ end
64
+ ws.add_image :image_src => File.expand_path('../../examples/image1.gif', __FILE__) do |image|
65
+ image.start_at 0, 20
66
+ image.width=360
67
+ image.height=333
68
+ end
69
+ ws.add_image :image_src => File.expand_path('../../examples/image1.png', __FILE__) do |image|
70
+ image.start_at 9, 20
71
+ image.width = 180
72
+ image.height = 167
73
+ end
74
+ ws.add_table 'A1:C1'
75
+
76
+ ws.add_pivot_table 'G5:G6', 'A1:B3'
77
+
78
+ ws.add_page_break "B2"
79
+
80
+ end
81
+
82
+ def test_use_autowidth
83
+ @package.use_autowidth = false
84
+ assert(@package.workbook.use_autowidth == false)
85
+ end
86
+
87
+ def test_core_accessor
88
+ assert_equal(@package.core, @package.instance_values["core"])
89
+ assert_raise(NoMethodError) {@package.core = nil }
90
+ end
91
+
92
+ def test_app_accessor
93
+ assert_equal(@package.app, @package.instance_values["app"])
94
+ assert_raise(NoMethodError) {@package.app = nil }
95
+ end
96
+
97
+ def test_use_shared_strings
98
+ assert_equal(@package.use_shared_strings, nil)
99
+ assert_raise(ArgumentError) {@package.use_shared_strings 9}
100
+ assert_nothing_raised {@package.use_shared_strings = true}
101
+ assert_equal(@package.use_shared_strings, @package.workbook.use_shared_strings)
102
+ end
103
+
104
+ def test_default_objects_are_created
105
+ assert(@package.instance_values["app"].is_a?(Axlsx::App), 'App object not created')
106
+ assert(@package.instance_values["core"].is_a?(Axlsx::Core), 'Core object not created')
107
+ assert(@package.workbook.is_a?(Axlsx::Workbook), 'Workbook object not created')
108
+ assert(Axlsx::Package.new.workbook.worksheets.size == 0, 'Workbook should not have sheets by default')
109
+ end
110
+
111
+ def test_created_at_is_propagated_to_core
112
+ time = Time.utc(2013, 1, 1, 12, 0)
113
+ p = Axlsx::Package.new :created_at => time
114
+ assert_equal(time, p.core.created)
115
+ end
116
+
117
+ def test_serialization
118
+ assert_nothing_raised do
119
+ begin
120
+ @package.serialize(@fname)
121
+ zf = Zip::File.open(@fname)
122
+ @package.send(:parts).each{ |part| zf.get_entry(part[:entry]) }
123
+ File.delete(@fname)
124
+ rescue Errno::EACCES
125
+ puts "WARNING:: test_serialization requires write access."
126
+ end
127
+ end
128
+ end
129
+
130
+ # See comment for Package#zip_entry_for_part
131
+ def test_serialization_creates_identical_files_at_any_time_if_created_at_is_set
132
+ @package.core.created = Time.now
133
+ zip_content_now = @package.to_stream.string
134
+ Timecop.travel(3600) do
135
+ zip_content_then = @package.to_stream.string
136
+ assert zip_content_then == zip_content_now, "zip files are not identical"
137
+ end
138
+ end
139
+
140
+ def test_serialization_creates_identical_files_for_identical_packages
141
+ package_1, package_2 = 2.times.map do
142
+ Axlsx::Package.new(:created_at => Time.utc(2013, 1, 1)).tap do |p|
143
+ p.workbook.add_worksheet(:name => "Basic Worksheet") do |sheet|
144
+ sheet.add_row [1, 2, 3]
145
+ end
146
+ end
147
+ end
148
+ assert package_1.to_stream.string == package_2.to_stream.string, "zip files are not identical"
149
+ end
150
+
151
+ def test_validation
152
+ assert_equal(@package.validate.size, 0, @package.validate)
153
+ Axlsx::Workbook.send(:class_variable_set, :@@date1904, 9900)
154
+ assert(@package.validate.size > 0)
155
+ end
156
+
157
+ def test_parts
158
+ p = @package.send(:parts)
159
+ #all parts have an entry
160
+ assert_equal(p.select{ |part| part[:entry] =~ /_rels\/\.rels/ }.size, 1, "rels missing")
161
+ assert_equal(p.select{ |part| part[:entry] =~ /docProps\/core\.xml/ }.size, 1, "core missing")
162
+ assert_equal(p.select{ |part| part[:entry] =~ /docProps\/app\.xml/ }.size, 1, "app missing")
163
+ assert_equal(p.select{ |part| part[:entry] =~ /xl\/_rels\/workbook\.xml\.rels/ }.size, 1, "workbook rels missing")
164
+ assert_equal(p.select{ |part| part[:entry] =~ /xl\/workbook\.xml/ }.size, 1, "workbook missing")
165
+ assert_equal(p.select{ |part| part[:entry] =~ /\[Content_Types\]\.xml/ }.size, 1, "content types missing")
166
+ assert_equal(p.select{ |part| part[:entry] =~ /xl\/styles\.xml/ }.size, 1, "styles missin")
167
+ assert_equal(p.select{ |part| part[:entry] =~ /xl\/drawings\/_rels\/drawing\d\.xml\.rels/ }.size, @package.workbook.drawings.size, "one or more drawing rels missing")
168
+ assert_equal(p.select{ |part| part[:entry] =~ /xl\/drawings\/drawing\d\.xml/ }.size, @package.workbook.drawings.size, "one or more drawings missing")
169
+ assert_equal(p.select{ |part| part[:entry] =~ /xl\/charts\/chart\d\.xml/ }.size, @package.workbook.charts.size, "one or more charts missing")
170
+ assert_equal(p.select{ |part| part[:entry] =~ /xl\/worksheets\/sheet\d\.xml/ }.size, @package.workbook.worksheets.size, "one or more sheet missing")
171
+ assert_equal(p.select{ |part| part[:entry] =~ /xl\/worksheets\/_rels\/sheet\d\.xml\.rels/ }.size, @package.workbook.worksheets.size, "one or more sheet rels missing")
172
+ assert_equal(p.select{ |part| part[:entry] =~ /xl\/comments\d\.xml/ }.size, @package.workbook.worksheets.size, "one or more sheet rels missing")
173
+ assert_equal(p.select{ |part| part[:entry] =~ /xl\/pivotTables\/pivotTable\d\.xml/ }.size, @package.workbook.worksheets.first.pivot_tables.size, "one or more pivot tables missing")
174
+ assert_equal(p.select{ |part| part[:entry] =~ /xl\/pivotTables\/_rels\/pivotTable\d\.xml.rels/ }.size, @package.workbook.worksheets.first.pivot_tables.size, "one or more pivot tables rels missing")
175
+ assert_equal(p.select{ |part| part[:entry] =~ /xl\/pivotCache\/pivotCacheDefinition\d\.xml/ }.size, @package.workbook.worksheets.first.pivot_tables.size, "one or more pivot tables missing")
176
+
177
+
178
+ #no mystery parts
179
+ assert_equal(24, p.size)
180
+
181
+ end
182
+
183
+ def test_shared_strings_requires_part
184
+ @package.use_shared_strings = true
185
+ p = @package.send(:parts)
186
+ assert_equal(p.select{ |part| part[:entry] =~/xl\/sharedStrings.xml/}.size, 1, "shared strings table missing")
187
+ end
188
+
189
+ def test_workbook_is_a_workbook
190
+ assert @package.workbook.is_a? Axlsx::Workbook
191
+ end
192
+
193
+ def test_base_content_types
194
+ ct = @package.send(:base_content_types)
195
+ assert(ct.select { |c| c.ContentType == Axlsx::RELS_CT }.size == 1, "rels content type missing")
196
+ assert(ct.select { |c| c.ContentType == Axlsx::XML_CT }.size == 1, "xml content type missing")
197
+ assert(ct.select { |c| c.ContentType == Axlsx::APP_CT }.size == 1, "app content type missing")
198
+ assert(ct.select { |c| c.ContentType == Axlsx::CORE_CT }.size == 1, "core content type missing")
199
+ assert(ct.select { |c| c.ContentType == Axlsx::STYLES_CT }.size == 1, "styles content type missing")
200
+ assert(ct.select { |c| c.ContentType == Axlsx::WORKBOOK_CT }.size == 1, "workbook content type missing")
201
+ assert(ct.size == 6)
202
+ end
203
+
204
+ def test_content_type_added_with_shared_strings
205
+ @package.use_shared_strings = true
206
+ ct = @package.send(:content_types)
207
+ assert(ct.select { |type| type.ContentType == Axlsx::SHARED_STRINGS_CT }.size == 1)
208
+ end
209
+
210
+ def test_name_to_indices
211
+ assert(Axlsx::name_to_indices('A1') == [0,0])
212
+ assert(Axlsx::name_to_indices('A100') == [0,99], 'needs to axcept rows that contain 0')
213
+ end
214
+
215
+ def test_to_stream
216
+ stream = @package.to_stream
217
+ assert(stream.is_a?(StringIO))
218
+ # this is just a roundabout guess for a package as it is build now
219
+ # in testing.
220
+ assert(stream.size > 80000)
221
+ end
222
+
223
+ def test_encrypt
224
+ # this is no where near close to ready yet
225
+ assert(@package.encrypt('your_mom.xlsxl', 'has a password') == false)
226
+ end
227
+ end
@@ -0,0 +1,19 @@
1
+ require 'tc_helper.rb'
2
+ class Funk
3
+ include Axlsx::Accessors
4
+ include Axlsx::SerializedAttributes
5
+ serializable_attributes :camel_symbol, :boolean, :integer
6
+
7
+ attr_accessor :camel_symbol, :boolean, :integer
8
+ end
9
+
10
+ class TestSeralizedAttributes < Test::Unit::TestCase
11
+ def setup
12
+ @object = Funk.new
13
+ end
14
+
15
+ def test_camel_symbol
16
+ @object.camel_symbol = :foo_bar
17
+ assert_equal('camelSymbol="fooBar" ', @object.serialized_attributes)
18
+ end
19
+ end
@@ -0,0 +1,78 @@
1
+ require 'tc_helper.rb'
2
+ class TestSimpleTypedList < Test::Unit::TestCase
3
+ def setup
4
+ @list = Axlsx::SimpleTypedList.new Fixnum
5
+ end
6
+
7
+ def teardown
8
+ end
9
+
10
+ def test_type_is_a_class_or_array_of_class
11
+ assert_nothing_raised { Axlsx::SimpleTypedList.new Integer }
12
+ assert_nothing_raised { Axlsx::SimpleTypedList.new [Integer,String] }
13
+ assert_raise(ArgumentError) { Axlsx::SimpleTypedList.new }
14
+ assert_raise(ArgumentError) { Axlsx::SimpleTypedList.new "1" }
15
+ assert_raise(ArgumentError) { Axlsx::SimpleTypedList.new [Integer, "Class"] }
16
+ end
17
+
18
+ def test_indexed_based_assignment
19
+ #should not allow nil assignment
20
+ assert_raise(ArgumentError) { @list[0] = nil }
21
+ assert_raise(ArgumentError) { @list[0] = "1" }
22
+ assert_nothing_raised { @list[0] = 1 }
23
+ end
24
+
25
+ def test_concat_assignment
26
+ assert_raise(ArgumentError) { @list << nil }
27
+ assert_raise(ArgumentError) { @list << "1" }
28
+ assert_nothing_raised { @list << 1 }
29
+ end
30
+
31
+ def test_concat_should_return_index
32
+ assert( @list.size == 0 )
33
+ assert( @list << 1 == 0 )
34
+ assert( @list << 2 == 1 )
35
+ @list.delete_at 0
36
+ assert( @list << 3 == 1 )
37
+ assert( @list.index(2) == 0 )
38
+ end
39
+
40
+ def test_push_should_return_index
41
+ assert( @list.push(1) == 0 )
42
+ assert( @list.push(2) == 1 )
43
+ @list.delete_at 0
44
+ assert( @list.push(3) == 1 )
45
+ assert( @list.index(2) == 0 )
46
+ end
47
+
48
+ def test_locking
49
+ @list.push 1
50
+ @list.push 2
51
+ @list.push 3
52
+ @list.lock
53
+
54
+ assert_raise(ArgumentError) { @list.delete 1 }
55
+ assert_raise(ArgumentError) { @list.delete_at 1 }
56
+ assert_raise(ArgumentError) { @list.delete_at 2 }
57
+ @list.push 4
58
+ assert_nothing_raised { @list.delete_at 3 }
59
+ @list.unlock
60
+ #ignore garbage
61
+ assert_nothing_raised { @list.delete 0 }
62
+ assert_nothing_raised { @list.delete 9 }
63
+ end
64
+
65
+ def test_delete
66
+ @list.push 1
67
+ assert(@list.size == 1)
68
+ @list.delete 1
69
+ assert(@list.empty?)
70
+ end
71
+
72
+ def test_equality
73
+ @list.push 1
74
+ @list.push 2
75
+ assert_equal(@list, [1,2])
76
+
77
+ end
78
+ end
@@ -0,0 +1,186 @@
1
+ require 'tc_helper.rb'
2
+ class TestValidators < Test::Unit::TestCase
3
+ def setup
4
+ end
5
+ def teardown
6
+ end
7
+
8
+ def test_validators
9
+ #unsigned_int
10
+ assert_nothing_raised { Axlsx.validate_unsigned_int 1 }
11
+ assert_nothing_raised { Axlsx.validate_unsigned_int(+1) }
12
+ assert_raise(ArgumentError) { Axlsx.validate_unsigned_int(-1)}
13
+ assert_raise(ArgumentError) { Axlsx.validate_unsigned_int('1') }
14
+
15
+ #int
16
+ assert_nothing_raised { Axlsx.validate_int(1) }
17
+ assert_nothing_raised { Axlsx.validate_int(-1) }
18
+ assert_raise(ArgumentError) { Axlsx.validate_int('a')}
19
+ assert_raise(ArgumentError) { Axlsx.validate_int(Array) }
20
+
21
+ #boolean (as 0 or 1, :true, :false, true, false, or "true," "false")
22
+ [0,1,:true, :false, true, false, "true", "false"].each do |v|
23
+ assert_nothing_raised { Axlsx.validate_boolean 0 }
24
+ end
25
+ assert_raise(ArgumentError) { Axlsx.validate_boolean 2 }
26
+
27
+ #string
28
+ assert_nothing_raised { Axlsx.validate_string "1" }
29
+ assert_raise(ArgumentError) { Axlsx.validate_string 2 }
30
+ assert_raise(ArgumentError) { Axlsx.validate_string false }
31
+
32
+ #float
33
+ assert_nothing_raised { Axlsx.validate_float 1.0 }
34
+ assert_raise(ArgumentError) { Axlsx.validate_float 2 }
35
+ assert_raise(ArgumentError) { Axlsx.validate_float false }
36
+
37
+ #pattern_type
38
+ assert_nothing_raised { Axlsx.validate_pattern_type :none }
39
+ assert_raise(ArgumentError) { Axlsx.validate_pattern_type "none" }
40
+ assert_raise(ArgumentError) { Axlsx.validate_pattern_type "crazy_pattern" }
41
+ assert_raise(ArgumentError) { Axlsx.validate_pattern_type false }
42
+
43
+ #gradient_type
44
+ assert_nothing_raised { Axlsx.validate_gradient_type :path }
45
+ assert_raise(ArgumentError) { Axlsx.validate_gradient_type nil }
46
+ assert_raise(ArgumentError) { Axlsx.validate_gradient_type "fractal" }
47
+ assert_raise(ArgumentError) { Axlsx.validate_gradient_type false }
48
+
49
+ #horizontal alignment
50
+ assert_nothing_raised { Axlsx.validate_horizontal_alignment :general }
51
+ assert_raise(ArgumentError) { Axlsx.validate_horizontal_alignment nil }
52
+ assert_raise(ArgumentError) { Axlsx.validate_horizontal_alignment "wavy" }
53
+ assert_raise(ArgumentError) { Axlsx.validate_horizontal_alignment false }
54
+
55
+ #vertical alignment
56
+ assert_nothing_raised { Axlsx.validate_vertical_alignment :top }
57
+ assert_raise(ArgumentError) { Axlsx.validate_vertical_alignment nil }
58
+ assert_raise(ArgumentError) { Axlsx.validate_vertical_alignment "dynamic" }
59
+ assert_raise(ArgumentError) { Axlsx.validate_vertical_alignment false }
60
+
61
+ #contentType
62
+ assert_nothing_raised { Axlsx.validate_content_type Axlsx::WORKBOOK_CT }
63
+ assert_raise(ArgumentError) { Axlsx.validate_content_type nil }
64
+ assert_raise(ArgumentError) { Axlsx.validate_content_type "http://some.url" }
65
+ assert_raise(ArgumentError) { Axlsx.validate_content_type false }
66
+
67
+ #relationshipType
68
+ assert_nothing_raised { Axlsx.validate_relationship_type Axlsx::WORKBOOK_R }
69
+ assert_raise(ArgumentError) { Axlsx.validate_relationship_type nil }
70
+ assert_raise(ArgumentError) { Axlsx.validate_relationship_type "http://some.url" }
71
+ assert_raise(ArgumentError) { Axlsx.validate_relationship_type false }
72
+
73
+ #number_with_unit
74
+ assert_nothing_raised { Axlsx.validate_number_with_unit "210mm" }
75
+ assert_nothing_raised { Axlsx.validate_number_with_unit "8.5in" }
76
+ assert_nothing_raised { Axlsx.validate_number_with_unit "29.7cm" }
77
+ assert_nothing_raised { Axlsx.validate_number_with_unit "120pt" }
78
+ assert_nothing_raised { Axlsx.validate_number_with_unit "0pc" }
79
+ assert_nothing_raised { Axlsx.validate_number_with_unit "12.34pi" }
80
+ assert_raise(ArgumentError) { Axlsx.validate_number_with_unit nil }
81
+ assert_raise(ArgumentError) { Axlsx.validate_number_with_unit "210" }
82
+ assert_raise(ArgumentError) { Axlsx.validate_number_with_unit 210 }
83
+ assert_raise(ArgumentError) { Axlsx.validate_number_with_unit "mm" }
84
+ assert_raise(ArgumentError) { Axlsx.validate_number_with_unit "-29cm" }
85
+
86
+ #scale_10_400
87
+ assert_nothing_raised { Axlsx.validate_scale_10_400 10 }
88
+ assert_nothing_raised { Axlsx.validate_scale_10_400 100 }
89
+ assert_nothing_raised { Axlsx.validate_scale_10_400 400 }
90
+ assert_raise(ArgumentError) { Axlsx.validate_scale_10_400 9 }
91
+ assert_raise(ArgumentError) { Axlsx.validate_scale_10_400 10.0 }
92
+ assert_raise(ArgumentError) { Axlsx.validate_scale_10_400 400.1 }
93
+ assert_raise(ArgumentError) { Axlsx.validate_scale_10_400 "99" }
94
+
95
+ #scale_0_10_400
96
+ assert_nothing_raised { Axlsx.validate_scale_0_10_400 0 }
97
+ assert_nothing_raised { Axlsx.validate_scale_0_10_400 10 }
98
+ assert_nothing_raised { Axlsx.validate_scale_0_10_400 100 }
99
+ assert_nothing_raised { Axlsx.validate_scale_0_10_400 400 }
100
+ assert_raise(ArgumentError) { Axlsx.validate_scale_0_10_400 9 }
101
+ assert_raise(ArgumentError) { Axlsx.validate_scale_0_10_400 10.0 }
102
+ assert_raise(ArgumentError) { Axlsx.validate_scale_0_10_400 400.1 }
103
+ assert_raise(ArgumentError) { Axlsx.validate_scale_0_10_400 "99" }
104
+
105
+ #page_orientation
106
+ assert_nothing_raised { Axlsx.validate_page_orientation :default }
107
+ assert_nothing_raised { Axlsx.validate_page_orientation :landscape }
108
+ assert_nothing_raised { Axlsx.validate_page_orientation :portrait }
109
+ assert_raise(ArgumentError) { Axlsx.validate_page_orientation nil }
110
+ assert_raise(ArgumentError) { Axlsx.validate_page_orientation 1 }
111
+ assert_raise(ArgumentError) { Axlsx.validate_page_orientation "landscape" }
112
+
113
+ #data_validation_error_style
114
+ [:information, :stop, :warning].each do |sym|
115
+ assert_nothing_raised { Axlsx.validate_data_validation_error_style sym }
116
+ end
117
+ assert_raise(ArgumentError) { Axlsx.validate_data_validation_error_style :other_symbol }
118
+ assert_raise(ArgumentError) { Axlsx.validate_data_validation_error_style 'warning' }
119
+ assert_raise(ArgumentError) { Axlsx.validate_data_validation_error_style 0 }
120
+
121
+ #data_validation_operator
122
+ [:lessThan, :lessThanOrEqual, :equal, :notEqual, :greaterThanOrEqual, :greaterThan, :between, :notBetween].each do |sym|
123
+ assert_nothing_raised { Axlsx.validate_data_validation_operator sym }
124
+ end
125
+ assert_raise(ArgumentError) { Axlsx.validate_data_validation_error_style :other_symbol }
126
+ assert_raise(ArgumentError) { Axlsx.validate_data_validation_error_style 'lessThan' }
127
+ assert_raise(ArgumentError) { Axlsx.validate_data_validation_error_style 0 }
128
+
129
+ #data_validation_type
130
+ [:custom, :data, :decimal, :list, :none, :textLength, :time, :whole].each do |sym|
131
+ assert_nothing_raised { Axlsx.validate_data_validation_type sym }
132
+ end
133
+ assert_raise(ArgumentError) { Axlsx.validate_data_validation_error_style :other_symbol }
134
+ assert_raise(ArgumentError) { Axlsx.validate_data_validation_error_style 'decimal' }
135
+ assert_raise(ArgumentError) { Axlsx.validate_data_validation_error_style 0 }
136
+
137
+ #sheet_view_type
138
+ [:normal, :page_break_preview, :page_layout].each do |sym|
139
+ assert_nothing_raised { Axlsx.validate_sheet_view_type sym }
140
+ end
141
+ assert_raise(ArgumentError) { Axlsx.validate_data_validation_error_style :other_symbol }
142
+ assert_raise(ArgumentError) { Axlsx.validate_data_validation_error_style 'page_layout' }
143
+ assert_raise(ArgumentError) { Axlsx.validate_data_validation_error_style 0 }
144
+
145
+ #active_pane_type
146
+ [:bottom_left, :bottom_right, :top_left, :top_right].each do |sym|
147
+ assert_nothing_raised { Axlsx.validate_pane_type sym }
148
+ end
149
+ assert_raise(ArgumentError) { Axlsx.validate_pane_type :other_symbol }
150
+ assert_raise(ArgumentError) { Axlsx.validate_pane_type 'bottom_left' }
151
+ assert_raise(ArgumentError) { Axlsx.validate_pane_type 0 }
152
+
153
+ #split_state_type
154
+ [:frozen, :frozen_split, :split].each do |sym|
155
+ assert_nothing_raised { Axlsx.validate_split_state_type sym }
156
+ end
157
+ assert_raise(ArgumentError) { Axlsx.validate_split_state_type :other_symbol }
158
+ assert_raise(ArgumentError) { Axlsx.validate_split_state_type 'frozen_split' }
159
+ assert_raise(ArgumentError) { Axlsx.validate_split_state_type 0 }
160
+ end
161
+
162
+ def test_validate_integerish
163
+ assert_raise(ArgumentError) { Axlsx.validate_integerish Axlsx }
164
+ [1, 1.4, "a"].each { |test_value| assert_nothing_raised { Axlsx.validate_integerish test_value } }
165
+ end
166
+ def test_validate_family
167
+ assert_raise(ArgumentError) { Axlsx.validate_family 0 }
168
+ (1..5).each do |item|
169
+ assert_nothing_raised { Axlsx.validate_family item }
170
+ end
171
+ end
172
+
173
+ def test_validate_u
174
+ assert_raise(ArgumentError) { Axlsx.validate_cell_u :hoge }
175
+ [:none, :single, :double, :singleAccounting, :doubleAccounting].each do |sym|
176
+ assert_nothing_raised { Axlsx.validate_cell_u sym }
177
+ end
178
+ end
179
+
180
+ def test_range_validation
181
+ # exclusive
182
+ assert_raise(ArgumentError) { Axlsx::RangeValidator.validate('foo', 1, 10, 10, false) }
183
+ # inclusive by default
184
+ assert_nothing_raised { Axlsx::RangeValidator.validate('foo', 1, 10, 10) }
185
+ end
186
+ end