caxlsx 3.2.0 → 3.3.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 (300) hide show
  1. checksums.yaml +4 -4
  2. data/.yardopts +9 -9
  3. data/.yardopts_guide +18 -18
  4. data/CHANGELOG.md +385 -354
  5. data/LICENSE +21 -21
  6. data/README.md +165 -168
  7. data/Rakefile +29 -29
  8. data/examples/generate.rb +15 -15
  9. data/lib/axlsx/content_type/abstract_content_type.rb +32 -32
  10. data/lib/axlsx/content_type/content_type.rb +26 -26
  11. data/lib/axlsx/content_type/default.rb +25 -25
  12. data/lib/axlsx/content_type/override.rb +25 -25
  13. data/lib/axlsx/doc_props/app.rb +235 -235
  14. data/lib/axlsx/doc_props/core.rb +39 -39
  15. data/lib/axlsx/drawing/area_chart.rb +99 -99
  16. data/lib/axlsx/drawing/area_series.rb +110 -110
  17. data/lib/axlsx/drawing/ax_data_source.rb +26 -26
  18. data/lib/axlsx/drawing/axes.rb +61 -61
  19. data/lib/axlsx/drawing/axis.rb +190 -190
  20. data/lib/axlsx/drawing/bar_3D_chart.rb +148 -148
  21. data/lib/axlsx/drawing/bar_chart.rb +138 -138
  22. data/lib/axlsx/drawing/bar_series.rb +97 -97
  23. data/lib/axlsx/drawing/bubble_chart.rb +59 -59
  24. data/lib/axlsx/drawing/bubble_series.rb +63 -63
  25. data/lib/axlsx/drawing/cat_axis.rb +85 -85
  26. data/lib/axlsx/drawing/chart.rb +299 -276
  27. data/lib/axlsx/drawing/d_lbls.rb +91 -90
  28. data/lib/axlsx/drawing/drawing.rb +167 -167
  29. data/lib/axlsx/drawing/graphic_frame.rb +54 -54
  30. data/lib/axlsx/drawing/hyperlink.rb +100 -100
  31. data/lib/axlsx/drawing/line_3D_chart.rb +68 -68
  32. data/lib/axlsx/drawing/line_chart.rb +99 -99
  33. data/lib/axlsx/drawing/line_series.rb +110 -110
  34. data/lib/axlsx/drawing/marker.rb +84 -84
  35. data/lib/axlsx/drawing/num_data.rb +52 -52
  36. data/lib/axlsx/drawing/num_data_source.rb +62 -62
  37. data/lib/axlsx/drawing/num_val.rb +34 -34
  38. data/lib/axlsx/drawing/one_cell_anchor.rb +99 -99
  39. data/lib/axlsx/drawing/pic.rb +211 -211
  40. data/lib/axlsx/drawing/picture_locking.rb +42 -42
  41. data/lib/axlsx/drawing/pie_3D_chart.rb +47 -47
  42. data/lib/axlsx/drawing/pie_series.rb +74 -74
  43. data/lib/axlsx/drawing/scaling.rb +60 -60
  44. data/lib/axlsx/drawing/scatter_chart.rb +74 -74
  45. data/lib/axlsx/drawing/scatter_series.rb +129 -129
  46. data/lib/axlsx/drawing/ser_axis.rb +45 -45
  47. data/lib/axlsx/drawing/series.rb +69 -69
  48. data/lib/axlsx/drawing/series_title.rb +25 -25
  49. data/lib/axlsx/drawing/str_data.rb +42 -42
  50. data/lib/axlsx/drawing/str_val.rb +34 -34
  51. data/lib/axlsx/drawing/title.rb +107 -97
  52. data/lib/axlsx/drawing/two_cell_anchor.rb +97 -97
  53. data/lib/axlsx/drawing/val_axis.rb +37 -37
  54. data/lib/axlsx/drawing/view_3D.rb +115 -115
  55. data/lib/axlsx/drawing/vml_drawing.rb +42 -42
  56. data/lib/axlsx/drawing/vml_shape.rb +66 -66
  57. data/lib/axlsx/package.rb +398 -388
  58. data/lib/axlsx/rels/relationship.rb +130 -130
  59. data/lib/axlsx/rels/relationships.rb +32 -32
  60. data/lib/axlsx/stylesheet/border.rb +73 -73
  61. data/lib/axlsx/stylesheet/border_pr.rb +71 -71
  62. data/lib/axlsx/stylesheet/cell_alignment.rb +132 -132
  63. data/lib/axlsx/stylesheet/cell_protection.rb +41 -41
  64. data/lib/axlsx/stylesheet/cell_style.rb +72 -72
  65. data/lib/axlsx/stylesheet/color.rb +76 -76
  66. data/lib/axlsx/stylesheet/dxf.rb +79 -79
  67. data/lib/axlsx/stylesheet/fill.rb +35 -35
  68. data/lib/axlsx/stylesheet/font.rb +156 -156
  69. data/lib/axlsx/stylesheet/gradient_fill.rb +103 -103
  70. data/lib/axlsx/stylesheet/gradient_stop.rb +37 -37
  71. data/lib/axlsx/stylesheet/num_fmt.rb +86 -86
  72. data/lib/axlsx/stylesheet/pattern_fill.rb +73 -73
  73. data/lib/axlsx/stylesheet/styles.rb +535 -494
  74. data/lib/axlsx/stylesheet/table_style.rb +54 -54
  75. data/lib/axlsx/stylesheet/table_style_element.rb +77 -77
  76. data/lib/axlsx/stylesheet/table_styles.rb +46 -46
  77. data/lib/axlsx/stylesheet/xf.rb +147 -147
  78. data/lib/axlsx/util/accessors.rb +64 -64
  79. data/lib/axlsx/util/constants.rb +416 -410
  80. data/lib/axlsx/util/mime_type_utils.rb +11 -11
  81. data/lib/axlsx/util/options_parser.rb +16 -16
  82. data/lib/axlsx/util/serialized_attributes.rb +89 -89
  83. data/lib/axlsx/util/simple_typed_list.rb +179 -179
  84. data/lib/axlsx/util/storage.rb +146 -146
  85. data/lib/axlsx/util/validators.rb +312 -312
  86. data/lib/axlsx/util/zip_command.rb +73 -73
  87. data/lib/axlsx/version.rb +5 -5
  88. data/lib/axlsx/workbook/defined_name.rb +128 -128
  89. data/lib/axlsx/workbook/defined_names.rb +21 -21
  90. data/lib/axlsx/workbook/shared_strings_table.rb +77 -77
  91. data/lib/axlsx/workbook/workbook.rb +425 -395
  92. data/lib/axlsx/workbook/workbook_view.rb +80 -80
  93. data/lib/axlsx/workbook/workbook_views.rb +22 -22
  94. data/lib/axlsx/workbook/worksheet/auto_filter/auto_filter.rb +77 -77
  95. data/lib/axlsx/workbook/worksheet/auto_filter/filter_column.rb +94 -94
  96. data/lib/axlsx/workbook/worksheet/auto_filter/filters.rb +244 -244
  97. data/lib/axlsx/workbook/worksheet/border_creator.rb +76 -0
  98. data/lib/axlsx/workbook/worksheet/break.rb +35 -35
  99. data/lib/axlsx/workbook/worksheet/cell.rb +532 -506
  100. data/lib/axlsx/workbook/worksheet/cell_serializer.rb +164 -164
  101. data/lib/axlsx/workbook/worksheet/cfvo.rb +60 -60
  102. data/lib/axlsx/workbook/worksheet/cfvos.rb +18 -18
  103. data/lib/axlsx/workbook/worksheet/col.rb +145 -145
  104. data/lib/axlsx/workbook/worksheet/col_breaks.rb +35 -35
  105. data/lib/axlsx/workbook/worksheet/color_scale.rb +110 -110
  106. data/lib/axlsx/workbook/worksheet/cols.rb +23 -23
  107. data/lib/axlsx/workbook/worksheet/comment.rb +91 -91
  108. data/lib/axlsx/workbook/worksheet/comments.rb +82 -82
  109. data/lib/axlsx/workbook/worksheet/conditional_formatting.rb +82 -82
  110. data/lib/axlsx/workbook/worksheet/conditional_formatting_rule.rb +220 -220
  111. data/lib/axlsx/workbook/worksheet/conditional_formattings.rb +25 -25
  112. data/lib/axlsx/workbook/worksheet/data_bar.rb +129 -129
  113. data/lib/axlsx/workbook/worksheet/data_validation.rb +267 -246
  114. data/lib/axlsx/workbook/worksheet/data_validations.rb +28 -28
  115. data/lib/axlsx/workbook/worksheet/date_time_converter.rb +30 -30
  116. data/lib/axlsx/workbook/worksheet/dimension.rb +64 -64
  117. data/lib/axlsx/workbook/worksheet/header_footer.rb +52 -52
  118. data/lib/axlsx/workbook/worksheet/icon_set.rb +81 -81
  119. data/lib/axlsx/workbook/worksheet/merged_cells.rb +37 -37
  120. data/lib/axlsx/workbook/worksheet/outline_pr.rb +33 -33
  121. data/lib/axlsx/workbook/worksheet/page_margins.rb +97 -97
  122. data/lib/axlsx/workbook/worksheet/page_set_up_pr.rb +44 -44
  123. data/lib/axlsx/workbook/worksheet/page_setup.rb +240 -240
  124. data/lib/axlsx/workbook/worksheet/pane.rb +139 -139
  125. data/lib/axlsx/workbook/worksheet/pivot_table.rb +335 -296
  126. data/lib/axlsx/workbook/worksheet/pivot_table_cache_definition.rb +66 -66
  127. data/lib/axlsx/workbook/worksheet/pivot_tables.rb +24 -24
  128. data/lib/axlsx/workbook/worksheet/print_options.rb +39 -39
  129. data/lib/axlsx/workbook/worksheet/protected_range.rb +47 -47
  130. data/lib/axlsx/workbook/worksheet/protected_ranges.rb +37 -37
  131. data/lib/axlsx/workbook/worksheet/rich_text.rb +55 -55
  132. data/lib/axlsx/workbook/worksheet/rich_text_run.rb +250 -250
  133. data/lib/axlsx/workbook/worksheet/row.rb +164 -164
  134. data/lib/axlsx/workbook/worksheet/row_breaks.rb +33 -33
  135. data/lib/axlsx/workbook/worksheet/selection.rb +101 -101
  136. data/lib/axlsx/workbook/worksheet/sheet_calc_pr.rb +29 -29
  137. data/lib/axlsx/workbook/worksheet/sheet_data.rb +27 -27
  138. data/lib/axlsx/workbook/worksheet/sheet_pr.rb +87 -87
  139. data/lib/axlsx/workbook/worksheet/sheet_protection.rb +118 -118
  140. data/lib/axlsx/workbook/worksheet/sheet_view.rb +213 -213
  141. data/lib/axlsx/workbook/worksheet/table.rb +102 -102
  142. data/lib/axlsx/workbook/worksheet/table_style_info.rb +49 -49
  143. data/lib/axlsx/workbook/worksheet/tables.rb +34 -34
  144. data/lib/axlsx/workbook/worksheet/worksheet.rb +829 -786
  145. data/lib/axlsx/workbook/worksheet/worksheet_comments.rb +58 -58
  146. data/lib/axlsx/workbook/worksheet/worksheet_drawing.rb +58 -58
  147. data/lib/axlsx/workbook/worksheet/worksheet_hyperlink.rb +74 -74
  148. data/lib/axlsx/workbook/worksheet/worksheet_hyperlinks.rb +38 -38
  149. data/lib/axlsx.rb +204 -185
  150. data/lib/caxlsx.rb +2 -2
  151. data/lib/schema/dc.xsd +118 -118
  152. data/lib/schema/dcmitype.xsd +51 -51
  153. data/lib/schema/dcterms.xsd +331 -331
  154. data/lib/schema/dml-chartDrawing.xsd +146 -146
  155. data/lib/schema/dml-compatibility.xsd +14 -14
  156. data/lib/schema/dml-lockedCanvas.xsd +11 -11
  157. data/lib/schema/dml-main.xsd +3048 -3048
  158. data/lib/schema/dml-picture.xsd +23 -23
  159. data/lib/schema/dml-spreadsheetDrawing.xsd +185 -185
  160. data/lib/schema/dml-wordprocessingDrawing.xsd +185 -185
  161. data/lib/schema/shared-additionalCharacteristics.xsd +28 -28
  162. data/lib/schema/shared-bibliography.xsd +144 -144
  163. data/lib/schema/shared-commonSimpleTypes.xsd +166 -166
  164. data/lib/schema/shared-customXmlDataProperties.xsd +25 -25
  165. data/lib/schema/shared-customXmlSchemaProperties.xsd +18 -18
  166. data/lib/schema/shared-documentPropertiesCustom.xsd +59 -59
  167. data/lib/schema/shared-documentPropertiesExtended.xsd +56 -56
  168. data/lib/schema/shared-documentPropertiesVariantTypes.xsd +195 -195
  169. data/lib/schema/shared-relationshipReference.xsd +25 -25
  170. data/lib/schema/vml-main.xsd +569 -569
  171. data/lib/schema/vml-officeDrawing.xsd +509 -509
  172. data/lib/schema/vml-presentationDrawing.xsd +12 -12
  173. data/lib/schema/vml-spreadsheetDrawing.xsd +108 -108
  174. data/lib/schema/vml-wordprocessingDrawing.xsd +96 -96
  175. data/lib/schema/xml.xsd +116 -116
  176. metadata +5 -252
  177. data/test/benchmark.rb +0 -72
  178. data/test/content_type/tc_content_type.rb +0 -76
  179. data/test/content_type/tc_default.rb +0 -16
  180. data/test/content_type/tc_override.rb +0 -14
  181. data/test/doc_props/tc_app.rb +0 -43
  182. data/test/doc_props/tc_core.rb +0 -42
  183. data/test/drawing/tc_area_chart.rb +0 -39
  184. data/test/drawing/tc_area_series.rb +0 -71
  185. data/test/drawing/tc_axes.rb +0 -8
  186. data/test/drawing/tc_axis.rb +0 -112
  187. data/test/drawing/tc_bar_3D_chart.rb +0 -86
  188. data/test/drawing/tc_bar_chart.rb +0 -86
  189. data/test/drawing/tc_bar_series.rb +0 -46
  190. data/test/drawing/tc_bubble_chart.rb +0 -44
  191. data/test/drawing/tc_bubble_series.rb +0 -21
  192. data/test/drawing/tc_cat_axis.rb +0 -31
  193. data/test/drawing/tc_cat_axis_data.rb +0 -27
  194. data/test/drawing/tc_chart.rb +0 -123
  195. data/test/drawing/tc_d_lbls.rb +0 -57
  196. data/test/drawing/tc_data_source.rb +0 -23
  197. data/test/drawing/tc_drawing.rb +0 -80
  198. data/test/drawing/tc_graphic_frame.rb +0 -27
  199. data/test/drawing/tc_hyperlink.rb +0 -64
  200. data/test/drawing/tc_line_3d_chart.rb +0 -47
  201. data/test/drawing/tc_line_chart.rb +0 -39
  202. data/test/drawing/tc_line_series.rb +0 -71
  203. data/test/drawing/tc_marker.rb +0 -44
  204. data/test/drawing/tc_named_axis_data.rb +0 -27
  205. data/test/drawing/tc_num_data.rb +0 -31
  206. data/test/drawing/tc_num_val.rb +0 -29
  207. data/test/drawing/tc_one_cell_anchor.rb +0 -66
  208. data/test/drawing/tc_pic.rb +0 -103
  209. data/test/drawing/tc_picture_locking.rb +0 -72
  210. data/test/drawing/tc_pie_3D_chart.rb +0 -28
  211. data/test/drawing/tc_pie_series.rb +0 -33
  212. data/test/drawing/tc_scaling.rb +0 -36
  213. data/test/drawing/tc_scatter_chart.rb +0 -48
  214. data/test/drawing/tc_scatter_series.rb +0 -74
  215. data/test/drawing/tc_ser_axis.rb +0 -31
  216. data/test/drawing/tc_series.rb +0 -23
  217. data/test/drawing/tc_series_title.rb +0 -54
  218. data/test/drawing/tc_str_data.rb +0 -18
  219. data/test/drawing/tc_str_val.rb +0 -30
  220. data/test/drawing/tc_title.rb +0 -70
  221. data/test/drawing/tc_two_cell_anchor.rb +0 -36
  222. data/test/drawing/tc_val_axis.rb +0 -24
  223. data/test/drawing/tc_view_3D.rb +0 -54
  224. data/test/drawing/tc_vml_drawing.rb +0 -25
  225. data/test/drawing/tc_vml_shape.rb +0 -106
  226. data/test/fixtures/image1.gif +0 -0
  227. data/test/fixtures/image1.jpeg +0 -0
  228. data/test/fixtures/image1.jpg +0 -0
  229. data/test/fixtures/image1.png +0 -0
  230. data/test/fixtures/image1_fake.jpg +0 -0
  231. data/test/profile.rb +0 -24
  232. data/test/rels/tc_relationship.rb +0 -52
  233. data/test/rels/tc_relationships.rb +0 -37
  234. data/test/stylesheet/tc_border.rb +0 -37
  235. data/test/stylesheet/tc_border_pr.rb +0 -32
  236. data/test/stylesheet/tc_cell_alignment.rb +0 -81
  237. data/test/stylesheet/tc_cell_protection.rb +0 -29
  238. data/test/stylesheet/tc_cell_style.rb +0 -57
  239. data/test/stylesheet/tc_color.rb +0 -43
  240. data/test/stylesheet/tc_dxf.rb +0 -81
  241. data/test/stylesheet/tc_fill.rb +0 -18
  242. data/test/stylesheet/tc_font.rb +0 -133
  243. data/test/stylesheet/tc_gradient_fill.rb +0 -72
  244. data/test/stylesheet/tc_gradient_stop.rb +0 -31
  245. data/test/stylesheet/tc_num_fmt.rb +0 -30
  246. data/test/stylesheet/tc_pattern_fill.rb +0 -43
  247. data/test/stylesheet/tc_styles.rb +0 -309
  248. data/test/stylesheet/tc_table_style.rb +0 -44
  249. data/test/stylesheet/tc_table_style_element.rb +0 -45
  250. data/test/stylesheet/tc_table_styles.rb +0 -29
  251. data/test/stylesheet/tc_xf.rb +0 -120
  252. data/test/tc_axlsx.rb +0 -109
  253. data/test/tc_helper.rb +0 -10
  254. data/test/tc_package.rb +0 -317
  255. data/test/util/tc_mime_type_utils.rb +0 -13
  256. data/test/util/tc_serialized_attributes.rb +0 -19
  257. data/test/util/tc_simple_typed_list.rb +0 -77
  258. data/test/util/tc_validators.rb +0 -210
  259. data/test/workbook/tc_defined_name.rb +0 -49
  260. data/test/workbook/tc_shared_strings_table.rb +0 -59
  261. data/test/workbook/tc_workbook.rb +0 -165
  262. data/test/workbook/tc_workbook_view.rb +0 -50
  263. data/test/workbook/worksheet/auto_filter/tc_auto_filter.rb +0 -38
  264. data/test/workbook/worksheet/auto_filter/tc_filter_column.rb +0 -76
  265. data/test/workbook/worksheet/auto_filter/tc_filters.rb +0 -50
  266. data/test/workbook/worksheet/tc_break.rb +0 -49
  267. data/test/workbook/worksheet/tc_cell.rb +0 -465
  268. data/test/workbook/worksheet/tc_cfvo.rb +0 -31
  269. data/test/workbook/worksheet/tc_col.rb +0 -93
  270. data/test/workbook/worksheet/tc_color_scale.rb +0 -58
  271. data/test/workbook/worksheet/tc_comment.rb +0 -72
  272. data/test/workbook/worksheet/tc_comments.rb +0 -57
  273. data/test/workbook/worksheet/tc_conditional_formatting.rb +0 -224
  274. data/test/workbook/worksheet/tc_data_bar.rb +0 -46
  275. data/test/workbook/worksheet/tc_data_validation.rb +0 -265
  276. data/test/workbook/worksheet/tc_date_time_converter.rb +0 -124
  277. data/test/workbook/worksheet/tc_header_footer.rb +0 -151
  278. data/test/workbook/worksheet/tc_icon_set.rb +0 -45
  279. data/test/workbook/worksheet/tc_outline_pr.rb +0 -19
  280. data/test/workbook/worksheet/tc_page_margins.rb +0 -97
  281. data/test/workbook/worksheet/tc_page_set_up_pr.rb +0 -15
  282. data/test/workbook/worksheet/tc_page_setup.rb +0 -143
  283. data/test/workbook/worksheet/tc_pane.rb +0 -54
  284. data/test/workbook/worksheet/tc_pivot_table.rb +0 -180
  285. data/test/workbook/worksheet/tc_pivot_table_cache_definition.rb +0 -62
  286. data/test/workbook/worksheet/tc_print_options.rb +0 -72
  287. data/test/workbook/worksheet/tc_protected_range.rb +0 -17
  288. data/test/workbook/worksheet/tc_rich_text.rb +0 -44
  289. data/test/workbook/worksheet/tc_rich_text_run.rb +0 -173
  290. data/test/workbook/worksheet/tc_row.rb +0 -160
  291. data/test/workbook/worksheet/tc_selection.rb +0 -55
  292. data/test/workbook/worksheet/tc_sheet_calc_pr.rb +0 -18
  293. data/test/workbook/worksheet/tc_sheet_format_pr.rb +0 -88
  294. data/test/workbook/worksheet/tc_sheet_pr.rb +0 -49
  295. data/test/workbook/worksheet/tc_sheet_protection.rb +0 -117
  296. data/test/workbook/worksheet/tc_sheet_view.rb +0 -214
  297. data/test/workbook/worksheet/tc_table.rb +0 -77
  298. data/test/workbook/worksheet/tc_table_style_info.rb +0 -53
  299. data/test/workbook/worksheet/tc_worksheet.rb +0 -632
  300. data/test/workbook/worksheet/tc_worksheet_hyperlink.rb +0 -55
