dg-axlsx 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (324) hide show
  1. checksums.yaml +7 -0
  2. data/.yardopts +9 -0
  3. data/.yardopts_guide +19 -0
  4. data/CHANGELOG.md +239 -0
  5. data/LICENSE +22 -0
  6. data/README.md +259 -0
  7. data/Rakefile +30 -0
  8. data/examples/2010_comments.rb +17 -0
  9. data/examples/anchor_swapping.rb +28 -0
  10. data/examples/auto_filter.rb +25 -0
  11. data/examples/basic_charts.rb +58 -0
  12. data/examples/chart_colors.rb +88 -0
  13. data/examples/colored_links.rb +59 -0
  14. data/examples/conditional_formatting/example_conditional_formatting.rb +89 -0
  15. data/examples/conditional_formatting/getting_barred.rb +37 -0
  16. data/examples/conditional_formatting/hitting_the_high_notes.rb +37 -0
  17. data/examples/conditional_formatting/scaled_colors.rb +39 -0
  18. data/examples/conditional_formatting/stop_and_go.rb +37 -0
  19. data/examples/data_validation.rb +50 -0
  20. data/examples/example.rb +875 -0
  21. data/examples/extractive.rb +45 -0
  22. data/examples/image1.jpeg +0 -0
  23. data/examples/ios_preview.rb +14 -0
  24. data/examples/merge_cells.rb +17 -0
  25. data/examples/no_grid_with_borders.rb +18 -0
  26. data/examples/page_setup.rb +11 -0
  27. data/examples/pivot_table.rb +39 -0
  28. data/examples/pivot_test.rb +63 -0
  29. data/examples/sheet_protection.rb +10 -0
  30. data/examples/skydrive/real_example.rb +63 -0
  31. data/examples/split.rb +16 -0
  32. data/examples/styles.rb +66 -0
  33. data/examples/underline.rb +13 -0
  34. data/examples/wrap_text.rb +21 -0
  35. data/lib/axlsx.rb +168 -0
  36. data/lib/axlsx/content_type/abstract_content_type.rb +32 -0
  37. data/lib/axlsx/content_type/content_type.rb +26 -0
  38. data/lib/axlsx/content_type/default.rb +25 -0
  39. data/lib/axlsx/content_type/override.rb +25 -0
  40. data/lib/axlsx/doc_props/app.rb +235 -0
  41. data/lib/axlsx/doc_props/core.rb +39 -0
  42. data/lib/axlsx/drawing/ax_data_source.rb +26 -0
  43. data/lib/axlsx/drawing/axes.rb +61 -0
  44. data/lib/axlsx/drawing/axis.rb +190 -0
  45. data/lib/axlsx/drawing/bar_3D_chart.rb +151 -0
  46. data/lib/axlsx/drawing/bar_series.rb +82 -0
  47. data/lib/axlsx/drawing/bubble_chart.rb +59 -0
  48. data/lib/axlsx/drawing/bubble_series.rb +63 -0
  49. data/lib/axlsx/drawing/cat_axis.rb +85 -0
  50. data/lib/axlsx/drawing/chart.rb +269 -0
  51. data/lib/axlsx/drawing/d_lbls.rb +90 -0
  52. data/lib/axlsx/drawing/drawing.rb +164 -0
  53. data/lib/axlsx/drawing/graphic_frame.rb +54 -0
  54. data/lib/axlsx/drawing/hyperlink.rb +100 -0
  55. data/lib/axlsx/drawing/line_3D_chart.rb +68 -0
  56. data/lib/axlsx/drawing/line_chart.rb +99 -0
  57. data/lib/axlsx/drawing/line_series.rb +110 -0
  58. data/lib/axlsx/drawing/marker.rb +84 -0
  59. data/lib/axlsx/drawing/num_data.rb +52 -0
  60. data/lib/axlsx/drawing/num_data_source.rb +62 -0
  61. data/lib/axlsx/drawing/num_val.rb +32 -0
  62. data/lib/axlsx/drawing/one_cell_anchor.rb +98 -0
  63. data/lib/axlsx/drawing/pic.rb +213 -0
  64. data/lib/axlsx/drawing/picture_locking.rb +42 -0
  65. data/lib/axlsx/drawing/pie_3D_chart.rb +47 -0
  66. data/lib/axlsx/drawing/pie_series.rb +74 -0
  67. data/lib/axlsx/drawing/scaling.rb +60 -0
  68. data/lib/axlsx/drawing/scatter_chart.rb +74 -0
  69. data/lib/axlsx/drawing/scatter_series.rb +84 -0
  70. data/lib/axlsx/drawing/ser_axis.rb +45 -0
  71. data/lib/axlsx/drawing/series.rb +69 -0
  72. data/lib/axlsx/drawing/series_title.rb +23 -0
  73. data/lib/axlsx/drawing/str_data.rb +42 -0
  74. data/lib/axlsx/drawing/str_val.rb +32 -0
  75. data/lib/axlsx/drawing/title.rb +78 -0
  76. data/lib/axlsx/drawing/two_cell_anchor.rb +92 -0
  77. data/lib/axlsx/drawing/val_axis.rb +37 -0
  78. data/lib/axlsx/drawing/view_3D.rb +115 -0
  79. data/lib/axlsx/drawing/vml_drawing.rb +42 -0
  80. data/lib/axlsx/drawing/vml_shape.rb +66 -0
  81. data/lib/axlsx/package.rb +363 -0
  82. data/lib/axlsx/rels/relationship.rb +129 -0
  83. data/lib/axlsx/rels/relationships.rb +29 -0
  84. data/lib/axlsx/stylesheet/border.rb +71 -0
  85. data/lib/axlsx/stylesheet/border_pr.rb +71 -0
  86. data/lib/axlsx/stylesheet/cell_alignment.rb +132 -0
  87. data/lib/axlsx/stylesheet/cell_protection.rb +41 -0
  88. data/lib/axlsx/stylesheet/cell_style.rb +72 -0
  89. data/lib/axlsx/stylesheet/color.rb +76 -0
  90. data/lib/axlsx/stylesheet/dxf.rb +79 -0
  91. data/lib/axlsx/stylesheet/fill.rb +35 -0
  92. data/lib/axlsx/stylesheet/font.rb +148 -0
  93. data/lib/axlsx/stylesheet/gradient_fill.rb +103 -0
  94. data/lib/axlsx/stylesheet/gradient_stop.rb +37 -0
  95. data/lib/axlsx/stylesheet/num_fmt.rb +77 -0
  96. data/lib/axlsx/stylesheet/pattern_fill.rb +73 -0
  97. data/lib/axlsx/stylesheet/styles.rb +420 -0
  98. data/lib/axlsx/stylesheet/table_style.rb +54 -0
  99. data/lib/axlsx/stylesheet/table_style_element.rb +77 -0
  100. data/lib/axlsx/stylesheet/table_styles.rb +46 -0
  101. data/lib/axlsx/stylesheet/xf.rb +147 -0
  102. data/lib/axlsx/util/accessors.rb +64 -0
  103. data/lib/axlsx/util/constants.rb +397 -0
  104. data/lib/axlsx/util/mime_type_utils.rb +11 -0
  105. data/lib/axlsx/util/options_parser.rb +16 -0
  106. data/lib/axlsx/util/parser.rb +44 -0
  107. data/lib/axlsx/util/serialized_attributes.rb +89 -0
  108. data/lib/axlsx/util/simple_typed_list.rb +179 -0
  109. data/lib/axlsx/util/storage.rb +146 -0
  110. data/lib/axlsx/util/string.rb +7 -0
  111. data/lib/axlsx/util/validators.rb +311 -0
  112. data/lib/axlsx/version.rb +5 -0
  113. data/lib/axlsx/workbook/defined_name.rb +128 -0
  114. data/lib/axlsx/workbook/defined_names.rb +21 -0
  115. data/lib/axlsx/workbook/shared_strings_table.rb +77 -0
  116. data/lib/axlsx/workbook/workbook.rb +361 -0
  117. data/lib/axlsx/workbook/workbook_view.rb +78 -0
  118. data/lib/axlsx/workbook/workbook_views.rb +22 -0
  119. data/lib/axlsx/workbook/worksheet/auto_filter/auto_filter.rb +77 -0
  120. data/lib/axlsx/workbook/worksheet/auto_filter/filter_column.rb +94 -0
  121. data/lib/axlsx/workbook/worksheet/auto_filter/filters.rb +244 -0
  122. data/lib/axlsx/workbook/worksheet/break.rb +35 -0
  123. data/lib/axlsx/workbook/worksheet/cell.rb +475 -0
  124. data/lib/axlsx/workbook/worksheet/cell_serializer.rb +154 -0
  125. data/lib/axlsx/workbook/worksheet/cfvo.rb +60 -0
  126. data/lib/axlsx/workbook/worksheet/cfvos.rb +15 -0
  127. data/lib/axlsx/workbook/worksheet/col.rb +141 -0
  128. data/lib/axlsx/workbook/worksheet/col_breaks.rb +35 -0
  129. data/lib/axlsx/workbook/worksheet/color_scale.rb +110 -0
  130. data/lib/axlsx/workbook/worksheet/cols.rb +20 -0
  131. data/lib/axlsx/workbook/worksheet/comment.rb +91 -0
  132. data/lib/axlsx/workbook/worksheet/comments.rb +82 -0
  133. data/lib/axlsx/workbook/worksheet/conditional_formatting.rb +82 -0
  134. data/lib/axlsx/workbook/worksheet/conditional_formatting_rule.rb +220 -0
  135. data/lib/axlsx/workbook/worksheet/conditional_formattings.rb +25 -0
  136. data/lib/axlsx/workbook/worksheet/data_bar.rb +129 -0
  137. data/lib/axlsx/workbook/worksheet/data_validation.rb +246 -0
  138. data/lib/axlsx/workbook/worksheet/data_validations.rb +28 -0
  139. data/lib/axlsx/workbook/worksheet/date_time_converter.rb +30 -0
  140. data/lib/axlsx/workbook/worksheet/dimension.rb +64 -0
  141. data/lib/axlsx/workbook/worksheet/header_footer.rb +52 -0
  142. data/lib/axlsx/workbook/worksheet/icon_set.rb +81 -0
  143. data/lib/axlsx/workbook/worksheet/merged_cells.rb +35 -0
  144. data/lib/axlsx/workbook/worksheet/page_margins.rb +97 -0
  145. data/lib/axlsx/workbook/worksheet/page_set_up_pr.rb +44 -0
  146. data/lib/axlsx/workbook/worksheet/page_setup.rb +240 -0
  147. data/lib/axlsx/workbook/worksheet/pane.rb +139 -0
  148. data/lib/axlsx/workbook/worksheet/pivot_table.rb +266 -0
  149. data/lib/axlsx/workbook/worksheet/pivot_table_cache_definition.rb +66 -0
  150. data/lib/axlsx/workbook/worksheet/pivot_tables.rb +24 -0
  151. data/lib/axlsx/workbook/worksheet/print_options.rb +39 -0
  152. data/lib/axlsx/workbook/worksheet/protected_range.rb +47 -0
  153. data/lib/axlsx/workbook/worksheet/protected_ranges.rb +34 -0
  154. data/lib/axlsx/workbook/worksheet/rich_text.rb +35 -0
  155. data/lib/axlsx/workbook/worksheet/rich_text_run.rb +254 -0
  156. data/lib/axlsx/workbook/worksheet/row.rb +154 -0
  157. data/lib/axlsx/workbook/worksheet/row_breaks.rb +33 -0
  158. data/lib/axlsx/workbook/worksheet/selection.rb +101 -0
  159. data/lib/axlsx/workbook/worksheet/sheet_calc_pr.rb +29 -0
  160. data/lib/axlsx/workbook/worksheet/sheet_data.rb +27 -0
  161. data/lib/axlsx/workbook/worksheet/sheet_format_pr.rb +60 -0
  162. data/lib/axlsx/workbook/worksheet/sheet_pr.rb +79 -0
  163. data/lib/axlsx/workbook/worksheet/sheet_protection.rb +118 -0
  164. data/lib/axlsx/workbook/worksheet/sheet_view.rb +213 -0
  165. data/lib/axlsx/workbook/worksheet/table.rb +102 -0
  166. data/lib/axlsx/workbook/worksheet/table_style_info.rb +49 -0
  167. data/lib/axlsx/workbook/worksheet/tables.rb +31 -0
  168. data/lib/axlsx/workbook/worksheet/worksheet.rb +798 -0
  169. data/lib/axlsx/workbook/worksheet/worksheet_comments.rb +58 -0
  170. data/lib/axlsx/workbook/worksheet/worksheet_drawing.rb +58 -0
  171. data/lib/axlsx/workbook/worksheet/worksheet_hyperlink.rb +74 -0
  172. data/lib/axlsx/workbook/worksheet/worksheet_hyperlinks.rb +38 -0
  173. data/lib/dg-axlsx.rb +1 -0
  174. data/lib/schema/dc.xsd +118 -0
  175. data/lib/schema/dcmitype.xsd +52 -0
  176. data/lib/schema/dcterms.xsd +331 -0
  177. data/lib/schema/dml-chart.xsd +1499 -0
  178. data/lib/schema/dml-chartDrawing.xsd +146 -0
  179. data/lib/schema/dml-compatibility.xsd +14 -0
  180. data/lib/schema/dml-diagram.xsd +1091 -0
  181. data/lib/schema/dml-lockedCanvas.xsd +11 -0
  182. data/lib/schema/dml-main.xsd +3048 -0
  183. data/lib/schema/dml-picture.xsd +23 -0
  184. data/lib/schema/dml-spreadsheetDrawing.xsd +185 -0
  185. data/lib/schema/dml-wordprocessingDrawing.xsd +185 -0
  186. data/lib/schema/opc-contentTypes.xsd +42 -0
  187. data/lib/schema/opc-coreProperties.xsd +54 -0
  188. data/lib/schema/opc-digSig.xsd +49 -0
  189. data/lib/schema/opc-relationships.xsd +33 -0
  190. data/lib/schema/pml.xsd +1676 -0
  191. data/lib/schema/shared-additionalCharacteristics.xsd +28 -0
  192. data/lib/schema/shared-bibliography.xsd +144 -0
  193. data/lib/schema/shared-commonSimpleTypes.xsd +166 -0
  194. data/lib/schema/shared-customXmlDataProperties.xsd +25 -0
  195. data/lib/schema/shared-customXmlSchemaProperties.xsd +18 -0
  196. data/lib/schema/shared-documentPropertiesCustom.xsd +59 -0
  197. data/lib/schema/shared-documentPropertiesExtended.xsd +56 -0
  198. data/lib/schema/shared-documentPropertiesVariantTypes.xsd +195 -0
  199. data/lib/schema/shared-math.xsd +582 -0
  200. data/lib/schema/shared-relationshipReference.xsd +25 -0
  201. data/lib/schema/sml.xsd +4434 -0
  202. data/lib/schema/vml-main.xsd +569 -0
  203. data/lib/schema/vml-officeDrawing.xsd +509 -0
  204. data/lib/schema/vml-presentationDrawing.xsd +12 -0
  205. data/lib/schema/vml-spreadsheetDrawing.xsd +108 -0
  206. data/lib/schema/vml-wordprocessingDrawing.xsd +96 -0
  207. data/lib/schema/wml.xsd +3644 -0
  208. data/lib/schema/xml.xsd +116 -0
  209. data/test/benchmark.rb +72 -0
  210. data/test/content_type/tc_content_type.rb +76 -0
  211. data/test/content_type/tc_default.rb +16 -0
  212. data/test/content_type/tc_override.rb +14 -0
  213. data/test/doc_props/tc_app.rb +43 -0
  214. data/test/doc_props/tc_core.rb +42 -0
  215. data/test/drawing/tc_axes.rb +8 -0
  216. data/test/drawing/tc_axis.rb +112 -0
  217. data/test/drawing/tc_bar_3D_chart.rb +71 -0
  218. data/test/drawing/tc_bar_series.rb +37 -0
  219. data/test/drawing/tc_bubble_chart.rb +44 -0
  220. data/test/drawing/tc_bubble_series.rb +21 -0
  221. data/test/drawing/tc_cat_axis.rb +31 -0
  222. data/test/drawing/tc_cat_axis_data.rb +27 -0
  223. data/test/drawing/tc_chart.rb +110 -0
  224. data/test/drawing/tc_d_lbls.rb +57 -0
  225. data/test/drawing/tc_data_source.rb +23 -0
  226. data/test/drawing/tc_drawing.rb +80 -0
  227. data/test/drawing/tc_graphic_frame.rb +27 -0
  228. data/test/drawing/tc_hyperlink.rb +64 -0
  229. data/test/drawing/tc_line_3d_chart.rb +47 -0
  230. data/test/drawing/tc_line_chart.rb +39 -0
  231. data/test/drawing/tc_line_series.rb +71 -0
  232. data/test/drawing/tc_marker.rb +44 -0
  233. data/test/drawing/tc_named_axis_data.rb +27 -0
  234. data/test/drawing/tc_num_data.rb +31 -0
  235. data/test/drawing/tc_num_val.rb +29 -0
  236. data/test/drawing/tc_one_cell_anchor.rb +66 -0
  237. data/test/drawing/tc_pic.rb +106 -0
  238. data/test/drawing/tc_picture_locking.rb +72 -0
  239. data/test/drawing/tc_pie_3D_chart.rb +28 -0
  240. data/test/drawing/tc_pie_series.rb +32 -0
  241. data/test/drawing/tc_scaling.rb +36 -0
  242. data/test/drawing/tc_scatter_chart.rb +48 -0
  243. data/test/drawing/tc_scatter_series.rb +45 -0
  244. data/test/drawing/tc_ser_axis.rb +31 -0
  245. data/test/drawing/tc_series.rb +23 -0
  246. data/test/drawing/tc_series_title.rb +33 -0
  247. data/test/drawing/tc_str_data.rb +18 -0
  248. data/test/drawing/tc_str_val.rb +21 -0
  249. data/test/drawing/tc_title.rb +49 -0
  250. data/test/drawing/tc_two_cell_anchor.rb +36 -0
  251. data/test/drawing/tc_val_axis.rb +24 -0
  252. data/test/drawing/tc_view_3D.rb +54 -0
  253. data/test/drawing/tc_vml_drawing.rb +25 -0
  254. data/test/drawing/tc_vml_shape.rb +106 -0
  255. data/test/profile.rb +24 -0
  256. data/test/rels/tc_relationship.rb +44 -0
  257. data/test/rels/tc_relationships.rb +37 -0
  258. data/test/stylesheet/tc_border.rb +37 -0
  259. data/test/stylesheet/tc_border_pr.rb +32 -0
  260. data/test/stylesheet/tc_cell_alignment.rb +81 -0
  261. data/test/stylesheet/tc_cell_protection.rb +29 -0
  262. data/test/stylesheet/tc_cell_style.rb +57 -0
  263. data/test/stylesheet/tc_color.rb +43 -0
  264. data/test/stylesheet/tc_dxf.rb +81 -0
  265. data/test/stylesheet/tc_fill.rb +18 -0
  266. data/test/stylesheet/tc_font.rb +121 -0
  267. data/test/stylesheet/tc_gradient_fill.rb +72 -0
  268. data/test/stylesheet/tc_gradient_stop.rb +31 -0
  269. data/test/stylesheet/tc_num_fmt.rb +30 -0
  270. data/test/stylesheet/tc_pattern_fill.rb +43 -0
  271. data/test/stylesheet/tc_styles.rb +235 -0
  272. data/test/stylesheet/tc_table_style.rb +44 -0
  273. data/test/stylesheet/tc_table_style_element.rb +45 -0
  274. data/test/stylesheet/tc_table_styles.rb +29 -0
  275. data/test/stylesheet/tc_xf.rb +120 -0
  276. data/test/tc_axlsx.rb +72 -0
  277. data/test/tc_helper.rb +10 -0
  278. data/test/tc_package.rb +233 -0
  279. data/test/util/tc_mime_type_utils.rb +13 -0
  280. data/test/util/tc_serialized_attributes.rb +19 -0
  281. data/test/util/tc_simple_typed_list.rb +77 -0
  282. data/test/util/tc_validators.rb +210 -0
  283. data/test/workbook/tc_defined_name.rb +49 -0
  284. data/test/workbook/tc_shared_strings_table.rb +58 -0
  285. data/test/workbook/tc_workbook.rb +139 -0
  286. data/test/workbook/tc_workbook_view.rb +50 -0
  287. data/test/workbook/worksheet/auto_filter/tc_auto_filter.rb +38 -0
  288. data/test/workbook/worksheet/auto_filter/tc_filter_column.rb +76 -0
  289. data/test/workbook/worksheet/auto_filter/tc_filters.rb +50 -0
  290. data/test/workbook/worksheet/tc_break.rb +49 -0
  291. data/test/workbook/worksheet/tc_cell.rb +358 -0
  292. data/test/workbook/worksheet/tc_cfvo.rb +31 -0
  293. data/test/workbook/worksheet/tc_col.rb +78 -0
  294. data/test/workbook/worksheet/tc_color_scale.rb +58 -0
  295. data/test/workbook/worksheet/tc_comment.rb +72 -0
  296. data/test/workbook/worksheet/tc_comments.rb +57 -0
  297. data/test/workbook/worksheet/tc_conditional_formatting.rb +224 -0
  298. data/test/workbook/worksheet/tc_data_bar.rb +46 -0
  299. data/test/workbook/worksheet/tc_data_validation.rb +265 -0
  300. data/test/workbook/worksheet/tc_date_time_converter.rb +124 -0
  301. data/test/workbook/worksheet/tc_header_footer.rb +151 -0
  302. data/test/workbook/worksheet/tc_icon_set.rb +45 -0
  303. data/test/workbook/worksheet/tc_page_margins.rb +97 -0
  304. data/test/workbook/worksheet/tc_page_set_up_pr.rb +15 -0
  305. data/test/workbook/worksheet/tc_page_setup.rb +143 -0
  306. data/test/workbook/worksheet/tc_pane.rb +54 -0
  307. data/test/workbook/worksheet/tc_pivot_table.rb +120 -0
  308. data/test/workbook/worksheet/tc_pivot_table_cache_definition.rb +54 -0
  309. data/test/workbook/worksheet/tc_print_options.rb +72 -0
  310. data/test/workbook/worksheet/tc_protected_range.rb +17 -0
  311. data/test/workbook/worksheet/tc_rich_text.rb +44 -0
  312. data/test/workbook/worksheet/tc_rich_text_run.rb +172 -0
  313. data/test/workbook/worksheet/tc_row.rb +117 -0
  314. data/test/workbook/worksheet/tc_selection.rb +55 -0
  315. data/test/workbook/worksheet/tc_sheet_calc_pr.rb +18 -0
  316. data/test/workbook/worksheet/tc_sheet_format_pr.rb +88 -0
  317. data/test/workbook/worksheet/tc_sheet_pr.rb +49 -0
  318. data/test/workbook/worksheet/tc_sheet_protection.rb +117 -0
  319. data/test/workbook/worksheet/tc_sheet_view.rb +214 -0
  320. data/test/workbook/worksheet/tc_table.rb +68 -0
  321. data/test/workbook/worksheet/tc_table_style_info.rb +53 -0
  322. data/test/workbook/worksheet/tc_worksheet.rb +577 -0
  323. data/test/workbook/worksheet/tc_worksheet_hyperlink.rb +55 -0
  324. metadata +583 -0
