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,30 @@
1
+ require 'tc_helper.rb'
2
+
3
+ class TestNumFmt < Test::Unit::TestCase
4
+
5
+ def setup
6
+ @item = Axlsx::NumFmt.new
7
+ end
8
+
9
+ def teardown
10
+ end
11
+
12
+
13
+ def test_initialiation
14
+ assert_equal(@item.numFmtId, 0)
15
+ assert_equal(@item.formatCode, "")
16
+ end
17
+
18
+ def test_numFmtId
19
+ assert_raise(ArgumentError) { @item.numFmtId = -1.1 }
20
+ assert_nothing_raised { @item.numFmtId = 2 }
21
+ assert_equal(@item.numFmtId, 2)
22
+ end
23
+
24
+ def test_fomatCode
25
+ assert_raise(ArgumentError) { @item.formatCode = -1.1 }
26
+ assert_nothing_raised { @item.formatCode = "0" }
27
+ assert_equal(@item.formatCode, "0")
28
+ end
29
+
30
+ end
@@ -0,0 +1,43 @@
1
+ require 'tc_helper.rb'
2
+
3
+ class TestPatternFill < Test::Unit::TestCase
4
+
5
+ def setup
6
+ @item = Axlsx::PatternFill.new
7
+ end
8
+
9
+ def teardown
10
+ end
11
+
12
+
13
+ def test_initialiation
14
+ assert_equal(@item.patternType, :none)
15
+ assert_equal(@item.bgColor, nil)
16
+ assert_equal(@item.fgColor, nil)
17
+ end
18
+
19
+ def test_bgColor
20
+ assert_raise(ArgumentError) { @item.bgColor = -1.1 }
21
+ assert_nothing_raised { @item.bgColor = Axlsx::Color.new }
22
+ assert_equal(@item.bgColor.rgb, "FF000000")
23
+ end
24
+
25
+ def test_fgColor
26
+ assert_raise(ArgumentError) { @item.fgColor = -1.1 }
27
+ assert_nothing_raised { @item.fgColor = Axlsx::Color.new }
28
+ assert_equal(@item.fgColor.rgb, "FF000000")
29
+ end
30
+
31
+ def test_pattern_type
32
+ assert_raise(ArgumentError) { @item.patternType = -1.1 }
33
+ assert_nothing_raised { @item.patternType = :lightUp }
34
+ assert_equal(@item.patternType, :lightUp)
35
+ end
36
+
37
+ def test_to_xml_string
38
+ @item = Axlsx::PatternFill.new :bgColor => Axlsx::Color.new(:rgb => "FF0000"), :fgColor => Axlsx::Color.new(:rgb=>"00FF00")
39
+ doc = Nokogiri::XML(@item.to_xml_string)
40
+ assert(doc.xpath('//color[@rgb="FFFF0000"]'))
41
+ assert(doc.xpath('//color[@rgb="FF00FF00"]'))
42
+ end
43
+ end
@@ -0,0 +1,235 @@
1
+ require 'tc_helper.rb'
2
+
3
+ class TestStyles < Test::Unit::TestCase
4
+ def setup
5
+ @styles = Axlsx::Styles.new
6
+ end
7
+ def teardown
8
+ end
9
+
10
+ def test_valid_document
11
+ schema = Nokogiri::XML::Schema(File.open(Axlsx::SML_XSD))
12
+ doc = Nokogiri::XML(@styles.to_xml_string)
13
+ errors = []
14
+ schema.validate(doc).each do |error|
15
+ errors.push error
16
+ puts error.message
17
+ end
18
+ assert(errors.size == 0)
19
+ end
20
+ def test_add_style_border_hash
21
+ border_count = @styles.borders.size
22
+ @styles.add_style :border => {:style => :thin, :color => "FFFF0000"}
23
+ assert_equal(@styles.borders.size, border_count + 1)
24
+ assert_equal(@styles.borders.last.prs.last.color.rgb, "FFFF0000")
25
+ assert_raise(ArgumentError) { @styles.add_style :border => {:color => "FFFF0000"} }
26
+ assert_equal @styles.borders.last.prs.size, 4
27
+ end
28
+
29
+ def test_add_style_border_edges
30
+ @styles.add_style :border => { :style => :thin, :color => "0000FFFF", :edges => [:top, :bottom] }
31
+ parts = @styles.borders.last.prs
32
+ parts.each { |pr| assert_equal(pr.color.rgb, "0000FFFF", "Style is applied to #{pr.name} properly") }
33
+ assert((parts.map { |pr| pr.name.to_s }.sort && ['bottom', 'top']).size == 2, "specify two edges, and you get two border prs")
34
+ end
35
+
36
+ def test_do_not_alter_options_in_add_style
37
+ #This should test all options, but for now - just the bits that we know caused some pain
38
+ options = { :border => { :style => :thin, :color =>"FF000000" } }
39
+ @styles.add_style options
40
+ assert_equal options[:border][:style], :thin, 'thin style is stil in option'
41
+ assert_equal options[:border][:color], "FF000000", 'color is stil in option'
42
+ end
43
+
44
+ def test_parse_num_fmt
45
+ f_code = {:format_code => "YYYY/MM"}
46
+ num_fmt = {:num_fmt => 5}
47
+ assert_equal(@styles.parse_num_fmt_options, nil, 'noop if neither :format_code or :num_fmt exist')
48
+ max = @styles.numFmts.map{ |nf| nf.numFmtId }.max
49
+ @styles.parse_num_fmt_options(f_code)
50
+ assert_equal(@styles.numFmts.last.numFmtId, max + 1, "new numfmts gets next available id")
51
+ assert(@styles.parse_num_fmt_options(num_fmt).is_a?(Integer), "Should return the provided num_fmt if not dxf")
52
+ assert(@styles.parse_num_fmt_options(num_fmt.merge({:type => :dxf})).is_a?(Axlsx::NumFmt), "Makes a new NumFmt if dxf")
53
+ end
54
+
55
+ def test_parse_border_options_hash_required_keys
56
+ assert_raise(ArgumentError, "Require color key") { @styles.parse_border_options(:border => { :style => :thin }) }
57
+ assert_raise(ArgumentError, "Require style key") { @styles.parse_border_options(:border => { :color => "FF0d0d0d" }) }
58
+ assert_nothing_raised { @styles.parse_border_options(:border => { :style => :thin, :color => "FF000000"} ) }
59
+ end
60
+
61
+ def test_parse_border_basic_options
62
+ b_opts = {:border => { :diagonalUp => 1, :edges => [:left, :right], :color => "FFDADADA", :style => :thick } }
63
+ b = @styles.parse_border_options b_opts
64
+ assert(b.is_a? Integer)
65
+ assert_equal(@styles.parse_border_options(b_opts.merge({:type => :dxf})).class,Axlsx::Border)
66
+ assert(@styles.borders.last.diagonalUp == 1, "border options are passed in to the initializer")
67
+ end
68
+
69
+ def test_parse_border_options_edges
70
+ b_opts = {:border => { :diagonalUp => 1, :edges => [:left, :right], :color => "FFDADADA", :style => :thick } }
71
+ @styles.parse_border_options b_opts
72
+ b = @styles.borders.last
73
+ left = b.prs.select { |bpr| bpr.name == :left }[0]
74
+ right = b.prs.select { |bpr| bpr.name == :right }[0]
75
+ top = b.prs.select { |bpr| bpr.name == :top }[0]
76
+ bottom = b.prs.select { |bpr| bpr.name == :bottom }[0]
77
+ assert_equal(top, nil, "unspecified top edge should not be created")
78
+ assert_equal(bottom, nil, "unspecified bottom edge should not be created")
79
+ assert(left.is_a?(Axlsx::BorderPr), "specified left edge is set")
80
+ assert(right.is_a?(Axlsx::BorderPr), "specified right edge is set")
81
+ assert_equal(left.style,right.style, "edge parts have the same style")
82
+ assert_equal(left.style, :thick, "the style is THICK")
83
+ assert_equal(right.color.rgb,left.color.rgb, "edge parts are colors are the same")
84
+ assert_equal(right.color.rgb,"FFDADADA", "edge color rgb is correct")
85
+ end
86
+
87
+ def test_parse_border_options_noop
88
+ assert_equal(@styles.parse_border_options({}), nil, "noop if the border key is not in options")
89
+ end
90
+
91
+ def test_parse_border_options_integer_xf
92
+ assert_equal(@styles.parse_border_options(:border => 1), 1)
93
+ assert_raise(ArgumentError, "unknown border index") {@styles.parse_border_options(:border => 100) }
94
+ end
95
+
96
+ def test_parse_border_options_integer_dxf
97
+ b_opts = { :border => { :edges => [:left, :right], :color => "FFFFFFFF", :style=> :thick } }
98
+ b = @styles.parse_border_options(b_opts)
99
+ b2 = @styles.parse_border_options(:border => b, :type => :dxf)
100
+ assert(b2.is_a?(Axlsx::Border), "Cloned existing border object")
101
+ end
102
+
103
+ def test_parse_alignment_options
104
+ assert_equal(@styles.parse_alignment_options {}, nil, "noop if :alignment is not set")
105
+ assert(@styles.parse_alignment_options(:alignment => {}).is_a?(Axlsx::CellAlignment))
106
+ end
107
+
108
+ def test_parse_font_using_defaults
109
+ original = @styles.fonts.first
110
+ @styles.add_style :b => 1, :sz => 99
111
+ created = @styles.fonts.last
112
+ original_attributes = original.instance_values
113
+ assert_equal(1, created.b)
114
+ assert_equal(99, created.sz)
115
+ copied = original_attributes.reject{ |key, value| %w(b sz).include? key }
116
+ copied.each do |key, value|
117
+ assert_equal(created.instance_values[key], value)
118
+ end
119
+ end
120
+
121
+ def test_parse_font_options
122
+ options = {
123
+ :fg_color => "FF050505",
124
+ :sz => 20,
125
+ :b => 1,
126
+ :i => 1,
127
+ :u => 1,
128
+ :strike => 1,
129
+ :outline => 1,
130
+ :shadow => 1,
131
+ :charset => 9,
132
+ :family => 1,
133
+ :font_name => "woot font"
134
+ }
135
+ assert_equal(@styles.parse_font_options {}, nil, "noop if no font keys are set")
136
+ assert_equal(@styles.parse_font_options(:b=>1).class, Fixnum, "return index of font if not :dxf type")
137
+ assert_equal(@styles.parse_font_options(:b=>1, :type => :dxf).class, Axlsx::Font, "return font object if :dxf type")
138
+
139
+ f = @styles.parse_font_options(options.merge(:type => :dxf))
140
+ color = options.delete(:fg_color)
141
+ options[:name] = options.delete(:font_name)
142
+ options.each do |key, value|
143
+ assert_equal(f.send(key), value, "assert that #{key} was parsed")
144
+ end
145
+ assert_equal(f.color.rgb, color)
146
+ end
147
+
148
+ def test_parse_fill_options
149
+ assert_equal(@styles.parse_fill_options {}, nil, "noop if no fill keys are set")
150
+ assert_equal(@styles.parse_fill_options(:bg_color => "DE").class, Fixnum, "return index of fill if not :dxf type")
151
+ assert_equal(@styles.parse_fill_options(:bg_color => "DE", :type => :dxf).class, Axlsx::Fill, "return fill object if :dxf type")
152
+ f = @styles.parse_fill_options(:bg_color => "DE", :type => :dxf)
153
+ assert(f.fill_type.bgColor.rgb == "FFDEDEDE")
154
+ end
155
+
156
+ def test_parse_protection_options
157
+ assert_equal(@styles.parse_protection_options {}, nil, "noop if no protection keys are set")
158
+ assert_equal(@styles.parse_protection_options(:hidden => 1).class, Axlsx::CellProtection, "creates a new cell protection object")
159
+ end
160
+
161
+ def test_add_style
162
+ fill_count = @styles.fills.size
163
+ font_count = @styles.fonts.size
164
+ xf_count = @styles.cellXfs.size
165
+
166
+ @styles.add_style :bg_color=>"FF000000", :fg_color=>"FFFFFFFF", :sz=>13, :num_fmt=>Axlsx::NUM_FMT_PERCENT, :alignment=>{:horizontal=>:left}, :border=>Axlsx::STYLE_THIN_BORDER, :hidden=>true, :locked=>true
167
+ assert_equal(@styles.fills.size, fill_count+1)
168
+ assert_equal(@styles.fonts.size, font_count+1)
169
+ assert_equal(@styles.cellXfs.size, xf_count+1)
170
+ xf = @styles.cellXfs.last
171
+ assert_equal(xf.fillId, (@styles.fills.size-1), "points to the last created fill")
172
+ assert_equal(@styles.fills.last.fill_type.fgColor.rgb, "FF000000", "fill created with color")
173
+
174
+ assert_equal(xf.fontId, (@styles.fonts.size-1), "points to the last created font")
175
+ assert_equal(@styles.fonts.last.sz, 13, "font sz applied")
176
+ assert_equal(@styles.fonts.last.color.rgb, "FFFFFFFF", "font color applied")
177
+
178
+ assert_equal(xf.borderId, Axlsx::STYLE_THIN_BORDER, "border id is set")
179
+ assert_equal(xf.numFmtId, Axlsx::NUM_FMT_PERCENT, "number format id is set")
180
+
181
+ assert(xf.alignment.is_a?(Axlsx::CellAlignment), "alignment was created")
182
+ assert_equal(xf.alignment.horizontal, :left, "horizontal alignment applied")
183
+ assert_equal(xf.protection.hidden, true, "hidden protection set")
184
+ assert_equal(xf.protection.locked, true, "cell locking set")
185
+ assert_raise(ArgumentError, "should reject invalid borderId") { @styles.add_style :border => 2 }
186
+
187
+
188
+ assert_equal(xf.applyProtection, true, "protection applied")
189
+ assert_equal(xf.applyBorder, true, "border applied")
190
+ assert_equal(xf.applyNumberFormat,true, "number format applied")
191
+ assert_equal(xf.applyAlignment, true, "alignment applied")
192
+ end
193
+
194
+ def test_basic_add_style_dxf
195
+ border_count = @styles.borders.size
196
+ @styles.add_style :border => {:style => :thin, :color => "FFFF0000"}, :type => :dxf
197
+ assert_equal(@styles.borders.size, border_count, "styles borders not affected")
198
+ assert_equal(@styles.dxfs.last.border.prs.last.color.rgb, "FFFF0000")
199
+ assert_raise(ArgumentError) { @styles.add_style :border => {:color => "FFFF0000"}, :type => :dxf }
200
+ assert_equal @styles.borders.last.prs.size, 4
201
+ end
202
+
203
+ def test_add_style_dxf
204
+ fill_count = @styles.fills.size
205
+ font_count = @styles.fonts.size
206
+ dxf_count = @styles.dxfs.size
207
+
208
+ style = @styles.add_style :bg_color=>"FF000000", :fg_color=>"FFFFFFFF", :sz=>13, :alignment=>{:horizontal=>:left}, :border=>{:style => :thin, :color => "FFFF0000"}, :hidden=>true, :locked=>true, :type => :dxf
209
+ assert_equal(@styles.dxfs.size, dxf_count+1)
210
+ assert_equal(0, style, "returns the zero-based dxfId")
211
+
212
+ dxf = @styles.dxfs.last
213
+ assert_equal(@styles.dxfs.last.fill.fill_type.bgColor.rgb, "FF000000", "fill created with color")
214
+
215
+ assert_equal(font_count, (@styles.fonts.size), "font not created under styles")
216
+ assert_equal(fill_count, (@styles.fills.size), "fill not created under styles")
217
+
218
+ assert(dxf.border.is_a?(Axlsx::Border), "border is set")
219
+ assert_equal(nil, dxf.numFmt, "number format is not set")
220
+
221
+ assert(dxf.alignment.is_a?(Axlsx::CellAlignment), "alignment was created")
222
+ assert_equal(dxf.alignment.horizontal, :left, "horizontal alignment applied")
223
+ assert_equal(dxf.protection.hidden, true, "hidden protection set")
224
+ assert_equal(dxf.protection.locked, true, "cell locking set")
225
+ assert_raise(ArgumentError, "should reject invalid borderId") { @styles.add_style :border => 3 }
226
+ end
227
+
228
+ def test_multiple_dxf
229
+ # add a second style
230
+ style = @styles.add_style :bg_color=>"00000000", :fg_color=>"FFFFFFFF", :sz=>13, :alignment=>{:horizontal=>:left}, :border=>{:style => :thin, :color => "FFFF0000"}, :hidden=>true, :locked=>true, :type => :dxf
231
+ assert_equal(0, style, "returns the first dxfId")
232
+ style = @styles.add_style :bg_color=>"FF000000", :fg_color=>"FFFFFFFF", :sz=>13, :alignment=>{:horizontal=>:left}, :border=>{:style => :thin, :color => "FFFF0000"}, :hidden=>true, :locked=>true, :type => :dxf
233
+ assert_equal(1, style, "returns the second dxfId")
234
+ end
235
+ end
@@ -0,0 +1,44 @@
1
+ require 'tc_helper.rb'
2
+
3
+ class TestTableStyle < Test::Unit::TestCase
4
+
5
+ def setup
6
+ @item = Axlsx::TableStyle.new "fisher"
7
+ end
8
+
9
+ def teardown
10
+ end
11
+
12
+ def test_initialiation
13
+ assert_equal(@item.name, "fisher")
14
+ assert_equal(@item.pivot, nil)
15
+ assert_equal(@item.table, nil)
16
+ ts = Axlsx::TableStyle.new 'price', :pivot => true, :table => true
17
+ assert_equal(ts.name, 'price')
18
+ assert_equal(ts.pivot, true)
19
+ assert_equal(ts.table, true)
20
+ end
21
+
22
+ def test_name
23
+ assert_raise(ArgumentError) { @item.name = -1.1 }
24
+ assert_nothing_raised { @item.name = "lovely table style" }
25
+ assert_equal(@item.name, "lovely table style")
26
+ end
27
+
28
+ def test_pivot
29
+ assert_raise(ArgumentError) { @item.pivot = -1.1 }
30
+ assert_nothing_raised { @item.pivot = true }
31
+ assert_equal(@item.pivot, true)
32
+ end
33
+
34
+ def test_table
35
+ assert_raise(ArgumentError) { @item.table = -1.1 }
36
+ assert_nothing_raised { @item.table = true }
37
+ assert_equal(@item.table, true)
38
+ end
39
+
40
+ def test_to_xml_string
41
+ doc = Nokogiri::XML(@item.to_xml_string)
42
+ assert(doc.xpath("//tableStyle[@name='#{@item.name}']"))
43
+ end
44
+ end
@@ -0,0 +1,45 @@
1
+ require 'tc_helper.rb'
2
+
3
+ class TestTableStyleElement < Test::Unit::TestCase
4
+
5
+ def setup
6
+ @item = Axlsx::TableStyleElement.new
7
+ end
8
+
9
+ def teardown
10
+ end
11
+
12
+ def test_initialiation
13
+ assert_equal(@item.type, nil)
14
+ assert_equal(@item.size, nil)
15
+ assert_equal(@item.dxfId, nil)
16
+ options = { :type => :headerRow, :size => 10, :dxfId => 1 }
17
+
18
+ tse = Axlsx::TableStyleElement.new options
19
+ options.each { |key, value| assert_equal(tse.send(key.to_sym), value) }
20
+ end
21
+
22
+ def test_type
23
+ assert_raise(ArgumentError) { @item.type = -1.1 }
24
+ assert_nothing_raised { @item.type = :blankRow }
25
+ assert_equal(@item.type, :blankRow)
26
+ end
27
+
28
+ def test_size
29
+ assert_raise(ArgumentError) { @item.size = -1.1 }
30
+ assert_nothing_raised { @item.size = 2 }
31
+ assert_equal(@item.size, 2)
32
+ end
33
+
34
+ def test_dxfId
35
+ assert_raise(ArgumentError) { @item.dxfId = -1.1 }
36
+ assert_nothing_raised { @item.dxfId = 7 }
37
+ assert_equal(@item.dxfId, 7)
38
+ end
39
+
40
+ def test_to_xml_string
41
+ doc = Nokogiri::XML(@item.to_xml_string)
42
+ @item.type = :headerRow
43
+ assert(doc.xpath("//tableStyleElement[@type='#{@item.type.to_s}']"))
44
+ end
45
+ end
@@ -0,0 +1,29 @@
1
+ require 'tc_helper.rb'
2
+
3
+ class TestTableStyles < Test::Unit::TestCase
4
+
5
+ def setup
6
+ @item = Axlsx::TableStyles.new
7
+ end
8
+
9
+ def teardown
10
+ end
11
+
12
+ def test_initialiation
13
+ assert_equal(@item.defaultTableStyle, "TableStyleMedium9")
14
+ assert_equal(@item.defaultPivotStyle, "PivotStyleLight16")
15
+ end
16
+
17
+ def test_defaultTableStyle
18
+ assert_raise(ArgumentError) { @item.defaultTableStyle = -1.1 }
19
+ assert_nothing_raised { @item.defaultTableStyle = "anyones guess" }
20
+ assert_equal(@item.defaultTableStyle, "anyones guess")
21
+ end
22
+
23
+ def test_defaultPivotStyle
24
+ assert_raise(ArgumentError) { @item.defaultPivotStyle = -1.1 }
25
+ assert_nothing_raised { @item.defaultPivotStyle = "anyones guess" }
26
+ assert_equal(@item.defaultPivotStyle, "anyones guess")
27
+ end
28
+
29
+ end
@@ -0,0 +1,120 @@
1
+ require 'tc_helper.rb'
2
+
3
+ class TestXf < Test::Unit::TestCase
4
+
5
+ def setup
6
+ @item = Axlsx::Xf.new
7
+ end
8
+
9
+ def teardown
10
+ end
11
+
12
+ def test_initialiation
13
+ assert_equal(@item.alignment, nil)
14
+ assert_equal(@item.protection, nil)
15
+ assert_equal(@item.numFmtId, nil)
16
+ assert_equal(@item.fontId, nil)
17
+ assert_equal(@item.fillId, nil)
18
+ assert_equal(@item.borderId, nil)
19
+ assert_equal(@item.xfId, nil)
20
+ assert_equal(@item.quotePrefix, nil)
21
+ assert_equal(@item.pivotButton, nil)
22
+ assert_equal(@item.applyNumberFormat, nil)
23
+ assert_equal(@item.applyFont, nil)
24
+ assert_equal(@item.applyFill, nil)
25
+ assert_equal(@item.applyBorder, nil)
26
+ assert_equal(@item.applyAlignment, nil)
27
+ assert_equal(@item.applyProtection, nil)
28
+ end
29
+
30
+ def test_alignment
31
+ assert_raise(ArgumentError) { @item.alignment = -1.1 }
32
+ assert_nothing_raised { @item.alignment = Axlsx::CellAlignment.new }
33
+ assert(@item.alignment.is_a?(Axlsx::CellAlignment))
34
+ end
35
+
36
+ def test_protection
37
+ assert_raise(ArgumentError) { @item.protection = -1.1 }
38
+ assert_nothing_raised { @item.protection = Axlsx::CellProtection.new }
39
+ assert(@item.protection.is_a?(Axlsx::CellProtection))
40
+ end
41
+
42
+ def test_numFmtId
43
+ assert_raise(ArgumentError) { @item.numFmtId = -1.1 }
44
+ assert_nothing_raised { @item.numFmtId = 0 }
45
+ assert_equal(@item.numFmtId, 0)
46
+ end
47
+
48
+ def test_fillId
49
+ assert_raise(ArgumentError) { @item.fillId = -1.1 }
50
+ assert_nothing_raised { @item.fillId = 0 }
51
+ assert_equal(@item.fillId, 0)
52
+ end
53
+
54
+ def test_fontId
55
+ assert_raise(ArgumentError) { @item.fontId = -1.1 }
56
+ assert_nothing_raised { @item.fontId = 0 }
57
+ assert_equal(@item.fontId, 0)
58
+ end
59
+
60
+ def test_borderId
61
+ assert_raise(ArgumentError) { @item.borderId = -1.1 }
62
+ assert_nothing_raised { @item.borderId = 0 }
63
+ assert_equal(@item.borderId, 0)
64
+ end
65
+
66
+ def test_xfId
67
+ assert_raise(ArgumentError) { @item.xfId = -1.1 }
68
+ assert_nothing_raised { @item.xfId = 0 }
69
+ assert_equal(@item.xfId, 0)
70
+ end
71
+
72
+ def test_quotePrefix
73
+ assert_raise(ArgumentError) { @item.quotePrefix = -1.1 }
74
+ assert_nothing_raised { @item.quotePrefix = false }
75
+ assert_equal(@item.quotePrefix, false)
76
+ end
77
+
78
+ def test_pivotButton
79
+ assert_raise(ArgumentError) { @item.pivotButton = -1.1 }
80
+ assert_nothing_raised { @item.pivotButton = false }
81
+ assert_equal(@item.pivotButton, false)
82
+ end
83
+
84
+ def test_applyNumberFormat
85
+ assert_raise(ArgumentError) { @item.applyNumberFormat = -1.1 }
86
+ assert_nothing_raised { @item.applyNumberFormat = false }
87
+ assert_equal(@item.applyNumberFormat, false)
88
+ end
89
+
90
+ def test_applyFont
91
+ assert_raise(ArgumentError) { @item.applyFont = -1.1 }
92
+ assert_nothing_raised { @item.applyFont = false }
93
+ assert_equal(@item.applyFont, false)
94
+ end
95
+
96
+ def test_applyFill
97
+ assert_raise(ArgumentError) { @item.applyFill = -1.1 }
98
+ assert_nothing_raised { @item.applyFill = false }
99
+ assert_equal(@item.applyFill, false)
100
+ end
101
+
102
+ def test_applyBorder
103
+ assert_raise(ArgumentError) { @item.applyBorder = -1.1 }
104
+ assert_nothing_raised { @item.applyBorder = false }
105
+ assert_equal(@item.applyBorder, false)
106
+ end
107
+
108
+ def test_applyAlignment
109
+ assert_raise(ArgumentError) { @item.applyAlignment = -1.1 }
110
+ assert_nothing_raised { @item.applyAlignment = false }
111
+ assert_equal(@item.applyAlignment, false)
112
+ end
113
+
114
+ def test_applyProtection
115
+ assert_raise(ArgumentError) { @item.applyProtection = -1.1 }
116
+ assert_nothing_raised { @item.applyProtection = false }
117
+ assert_equal(@item.applyProtection, false)
118
+ end
119
+
120
+ end