@@ -1,465 +0,0 @@
1
- require 'tc_helper.rb'
2
-
3
- class TestCell < Test::Unit::TestCase
4
-
5
- def setup
6
- p = Axlsx::Package.new
7
- p.use_shared_strings = true
8
- @ws = p.workbook.add_worksheet :name=>"hmmm"
9
- p.workbook.styles.add_style :sz=>20
10
- @row = @ws.add_row
11
- @c = @row.add_cell 1, :type=>:float, :style=>1, :escape_formulas=>true
12
- data = (0..26).map { |index| index }
13
- @ws.add_row data
14
- @cAA = @ws["AA2"]
15
- end
16
-
17
- def test_initialize
18
- assert_equal(@row.cells.last, @c, "the cell was added to the row")
19
- assert_equal(@c.type, :float, "type option is applied")
20
- assert_equal(@c.style, 1, "style option is applied")
21
- assert_equal(@c.value, 1.0, "type option is applied and value is casted")
22
- assert_equal(@c.escape_formulas, true, "escape formulas option is applied")
23
- end
24
-
25
- def test_style_date_data
26
- c = Axlsx::Cell.new(@c.row, Time.now)
27
- assert_equal(Axlsx::STYLE_DATE, c.style)
28
- end
29
-
30
- def test_row
31
- assert_equal(@c.row, @row)
32
- end
33
-
34
- def test_index
35
- assert_equal(@c.index, @row.cells.index(@c))
36
- end
37
-
38
- def test_pos
39
- assert_equal(@c.pos, [@c.index, @c.row.index(@c)])
40
- end
41
-
42
- def test_r
43
- assert_equal(@c.r, "A1", "calculate cell reference")
44
- end
45
-
46
- def test_wide_r
47
- assert_equal(@cAA.r, "AA2", "calculate cell reference")
48
- end
49
-
50
- def test_r_abs
51
- assert_equal(@c.r_abs,"$A$1", "calculate absolute cell reference")
52
- assert_equal(@cAA.r_abs,"$AA$2", "needs to accept multi-digit columns")
53
- end
54
-
55
- def test_name
56
- @c.name = 'foo'
57
- assert_equal(1, @ws.workbook.defined_names.size)
58
- assert_equal('foo', @ws.workbook.defined_names.last.name)
59
- end
60
-
61
- def test_autowidth
62
- style = @c.row.worksheet.workbook.styles.add_style({:alignment => {:horizontal => :center, :vertical => :center, :wrap_text => true}} )
63
- @c.style = style
64
- assert_in_delta(6.6, @c.autowidth, 0.01)
65
- end
66
-
67
- def test_autowidth_with_bold_font_multiplier
68
- style = @c.row.worksheet.workbook.styles.add_style(b: true)
69
- @c.row.worksheet.workbook.bold_font_multiplier = 1.05
70
- @c.style = style
71
- assert_in_delta(6.93, @c.autowidth, 0.01)
72
- end
73
-
74
- def test_autowidth_with_font_scale_divisor
75
- @c.row.worksheet.workbook.font_scale_divisor = 11.0
76
- assert_in_delta(6.0, @c.autowidth, 0.01)
77
- end
78
-
79
- def test_time
80
- @c.type = :time
81
- now = DateTime.now
82
- @c.value = now
83
- assert_equal(@c.value, now.to_time)
84
- end
85
-
86
- def test_date
87
- @c.type = :date
88
- now = Time.now
89
- @c.value = now
90
- assert_equal(@c.value, now.to_date)
91
- end
92
-
93
- def test_style
94
- assert_raise(ArgumentError, "must reject invalid style indexes") { @c.style=@c.row.worksheet.workbook.styles.cellXfs.size }
95
- assert_nothing_raised("must allow valid style index changes") {@c.style=1}
96
- assert_equal(@c.style, 1)
97
- end
98
-
99
- def test_type
100
- assert_raise(ArgumentError, "type must be :string, :integer, :float, :date, :time, :boolean") { @c.type = :array }
101
- assert_nothing_raised("type can be changed") { @c.type = :string }
102
- assert_equal(@c.value, "1.0", "changing type casts the value")
103
- assert_equal(:float, @row.add_cell(1.0/10**7).type, 'properly identify exponential floats as float type')
104
- assert_equal(@row.add_cell(Time.now).type, :time, 'time should be time')
105
- assert_equal(@row.add_cell(Date.today).type, :date, 'date should be date')
106
- assert_equal(@row.add_cell(true).type, :boolean, 'boolean should be boolean')
107
- end
108
-
109
- def test_value
110
- assert_raise(ArgumentError, "type must be :string, :integer, :float, :date, :time, :boolean") { @c.type = :array }
111
- assert_nothing_raised("type can be changed") { @c.type = :string }
112
- assert_equal(@c.value, "1.0", "changing type casts the value")
113
- end
114
-
115
- def test_col_ref
116
- #TODO move to axlsx spec
117
- assert_equal(Axlsx.col_ref(0), "A")
118
- end
119
-
120
- def test_cell_type_from_value
121
- assert_equal(@c.send(:cell_type_from_value, 1.0), :float)
122
- assert_equal(@c.send(:cell_type_from_value, "1e1"), :float)
123
- assert_equal(@c.send(:cell_type_from_value, "1e#{Float::MAX_10_EXP}"), :float)
124
- assert_equal(@c.send(:cell_type_from_value, "1e#{Float::MAX_10_EXP + 1}"), :string)
125
- assert_equal(@c.send(:cell_type_from_value, "1e-1"), :float)
126
- assert_equal(@c.send(:cell_type_from_value, "1e#{Float::MIN_10_EXP}"), :float)
127
- assert_equal(@c.send(:cell_type_from_value, "1e#{Float::MIN_10_EXP - 1}"), :string)
128
- assert_equal(@c.send(:cell_type_from_value, 1), :integer)
129
- assert_equal(@c.send(:cell_type_from_value, Date.today), :date)
130
- assert_equal(@c.send(:cell_type_from_value, Time.now), :time)
131
- assert_equal(@c.send(:cell_type_from_value, []), :string)
132
- assert_equal(@c.send(:cell_type_from_value, "d"), :string)
133
- assert_equal(@c.send(:cell_type_from_value, nil), :string)
134
- assert_equal(@c.send(:cell_type_from_value, -1), :integer)
135
- assert_equal(@c.send(:cell_type_from_value, true), :boolean)
136
- assert_equal(@c.send(:cell_type_from_value, false), :boolean)
137
- assert_equal(@c.send(:cell_type_from_value, 1.0/10**6), :float)
138
- assert_equal(@c.send(:cell_type_from_value, Axlsx::RichText.new), :richtext)
139
- assert_equal(:iso_8601, @c.send(:cell_type_from_value, '2008-08-30T01:45:36.123+09:00'))
140
- end
141
-
142
- def test_cell_type_from_value_looks_like_number_but_is_not
143
- mimic_number = Class.new do
144
- def initialize(to_s_value)
145
- @to_s_value = to_s_value
146
- end
147
-
148
- def to_s
149
- @to_s_value
150
- end
151
- end
152
-
153
- number_strings = [
154
- '1',
155
- '1234567890',
156
- '1.0',
157
- '1e1',
158
- '0',
159
- "1e#{Float::MIN_10_EXP}"
160
- ]
161
-
162
- number_strings.each do |number_string|
163
- assert_equal(@c.send(:cell_type_from_value, mimic_number.new(number_string)), :string)
164
- end
165
- end
166
-
167
- def test_cast_value
168
- @c.type = :string
169
- assert_equal(@c.send(:cast_value, 1.0), "1.0")
170
- @c.type = :integer
171
- assert_equal(@c.send(:cast_value, 1.0), 1)
172
- @c.type = :float
173
- assert_equal(@c.send(:cast_value, "1.0"), 1.0)
174
- @c.type = :string
175
- assert_equal(@c.send(:cast_value, nil), nil)
176
- @c.type = :richtext
177
- assert_equal(@c.send(:cast_value, nil), nil)
178
- @c.type = :float
179
- assert_equal(@c.send(:cast_value, nil), nil)
180
- @c.type = :boolean
181
- assert_equal(@c.send(:cast_value, true), 1)
182
- assert_equal(@c.send(:cast_value, false), 0)
183
- @c.type = :iso_8601
184
- assert_equal("2012-10-10T12:24", @c.send(:cast_value, "2012-10-10T12:24"))
185
- end
186
-
187
- def test_cast_time_subclass
188
- subtime = Class.new(Time) do
189
- def to_time
190
- raise "#to_time of Time subclass should not be called"
191
- end
192
- end
193
-
194
- time = subtime.now
195
-
196
- @c.type = :time
197
- assert_equal(time, @c.send(:cast_value, time))
198
- end
199
-
200
- def test_color
201
- assert_raise(ArgumentError) { @c.color = -1.1 }
202
- assert_nothing_raised { @c.color = "FF00FF00" }
203
- assert_equal(@c.color.rgb, "FF00FF00")
204
- end
205
-
206
- def test_scheme
207
- assert_raise(ArgumentError) { @c.scheme = -1.1 }
208
- assert_nothing_raised { @c.scheme = :major }
209
- assert_equal(@c.scheme, :major)
210
- end
211
-
212
- def test_vertAlign
213
- assert_raise(ArgumentError) { @c.vertAlign = -1.1 }
214
- assert_nothing_raised { @c.vertAlign = :baseline }
215
- assert_equal(@c.vertAlign, :baseline)
216
- end
217
-
218
- def test_sz
219
- assert_raise(ArgumentError) { @c.sz = -1.1 }
220
- assert_nothing_raised { @c.sz = 12 }
221
- assert_equal(@c.sz, 12)
222
- end
223
-
224
- def test_extend
225
- assert_raise(ArgumentError) { @c.extend = -1.1 }
226
- assert_nothing_raised { @c.extend = false }
227
- assert_equal(@c.extend, false)
228
- end
229
-
230
- def test_condense
231
- assert_raise(ArgumentError) { @c.condense = -1.1 }
232
- assert_nothing_raised { @c.condense = false }
233
- assert_equal(@c.condense, false)
234
- end
235
-
236
- def test_shadow
237
- assert_raise(ArgumentError) { @c.shadow = -1.1 }
238
- assert_nothing_raised { @c.shadow = false }
239
- assert_equal(@c.shadow, false)
240
- end
241
-
242
- def test_outline
243
- assert_raise(ArgumentError) { @c.outline = -1.1 }
244
- assert_nothing_raised { @c.outline = false }
245
- assert_equal(@c.outline, false)
246
- end
247
-
248
- def test_strike
249
- assert_raise(ArgumentError) { @c.strike = -1.1 }
250
- assert_nothing_raised { @c.strike = false }
251
- assert_equal(@c.strike, false)
252
- end
253
-
254
- def test_u
255
- @c.type = :string
256
- assert_raise(ArgumentError) { @c.u = -1.1 }
257
- assert_nothing_raised { @c.u = :single }
258
- assert_equal(@c.u, :single)
259
- doc = Nokogiri::XML(@c.to_xml_string(1,1))
260
- assert(doc.xpath('//u[@val="single"]'))
261
- end
262
-
263
- def test_i
264
- assert_raise(ArgumentError) { @c.i = -1.1 }
265
- assert_nothing_raised { @c.i = false }
266
- assert_equal(@c.i, false)
267
- end
268
-
269
- def test_rFont
270
- assert_raise(ArgumentError) { @c.font_name = -1.1 }
271
- assert_nothing_raised { @c.font_name = "Arial" }
272
- assert_equal(@c.font_name, "Arial")
273
- end
274
-
275
- def test_charset
276
- assert_raise(ArgumentError) { @c.charset = -1.1 }
277
- assert_nothing_raised { @c.charset = 1 }
278
- assert_equal(@c.charset, 1)
279
- end
280
-
281
- def test_family
282
- assert_raise(ArgumentError) { @c.family = -1.1 }
283
- assert_nothing_raised { @c.family = 5 }
284
- assert_equal(@c.family, 5)
285
- end
286
-
287
- def test_b
288
- assert_raise(ArgumentError) { @c.b = -1.1 }
289
- assert_nothing_raised { @c.b = false }
290
- assert_equal(@c.b, false)
291
- end
292
-
293
- def test_merge_with_string
294
- @c.row.add_cell 2
295
- @c.row.add_cell 3
296
- @c.merge "A2"
297
- assert_equal(@c.row.worksheet.send(:merged_cells).last, "A1:A2")
298
- end
299
-
300
- def test_merge_with_cell
301
- @c.row.add_cell 2
302
- @c.row.add_cell 3
303
- @c.merge @row.cells.last
304
- assert_equal(@c.row.worksheet.send(:merged_cells).last, "A1:C1")
305
- end
306
-
307
- def test_reverse_merge_with_cell
308
- @c.row.add_cell 2
309
- @c.row.add_cell 3
310
- @row.cells.last.merge @c
311
- assert_equal(@c.row.worksheet.send(:merged_cells).last, "A1:C1")
312
- end
313
-
314
- def test_ssti
315
- assert_raise(ArgumentError, "ssti must be an unsigned integer!") { @c.send(:ssti=, -1) }
316
- @c.send :ssti=, 1
317
- assert_equal(@c.ssti, 1)
318
- end
319
-
320
- def test_plain_string
321
- @c.type = :integer
322
- assert_equal(@c.plain_string?, false)
323
-
324
- @c.type = :string
325
- @c.value = 'plain string'
326
- assert_equal(@c.plain_string?, true)
327
-
328
- @c.value = nil
329
- assert_equal(@c.plain_string?, false)
330
-
331
- @c.value = ''
332
- assert_equal(@c.plain_string?, false)
333
-
334
- @c.value = '=sum'
335
- assert_equal(@c.plain_string?, false)
336
-
337
- @c.value = 'plain string'
338
- @c.font_name = 'Arial'
339
- assert_equal(@c.plain_string?, false)
340
- end
341
-
342
- def test_to_xml_string
343
- c_xml = Nokogiri::XML(@c.to_xml_string(1,1))
344
- assert_equal(c_xml.xpath("/c[@s=1]").size, 1)
345
- end
346
-
347
- def test_to_xml_string_nil
348
- @c.value = nil
349
- c_xml = Nokogiri::XML(@c.to_xml_string(1,1))
350
- assert_equal(c_xml.xpath("/c[@s=1]").size, 1)
351
- end
352
-
353
- def test_to_xml_string_with_run
354
- # Actually quite a number of similar run styles
355
- # but the processing should be the same
356
- @c.b = true
357
- @c.type = :string
358
- @c.value = "a"
359
- @c.font_name = 'arial'
360
- @c.color = 'FF0000'
361
- c_xml = Nokogiri::XML(@c.to_xml_string(1,1))
362
- assert(c_xml.xpath("//b").any?)
363
- end
364
-
365
- def test_to_xml_string_formula
366
- p = Axlsx::Package.new
367
- ws = p.workbook.add_worksheet do |sheet|
368
- sheet.add_row ["=IF(2+2=4,4,5)"]
369
- end
370
- doc = Nokogiri::XML(ws.to_xml_string)
371
- doc.remove_namespaces!
372
- assert(doc.xpath("//f[text()='IF(2+2=4,4,5)']").any?)
373
- end
374
-
375
- def test_to_xml_string_formula_escaped
376
- p = Axlsx::Package.new
377
- ws = p.workbook.add_worksheet do |sheet|
378
- sheet.add_row ["=IF(2+2=4,4,5)"], escape_formulas: true
379
- end
380
- doc = Nokogiri::XML(ws.to_xml_string)
381
- doc.remove_namespaces!
382
- assert(doc.xpath("//t[text()='=IF(2+2=4,4,5)']").any?)
383
- end
384
-
385
- def test_to_xml_string_formula_escape_array_parameter
386
- p = Axlsx::Package.new
387
- ws = p.workbook.add_worksheet do |sheet|
388
- sheet.add_row [
389
- "=IF(2+2=4,4,5)",
390
- "=IF(13+13=4,4,5)",
391
- "=IF(99+99=4,4,5)"
392
- ], escape_formulas: [true, false, true]
393
- end
394
- doc = Nokogiri::XML(ws.to_xml_string)
395
- doc.remove_namespaces!
396
-
397
- assert(doc.xpath("//t[text()='=IF(2+2=4,4,5)']").any?)
398
- assert(doc.xpath("//f[text()='IF(13+13=4,4,5)']").any?)
399
- assert(doc.xpath("//t[text()='=IF(99+99=4,4,5)']").any?)
400
- end
401
-
402
- def test_to_xml_string_array_formula
403
- p = Axlsx::Package.new
404
- ws = p.workbook.add_worksheet do |sheet|
405
- sheet.add_row ["{=SUM(C2:C11*D2:D11)}"]
406
- end
407
- doc = Nokogiri::XML(ws.to_xml_string)
408
- doc.remove_namespaces!
409
- assert(doc.xpath("//f[text()='SUM(C2:C11*D2:D11)']").any?)
410
- assert(doc.xpath("//f[@t='array']").any?)
411
- assert(doc.xpath("//f[@ref='A1']").any?)
412
- end
413
-
414
- def test_to_xml_string_text_formula
415
- p = Axlsx::Package.new
416
- ws = p.workbook.add_worksheet do |sheet|
417
- sheet.add_row ["=1+1", "-1+1"], type: :text
418
- end
419
- doc = Nokogiri::XML(ws.to_xml_string)
420
- doc.remove_namespaces!
421
-
422
- assert(doc.xpath("//f[text()='1+1']").empty?)
423
- assert(doc.xpath("//t[text()='=1+1']").any?)
424
-
425
- assert(doc.xpath("//f[text()='1+1']").empty?)
426
- assert(doc.xpath("//t[text()='-1+1']").any?)
427
- end
428
-
429
- def test_font_size_with_custom_style_and_no_sz
430
- @c.style = @c.row.worksheet.workbook.styles.add_style :bg_color => 'FF00FF'
431
- sz = @c.send(:font_size)
432
- assert_equal(sz, @c.row.worksheet.workbook.styles.fonts.first.sz)
433
- end
434
-
435
- def test_font_size_with_bolding
436
- @c.style = @c.row.worksheet.workbook.styles.add_style :b => true
437
- assert_equal(@c.row.worksheet.workbook.styles.fonts.first.sz * 1.5, @c.send(:font_size))
438
- end
439
-
440
- def test_font_size_with_custom_sz
441
- @c.style = @c.row.worksheet.workbook.styles.add_style :sz => 52
442
- sz = @c.send(:font_size)
443
- assert_equal(sz, 52)
444
- end
445
-
446
- def test_cell_with_sz
447
- @c.sz = 25
448
- assert_equal(25, @c.send(:font_size))
449
- end
450
-
451
- def test_to_xml
452
- # TODO This could use some much more stringent testing related to the xml content generated!
453
- @ws.add_row [Time.now, Date.today, true, 1, 1.0, "text", "=sum(A1:A2)", "2013-01-13T13:31:25.123"]
454
- @ws.rows.last.cells[5].u = true
455
-
456
- schema = Nokogiri::XML::Schema(File.open(Axlsx::SML_XSD))
457
- doc = Nokogiri::XML(@ws.to_xml_string)
458
- errors = []
459
- schema.validate(doc).each do |error|
460
- errors.push error
461
- puts error.message
462
- end
463
- assert(errors.empty?, "error free validation")
464
- end
465
- end
@@ -1,31 +0,0 @@
1
- require 'tc_helper.rb'
2
-
3
- class TestCfvo < Test::Unit::TestCase
4
- def setup
5
- @cfvo = Axlsx::Cfvo.new(:val => "0", :type => :min)
6
- end
7
-
8
- def test_val
9
- assert_nothing_raised { @cfvo.val = "abc" }
10
- assert_equal(@cfvo.val, "abc")
11
- end
12
-
13
- def test_type
14
- assert_raise(ArgumentError) { @cfvo.type = :invalid_type }
15
- assert_nothing_raised { @cfvo.type = :max }
16
- assert_equal(@cfvo.type, :max)
17
- end
18
-
19
- def test_gte
20
- assert_raise(ArgumentError) { @cfvo.gte = :bob }
21
- assert_equal(@cfvo.gte, true)
22
- assert_nothing_raised { @cfvo.gte = false }
23
- assert_equal(@cfvo.gte, false)
24
- end
25
-
26
- def test_to_xml_string
27
- doc = Nokogiri::XML.parse(@cfvo.to_xml_string)
28
- assert doc.xpath(".//cfvo[@type='min'][@val=0][@gte=true]")
29
- end
30
-
31
- end
@@ -1,93 +0,0 @@
1
- require 'tc_helper.rb'
2
-
3
- class TestCol < Test::Unit::TestCase
4
-
5
- def setup
6
- @col = Axlsx::Col.new 1, 1
7
- end
8
-
9
- def test_initialize
10
- options = { :width => 12, :collapsed => true, :hidden => true, :outline_level => 1, :phonetic => true, :style => 1}
11
-
12
- col = Axlsx::Col.new 0, 0, options
13
- options.each{ |key, value| assert_equal(col.send(key.to_sym), value) }
14
- end
15
-
16
- def test_min_max_required
17
- assert_raise(ArgumentError, 'min and max must be specified when creating a new column') { Axlsx::Col.new }
18
- assert_raise(ArgumentError, 'min and max must be specified when creating a new column') { Axlsx::Col.new nil, nil }
19
- assert_nothing_raised { Axlsx::Col.new 1, 1 }
20
- end
21
-
22
- def test_bestFit
23
- assert_equal(@col.bestFit, nil)
24
- assert_raise(NoMethodError, 'bestFit is read only') { @col.bestFit = 'bob' }
25
- @col.width = 1.999
26
- assert_equal(@col.bestFit, true, 'bestFit should be true when width has been set')
27
- end
28
-
29
- def test_collapsed
30
- assert_equal(@col.collapsed, nil)
31
- assert_raise(ArgumentError, 'collapsed must be boolean(ish)') { @col.collapsed = 'bob' }
32
- assert_nothing_raised('collapsed must be boolean(ish)') { @col.collapsed = true }
33
- end
34
-
35
- def test_customWidth
36
- assert_equal(@col.customWidth, nil)
37
- @col.width = 3
38
- assert_raise(NoMethodError, 'customWidth is read only') { @col.customWidth = 3 }
39
- assert_equal(@col.customWidth, true, 'customWidth is true when width is set')
40
- end
41
-
42
- def test_widthUnderLimit
43
- @col.width = 3
44
- assert_equal(@col.width, 3, 'width is set to exact value')
45
- end
46
-
47
- def test_widthOverLimit
48
- @col.width = 31337
49
- assert_equal(@col.width, 255, 'width is set to maximum allowed value')
50
- end
51
-
52
- def test_widthSetToNil
53
- @col.width = nil
54
- assert_equal(@col.width, nil, 'width is set to unspecified value')
55
- end
56
-
57
- def test_hidden
58
- assert_equal(@col.hidden, nil)
59
- assert_raise(ArgumentError, 'hidden must be boolean(ish)') { @col.hidden = 'bob' }
60
- assert_nothing_raised(ArgumentError, 'hidden must be boolean(ish)') { @col.hidden = true }
61
- end
62
-
63
- def test_outlineLevel
64
- assert_equal(@col.outlineLevel, nil)
65
- assert_raise(ArgumentError, 'outline level cannot be negative') { @col.outlineLevel = -1 }
66
- assert_raise(ArgumentError, 'outline level cannot be greater than 7') { @col.outlineLevel = 8 }
67
- assert_nothing_raised('can set outlineLevel') { @col.outlineLevel = 1 }
68
- end
69
-
70
- def test_phonetic
71
- assert_equal(@col.phonetic, nil)
72
- assert_raise(ArgumentError, 'phonetic must be boolean(ish)') { @col.phonetic = 'bob' }
73
- assert_nothing_raised(ArgumentError, 'phonetic must be boolean(ish)') { @col.phonetic = true }
74
- end
75
-
76
- def test_to_xml_string
77
- @col.width = 100
78
- doc = Nokogiri::XML(@col.to_xml_string)
79
- assert_equal(1, doc.xpath("//col [@bestFit='#{@col.best_fit ? 1 : 0}']").size)
80
- assert_equal(1, doc.xpath("//col [@max=#{@col.max}]").size)
81
- assert_equal(1, doc.xpath("//col [@min=#{@col.min}]").size)
82
- assert_equal(1, doc.xpath("//col [@width=#{@col.width}]").size)
83
- assert_equal(1, doc.xpath("//col [@customWidth='#{@col.custom_width ? 1 : 0}']").size)
84
- end
85
-
86
- def test_style
87
- assert_equal(@col.style, nil)
88
- @col.style = 1
89
- assert_equal(@col.style, 1)
90
- #TODO check that the style specified is actually in the styles xfs collection
91
- end
92
-
93
- end
@@ -1,58 +0,0 @@
1
- require 'tc_helper.rb'
2
-
3
- class TestColorScale < Test::Unit::TestCase
4
- def setup
5
- @color_scale = Axlsx::ColorScale.new
6
- end
7
-
8
- def test_three_tone
9
- color_scale = Axlsx::ColorScale.three_tone
10
- assert_equal 3, color_scale.value_objects.size
11
- assert_equal 3, color_scale.colors.size
12
- end
13
-
14
- def test_two_tone
15
- color_scale = Axlsx::ColorScale.two_tone
16
- assert_equal 2, color_scale.value_objects.size
17
- assert_equal 2, color_scale.colors.size
18
- end
19
- def test_default_cfvo
20
- first = Axlsx::ColorScale.default_cfvos.first
21
- second = Axlsx::ColorScale.default_cfvos.last
22
- assert_equal 'FFFF7128', first[:color]
23
- assert_equal :min,first[:type]
24
- assert_equal 0, first[:val]
25
-
26
- assert_equal 'FFFFEF9C', second[:color]
27
- assert_equal :max, second[:type]
28
- assert_equal 0, second[:val]
29
- end
30
-
31
- def test_partial_default_cfvo_override
32
- first_def = {:type => :percent, :val => "10.0", :color => 'FF00FF00'}
33
- color_scale = Axlsx::ColorScale.new(first_def)
34
- assert_equal color_scale.value_objects.first.val, first_def[:val]
35
- assert_equal color_scale.value_objects.first.type, first_def[:type]
36
- assert_equal color_scale.colors.first.rgb, first_def[:color]
37
- end
38
-
39
- def test_add
40
- @color_scale.add :type => :max, :val => 5, :color => "FFDEDEDE"
41
- assert_equal(@color_scale.value_objects.size,3)
42
- assert_equal(@color_scale.colors.size,3)
43
- end
44
-
45
- def test_delete_at
46
- @color_scale.add :type => :max, :val => 5, :color => "FFDEDEDE"
47
- assert_nothing_raised {@color_scale.delete_at 2}
48
- assert_equal(@color_scale.value_objects.size,2)
49
- assert_equal(@color_scale.colors.size,2)
50
- end
51
-
52
- def test_to_xml_string
53
- doc = Nokogiri::XML.parse(@color_scale.to_xml_string)
54
- assert_equal(doc.xpath(".//colorScale//cfvo").size, 2)
55
- assert_equal(doc.xpath(".//colorScale//color").size, 2)
56
- end
57
-
58
- end