@@ -0,0 +1,72 @@
1
+ require 'tc_helper.rb'
2
+
3
+ class TestGradientFill < Test::Unit::TestCase
4
+
5
+ def setup
6
+ @item = Axlsx::GradientFill.new
7
+ end
8
+
9
+ def teardown
10
+ end
11
+
12
+
13
+ def test_initialiation
14
+ assert_equal(@item.type, :linear)
15
+ assert_equal(@item.degree, nil)
16
+ assert_equal(@item.left, nil)
17
+ assert_equal(@item.right, nil)
18
+ assert_equal(@item.top, nil)
19
+ assert_equal(@item.bottom, nil)
20
+ assert(@item.stop.is_a?(Axlsx::SimpleTypedList))
21
+ end
22
+
23
+ def test_type
24
+ assert_raise(ArgumentError) { @item.type = 7 }
25
+ assert_nothing_raised { @item.type = :path }
26
+ assert_equal(@item.type, :path)
27
+ end
28
+
29
+ def test_degree
30
+ assert_raise(ArgumentError) { @item.degree = -7 }
31
+ assert_nothing_raised { @item.degree = 5.0 }
32
+ assert_equal(@item.degree, 5.0)
33
+ end
34
+
35
+ def test_left
36
+ assert_raise(ArgumentError) { @item.left = -1.1 }
37
+ assert_nothing_raised { @item.left = 1.0 }
38
+ assert_equal(@item.left, 1.0)
39
+ end
40
+
41
+ def test_right
42
+ assert_raise(ArgumentError) { @item.right = -1.1 }
43
+ assert_nothing_raised { @item.right = 0.5 }
44
+ assert_equal(@item.right, 0.5)
45
+ end
46
+
47
+ def test_top
48
+ assert_raise(ArgumentError) { @item.top = -1.1 }
49
+ assert_nothing_raised { @item.top = 1.0 }
50
+ assert_equal(@item.top, 1.0)
51
+ end
52
+
53
+ def test_bottom
54
+ assert_raise(ArgumentError) { @item.bottom = -1.1 }
55
+ assert_nothing_raised { @item.bottom = 0.0 }
56
+ assert_equal(@item.bottom, 0.0)
57
+ end
58
+
59
+ def test_stop
60
+ @item.stop << Axlsx::GradientStop.new(Axlsx::Color.new(:rgb=>"00000000"), 0.5)
61
+ assert(@item.stop.size == 1)
62
+ assert(@item.stop.last.is_a?(Axlsx::GradientStop))
63
+ end
64
+
65
+ def test_to_xml_string
66
+ @item.stop << Axlsx::GradientStop.new(Axlsx::Color.new(:rgb => "000000"), 0.5)
67
+ @item.stop << Axlsx::GradientStop.new(Axlsx::Color.new(:rgb => "FFFFFF"), 0.5)
68
+ @item.type = :path
69
+ doc = Nokogiri::XML(@item.to_xml_string)
70
+ assert(doc.xpath("//color[@rgb='FF000000']"))
71
+ end
72
+ end
@@ -0,0 +1,31 @@
1
+ require 'tc_helper.rb'
2
+
3
+ class TestGradientStop < Test::Unit::TestCase
4
+
5
+ def setup
6
+ @item = Axlsx::GradientStop.new(Axlsx::Color.new(:rgb=>"FFFF0000"), 1.0)
7
+ end
8
+
9
+ def teardown
10
+ end
11
+
12
+
13
+ def test_initialiation
14
+ assert_equal(@item.color.rgb, "FFFF0000")
15
+ assert_equal(@item.position, 1.0)
16
+ end
17
+
18
+ def test_position
19
+ assert_raise(ArgumentError) { @item.position = -1.1 }
20
+ assert_nothing_raised { @item.position = 0.0 }
21
+ assert_equal(@item.position, 0.0)
22
+ end
23
+
24
+ def test_color
25
+ assert_raise(ArgumentError) { @item.color = nil }
26
+ color = Axlsx::Color.new(:rgb=>"FF0000FF")
27
+ @item.color = color
28
+ assert_equal(@item.color.rgb, "FF0000FF")
29
+ end
30
+
31
+ end
@@ -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