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,41 @@
1
+ require 'tc_helper'
2
+
3
+ class TestDefinedNames < Test::Unit::TestCase
4
+ def setup
5
+ @dn = Axlsx::DefinedName.new('Sheet1!A1:A1')
6
+ end
7
+
8
+ def test_initialize
9
+ assert_equal('Sheet1!A1:A1', @dn.formula)
10
+ end
11
+
12
+ def test_string_attributes
13
+ %w(short_cut_key status_bar help description custom_menu comment).each do |attr|
14
+ assert_raise(ArgumentError, 'only strings allowed in string attributes') { @dn.send("#{attr}=", 1) }
15
+ assert_nothing_raised { @dn.send("#{attr}=", '_xlnm.Sheet_Title') }
16
+ end
17
+ end
18
+
19
+ def test_boolean_attributes
20
+ %w(workbook_parameter publish_to_server xlm vb_proceedure function hidden).each do |attr|
21
+ assert_raise(ArgumentError, 'only booleanish allowed in string attributes') { @dn.send("#{attr}=", 'foo') }
22
+ assert_nothing_raised { @dn.send("#{attr}=", 1) }
23
+ end
24
+
25
+ end
26
+
27
+ def test_local_sheet_id
28
+ assert_raise(ArgumentError, 'local_sheet_id must be an unsigned int') { @dn.local_sheet_id = -1 }
29
+ assert_nothing_raised { @dn.local_sheet_id = 1 }
30
+ end
31
+
32
+ def test_to_xml_string
33
+ assert_raise(ArgumentError, 'name is required for serialization') { @dn.to_xml_string }
34
+ @dn.name = '_xlnm.Print_Titles'
35
+ @dn.hidden = true
36
+ doc = Nokogiri::XML(@dn.to_xml_string)
37
+ assert(doc.xpath("//definedName[@name='_xlnm.Print_Titles']"))
38
+ assert(doc.xpath("//definedName[@hidden='true']"))
39
+ assert_equal('Sheet1!A1:A1', doc.xpath('//definedName').text)
40
+ end
41
+ end
@@ -0,0 +1,44 @@
1
+ require 'tc_helper.rb'
2
+
3
+ class TestSharedStringsTable < Test::Unit::TestCase
4
+
5
+ def setup
6
+ @p = Axlsx::Package.new :use_shared_strings=>true
7
+ ws = @p.workbook.add_worksheet
8
+ ws.add_row ['a', 1, 'b']
9
+ ws.add_row ['b', 1, 'c']
10
+ ws.add_row ['c', 1, 'd']
11
+ end
12
+
13
+ def test_workbook_has_shared_strings
14
+ assert(@p.workbook.shared_strings.is_a?(Axlsx::SharedStringsTable), "shared string table was not created")
15
+ end
16
+
17
+ def test_count
18
+ sst = @p.workbook.shared_strings
19
+ assert_equal(sst.count, 6)
20
+ end
21
+
22
+ def test_unique_count
23
+ sst = @p.workbook.shared_strings
24
+ assert_equal(sst.unique_count, 4)
25
+ end
26
+
27
+ def test_uses_workbook_xml_space
28
+ assert_equal(@p.workbook.xml_space, @p.workbook.shared_strings.xml_space)
29
+ @p.workbook.xml_space = :default
30
+ assert_equal(:default, @p.workbook.shared_strings.xml_space)
31
+ end
32
+
33
+ def test_valid_document
34
+ schema = Nokogiri::XML::Schema(File.open(Axlsx::SML_XSD))
35
+ doc = Nokogiri::XML(@p.workbook.shared_strings.to_xml_string)
36
+ errors = []
37
+ schema.validate(doc).each do |error|
38
+ puts error.message
39
+ errors << error
40
+ end
41
+ assert_equal(errors.size, 0, "sharedStirngs.xml Invalid" + errors.map{ |e| e.message }.to_s)
42
+ end
43
+
44
+ end
@@ -0,0 +1,125 @@
1
+ require 'tc_helper.rb'
2
+
3
+ class TestWorkbook < Test::Unit::TestCase
4
+ def setup
5
+ p = Axlsx::Package.new
6
+ @wb = p.workbook
7
+ end
8
+
9
+ def teardown
10
+ end
11
+
12
+ def test_worksheet_users_xml_space
13
+ sheet = @wb.add_worksheet(:name => 'foo')
14
+ ws_xml = Nokogiri::XML(sheet.to_xml_string)
15
+ assert(ws_xml.xpath("//xmlns:worksheet/@xml:space='preserve'"))
16
+
17
+ @wb.xml_space = :default
18
+ ws_xml = Nokogiri::XML(sheet.to_xml_string)
19
+ assert(ws_xml.xpath("//xmlns:worksheet/@xml:space='default'"))
20
+ end
21
+
22
+ def test_xml_space
23
+ assert_equal(:preserve, @wb.xml_space)
24
+ @wb.xml_space = :default
25
+ assert_equal(:default, @wb.xml_space)
26
+ assert_raise(ArgumentError) { @wb.xml_space = :none }
27
+ end
28
+
29
+ def test_no_autowidth
30
+ assert_equal(@wb.use_autowidth, true)
31
+ assert_raise(ArgumentError) {@wb.use_autowidth = 0.1}
32
+ assert_nothing_raised {@wb.use_autowidth = false}
33
+ assert_equal(@wb.use_autowidth, false)
34
+ end
35
+
36
+
37
+ def test_sheet_by_name_retrieval
38
+ @wb.add_worksheet(:name=>'foo')
39
+ @wb.add_worksheet(:name=>'bar')
40
+ assert_equal('foo', @wb.sheet_by_name('foo').name)
41
+
42
+ end
43
+ def test_date1904
44
+ assert_equal(Axlsx::Workbook.date1904, @wb.date1904)
45
+ @wb.date1904 = :false
46
+ assert_equal(Axlsx::Workbook.date1904, @wb.date1904)
47
+ Axlsx::Workbook.date1904 = :true
48
+ assert_equal(Axlsx::Workbook.date1904, @wb.date1904)
49
+ end
50
+
51
+ def test_add_defined_name
52
+ @wb.add_defined_name 'Sheet1!1:1', :name => '_xlnm.Print_Titles', :hidden => true
53
+ assert_equal(1, @wb.defined_names.size)
54
+ end
55
+
56
+ def test_shared_strings
57
+ assert_equal(@wb.use_shared_strings, nil)
58
+ assert_raise(ArgumentError) {@wb.use_shared_strings = 'bpb'}
59
+ assert_nothing_raised {@wb.use_shared_strings = :true}
60
+ end
61
+
62
+ def test_add_worksheet
63
+ assert(@wb.worksheets.empty?, "worbook has no worksheets by default")
64
+ ws = @wb.add_worksheet(:name=>"bob")
65
+ assert_equal(@wb.worksheets.size, 1, "add_worksheet adds a worksheet!")
66
+ assert_equal(@wb.worksheets.first, ws, "the worksheet returned is the worksheet added")
67
+ assert_equal(ws.name, "bob", "name option gets passed to worksheet")
68
+ end
69
+
70
+ def test_insert_worksheet
71
+ @wb.add_worksheet(:name => 'A')
72
+ @wb.add_worksheet(:name => 'B')
73
+ ws3 = @wb.insert_worksheet(0, :name => 'C')
74
+ assert_equal(ws3.name, @wb.worksheets.first.name)
75
+ end
76
+
77
+ def test_relationships
78
+ #current relationship size is 1 due to style relation
79
+ assert(@wb.relationships.size == 1)
80
+ @wb.add_worksheet
81
+ assert(@wb.relationships.size == 2)
82
+ @wb.use_shared_strings = true
83
+ assert(@wb.relationships.size == 3)
84
+ end
85
+
86
+ def test_to_xml
87
+ schema = Nokogiri::XML::Schema(File.open(Axlsx::SML_XSD))
88
+ doc = Nokogiri::XML(@wb.to_xml_string)
89
+ errors = []
90
+ schema.validate(doc).each do |error|
91
+ errors.push error
92
+ puts error.message
93
+ end
94
+ assert(errors.empty?, "error free validation")
95
+ end
96
+ def test_range_requires__valid_sheet
97
+ ws = @wb.add_worksheet :name=>'fish'
98
+ ws.add_row [1,2,3]
99
+ ws.add_row [4,5,6]
100
+ assert_raise(ArgumentError, "no sheet name part") { @wb["A1:C2"]}
101
+ assert_equal @wb['fish!A1:C2'].size, 6
102
+ end
103
+
104
+ def test_to_xml_adds_worksheet_when_worksheets_is_empty
105
+ assert(@wb.worksheets.empty?)
106
+ @wb.to_xml_string
107
+ assert(@wb.worksheets.size == 1)
108
+ end
109
+
110
+ def test_to_xml_string_defined_names
111
+ @wb.add_worksheet do |sheet|
112
+ sheet.add_row [1, "two"]
113
+ sheet.auto_filter = "A1:B1"
114
+ end
115
+ doc = Nokogiri::XML(@wb.to_xml_string)
116
+ assert_equal(doc.xpath('//xmlns:workbook/xmlns:definedNames/xmlns:definedName').inner_text, @wb.worksheets[0].auto_filter.defined_name)
117
+ end
118
+
119
+ def test_to_xml_uses_correct_rIds_for_pivotCache
120
+ ws = @wb.add_worksheet
121
+ pivot_table = ws.add_pivot_table('G5:G6', 'A1:D5')
122
+ doc = Nokogiri::XML(@wb.to_xml_string)
123
+ assert_equal pivot_table.cache_definition.rId, doc.xpath("//xmlns:pivotCache").first["r:id"]
124
+ end
125
+ end
@@ -0,0 +1,38 @@
1
+ require 'tc_helper.rb'
2
+
3
+ class TestAutoFilter < Test::Unit::TestCase
4
+
5
+ def setup
6
+ ws = Axlsx::Package.new.workbook.add_worksheet
7
+ 3.times { |index| ws.add_row [1*index,2*index,3*index] }
8
+ @auto_filter = ws.auto_filter
9
+ @auto_filter.range = 'A1:C3'
10
+ @auto_filter.add_column 0, :filters, :filter_items => [1]
11
+ end
12
+
13
+ def test_defined_name
14
+ assert_equal("'Sheet1'!$A$1:$C$3", @auto_filter.defined_name)
15
+ end
16
+
17
+ def test_to_xml_string
18
+ doc = Nokogiri::XML(@auto_filter.to_xml_string)
19
+ assert(doc.xpath("autoFilter[@ref='#{@auto_filter.range}']"))
20
+ end
21
+
22
+ def test_columns
23
+ assert @auto_filter.columns.is_a?(Axlsx::SimpleTypedList)
24
+ assert_equal @auto_filter.columns.allowed_types, [Axlsx::FilterColumn]
25
+ end
26
+
27
+ def test_add_column
28
+ @auto_filter.add_column(0, :filters) do |column|
29
+ assert column.is_a? FilterColumn
30
+ end
31
+ end
32
+
33
+ def test_applya
34
+ assert_equal nil, @auto_filter.worksheet.rows.last.hidden
35
+ @auto_filter.apply
36
+ assert_equal true, @auto_filter.worksheet.rows.last.hidden
37
+ end
38
+ end
@@ -0,0 +1,76 @@
1
+ require 'tc_helper.rb'
2
+
3
+ class TestFilterColumn < Test::Unit::TestCase
4
+
5
+ def setup
6
+ @filter_column = Axlsx::FilterColumn.new(0, :filters, :filter_items => [200])
7
+ end
8
+
9
+
10
+ def test_initialize_col_id
11
+ assert_raise ArgumentError do
12
+ Axlsx::FilterColumn.new(0, :bobs_house_of_filter)
13
+ end
14
+ assert_raise ArgumentError do
15
+ Axlsx::FilterColumn.new(:penut, :filters)
16
+ end
17
+ end
18
+
19
+ def test_initailize_filter_type
20
+ assert @filter_column.filter.is_a?(Axlsx::Filters)
21
+ assert_equal 1, @filter_column.filter.filter_items.size
22
+ end
23
+
24
+ def test_initialize_filter_type_filters_with_options
25
+ assert_equal 200, @filter_column.filter.filter_items.first.val
26
+ end
27
+
28
+ def test_initialize_with_block
29
+ filter_column = Axlsx::FilterColumn.new(0, :filters) do |filters|
30
+ filters.filter_items = [700, 100, 5]
31
+ end
32
+ assert_equal 3, filter_column.filter.filter_items.size
33
+ assert_equal 700, filter_column.filter.filter_items.first.val
34
+ assert_equal 5, filter_column.filter.filter_items.last.val
35
+ end
36
+
37
+ def test_default_show_button
38
+ assert_equal true, @filter_column.show_button
39
+ end
40
+
41
+ def test_default_hidden_button
42
+ assert_equal false, @filter_column.hidden_button
43
+ end
44
+
45
+ def test_show_button
46
+ assert_raise ArgumentError do
47
+ @filter_column.show_button = :foo
48
+ end
49
+ assert_nothing_raised { @filter_column.show_button = false }
50
+ end
51
+
52
+ def test_hidden_button
53
+ assert_raise ArgumentError do
54
+ @filter_column.hidden_button = :hoge
55
+ end
56
+ assert_nothing_raised { @filter_column.hidden_button = true }
57
+ end
58
+
59
+ def test_col_id=
60
+ assert_raise ArgumentError do
61
+ @filter_column.col_id = :bar
62
+ end
63
+ assert_nothing_raised { @filter_column.col_id = 7 }
64
+ end
65
+
66
+ def test_to_xml_string
67
+ doc = Nokogiri::XML(@filter_column.to_xml_string)
68
+ assert doc.xpath("//filterColumn[@colId=#{@filter_column.col_id}]")
69
+ assert doc.xpath("//filterColumn[@hiddenButton=#{@filter_column.hidden_button}]")
70
+ assert doc.xpath("//filterColumn[@showButton=#{@filter_column.show_button}]")
71
+
72
+
73
+
74
+ assert doc.xpath("//filterColumn/filters")
75
+ end
76
+ end
@@ -0,0 +1,50 @@
1
+ require 'tc_helper.rb'
2
+
3
+ class TestFilters < Test::Unit::TestCase
4
+ def setup
5
+ @filters = Axlsx::Filters.new(:filter_items => [1, 'a'],
6
+ :date_group_items =>[ { :date_time_grouping => :year, :year => 2011, :month => 11, :day => 11, :hour => 0, :minute => 0, :second => 0 } ] ,
7
+ :blank => true)
8
+ end
9
+
10
+ def test_blank
11
+ assert_equal true, @filters.blank
12
+ assert_raise(ArgumentError) { @filters.blank = :only_if_you_want_it }
13
+ @filters.blank = true
14
+ assert_equal true, @filters.blank
15
+ end
16
+
17
+ def test_calendar_type
18
+ assert_raise(ArgumentError) { @filters.calendar_type = 'monkey calendar' }
19
+ @filters.calendar_type = 'japan'
20
+ assert_equal('japan', @filters.calendar_type)
21
+ end
22
+
23
+ def test_filters_items
24
+ assert @filters.filter_items.is_a?(Array)
25
+ assert_equal 2, @filters.filter_items.size
26
+ end
27
+
28
+ def test_date_group_items
29
+ assert @filters.date_group_items.is_a?(Array)
30
+ assert_equal 1, @filters.date_group_items.size
31
+ end
32
+
33
+ def test_apply_is_false_for_matching_values
34
+ keeper = Object.new
35
+ def keeper.value; 'a'; end
36
+ assert_equal false, @filters.apply(keeper)
37
+ end
38
+
39
+ def test_apply_is_true_for_non_matching_values
40
+ hidden = Object.new
41
+ def hidden.value; 'b'; end
42
+ assert_equal true, @filters.apply(hidden)
43
+ end
44
+
45
+ def test_to_xml_string
46
+ doc = Nokogiri::XML(@filters.to_xml_string)
47
+ assert_equal(1, doc.xpath('//filters[@blank="true"]').size)
48
+ end
49
+ end
50
+
@@ -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="false"][@man="true"]').size, 1)
48
+ end
49
+ end
@@ -0,0 +1,319 @@
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])
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_style
54
+ assert_raise(ArgumentError, "must reject invalid style indexes") { @c.style=@c.row.worksheet.workbook.styles.cellXfs.size }
55
+ assert_nothing_raised("must allow valid style index changes") {@c.style=1}
56
+ assert_equal(@c.style, 1)
57
+ end
58
+
59
+ def test_type
60
+ assert_raise(ArgumentError, "type must be :string, :integer, :float, :date, :time, :boolean") { @c.type = :array }
61
+ assert_nothing_raised("type can be changed") { @c.type = :string }
62
+ assert_equal(@c.value, "1.0", "changing type casts the value")
63
+ assert_equal(:float, @row.add_cell(1.0/10**7).type, 'properly identify exponential floats as float type')
64
+ assert_equal(@row.add_cell(Time.now).type, :time, 'time should be time')
65
+ assert_equal(@row.add_cell(Date.today).type, :date, 'date should be date')
66
+ assert_equal(@row.add_cell(true).type, :boolean, 'boolean should be boolean')
67
+ end
68
+
69
+ def test_value
70
+ assert_raise(ArgumentError, "type must be :string, :integer, :float, :date, :time, :boolean") { @c.type = :array }
71
+ assert_nothing_raised("type can be changed") { @c.type = :string }
72
+ assert_equal(@c.value, "1.0", "changing type casts the value")
73
+ end
74
+
75
+ def test_col_ref
76
+ #TODO move to axlsx spec
77
+ assert_equal(Axlsx.col_ref(0), "A")
78
+ end
79
+
80
+ def test_cell_type_from_value
81
+ assert_equal(@c.send(:cell_type_from_value, 1.0), :float)
82
+ assert_equal(@c.send(:cell_type_from_value, 1), :integer)
83
+ assert_equal(@c.send(:cell_type_from_value, Date.today), :date)
84
+ assert_equal(@c.send(:cell_type_from_value, Time.now), :time)
85
+ assert_equal(@c.send(:cell_type_from_value, []), :string)
86
+ assert_equal(@c.send(:cell_type_from_value, "d"), :string)
87
+ assert_equal(@c.send(:cell_type_from_value, nil), :string)
88
+ assert_equal(@c.send(:cell_type_from_value, -1), :integer)
89
+ assert_equal(@c.send(:cell_type_from_value, true), :boolean)
90
+ assert_equal(@c.send(:cell_type_from_value, false), :boolean)
91
+ assert_equal(@c.send(:cell_type_from_value, 1.0/10**6), :float)
92
+ assert_equal(:iso_8601, @c.send(:cell_type_from_value, '2008-08-30T01:45:36.123+09:00'))
93
+ end
94
+
95
+ def test_cast_value
96
+ @c.type = :string
97
+ assert_equal(@c.send(:cast_value, 1.0), "1.0")
98
+ @c.type = :integer
99
+ assert_equal(@c.send(:cast_value, 1.0), 1)
100
+ @c.type = :float
101
+ assert_equal(@c.send(:cast_value, "1.0"), 1.0)
102
+ @c.type = :string
103
+ assert_equal(@c.send(:cast_value, nil), nil)
104
+ @c.type = :float
105
+ assert_equal(@c.send(:cast_value, nil), nil)
106
+ @c.type = :boolean
107
+ assert_equal(@c.send(:cast_value, true), 1)
108
+ assert_equal(@c.send(:cast_value, false), 0)
109
+ @c.type = :iso_8601
110
+ assert_equal("2012-10-10T12:24", @c.send(:cast_value, "2012-10-10T12:24"))
111
+ end
112
+
113
+ def test_color
114
+ assert_raise(ArgumentError) { @c.color = -1.1 }
115
+ assert_nothing_raised { @c.color = "FF00FF00" }
116
+ assert_equal(@c.color.rgb, "FF00FF00")
117
+ end
118
+
119
+ def test_scheme
120
+ assert_raise(ArgumentError) { @c.scheme = -1.1 }
121
+ assert_nothing_raised { @c.scheme = :major }
122
+ assert_equal(@c.scheme, :major)
123
+ end
124
+
125
+ def test_vertAlign
126
+ assert_raise(ArgumentError) { @c.vertAlign = -1.1 }
127
+ assert_nothing_raised { @c.vertAlign = :baseline }
128
+ assert_equal(@c.vertAlign, :baseline)
129
+ end
130
+
131
+ def test_sz
132
+ assert_raise(ArgumentError) { @c.sz = -1.1 }
133
+ assert_nothing_raised { @c.sz = 12 }
134
+ assert_equal(@c.sz, 12)
135
+ end
136
+
137
+ def test_extend
138
+ assert_raise(ArgumentError) { @c.extend = -1.1 }
139
+ assert_nothing_raised { @c.extend = false }
140
+ assert_equal(@c.extend, false)
141
+ end
142
+
143
+ def test_condense
144
+ assert_raise(ArgumentError) { @c.condense = -1.1 }
145
+ assert_nothing_raised { @c.condense = false }
146
+ assert_equal(@c.condense, false)
147
+ end
148
+
149
+ def test_shadow
150
+ assert_raise(ArgumentError) { @c.shadow = -1.1 }
151
+ assert_nothing_raised { @c.shadow = false }
152
+ assert_equal(@c.shadow, false)
153
+ end
154
+
155
+ def test_outline
156
+ assert_raise(ArgumentError) { @c.outline = -1.1 }
157
+ assert_nothing_raised { @c.outline = false }
158
+ assert_equal(@c.outline, false)
159
+ end
160
+
161
+ def test_strike
162
+ assert_raise(ArgumentError) { @c.strike = -1.1 }
163
+ assert_nothing_raised { @c.strike = false }
164
+ assert_equal(@c.strike, false)
165
+ end
166
+
167
+ def test_u
168
+ @c.type = :string
169
+ assert_raise(ArgumentError) { @c.u = -1.1 }
170
+ assert_nothing_raised { @c.u = :single }
171
+ assert_equal(@c.u, :single)
172
+ doc = Nokogiri::XML(@c.to_xml_string(1,1))
173
+ assert(doc.xpath('//u[@val="single"]'))
174
+ end
175
+
176
+ def test_i
177
+ assert_raise(ArgumentError) { @c.i = -1.1 }
178
+ assert_nothing_raised { @c.i = false }
179
+ assert_equal(@c.i, false)
180
+ end
181
+
182
+ def test_rFont
183
+ assert_raise(ArgumentError) { @c.font_name = -1.1 }
184
+ assert_nothing_raised { @c.font_name = "Arial" }
185
+ assert_equal(@c.font_name, "Arial")
186
+ end
187
+
188
+ def test_charset
189
+ assert_raise(ArgumentError) { @c.charset = -1.1 }
190
+ assert_nothing_raised { @c.charset = 1 }
191
+ assert_equal(@c.charset, 1)
192
+ end
193
+
194
+ def test_family
195
+ assert_raise(ArgumentError) { @c.family = -1.1 }
196
+ assert_nothing_raised { @c.family = 5 }
197
+ assert_equal(@c.family, 5)
198
+ end
199
+
200
+ def test_b
201
+ assert_raise(ArgumentError) { @c.b = -1.1 }
202
+ assert_nothing_raised { @c.b = false }
203
+ assert_equal(@c.b, false)
204
+ end
205
+
206
+ def test_merge_with_string
207
+ @c.row.add_cell 2
208
+ @c.row.add_cell 3
209
+ @c.merge "A2"
210
+ assert_equal(@c.row.worksheet.send(:merged_cells).last, "A1:A2")
211
+ end
212
+
213
+ def test_merge_with_cell
214
+ @c.row.add_cell 2
215
+ @c.row.add_cell 3
216
+ @c.merge @row.cells.last
217
+ assert_equal(@c.row.worksheet.send(:merged_cells).last, "A1:C1")
218
+ end
219
+
220
+ def test_ssti
221
+ assert_raise(ArgumentError, "ssti must be an unsigned integer!") { @c.send(:ssti=, -1) }
222
+ @c.send :ssti=, 1
223
+ assert_equal(@c.ssti, 1)
224
+ end
225
+
226
+ def test_plain_string
227
+ @c.type = :integer
228
+ assert_equal(@c.plain_string?, false)
229
+
230
+ @c.type = :string
231
+ @c.value = 'plain string'
232
+ assert_equal(@c.plain_string?, true)
233
+
234
+ @c.value = nil
235
+ assert_equal(@c.plain_string?, false)
236
+
237
+ @c.value = ''
238
+ assert_equal(@c.plain_string?, false)
239
+
240
+ @c.value = '=sum'
241
+ assert_equal(@c.plain_string?, false)
242
+
243
+ @c.value = 'plain string'
244
+ @c.font_name = 'Arial'
245
+ assert_equal(@c.plain_string?, false)
246
+ end
247
+
248
+ def test_to_xml_string
249
+ c_xml = Nokogiri::XML(@c.to_xml_string(1,1))
250
+ assert_equal(c_xml.xpath("/c[@s=1]").size, 1)
251
+ end
252
+
253
+ def test_to_xml_string_nil
254
+ @c.value = nil
255
+ c_xml = Nokogiri::XML(@c.to_xml_string(1,1))
256
+ assert_equal(c_xml.xpath("/c[@s=1]").size, 1)
257
+ end
258
+
259
+ def test_to_xml_string_with_run
260
+ # Actually quite a number of similar run styles
261
+ # but the processing should be the same
262
+ @c.b = true
263
+ @c.type = :string
264
+ @c.value = "a"
265
+ @c.font_name = 'arial'
266
+ @c.color = 'FF0000'
267
+ c_xml = Nokogiri::XML(@c.to_xml_string(1,1))
268
+ assert(c_xml.xpath("//b"))
269
+ end
270
+
271
+ def test_to_xml_string_formula
272
+ p = Axlsx::Package.new
273
+ ws = p.workbook.add_worksheet do |sheet|
274
+ sheet.add_row ["=IF(2+2=4,4,5)"]
275
+ end
276
+ doc = Nokogiri::XML(ws.to_xml_string)
277
+ assert(doc.xpath("//f[@text()='IF(2+2=4,4,5)']"))
278
+
279
+ end
280
+
281
+ def test_font_size_with_custom_style_and_no_sz
282
+ @c.style = @c.row.worksheet.workbook.styles.add_style :bg_color => 'FF00FF'
283
+ sz = @c.send(:font_size)
284
+ assert_equal(sz, @c.row.worksheet.workbook.styles.fonts.first.sz)
285
+ end
286
+
287
+ def test_font_size_with_bolding
288
+ @c.style = @c.row.worksheet.workbook.styles.add_style :b => true
289
+ assert_equal(@c.row.worksheet.workbook.styles.fonts.first.sz * 1.5, @c.send(:font_size))
290
+ end
291
+
292
+ def test_font_size_with_custom_sz
293
+ @c.style = @c.row.worksheet.workbook.styles.add_style :sz => 52
294
+ sz = @c.send(:font_size)
295
+ assert_equal(sz, 52)
296
+ end
297
+
298
+
299
+ def test_cell_with_sz
300
+ @c.sz = 25
301
+ assert_equal(25, @c.send(:font_size))
302
+ end
303
+ def test_to_xml
304
+ # TODO This could use some much more stringent testing related to the xml content generated!
305
+ @ws.add_row [Time.now, Date.today, true, 1, 1.0, "text", "=sum(A1:A2)", "2013-01-13T13:31:25.123"]
306
+ @ws.rows.last.cells[5].u = true
307
+
308
+ schema = Nokogiri::XML::Schema(File.open(Axlsx::SML_XSD))
309
+ doc = Nokogiri::XML(@ws.to_xml_string)
310
+ errors = []
311
+ schema.validate(doc).each do |error|
312
+ errors.push error
313
+ puts error.message
314
+ end
315
+ assert(errors.empty?, "error free validation")
316
+
317
+ end
318
+
319
+ end