l_axlsx 2.0.1

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 (321) hide show
  1. data/.yardopts +9 -0
  2. data/.yardopts_guide +19 -0
  3. data/CHANGELOG.md +239 -0
  4. data/LICENSE +22 -0
  5. data/README.md +259 -0
  6. data/Rakefile +30 -0
  7. data/examples/2010_comments.rb +17 -0
  8. data/examples/IMAGE1UP.JPEG +0 -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 +828 -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 +166 -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 +232 -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 +93 -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 +204 -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 +65 -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/options_parser.rb +16 -0
  105. data/lib/axlsx/util/parser.rb +44 -0
  106. data/lib/axlsx/util/serialized_attributes.rb +89 -0
  107. data/lib/axlsx/util/simple_typed_list.rb +179 -0
  108. data/lib/axlsx/util/storage.rb +146 -0
  109. data/lib/axlsx/util/string.rb +7 -0
  110. data/lib/axlsx/util/validators.rb +307 -0
  111. data/lib/axlsx/version.rb +5 -0
  112. data/lib/axlsx/workbook/defined_name.rb +128 -0
  113. data/lib/axlsx/workbook/defined_names.rb +21 -0
  114. data/lib/axlsx/workbook/shared_strings_table.rb +77 -0
  115. data/lib/axlsx/workbook/workbook.rb +361 -0
  116. data/lib/axlsx/workbook/workbook_view.rb +78 -0
  117. data/lib/axlsx/workbook/workbook_views.rb +22 -0
  118. data/lib/axlsx/workbook/worksheet/auto_filter/auto_filter.rb +77 -0
  119. data/lib/axlsx/workbook/worksheet/auto_filter/filter_column.rb +94 -0
  120. data/lib/axlsx/workbook/worksheet/auto_filter/filters.rb +244 -0
  121. data/lib/axlsx/workbook/worksheet/break.rb +35 -0
  122. data/lib/axlsx/workbook/worksheet/cell.rb +471 -0
  123. data/lib/axlsx/workbook/worksheet/cell_serializer.rb +154 -0
  124. data/lib/axlsx/workbook/worksheet/cfvo.rb +60 -0
  125. data/lib/axlsx/workbook/worksheet/cfvos.rb +15 -0
  126. data/lib/axlsx/workbook/worksheet/col.rb +141 -0
  127. data/lib/axlsx/workbook/worksheet/col_breaks.rb +35 -0
  128. data/lib/axlsx/workbook/worksheet/color_scale.rb +110 -0
  129. data/lib/axlsx/workbook/worksheet/cols.rb +20 -0
  130. data/lib/axlsx/workbook/worksheet/comment.rb +91 -0
  131. data/lib/axlsx/workbook/worksheet/comments.rb +82 -0
  132. data/lib/axlsx/workbook/worksheet/conditional_formatting.rb +82 -0
  133. data/lib/axlsx/workbook/worksheet/conditional_formatting_rule.rb +220 -0
  134. data/lib/axlsx/workbook/worksheet/conditional_formattings.rb +25 -0
  135. data/lib/axlsx/workbook/worksheet/data_bar.rb +129 -0
  136. data/lib/axlsx/workbook/worksheet/data_validation.rb +246 -0
  137. data/lib/axlsx/workbook/worksheet/data_validations.rb +28 -0
  138. data/lib/axlsx/workbook/worksheet/date_time_converter.rb +30 -0
  139. data/lib/axlsx/workbook/worksheet/dimension.rb +64 -0
  140. data/lib/axlsx/workbook/worksheet/header_footer.rb +52 -0
  141. data/lib/axlsx/workbook/worksheet/icon_set.rb +81 -0
  142. data/lib/axlsx/workbook/worksheet/merged_cells.rb +35 -0
  143. data/lib/axlsx/workbook/worksheet/page_margins.rb +97 -0
  144. data/lib/axlsx/workbook/worksheet/page_set_up_pr.rb +44 -0
  145. data/lib/axlsx/workbook/worksheet/page_setup.rb +240 -0
  146. data/lib/axlsx/workbook/worksheet/pane.rb +139 -0
  147. data/lib/axlsx/workbook/worksheet/pivot_table.rb +266 -0
  148. data/lib/axlsx/workbook/worksheet/pivot_table_cache_definition.rb +66 -0
  149. data/lib/axlsx/workbook/worksheet/pivot_tables.rb +24 -0
  150. data/lib/axlsx/workbook/worksheet/print_options.rb +39 -0
  151. data/lib/axlsx/workbook/worksheet/protected_range.rb +47 -0
  152. data/lib/axlsx/workbook/worksheet/protected_ranges.rb +34 -0
  153. data/lib/axlsx/workbook/worksheet/rich_text.rb +35 -0
  154. data/lib/axlsx/workbook/worksheet/rich_text_run.rb +254 -0
  155. data/lib/axlsx/workbook/worksheet/row.rb +154 -0
  156. data/lib/axlsx/workbook/worksheet/row_breaks.rb +33 -0
  157. data/lib/axlsx/workbook/worksheet/selection.rb +101 -0
  158. data/lib/axlsx/workbook/worksheet/sheet_calc_pr.rb +29 -0
  159. data/lib/axlsx/workbook/worksheet/sheet_data.rb +27 -0
  160. data/lib/axlsx/workbook/worksheet/sheet_format_pr.rb +60 -0
  161. data/lib/axlsx/workbook/worksheet/sheet_pr.rb +69 -0
  162. data/lib/axlsx/workbook/worksheet/sheet_protection.rb +118 -0
  163. data/lib/axlsx/workbook/worksheet/sheet_view.rb +213 -0
  164. data/lib/axlsx/workbook/worksheet/table.rb +102 -0
  165. data/lib/axlsx/workbook/worksheet/table_style_info.rb +49 -0
  166. data/lib/axlsx/workbook/worksheet/tables.rb +31 -0
  167. data/lib/axlsx/workbook/worksheet/worksheet.rb +798 -0
  168. data/lib/axlsx/workbook/worksheet/worksheet_comments.rb +58 -0
  169. data/lib/axlsx/workbook/worksheet/worksheet_drawing.rb +58 -0
  170. data/lib/axlsx/workbook/worksheet/worksheet_hyperlink.rb +74 -0
  171. data/lib/axlsx/workbook/worksheet/worksheet_hyperlinks.rb +38 -0
  172. data/lib/schema/dc.xsd +118 -0
  173. data/lib/schema/dcmitype.xsd +52 -0
  174. data/lib/schema/dcterms.xsd +331 -0
  175. data/lib/schema/dml-chart.xsd +1499 -0
  176. data/lib/schema/dml-chartDrawing.xsd +146 -0
  177. data/lib/schema/dml-compatibility.xsd +14 -0
  178. data/lib/schema/dml-diagram.xsd +1091 -0
  179. data/lib/schema/dml-lockedCanvas.xsd +11 -0
  180. data/lib/schema/dml-main.xsd +3048 -0
  181. data/lib/schema/dml-picture.xsd +23 -0
  182. data/lib/schema/dml-spreadsheetDrawing.xsd +185 -0
  183. data/lib/schema/dml-wordprocessingDrawing.xsd +185 -0
  184. data/lib/schema/opc-contentTypes.xsd +42 -0
  185. data/lib/schema/opc-coreProperties.xsd +54 -0
  186. data/lib/schema/opc-digSig.xsd +49 -0
  187. data/lib/schema/opc-relationships.xsd +33 -0
  188. data/lib/schema/pml.xsd +1676 -0
  189. data/lib/schema/shared-additionalCharacteristics.xsd +28 -0
  190. data/lib/schema/shared-bibliography.xsd +144 -0
  191. data/lib/schema/shared-commonSimpleTypes.xsd +166 -0
  192. data/lib/schema/shared-customXmlDataProperties.xsd +25 -0
  193. data/lib/schema/shared-customXmlSchemaProperties.xsd +18 -0
  194. data/lib/schema/shared-documentPropertiesCustom.xsd +59 -0
  195. data/lib/schema/shared-documentPropertiesExtended.xsd +56 -0
  196. data/lib/schema/shared-documentPropertiesVariantTypes.xsd +195 -0
  197. data/lib/schema/shared-math.xsd +582 -0
  198. data/lib/schema/shared-relationshipReference.xsd +25 -0
  199. data/lib/schema/sml.xsd +4434 -0
  200. data/lib/schema/vml-main.xsd +569 -0
  201. data/lib/schema/vml-officeDrawing.xsd +509 -0
  202. data/lib/schema/vml-presentationDrawing.xsd +12 -0
  203. data/lib/schema/vml-spreadsheetDrawing.xsd +108 -0
  204. data/lib/schema/vml-wordprocessingDrawing.xsd +96 -0
  205. data/lib/schema/wml.xsd +3644 -0
  206. data/lib/schema/xml.xsd +116 -0
  207. data/test/benchmark.rb +72 -0
  208. data/test/content_type/tc_content_type.rb +76 -0
  209. data/test/content_type/tc_default.rb +16 -0
  210. data/test/content_type/tc_override.rb +14 -0
  211. data/test/doc_props/tc_app.rb +43 -0
  212. data/test/doc_props/tc_core.rb +42 -0
  213. data/test/drawing/tc_axes.rb +8 -0
  214. data/test/drawing/tc_axis.rb +112 -0
  215. data/test/drawing/tc_bar_3D_chart.rb +71 -0
  216. data/test/drawing/tc_bar_series.rb +37 -0
  217. data/test/drawing/tc_bubble_chart.rb +44 -0
  218. data/test/drawing/tc_bubble_series.rb +21 -0
  219. data/test/drawing/tc_cat_axis.rb +31 -0
  220. data/test/drawing/tc_cat_axis_data.rb +27 -0
  221. data/test/drawing/tc_chart.rb +110 -0
  222. data/test/drawing/tc_d_lbls.rb +57 -0
  223. data/test/drawing/tc_data_source.rb +23 -0
  224. data/test/drawing/tc_drawing.rb +80 -0
  225. data/test/drawing/tc_graphic_frame.rb +27 -0
  226. data/test/drawing/tc_hyperlink.rb +64 -0
  227. data/test/drawing/tc_line_3d_chart.rb +47 -0
  228. data/test/drawing/tc_line_chart.rb +39 -0
  229. data/test/drawing/tc_line_series.rb +38 -0
  230. data/test/drawing/tc_marker.rb +44 -0
  231. data/test/drawing/tc_named_axis_data.rb +27 -0
  232. data/test/drawing/tc_num_data.rb +31 -0
  233. data/test/drawing/tc_num_val.rb +29 -0
  234. data/test/drawing/tc_one_cell_anchor.rb +66 -0
  235. data/test/drawing/tc_pic.rb +107 -0
  236. data/test/drawing/tc_picture_locking.rb +72 -0
  237. data/test/drawing/tc_pie_3D_chart.rb +28 -0
  238. data/test/drawing/tc_pie_series.rb +32 -0
  239. data/test/drawing/tc_scaling.rb +36 -0
  240. data/test/drawing/tc_scatter_chart.rb +48 -0
  241. data/test/drawing/tc_scatter_series.rb +21 -0
  242. data/test/drawing/tc_ser_axis.rb +31 -0
  243. data/test/drawing/tc_series.rb +23 -0
  244. data/test/drawing/tc_series_title.rb +33 -0
  245. data/test/drawing/tc_str_data.rb +18 -0
  246. data/test/drawing/tc_str_val.rb +21 -0
  247. data/test/drawing/tc_title.rb +49 -0
  248. data/test/drawing/tc_two_cell_anchor.rb +36 -0
  249. data/test/drawing/tc_val_axis.rb +24 -0
  250. data/test/drawing/tc_view_3D.rb +54 -0
  251. data/test/drawing/tc_vml_drawing.rb +25 -0
  252. data/test/drawing/tc_vml_shape.rb +106 -0
  253. data/test/profile.rb +24 -0
  254. data/test/rels/tc_relationship.rb +44 -0
  255. data/test/rels/tc_relationships.rb +37 -0
  256. data/test/stylesheet/tc_border.rb +37 -0
  257. data/test/stylesheet/tc_border_pr.rb +32 -0
  258. data/test/stylesheet/tc_cell_alignment.rb +81 -0
  259. data/test/stylesheet/tc_cell_protection.rb +29 -0
  260. data/test/stylesheet/tc_cell_style.rb +57 -0
  261. data/test/stylesheet/tc_color.rb +43 -0
  262. data/test/stylesheet/tc_dxf.rb +81 -0
  263. data/test/stylesheet/tc_fill.rb +18 -0
  264. data/test/stylesheet/tc_font.rb +121 -0
  265. data/test/stylesheet/tc_gradient_fill.rb +72 -0
  266. data/test/stylesheet/tc_gradient_stop.rb +31 -0
  267. data/test/stylesheet/tc_num_fmt.rb +30 -0
  268. data/test/stylesheet/tc_pattern_fill.rb +43 -0
  269. data/test/stylesheet/tc_styles.rb +235 -0
  270. data/test/stylesheet/tc_table_style.rb +44 -0
  271. data/test/stylesheet/tc_table_style_element.rb +45 -0
  272. data/test/stylesheet/tc_table_styles.rb +29 -0
  273. data/test/stylesheet/tc_xf.rb +120 -0
  274. data/test/tc_axlsx.rb +72 -0
  275. data/test/tc_helper.rb +10 -0
  276. data/test/tc_package.rb +233 -0
  277. data/test/util/tc_serialized_attributes.rb +19 -0
  278. data/test/util/tc_simple_typed_list.rb +77 -0
  279. data/test/util/tc_validators.rb +186 -0
  280. data/test/workbook/tc_defined_name.rb +49 -0
  281. data/test/workbook/tc_shared_strings_table.rb +44 -0
  282. data/test/workbook/tc_workbook.rb +139 -0
  283. data/test/workbook/tc_workbook_view.rb +50 -0
  284. data/test/workbook/worksheet/auto_filter/tc_auto_filter.rb +38 -0
  285. data/test/workbook/worksheet/auto_filter/tc_filter_column.rb +76 -0
  286. data/test/workbook/worksheet/auto_filter/tc_filters.rb +50 -0
  287. data/test/workbook/worksheet/tc_break.rb +49 -0
  288. data/test/workbook/worksheet/tc_cell.rb +345 -0
  289. data/test/workbook/worksheet/tc_cfvo.rb +31 -0
  290. data/test/workbook/worksheet/tc_col.rb +78 -0
  291. data/test/workbook/worksheet/tc_color_scale.rb +58 -0
  292. data/test/workbook/worksheet/tc_comment.rb +72 -0
  293. data/test/workbook/worksheet/tc_comments.rb +57 -0
  294. data/test/workbook/worksheet/tc_conditional_formatting.rb +224 -0
  295. data/test/workbook/worksheet/tc_data_bar.rb +46 -0
  296. data/test/workbook/worksheet/tc_data_validation.rb +265 -0
  297. data/test/workbook/worksheet/tc_date_time_converter.rb +124 -0
  298. data/test/workbook/worksheet/tc_header_footer.rb +151 -0
  299. data/test/workbook/worksheet/tc_icon_set.rb +45 -0
  300. data/test/workbook/worksheet/tc_page_margins.rb +97 -0
  301. data/test/workbook/worksheet/tc_page_set_up_pr.rb +15 -0
  302. data/test/workbook/worksheet/tc_page_setup.rb +143 -0
  303. data/test/workbook/worksheet/tc_pane.rb +54 -0
  304. data/test/workbook/worksheet/tc_pivot_table.rb +120 -0
  305. data/test/workbook/worksheet/tc_pivot_table_cache_definition.rb +54 -0
  306. data/test/workbook/worksheet/tc_print_options.rb +72 -0
  307. data/test/workbook/worksheet/tc_protected_range.rb +17 -0
  308. data/test/workbook/worksheet/tc_rich_text.rb +44 -0
  309. data/test/workbook/worksheet/tc_rich_text_run.rb +172 -0
  310. data/test/workbook/worksheet/tc_row.rb +117 -0
  311. data/test/workbook/worksheet/tc_selection.rb +55 -0
  312. data/test/workbook/worksheet/tc_sheet_calc_pr.rb +18 -0
  313. data/test/workbook/worksheet/tc_sheet_format_pr.rb +88 -0
  314. data/test/workbook/worksheet/tc_sheet_pr.rb +27 -0
  315. data/test/workbook/worksheet/tc_sheet_protection.rb +117 -0
  316. data/test/workbook/worksheet/tc_sheet_view.rb +214 -0
  317. data/test/workbook/worksheet/tc_table.rb +68 -0
  318. data/test/workbook/worksheet/tc_table_style_info.rb +53 -0
  319. data/test/workbook/worksheet/tc_worksheet.rb +563 -0
  320. data/test/workbook/worksheet/tc_worksheet_hyperlink.rb +55 -0
  321. metadata +583 -0
@@ -0,0 +1,49 @@
1
+ require 'tc_helper.rb'
2
+
3
+ class TestBreak < Test::Unit::TestCase
4
+
5
+ def setup
6
+ @break = Axlsx::Break.new(:id => 1, :min => 1, :max => 10, :man => true, :pt => false)
7
+ end
8
+
9
+ def test_id
10
+ assert_equal(1, @break.id)
11
+ assert_raises ArgumentError do
12
+ Axlsx::Break.new(:hoge, {:id => -1})
13
+ end
14
+ end
15
+
16
+ def test_min
17
+ assert_equal(1, @break.min)
18
+ assert_raises ArgumentError do
19
+ Axlsx::Break.new(:hoge, :min => -1)
20
+ end
21
+ end
22
+
23
+ def test_max
24
+ assert_equal(10, @break.max)
25
+ assert_raises ArgumentError do
26
+ Axlsx::Break.new(:hoge, :max => -1)
27
+ end
28
+ end
29
+
30
+
31
+ def test_man
32
+ assert_equal(true, @break.man)
33
+ assert_raises ArgumentError do
34
+ Axlsx::Break.new(:man => -1)
35
+ end
36
+ end
37
+
38
+ def test_pt
39
+ assert_equal(false, @break.pt)
40
+ assert_raises ArgumentError do
41
+ Axlsx::Break.new(:pt => -1)
42
+ end
43
+ end
44
+
45
+ def test_to_xml_string
46
+ doc = Nokogiri::XML(@break.to_xml_string)
47
+ assert_equal(doc.xpath('//brk[@id="1"][@min="1"][@max="10"][@pt=0][@man=1]').size, 1)
48
+ end
49
+ end
@@ -0,0 +1,345 @@
1
+ require 'tc_helper.rb'
2
+
3
+ class TestCell < Test::Unit::TestCase
4
+
5
+ def setup
6
+ p = Axlsx::Package.new
7
+ @ws = p.workbook.add_worksheet :name=>"hmmm"
8
+ p.workbook.styles.add_style :sz=>20
9
+ @row = @ws.add_row
10
+ @c = @row.add_cell 1, :type=>:float, :style=>1
11
+ data = (0..26).map { |index| index }
12
+ @ws.add_row data
13
+ @cAA = @ws["AA2"]
14
+ end
15
+
16
+ def test_initialize
17
+ assert_equal(@row.cells.last, @c, "the cell was added to the row")
18
+ assert_equal(@c.type, :float, "type option is applied")
19
+ assert_equal(@c.style, 1, "style option is applied")
20
+ assert_equal(@c.value, 1.0, "type option is applied and value is casted")
21
+ end
22
+
23
+ def test_style_date_data
24
+ c = Axlsx::Cell.new(@c.row, Time.now)
25
+ assert_equal(Axlsx::STYLE_DATE, c.style)
26
+ end
27
+
28
+ def test_row
29
+ assert_equal(@c.row, @row)
30
+ end
31
+
32
+ def test_index
33
+ assert_equal(@c.index, @row.cells.index(@c))
34
+ end
35
+
36
+ def test_pos
37
+ assert_equal(@c.pos, [@c.index, @c.row.index(@c)])
38
+ end
39
+
40
+ def test_r
41
+ assert_equal(@c.r, "A1", "calculate cell reference")
42
+ end
43
+
44
+ def test_wide_r
45
+ assert_equal(@cAA.r, "AA2", "calculate cell reference")
46
+ end
47
+
48
+ def test_r_abs
49
+ assert_equal(@c.r_abs,"$A$1", "calculate absolute cell reference")
50
+ assert_equal(@cAA.r_abs,"$AA$2", "needs to accept multi-digit columns")
51
+ end
52
+
53
+ def test_name
54
+ @c.name = 'foo'
55
+ assert_equal(1, @ws.workbook.defined_names.size)
56
+ assert_equal('foo', @ws.workbook.defined_names.last.name)
57
+ end
58
+
59
+ def test_style
60
+ assert_raise(ArgumentError, "must reject invalid style indexes") { @c.style=@c.row.worksheet.workbook.styles.cellXfs.size }
61
+ assert_nothing_raised("must allow valid style index changes") {@c.style=1}
62
+ assert_equal(@c.style, 1)
63
+ end
64
+
65
+ def test_type
66
+ assert_raise(ArgumentError, "type must be :string, :integer, :float, :date, :time, :boolean") { @c.type = :array }
67
+ assert_nothing_raised("type can be changed") { @c.type = :string }
68
+ assert_equal(@c.value, "1.0", "changing type casts the value")
69
+ assert_equal(:float, @row.add_cell(1.0/10**7).type, 'properly identify exponential floats as float type')
70
+ assert_equal(@row.add_cell(Time.now).type, :time, 'time should be time')
71
+ assert_equal(@row.add_cell(Date.today).type, :date, 'date should be date')
72
+ assert_equal(@row.add_cell(true).type, :boolean, 'boolean should be boolean')
73
+ end
74
+
75
+ def test_value
76
+ assert_raise(ArgumentError, "type must be :string, :integer, :float, :date, :time, :boolean") { @c.type = :array }
77
+ assert_nothing_raised("type can be changed") { @c.type = :string }
78
+ assert_equal(@c.value, "1.0", "changing type casts the value")
79
+ end
80
+
81
+ def test_col_ref
82
+ #TODO move to axlsx spec
83
+ assert_equal(Axlsx.col_ref(0), "A")
84
+ end
85
+
86
+ def test_cell_type_from_value
87
+ assert_equal(@c.send(:cell_type_from_value, 1.0), :float)
88
+ assert_equal(@c.send(:cell_type_from_value, 1), :integer)
89
+ assert_equal(@c.send(:cell_type_from_value, Date.today), :date)
90
+ assert_equal(@c.send(:cell_type_from_value, Time.now), :time)
91
+ assert_equal(@c.send(:cell_type_from_value, []), :string)
92
+ assert_equal(@c.send(:cell_type_from_value, "d"), :string)
93
+ assert_equal(@c.send(:cell_type_from_value, nil), :string)
94
+ assert_equal(@c.send(:cell_type_from_value, -1), :integer)
95
+ assert_equal(@c.send(:cell_type_from_value, true), :boolean)
96
+ assert_equal(@c.send(:cell_type_from_value, false), :boolean)
97
+ assert_equal(@c.send(:cell_type_from_value, 1.0/10**6), :float)
98
+ assert_equal(@c.send(:cell_type_from_value, Axlsx::RichText.new), :richtext)
99
+ assert_equal(:iso_8601, @c.send(:cell_type_from_value, '2008-08-30T01:45:36.123+09:00'))
100
+ end
101
+
102
+ def test_cast_value
103
+ @c.type = :string
104
+ assert_equal(@c.send(:cast_value, 1.0), "1.0")
105
+ @c.type = :integer
106
+ assert_equal(@c.send(:cast_value, 1.0), 1)
107
+ @c.type = :float
108
+ assert_equal(@c.send(:cast_value, "1.0"), 1.0)
109
+ @c.type = :string
110
+ assert_equal(@c.send(:cast_value, nil), nil)
111
+ @c.type = :richtext
112
+ assert_equal(@c.send(:cast_value, nil), nil)
113
+ @c.type = :float
114
+ assert_equal(@c.send(:cast_value, nil), nil)
115
+ @c.type = :boolean
116
+ assert_equal(@c.send(:cast_value, true), 1)
117
+ assert_equal(@c.send(:cast_value, false), 0)
118
+ @c.type = :iso_8601
119
+ assert_equal("2012-10-10T12:24", @c.send(:cast_value, "2012-10-10T12:24"))
120
+ end
121
+
122
+ def test_color
123
+ assert_raise(ArgumentError) { @c.color = -1.1 }
124
+ assert_nothing_raised { @c.color = "FF00FF00" }
125
+ assert_equal(@c.color.rgb, "FF00FF00")
126
+ end
127
+
128
+ def test_scheme
129
+ assert_raise(ArgumentError) { @c.scheme = -1.1 }
130
+ assert_nothing_raised { @c.scheme = :major }
131
+ assert_equal(@c.scheme, :major)
132
+ end
133
+
134
+ def test_vertAlign
135
+ assert_raise(ArgumentError) { @c.vertAlign = -1.1 }
136
+ assert_nothing_raised { @c.vertAlign = :baseline }
137
+ assert_equal(@c.vertAlign, :baseline)
138
+ end
139
+
140
+ def test_sz
141
+ assert_raise(ArgumentError) { @c.sz = -1.1 }
142
+ assert_nothing_raised { @c.sz = 12 }
143
+ assert_equal(@c.sz, 12)
144
+ end
145
+
146
+ def test_extend
147
+ assert_raise(ArgumentError) { @c.extend = -1.1 }
148
+ assert_nothing_raised { @c.extend = false }
149
+ assert_equal(@c.extend, false)
150
+ end
151
+
152
+ def test_condense
153
+ assert_raise(ArgumentError) { @c.condense = -1.1 }
154
+ assert_nothing_raised { @c.condense = false }
155
+ assert_equal(@c.condense, false)
156
+ end
157
+
158
+ def test_shadow
159
+ assert_raise(ArgumentError) { @c.shadow = -1.1 }
160
+ assert_nothing_raised { @c.shadow = false }
161
+ assert_equal(@c.shadow, false)
162
+ end
163
+
164
+ def test_outline
165
+ assert_raise(ArgumentError) { @c.outline = -1.1 }
166
+ assert_nothing_raised { @c.outline = false }
167
+ assert_equal(@c.outline, false)
168
+ end
169
+
170
+ def test_strike
171
+ assert_raise(ArgumentError) { @c.strike = -1.1 }
172
+ assert_nothing_raised { @c.strike = false }
173
+ assert_equal(@c.strike, false)
174
+ end
175
+
176
+ def test_u
177
+ @c.type = :string
178
+ assert_raise(ArgumentError) { @c.u = -1.1 }
179
+ assert_nothing_raised { @c.u = :single }
180
+ assert_equal(@c.u, :single)
181
+ doc = Nokogiri::XML(@c.to_xml_string(1,1))
182
+ assert(doc.xpath('//u[@val="single"]'))
183
+ end
184
+
185
+ def test_i
186
+ assert_raise(ArgumentError) { @c.i = -1.1 }
187
+ assert_nothing_raised { @c.i = false }
188
+ assert_equal(@c.i, false)
189
+ end
190
+
191
+ def test_rFont
192
+ assert_raise(ArgumentError) { @c.font_name = -1.1 }
193
+ assert_nothing_raised { @c.font_name = "Arial" }
194
+ assert_equal(@c.font_name, "Arial")
195
+ end
196
+
197
+ def test_charset
198
+ assert_raise(ArgumentError) { @c.charset = -1.1 }
199
+ assert_nothing_raised { @c.charset = 1 }
200
+ assert_equal(@c.charset, 1)
201
+ end
202
+
203
+ def test_family
204
+ assert_raise(ArgumentError) { @c.family = -1.1 }
205
+ assert_nothing_raised { @c.family = 5 }
206
+ assert_equal(@c.family, 5)
207
+ end
208
+
209
+ def test_b
210
+ assert_raise(ArgumentError) { @c.b = -1.1 }
211
+ assert_nothing_raised { @c.b = false }
212
+ assert_equal(@c.b, false)
213
+ end
214
+
215
+ def test_merge_with_string
216
+ @c.row.add_cell 2
217
+ @c.row.add_cell 3
218
+ @c.merge "A2"
219
+ assert_equal(@c.row.worksheet.send(:merged_cells).last, "A1:A2")
220
+ end
221
+
222
+ def test_merge_with_cell
223
+ @c.row.add_cell 2
224
+ @c.row.add_cell 3
225
+ @c.merge @row.cells.last
226
+ assert_equal(@c.row.worksheet.send(:merged_cells).last, "A1:C1")
227
+ end
228
+
229
+ def test_reverse_merge_with_cell
230
+ @c.row.add_cell 2
231
+ @c.row.add_cell 3
232
+ @row.cells.last.merge @c
233
+ assert_equal(@c.row.worksheet.send(:merged_cells).last, "A1:C1")
234
+ end
235
+
236
+ def test_ssti
237
+ assert_raise(ArgumentError, "ssti must be an unsigned integer!") { @c.send(:ssti=, -1) }
238
+ @c.send :ssti=, 1
239
+ assert_equal(@c.ssti, 1)
240
+ end
241
+
242
+ def test_plain_string
243
+ @c.type = :integer
244
+ assert_equal(@c.plain_string?, false)
245
+
246
+ @c.type = :string
247
+ @c.value = 'plain string'
248
+ assert_equal(@c.plain_string?, true)
249
+
250
+ @c.value = nil
251
+ assert_equal(@c.plain_string?, false)
252
+
253
+ @c.value = ''
254
+ assert_equal(@c.plain_string?, false)
255
+
256
+ @c.value = '=sum'
257
+ assert_equal(@c.plain_string?, false)
258
+
259
+ @c.value = 'plain string'
260
+ @c.font_name = 'Arial'
261
+ assert_equal(@c.plain_string?, false)
262
+ end
263
+
264
+ def test_to_xml_string
265
+ c_xml = Nokogiri::XML(@c.to_xml_string(1,1))
266
+ assert_equal(c_xml.xpath("/c[@s=1]").size, 1)
267
+ end
268
+
269
+ def test_to_xml_string_nil
270
+ @c.value = nil
271
+ c_xml = Nokogiri::XML(@c.to_xml_string(1,1))
272
+ assert_equal(c_xml.xpath("/c[@s=1]").size, 1)
273
+ end
274
+
275
+ def test_to_xml_string_with_run
276
+ # Actually quite a number of similar run styles
277
+ # but the processing should be the same
278
+ @c.b = true
279
+ @c.type = :string
280
+ @c.value = "a"
281
+ @c.font_name = 'arial'
282
+ @c.color = 'FF0000'
283
+ c_xml = Nokogiri::XML(@c.to_xml_string(1,1))
284
+ assert(c_xml.xpath("//b"))
285
+ end
286
+
287
+ def test_to_xml_string_formula
288
+ p = Axlsx::Package.new
289
+ ws = p.workbook.add_worksheet do |sheet|
290
+ sheet.add_row ["=IF(2+2=4,4,5)"]
291
+ end
292
+ doc = Nokogiri::XML(ws.to_xml_string)
293
+ assert(doc.xpath("//f[@text()='IF(2+2=4,4,5)']"))
294
+
295
+ end
296
+
297
+ def test_to_xml_string_array_formula
298
+ p = Axlsx::Package.new
299
+ ws = p.workbook.add_worksheet do |sheet|
300
+ sheet.add_row ["{=SUM(C2:C11*D2:D11)}"]
301
+ end
302
+ doc = Nokogiri::XML(ws.to_xml_string)
303
+ doc.remove_namespaces!
304
+ assert(doc.xpath("//f[text()='SUM(C2:C11*D2:D11)']"))
305
+ assert(doc.xpath("//f[@t='array']"))
306
+ assert(doc.xpath("//f[@ref='A1']"))
307
+ end
308
+
309
+ def test_font_size_with_custom_style_and_no_sz
310
+ @c.style = @c.row.worksheet.workbook.styles.add_style :bg_color => 'FF00FF'
311
+ sz = @c.send(:font_size)
312
+ assert_equal(sz, @c.row.worksheet.workbook.styles.fonts.first.sz)
313
+ end
314
+
315
+ def test_font_size_with_bolding
316
+ @c.style = @c.row.worksheet.workbook.styles.add_style :b => true
317
+ assert_equal(@c.row.worksheet.workbook.styles.fonts.first.sz * 1.5, @c.send(:font_size))
318
+ end
319
+
320
+ def test_font_size_with_custom_sz
321
+ @c.style = @c.row.worksheet.workbook.styles.add_style :sz => 52
322
+ sz = @c.send(:font_size)
323
+ assert_equal(sz, 52)
324
+ end
325
+
326
+ def test_cell_with_sz
327
+ @c.sz = 25
328
+ assert_equal(25, @c.send(:font_size))
329
+ end
330
+
331
+ def test_to_xml
332
+ # TODO This could use some much more stringent testing related to the xml content generated!
333
+ @ws.add_row [Time.now, Date.today, true, 1, 1.0, "text", "=sum(A1:A2)", "2013-01-13T13:31:25.123"]
334
+ @ws.rows.last.cells[5].u = true
335
+
336
+ schema = Nokogiri::XML::Schema(File.open(Axlsx::SML_XSD))
337
+ doc = Nokogiri::XML(@ws.to_xml_string)
338
+ errors = []
339
+ schema.validate(doc).each do |error|
340
+ errors.push error
341
+ puts error.message
342
+ end
343
+ assert(errors.empty?, "error free validation")
344
+ end
345
+ end
@@ -0,0 +1,31 @@
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
@@ -0,0 +1,78 @@
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_hidden
43
+ assert_equal(@col.hidden, nil)
44
+ assert_raise(ArgumentError, 'hidden must be boolean(ish)') { @col.hidden = 'bob' }
45
+ assert_nothing_raised(ArgumentError, 'hidden must be boolean(ish)') { @col.hidden = true }
46
+ end
47
+
48
+ def test_outlineLevel
49
+ assert_equal(@col.outlineLevel, nil)
50
+ assert_raise(ArgumentError, 'outline level cannot be negative') { @col.outlineLevel = -1 }
51
+ assert_raise(ArgumentError, 'outline level cannot be greater than 7') { @col.outlineLevel = 8 }
52
+ assert_nothing_raised('can set outlineLevel') { @col.outlineLevel = 1 }
53
+ end
54
+
55
+ def test_phonetic
56
+ assert_equal(@col.phonetic, nil)
57
+ assert_raise(ArgumentError, 'phonetic must be boolean(ish)') { @col.phonetic = 'bob' }
58
+ assert_nothing_raised(ArgumentError, 'phonetic must be boolean(ish)') { @col.phonetic = true }
59
+ end
60
+
61
+ def test_to_xml_string
62
+ @col.width = 100
63
+ doc = Nokogiri::XML(@col.to_xml_string)
64
+ assert_equal(1, doc.xpath("//col [@bestFit='#{@col.best_fit ? 1 : 0}']").size)
65
+ assert_equal(1, doc.xpath("//col [@max=#{@col.max}]").size)
66
+ assert_equal(1, doc.xpath("//col [@min=#{@col.min}]").size)
67
+ assert_equal(1, doc.xpath("//col [@width=#{@col.width}]").size)
68
+ assert_equal(1, doc.xpath("//col [@customWidth='#{@col.custom_width ? 1 : 0}']").size)
69
+ end
70
+
71
+ def test_style
72
+ assert_equal(@col.style, nil)
73
+ @col.style = 1
74
+ assert_equal(@col.style, 1)
75
+ #TODO check that the style specified is actually in the styles xfs collection
76
+ end
77
+
78
+ end