caxlsx 3.0.4 → 3.2.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 (294) hide show
  1. checksums.yaml +4 -4
  2. data/.yardopts +9 -9
  3. data/.yardopts_guide +18 -18
  4. data/CHANGELOG.md +354 -334
  5. data/LICENSE +21 -21
  6. data/README.md +168 -170
  7. data/Rakefile +29 -29
  8. data/examples/generate.rb +15 -15
  9. data/lib/axlsx/content_type/abstract_content_type.rb +32 -32
  10. data/lib/axlsx/content_type/content_type.rb +26 -26
  11. data/lib/axlsx/content_type/default.rb +25 -25
  12. data/lib/axlsx/content_type/override.rb +25 -25
  13. data/lib/axlsx/doc_props/app.rb +235 -235
  14. data/lib/axlsx/doc_props/core.rb +39 -39
  15. data/lib/axlsx/drawing/area_chart.rb +99 -99
  16. data/lib/axlsx/drawing/area_series.rb +110 -110
  17. data/lib/axlsx/drawing/ax_data_source.rb +26 -26
  18. data/lib/axlsx/drawing/axes.rb +61 -61
  19. data/lib/axlsx/drawing/axis.rb +190 -190
  20. data/lib/axlsx/drawing/bar_3D_chart.rb +148 -151
  21. data/lib/axlsx/drawing/bar_chart.rb +138 -143
  22. data/lib/axlsx/drawing/bar_series.rb +97 -80
  23. data/lib/axlsx/drawing/bubble_chart.rb +59 -59
  24. data/lib/axlsx/drawing/bubble_series.rb +63 -63
  25. data/lib/axlsx/drawing/cat_axis.rb +85 -85
  26. data/lib/axlsx/drawing/chart.rb +276 -276
  27. data/lib/axlsx/drawing/d_lbls.rb +90 -90
  28. data/lib/axlsx/drawing/drawing.rb +167 -167
  29. data/lib/axlsx/drawing/graphic_frame.rb +54 -54
  30. data/lib/axlsx/drawing/hyperlink.rb +100 -100
  31. data/lib/axlsx/drawing/line_3D_chart.rb +68 -68
  32. data/lib/axlsx/drawing/line_chart.rb +99 -99
  33. data/lib/axlsx/drawing/line_series.rb +110 -110
  34. data/lib/axlsx/drawing/marker.rb +84 -84
  35. data/lib/axlsx/drawing/num_data.rb +52 -52
  36. data/lib/axlsx/drawing/num_data_source.rb +62 -62
  37. data/lib/axlsx/drawing/num_val.rb +34 -34
  38. data/lib/axlsx/drawing/one_cell_anchor.rb +99 -99
  39. data/lib/axlsx/drawing/pic.rb +211 -211
  40. data/lib/axlsx/drawing/picture_locking.rb +42 -42
  41. data/lib/axlsx/drawing/pie_3D_chart.rb +47 -47
  42. data/lib/axlsx/drawing/pie_series.rb +74 -74
  43. data/lib/axlsx/drawing/scaling.rb +60 -60
  44. data/lib/axlsx/drawing/scatter_chart.rb +74 -74
  45. data/lib/axlsx/drawing/scatter_series.rb +129 -98
  46. data/lib/axlsx/drawing/ser_axis.rb +45 -45
  47. data/lib/axlsx/drawing/series.rb +69 -69
  48. data/lib/axlsx/drawing/series_title.rb +25 -25
  49. data/lib/axlsx/drawing/str_data.rb +42 -42
  50. data/lib/axlsx/drawing/str_val.rb +34 -34
  51. data/lib/axlsx/drawing/title.rb +97 -97
  52. data/lib/axlsx/drawing/two_cell_anchor.rb +97 -97
  53. data/lib/axlsx/drawing/val_axis.rb +37 -37
  54. data/lib/axlsx/drawing/view_3D.rb +115 -115
  55. data/lib/axlsx/drawing/vml_drawing.rb +42 -42
  56. data/lib/axlsx/drawing/vml_shape.rb +66 -66
  57. data/lib/axlsx/package.rb +388 -363
  58. data/lib/axlsx/rels/relationship.rb +130 -130
  59. data/lib/axlsx/rels/relationships.rb +32 -32
  60. data/lib/axlsx/stylesheet/border.rb +73 -71
  61. data/lib/axlsx/stylesheet/border_pr.rb +71 -71
  62. data/lib/axlsx/stylesheet/cell_alignment.rb +132 -132
  63. data/lib/axlsx/stylesheet/cell_protection.rb +41 -41
  64. data/lib/axlsx/stylesheet/cell_style.rb +72 -72
  65. data/lib/axlsx/stylesheet/color.rb +76 -76
  66. data/lib/axlsx/stylesheet/dxf.rb +79 -79
  67. data/lib/axlsx/stylesheet/fill.rb +35 -35
  68. data/lib/axlsx/stylesheet/font.rb +156 -156
  69. data/lib/axlsx/stylesheet/gradient_fill.rb +103 -103
  70. data/lib/axlsx/stylesheet/gradient_stop.rb +37 -37
  71. data/lib/axlsx/stylesheet/num_fmt.rb +86 -86
  72. data/lib/axlsx/stylesheet/pattern_fill.rb +73 -73
  73. data/lib/axlsx/stylesheet/styles.rb +494 -420
  74. data/lib/axlsx/stylesheet/table_style.rb +54 -54
  75. data/lib/axlsx/stylesheet/table_style_element.rb +77 -77
  76. data/lib/axlsx/stylesheet/table_styles.rb +46 -46
  77. data/lib/axlsx/stylesheet/xf.rb +147 -147
  78. data/lib/axlsx/util/accessors.rb +64 -64
  79. data/lib/axlsx/util/constants.rb +410 -401
  80. data/lib/axlsx/util/mime_type_utils.rb +11 -11
  81. data/lib/axlsx/util/options_parser.rb +16 -16
  82. data/lib/axlsx/util/serialized_attributes.rb +89 -89
  83. data/lib/axlsx/util/simple_typed_list.rb +179 -179
  84. data/lib/axlsx/util/storage.rb +146 -146
  85. data/lib/axlsx/util/validators.rb +312 -312
  86. data/lib/axlsx/util/zip_command.rb +73 -73
  87. data/lib/axlsx/version.rb +5 -5
  88. data/lib/axlsx/workbook/defined_name.rb +128 -128
  89. data/lib/axlsx/workbook/defined_names.rb +21 -21
  90. data/lib/axlsx/workbook/shared_strings_table.rb +77 -77
  91. data/lib/axlsx/workbook/workbook.rb +395 -370
  92. data/lib/axlsx/workbook/workbook_view.rb +80 -80
  93. data/lib/axlsx/workbook/workbook_views.rb +22 -22
  94. data/lib/axlsx/workbook/worksheet/auto_filter/auto_filter.rb +77 -77
  95. data/lib/axlsx/workbook/worksheet/auto_filter/filter_column.rb +94 -94
  96. data/lib/axlsx/workbook/worksheet/auto_filter/filters.rb +244 -244
  97. data/lib/axlsx/workbook/worksheet/break.rb +35 -35
  98. data/lib/axlsx/workbook/worksheet/cell.rb +506 -505
  99. data/lib/axlsx/workbook/worksheet/cell_serializer.rb +164 -164
  100. data/lib/axlsx/workbook/worksheet/cfvo.rb +60 -60
  101. data/lib/axlsx/workbook/worksheet/cfvos.rb +18 -18
  102. data/lib/axlsx/workbook/worksheet/col.rb +145 -145
  103. data/lib/axlsx/workbook/worksheet/col_breaks.rb +35 -35
  104. data/lib/axlsx/workbook/worksheet/color_scale.rb +110 -110
  105. data/lib/axlsx/workbook/worksheet/cols.rb +23 -23
  106. data/lib/axlsx/workbook/worksheet/comment.rb +91 -91
  107. data/lib/axlsx/workbook/worksheet/comments.rb +82 -82
  108. data/lib/axlsx/workbook/worksheet/conditional_formatting.rb +82 -82
  109. data/lib/axlsx/workbook/worksheet/conditional_formatting_rule.rb +220 -220
  110. data/lib/axlsx/workbook/worksheet/conditional_formattings.rb +25 -25
  111. data/lib/axlsx/workbook/worksheet/data_bar.rb +129 -129
  112. data/lib/axlsx/workbook/worksheet/data_validation.rb +246 -246
  113. data/lib/axlsx/workbook/worksheet/data_validations.rb +28 -28
  114. data/lib/axlsx/workbook/worksheet/date_time_converter.rb +30 -30
  115. data/lib/axlsx/workbook/worksheet/dimension.rb +64 -64
  116. data/lib/axlsx/workbook/worksheet/header_footer.rb +52 -52
  117. data/lib/axlsx/workbook/worksheet/icon_set.rb +81 -81
  118. data/lib/axlsx/workbook/worksheet/merged_cells.rb +37 -37
  119. data/lib/axlsx/workbook/worksheet/outline_pr.rb +33 -33
  120. data/lib/axlsx/workbook/worksheet/page_margins.rb +97 -97
  121. data/lib/axlsx/workbook/worksheet/page_set_up_pr.rb +44 -44
  122. data/lib/axlsx/workbook/worksheet/page_setup.rb +240 -240
  123. data/lib/axlsx/workbook/worksheet/pane.rb +139 -139
  124. data/lib/axlsx/workbook/worksheet/pivot_table.rb +296 -289
  125. data/lib/axlsx/workbook/worksheet/pivot_table_cache_definition.rb +66 -66
  126. data/lib/axlsx/workbook/worksheet/pivot_tables.rb +24 -24
  127. data/lib/axlsx/workbook/worksheet/print_options.rb +39 -39
  128. data/lib/axlsx/workbook/worksheet/protected_range.rb +47 -47
  129. data/lib/axlsx/workbook/worksheet/protected_ranges.rb +37 -37
  130. data/lib/axlsx/workbook/worksheet/rich_text.rb +55 -55
  131. data/lib/axlsx/workbook/worksheet/rich_text_run.rb +250 -250
  132. data/lib/axlsx/workbook/worksheet/row.rb +164 -162
  133. data/lib/axlsx/workbook/worksheet/row_breaks.rb +33 -33
  134. data/lib/axlsx/workbook/worksheet/selection.rb +101 -101
  135. data/lib/axlsx/workbook/worksheet/sheet_calc_pr.rb +29 -29
  136. data/lib/axlsx/workbook/worksheet/sheet_data.rb +27 -27
  137. data/lib/axlsx/workbook/worksheet/sheet_pr.rb +87 -87
  138. data/lib/axlsx/workbook/worksheet/sheet_protection.rb +118 -118
  139. data/lib/axlsx/workbook/worksheet/sheet_view.rb +213 -213
  140. data/lib/axlsx/workbook/worksheet/table.rb +102 -102
  141. data/lib/axlsx/workbook/worksheet/table_style_info.rb +49 -49
  142. data/lib/axlsx/workbook/worksheet/tables.rb +34 -34
  143. data/lib/axlsx/workbook/worksheet/worksheet.rb +786 -764
  144. data/lib/axlsx/workbook/worksheet/worksheet_comments.rb +58 -58
  145. data/lib/axlsx/workbook/worksheet/worksheet_drawing.rb +58 -58
  146. data/lib/axlsx/workbook/worksheet/worksheet_hyperlink.rb +74 -74
  147. data/lib/axlsx/workbook/worksheet/worksheet_hyperlinks.rb +38 -38
  148. data/lib/axlsx.rb +185 -170
  149. data/lib/caxlsx.rb +2 -2
  150. data/lib/schema/dc.xsd +118 -118
  151. data/lib/schema/dcmitype.xsd +51 -51
  152. data/lib/schema/dcterms.xsd +331 -331
  153. data/lib/schema/dml-chartDrawing.xsd +146 -146
  154. data/lib/schema/dml-compatibility.xsd +14 -14
  155. data/lib/schema/dml-lockedCanvas.xsd +11 -11
  156. data/lib/schema/dml-main.xsd +3048 -3048
  157. data/lib/schema/dml-picture.xsd +23 -23
  158. data/lib/schema/dml-spreadsheetDrawing.xsd +185 -185
  159. data/lib/schema/dml-wordprocessingDrawing.xsd +185 -185
  160. data/lib/schema/shared-additionalCharacteristics.xsd +28 -28
  161. data/lib/schema/shared-bibliography.xsd +144 -144
  162. data/lib/schema/shared-commonSimpleTypes.xsd +166 -166
  163. data/lib/schema/shared-customXmlDataProperties.xsd +25 -25
  164. data/lib/schema/shared-customXmlSchemaProperties.xsd +18 -18
  165. data/lib/schema/shared-documentPropertiesCustom.xsd +59 -59
  166. data/lib/schema/shared-documentPropertiesExtended.xsd +56 -56
  167. data/lib/schema/shared-documentPropertiesVariantTypes.xsd +195 -195
  168. data/lib/schema/shared-relationshipReference.xsd +25 -25
  169. data/lib/schema/vml-main.xsd +569 -569
  170. data/lib/schema/vml-officeDrawing.xsd +509 -509
  171. data/lib/schema/vml-presentationDrawing.xsd +12 -12
  172. data/lib/schema/vml-spreadsheetDrawing.xsd +108 -108
  173. data/lib/schema/vml-wordprocessingDrawing.xsd +96 -96
  174. data/lib/schema/xml.xsd +116 -116
  175. data/test/benchmark.rb +72 -72
  176. data/test/content_type/tc_content_type.rb +76 -76
  177. data/test/content_type/tc_default.rb +16 -16
  178. data/test/content_type/tc_override.rb +14 -14
  179. data/test/doc_props/tc_app.rb +43 -43
  180. data/test/doc_props/tc_core.rb +42 -42
  181. data/test/drawing/tc_area_chart.rb +39 -39
  182. data/test/drawing/tc_area_series.rb +71 -71
  183. data/test/drawing/tc_axes.rb +7 -7
  184. data/test/drawing/tc_axis.rb +112 -112
  185. data/test/drawing/tc_bar_3D_chart.rb +86 -71
  186. data/test/drawing/tc_bar_chart.rb +86 -71
  187. data/test/drawing/tc_bar_series.rb +46 -37
  188. data/test/drawing/tc_bubble_chart.rb +44 -44
  189. data/test/drawing/tc_bubble_series.rb +21 -21
  190. data/test/drawing/tc_cat_axis.rb +31 -31
  191. data/test/drawing/tc_cat_axis_data.rb +27 -27
  192. data/test/drawing/tc_chart.rb +123 -123
  193. data/test/drawing/tc_d_lbls.rb +57 -57
  194. data/test/drawing/tc_data_source.rb +23 -23
  195. data/test/drawing/tc_drawing.rb +80 -80
  196. data/test/drawing/tc_graphic_frame.rb +27 -27
  197. data/test/drawing/tc_hyperlink.rb +64 -64
  198. data/test/drawing/tc_line_3d_chart.rb +47 -47
  199. data/test/drawing/tc_line_chart.rb +39 -39
  200. data/test/drawing/tc_line_series.rb +71 -71
  201. data/test/drawing/tc_marker.rb +44 -44
  202. data/test/drawing/tc_named_axis_data.rb +27 -27
  203. data/test/drawing/tc_num_data.rb +31 -31
  204. data/test/drawing/tc_num_val.rb +29 -29
  205. data/test/drawing/tc_one_cell_anchor.rb +66 -66
  206. data/test/drawing/tc_pic.rb +103 -103
  207. data/test/drawing/tc_picture_locking.rb +72 -72
  208. data/test/drawing/tc_pie_3D_chart.rb +28 -28
  209. data/test/drawing/tc_pie_series.rb +33 -33
  210. data/test/drawing/tc_scaling.rb +36 -36
  211. data/test/drawing/tc_scatter_chart.rb +48 -48
  212. data/test/drawing/tc_scatter_series.rb +74 -56
  213. data/test/drawing/tc_ser_axis.rb +31 -31
  214. data/test/drawing/tc_series.rb +23 -23
  215. data/test/drawing/tc_series_title.rb +54 -54
  216. data/test/drawing/tc_str_data.rb +18 -18
  217. data/test/drawing/tc_str_val.rb +30 -30
  218. data/test/drawing/tc_title.rb +70 -70
  219. data/test/drawing/tc_two_cell_anchor.rb +36 -36
  220. data/test/drawing/tc_val_axis.rb +24 -24
  221. data/test/drawing/tc_view_3D.rb +54 -54
  222. data/test/drawing/tc_vml_drawing.rb +25 -25
  223. data/test/drawing/tc_vml_shape.rb +106 -106
  224. data/test/profile.rb +24 -24
  225. data/test/rels/tc_relationship.rb +52 -52
  226. data/test/rels/tc_relationships.rb +37 -37
  227. data/test/stylesheet/tc_border.rb +37 -37
  228. data/test/stylesheet/tc_border_pr.rb +32 -32
  229. data/test/stylesheet/tc_cell_alignment.rb +81 -81
  230. data/test/stylesheet/tc_cell_protection.rb +29 -29
  231. data/test/stylesheet/tc_cell_style.rb +57 -57
  232. data/test/stylesheet/tc_color.rb +43 -43
  233. data/test/stylesheet/tc_dxf.rb +81 -81
  234. data/test/stylesheet/tc_fill.rb +18 -18
  235. data/test/stylesheet/tc_font.rb +133 -133
  236. data/test/stylesheet/tc_gradient_fill.rb +72 -72
  237. data/test/stylesheet/tc_gradient_stop.rb +31 -31
  238. data/test/stylesheet/tc_num_fmt.rb +30 -30
  239. data/test/stylesheet/tc_pattern_fill.rb +43 -43
  240. data/test/stylesheet/tc_styles.rb +309 -261
  241. data/test/stylesheet/tc_table_style.rb +44 -44
  242. data/test/stylesheet/tc_table_style_element.rb +45 -45
  243. data/test/stylesheet/tc_table_styles.rb +29 -29
  244. data/test/stylesheet/tc_xf.rb +120 -120
  245. data/test/tc_axlsx.rb +109 -109
  246. data/test/tc_helper.rb +10 -12
  247. data/test/tc_package.rb +317 -264
  248. data/test/util/tc_mime_type_utils.rb +13 -13
  249. data/test/util/tc_serialized_attributes.rb +19 -19
  250. data/test/util/tc_simple_typed_list.rb +77 -77
  251. data/test/util/tc_validators.rb +210 -210
  252. data/test/workbook/tc_defined_name.rb +49 -49
  253. data/test/workbook/tc_shared_strings_table.rb +59 -59
  254. data/test/workbook/tc_workbook.rb +165 -160
  255. data/test/workbook/tc_workbook_view.rb +50 -50
  256. data/test/workbook/worksheet/auto_filter/tc_auto_filter.rb +38 -38
  257. data/test/workbook/worksheet/auto_filter/tc_filter_column.rb +76 -76
  258. data/test/workbook/worksheet/auto_filter/tc_filters.rb +50 -50
  259. data/test/workbook/worksheet/tc_break.rb +49 -49
  260. data/test/workbook/worksheet/tc_cell.rb +465 -453
  261. data/test/workbook/worksheet/tc_cfvo.rb +31 -31
  262. data/test/workbook/worksheet/tc_col.rb +93 -93
  263. data/test/workbook/worksheet/tc_color_scale.rb +58 -58
  264. data/test/workbook/worksheet/tc_comment.rb +72 -72
  265. data/test/workbook/worksheet/tc_comments.rb +57 -57
  266. data/test/workbook/worksheet/tc_conditional_formatting.rb +224 -224
  267. data/test/workbook/worksheet/tc_data_bar.rb +46 -46
  268. data/test/workbook/worksheet/tc_data_validation.rb +265 -265
  269. data/test/workbook/worksheet/tc_date_time_converter.rb +124 -124
  270. data/test/workbook/worksheet/tc_header_footer.rb +151 -151
  271. data/test/workbook/worksheet/tc_icon_set.rb +45 -45
  272. data/test/workbook/worksheet/tc_outline_pr.rb +19 -19
  273. data/test/workbook/worksheet/tc_page_margins.rb +97 -97
  274. data/test/workbook/worksheet/tc_page_set_up_pr.rb +15 -15
  275. data/test/workbook/worksheet/tc_page_setup.rb +143 -143
  276. data/test/workbook/worksheet/tc_pane.rb +54 -54
  277. data/test/workbook/worksheet/tc_pivot_table.rb +180 -135
  278. data/test/workbook/worksheet/tc_pivot_table_cache_definition.rb +62 -54
  279. data/test/workbook/worksheet/tc_print_options.rb +72 -72
  280. data/test/workbook/worksheet/tc_protected_range.rb +17 -17
  281. data/test/workbook/worksheet/tc_rich_text.rb +44 -44
  282. data/test/workbook/worksheet/tc_rich_text_run.rb +173 -173
  283. data/test/workbook/worksheet/tc_row.rb +160 -139
  284. data/test/workbook/worksheet/tc_selection.rb +55 -55
  285. data/test/workbook/worksheet/tc_sheet_calc_pr.rb +18 -18
  286. data/test/workbook/worksheet/tc_sheet_format_pr.rb +88 -88
  287. data/test/workbook/worksheet/tc_sheet_pr.rb +49 -49
  288. data/test/workbook/worksheet/tc_sheet_protection.rb +117 -117
  289. data/test/workbook/worksheet/tc_sheet_view.rb +214 -214
  290. data/test/workbook/worksheet/tc_table.rb +77 -67
  291. data/test/workbook/worksheet/tc_table_style_info.rb +53 -53
  292. data/test/workbook/worksheet/tc_worksheet.rb +632 -601
  293. data/test/workbook/worksheet/tc_worksheet_hyperlink.rb +55 -55
  294. metadata +11 -11
data/test/tc_package.rb CHANGED
@@ -1,264 +1,317 @@
1
- # encoding: UTF-8
2
- require 'tc_helper.rb'
3
-
4
- class TestPackage < Test::Unit::TestCase
5
- def setup
6
- @package = Axlsx::Package.new
7
- ws = @package.workbook.add_worksheet
8
- ws.add_row ['Can', 'we', 'build it?']
9
- ws.add_row ['Yes!', 'We', 'can!']
10
- @rt = Axlsx::RichText.new
11
- @rt.add_run "run 1", :b => true, :i => false
12
- ws.add_row [@rt]
13
-
14
- ws.rows.last.add_cell('b', :type => :text)
15
-
16
- ws.outline_level_rows 0, 1
17
- ws.outline_level_columns 0, 1
18
- ws.add_hyperlink :ref => ws.rows.first.cells.last, :location => 'https://github.com/randym'
19
- ws.workbook.add_defined_name("#{ws.name}!A1:C2", :name => '_xlnm.Print_Titles', :hidden => true)
20
- ws.workbook.add_view active_tab: 1, first_sheet: 0
21
- ws.protect_range('A1:C1')
22
- ws.protect_range(ws.rows.last.cells)
23
- ws.add_comment :author => 'alice', :text => 'Hi Bob', :ref => 'A12'
24
- ws.add_comment :author => 'bob', :text => 'Hi Alice', :ref => 'F19'
25
- ws.sheet_view do |vs|
26
- vs.pane do |p|
27
- p.active_pane = :top_right
28
- p.state = :split
29
- p.x_split = 11080
30
- p.y_split = 5000
31
- p.top_left_cell = 'C44'
32
- end
33
-
34
- vs.add_selection(:top_left, { :active_cell => 'A2', :sqref => 'A2' })
35
- vs.add_selection(:top_right, { :active_cell => 'I10', :sqref => 'I10' })
36
- vs.add_selection(:bottom_left, { :active_cell => 'E55', :sqref => 'E55' })
37
- vs.add_selection(:bottom_right, { :active_cell => 'I57', :sqref => 'I57' })
38
- end
39
-
40
- ws.add_chart(Axlsx::Pie3DChart, :title => "これは?", :start_at => [0,3]) do |chart|
41
- chart.add_series :data=>[1,2,3], :labels=>["a", "b", "c"]
42
- chart.d_lbls.show_val = true
43
- chart.d_lbls.d_lbl_pos = :outEnd
44
- chart.d_lbls.show_percent = true
45
- end
46
-
47
- ws.add_chart(Axlsx::Line3DChart, :title => "axis labels") do |chart|
48
- chart.valAxis.title = 'bob'
49
- chart.d_lbls.show_val = true
50
- end
51
-
52
- ws.add_chart(Axlsx::Bar3DChart, :title => 'bar chart') do |chart|
53
- chart.add_series :data => [1,4,5], :labels => %w(A B C)
54
- chart.d_lbls.show_percent = true
55
- end
56
-
57
- ws.add_chart(Axlsx::ScatterChart, :title => 'scat man') do |chart|
58
- chart.add_series :xData => [1,2,3,4], :yData => [4,3,2,1]
59
- chart.d_lbls.show_val = true
60
- end
61
-
62
- ws.add_chart(Axlsx::BubbleChart, :title => 'bubble chart') do |chart|
63
- chart.add_series :xData => [1,2,3,4], :yData => [1,3,2,4]
64
- chart.d_lbls.show_val = true
65
- end
66
-
67
- @fname = 'axlsx_test_serialization.xlsx'
68
- img = File.expand_path('../fixtures/image1.jpeg', __FILE__)
69
- ws.add_image(:image_src => img, :noSelect => true, :noMove => true, :hyperlink=>"http://axlsx.blogspot.com") do |image|
70
- image.width=720
71
- image.height=666
72
- image.hyperlink.tooltip = "Labeled Link"
73
- image.start_at 5, 5
74
- image.end_at 10, 10
75
- end
76
- ws.add_image :image_src => File.expand_path('../fixtures/image1.gif', __FILE__) do |image|
77
- image.start_at 0, 20
78
- image.width=360
79
- image.height=333
80
- end
81
- ws.add_image :image_src => File.expand_path('../fixtures/image1.png', __FILE__) do |image|
82
- image.start_at 9, 20
83
- image.width = 180
84
- image.height = 167
85
- end
86
- ws.add_table 'A1:C1'
87
-
88
- ws.add_pivot_table 'G5:G6', 'A1:B3'
89
-
90
- ws.add_page_break "B2"
91
-
92
- end
93
-
94
- def test_use_autowidth
95
- @package.use_autowidth = false
96
- assert(@package.workbook.use_autowidth == false)
97
- end
98
-
99
- def test_core_accessor
100
- assert_equal(@package.core, @package.instance_values["core"])
101
- assert_raise(NoMethodError) {@package.core = nil }
102
- end
103
-
104
- def test_app_accessor
105
- assert_equal(@package.app, @package.instance_values["app"])
106
- assert_raise(NoMethodError) {@package.app = nil }
107
- end
108
-
109
- def test_use_shared_strings
110
- assert_equal(@package.use_shared_strings, nil)
111
- assert_raise(ArgumentError) {@package.use_shared_strings 9}
112
- assert_nothing_raised {@package.use_shared_strings = true}
113
- assert_equal(@package.use_shared_strings, @package.workbook.use_shared_strings)
114
- end
115
-
116
- def test_default_objects_are_created
117
- assert(@package.instance_values["app"].is_a?(Axlsx::App), 'App object not created')
118
- assert(@package.instance_values["core"].is_a?(Axlsx::Core), 'Core object not created')
119
- assert(@package.workbook.is_a?(Axlsx::Workbook), 'Workbook object not created')
120
- assert(Axlsx::Package.new.workbook.worksheets.size == 0, 'Workbook should not have sheets by default')
121
- end
122
-
123
- def test_created_at_is_propagated_to_core
124
- time = Time.utc(2013, 1, 1, 12, 0)
125
- p = Axlsx::Package.new :created_at => time
126
- assert_equal(time, p.core.created)
127
- end
128
-
129
- def test_serialization
130
- @package.serialize(@fname)
131
- assert_zip_file_matches_package(@fname, @package)
132
- File.delete(@fname)
133
- end
134
-
135
- def test_serialization_with_zip_command
136
- @package.serialize(@fname, false, zip_command: "zip")
137
- assert_zip_file_matches_package(@fname, @package)
138
- File.delete(@fname)
139
- end
140
-
141
- def test_serialization_with_zip_command_and_absolute_path
142
- fname = "#{Dir.tmpdir}/#{@fname}"
143
- @package.serialize(fname, false, zip_command: "zip")
144
- assert_zip_file_matches_package(fname, @package)
145
- File.delete(fname)
146
- end
147
-
148
- def test_serialization_with_invalid_zip_command
149
- assert_raises Axlsx::ZipCommand::ZipError do
150
- @package.serialize(@fname, false, zip_command: "invalid_zip")
151
- end
152
- end
153
-
154
- def assert_zip_file_matches_package(fname, package)
155
- zf = Zip::File.open(fname)
156
- package.send(:parts).each{ |part| zf.get_entry(part[:entry]) }
157
- end
158
-
159
- # See comment for Package#zip_entry_for_part
160
- def test_serialization_creates_identical_files_at_any_time_if_created_at_is_set
161
- @package.core.created = Time.now
162
- zip_content_now = @package.to_stream.string
163
- Timecop.travel(3600) do
164
- zip_content_then = @package.to_stream.string
165
- assert zip_content_then == zip_content_now, "zip files are not identical"
166
- end
167
- end
168
-
169
- def test_serialization_creates_identical_files_for_identical_packages
170
- package_1, package_2 = 2.times.map do
171
- Axlsx::Package.new(:created_at => Time.utc(2013, 1, 1)).tap do |p|
172
- p.workbook.add_worksheet(:name => "Basic Worksheet") do |sheet|
173
- sheet.add_row [1, 2, 3]
174
- end
175
- end
176
- end
177
- assert package_1.to_stream.string == package_2.to_stream.string, "zip files are not identical"
178
- end
179
-
180
- def test_serialization_creates_files_with_excel_mime_type
181
- assert_equal(MimeMagic.by_magic(@package.to_stream).type,
182
- 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet')
183
- end
184
-
185
- def test_validation
186
- assert_equal(@package.validate.size, 0, @package.validate)
187
- Axlsx::Workbook.send(:class_variable_set, :@@date1904, 9900)
188
- assert(@package.validate.size > 0)
189
- end
190
-
191
- def test_parts
192
- p = @package.send(:parts)
193
- #all parts have an entry
194
- assert_equal(p.select{ |part| part[:entry] =~ /_rels\/\.rels/ }.size, 1, "rels missing")
195
- assert_equal(p.select{ |part| part[:entry] =~ /docProps\/core\.xml/ }.size, 1, "core missing")
196
- assert_equal(p.select{ |part| part[:entry] =~ /docProps\/app\.xml/ }.size, 1, "app missing")
197
- assert_equal(p.select{ |part| part[:entry] =~ /xl\/_rels\/workbook\.xml\.rels/ }.size, 1, "workbook rels missing")
198
- assert_equal(p.select{ |part| part[:entry] =~ /xl\/workbook\.xml/ }.size, 1, "workbook missing")
199
- assert_equal(p.select{ |part| part[:entry] =~ /\[Content_Types\]\.xml/ }.size, 1, "content types missing")
200
- assert_equal(p.select{ |part| part[:entry] =~ /xl\/styles\.xml/ }.size, 1, "styles missin")
201
- assert_equal(p.select{ |part| part[:entry] =~ /xl\/drawings\/_rels\/drawing\d\.xml\.rels/ }.size, @package.workbook.drawings.size, "one or more drawing rels missing")
202
- assert_equal(p.select{ |part| part[:entry] =~ /xl\/drawings\/drawing\d\.xml/ }.size, @package.workbook.drawings.size, "one or more drawings missing")
203
- assert_equal(p.select{ |part| part[:entry] =~ /xl\/charts\/chart\d\.xml/ }.size, @package.workbook.charts.size, "one or more charts missing")
204
- assert_equal(p.select{ |part| part[:entry] =~ /xl\/worksheets\/sheet\d\.xml/ }.size, @package.workbook.worksheets.size, "one or more sheet missing")
205
- assert_equal(p.select{ |part| part[:entry] =~ /xl\/worksheets\/_rels\/sheet\d\.xml\.rels/ }.size, @package.workbook.worksheets.size, "one or more sheet rels missing")
206
- assert_equal(p.select{ |part| part[:entry] =~ /xl\/comments\d\.xml/ }.size, @package.workbook.worksheets.size, "one or more sheet rels missing")
207
- assert_equal(p.select{ |part| part[:entry] =~ /xl\/pivotTables\/pivotTable\d\.xml/ }.size, @package.workbook.worksheets.first.pivot_tables.size, "one or more pivot tables missing")
208
- assert_equal(p.select{ |part| part[:entry] =~ /xl\/pivotTables\/_rels\/pivotTable\d\.xml.rels/ }.size, @package.workbook.worksheets.first.pivot_tables.size, "one or more pivot tables rels missing")
209
- assert_equal(p.select{ |part| part[:entry] =~ /xl\/pivotCache\/pivotCacheDefinition\d\.xml/ }.size, @package.workbook.worksheets.first.pivot_tables.size, "one or more pivot tables missing")
210
-
211
-
212
- #no mystery parts
213
- assert_equal(25, p.size)
214
-
215
- end
216
-
217
- def test_shared_strings_requires_part
218
- @package.use_shared_strings = true
219
- @package.to_stream #ensure all cell_serializer paths are hit
220
- p = @package.send(:parts)
221
- assert_equal(p.select{ |part| part[:entry] =~/xl\/sharedStrings.xml/}.size, 1, "shared strings table missing")
222
- end
223
-
224
- def test_workbook_is_a_workbook
225
- assert @package.workbook.is_a? Axlsx::Workbook
226
- end
227
-
228
- def test_base_content_types
229
- ct = @package.send(:base_content_types)
230
- assert(ct.select { |c| c.ContentType == Axlsx::RELS_CT }.size == 1, "rels content type missing")
231
- assert(ct.select { |c| c.ContentType == Axlsx::XML_CT }.size == 1, "xml content type missing")
232
- assert(ct.select { |c| c.ContentType == Axlsx::APP_CT }.size == 1, "app content type missing")
233
- assert(ct.select { |c| c.ContentType == Axlsx::CORE_CT }.size == 1, "core content type missing")
234
- assert(ct.select { |c| c.ContentType == Axlsx::STYLES_CT }.size == 1, "styles content type missing")
235
- assert(ct.select { |c| c.ContentType == Axlsx::WORKBOOK_CT }.size == 1, "workbook content type missing")
236
- assert(ct.size == 6)
237
- end
238
-
239
- def test_content_type_added_with_shared_strings
240
- @package.use_shared_strings = true
241
- ct = @package.send(:content_types)
242
- assert(ct.select { |type| type.ContentType == Axlsx::SHARED_STRINGS_CT }.size == 1)
243
- end
244
-
245
- def test_name_to_indices
246
- assert(Axlsx::name_to_indices('A1') == [0,0])
247
- assert(Axlsx::name_to_indices('A100') == [0,99], 'needs to axcept rows that contain 0')
248
- end
249
-
250
- def test_to_stream
251
- stream = @package.to_stream
252
- assert(stream.is_a?(StringIO))
253
- # this is just a roundabout guess for a package as it is build now
254
- # in testing.
255
- assert(stream.size > 80000)
256
- # Cached ids should be cleared
257
- assert(Axlsx::Relationship.ids_cache.empty?)
258
- end
259
-
260
- def test_encrypt
261
- # this is no where near close to ready yet
262
- assert(@package.encrypt('your_mom.xlsxl', 'has a password') == false)
263
- end
264
- end
1
+ # encoding: UTF-8
2
+ require 'tc_helper.rb'
3
+
4
+ class TestPackage < Test::Unit::TestCase
5
+ def setup
6
+ @package = Axlsx::Package.new
7
+ ws = @package.workbook.add_worksheet
8
+ ws.add_row ['Can', 'we', 'build it?']
9
+ ws.add_row ['Yes!', 'We', 'can!']
10
+ @rt = Axlsx::RichText.new
11
+ @rt.add_run "run 1", :b => true, :i => false
12
+ ws.add_row [@rt]
13
+
14
+ ws.rows.last.add_cell('b', :type => :text)
15
+
16
+ ws.outline_level_rows 0, 1
17
+ ws.outline_level_columns 0, 1
18
+ ws.add_hyperlink :ref => ws.rows.first.cells.last, :location => 'https://github.com/randym'
19
+ ws.workbook.add_defined_name("#{ws.name}!A1:C2", :name => '_xlnm.Print_Titles', :hidden => true)
20
+ ws.workbook.add_view active_tab: 1, first_sheet: 0
21
+ ws.protect_range('A1:C1')
22
+ ws.protect_range(ws.rows.last.cells)
23
+ ws.add_comment :author => 'alice', :text => 'Hi Bob', :ref => 'A12'
24
+ ws.add_comment :author => 'bob', :text => 'Hi Alice', :ref => 'F19'
25
+ ws.sheet_view do |vs|
26
+ vs.pane do |p|
27
+ p.active_pane = :top_right
28
+ p.state = :split
29
+ p.x_split = 11080
30
+ p.y_split = 5000
31
+ p.top_left_cell = 'C44'
32
+ end
33
+
34
+ vs.add_selection(:top_left, { :active_cell => 'A2', :sqref => 'A2' })
35
+ vs.add_selection(:top_right, { :active_cell => 'I10', :sqref => 'I10' })
36
+ vs.add_selection(:bottom_left, { :active_cell => 'E55', :sqref => 'E55' })
37
+ vs.add_selection(:bottom_right, { :active_cell => 'I57', :sqref => 'I57' })
38
+ end
39
+
40
+ ws.add_chart(Axlsx::Pie3DChart, :title => "これは?", :start_at => [0,3]) do |chart|
41
+ chart.add_series :data=>[1,2,3], :labels=>["a", "b", "c"]
42
+ chart.d_lbls.show_val = true
43
+ chart.d_lbls.d_lbl_pos = :outEnd
44
+ chart.d_lbls.show_percent = true
45
+ end
46
+
47
+ ws.add_chart(Axlsx::Line3DChart, :title => "axis labels") do |chart|
48
+ chart.valAxis.title = 'bob'
49
+ chart.d_lbls.show_val = true
50
+ end
51
+
52
+ ws.add_chart(Axlsx::Bar3DChart, :title => 'bar chart') do |chart|
53
+ chart.add_series :data => [1,4,5], :labels => %w(A B C)
54
+ chart.d_lbls.show_percent = true
55
+ end
56
+
57
+ ws.add_chart(Axlsx::ScatterChart, :title => 'scat man') do |chart|
58
+ chart.add_series :xData => [1,2,3,4], :yData => [4,3,2,1]
59
+ chart.d_lbls.show_val = true
60
+ end
61
+
62
+ ws.add_chart(Axlsx::BubbleChart, :title => 'bubble chart') do |chart|
63
+ chart.add_series :xData => [1,2,3,4], :yData => [1,3,2,4]
64
+ chart.d_lbls.show_val = true
65
+ end
66
+
67
+ @fname = 'axlsx_test_serialization.xlsx'
68
+ img = File.expand_path('../fixtures/image1.jpeg', __FILE__)
69
+ ws.add_image(:image_src => img, :noSelect => true, :noMove => true, :hyperlink=>"http://axlsx.blogspot.com") do |image|
70
+ image.width=720
71
+ image.height=666
72
+ image.hyperlink.tooltip = "Labeled Link"
73
+ image.start_at 5, 5
74
+ image.end_at 10, 10
75
+ end
76
+ ws.add_image :image_src => File.expand_path('../fixtures/image1.gif', __FILE__) do |image|
77
+ image.start_at 0, 20
78
+ image.width=360
79
+ image.height=333
80
+ end
81
+ ws.add_image :image_src => File.expand_path('../fixtures/image1.png', __FILE__) do |image|
82
+ image.start_at 9, 20
83
+ image.width = 180
84
+ image.height = 167
85
+ end
86
+ ws.add_table 'A1:C1'
87
+
88
+ ws.add_pivot_table 'G5:G6', 'A1:B3'
89
+
90
+ ws.add_page_break "B2"
91
+
92
+ end
93
+
94
+ def test_use_autowidth
95
+ @package.use_autowidth = false
96
+ assert(@package.workbook.use_autowidth == false)
97
+ end
98
+
99
+ def test_core_accessor
100
+ assert_equal(@package.core, @package.instance_values["core"])
101
+ assert_raise(NoMethodError) {@package.core = nil }
102
+ end
103
+
104
+ def test_app_accessor
105
+ assert_equal(@package.app, @package.instance_values["app"])
106
+ assert_raise(NoMethodError) {@package.app = nil }
107
+ end
108
+
109
+ def test_use_shared_strings
110
+ assert_equal(@package.use_shared_strings, nil)
111
+ assert_raise(ArgumentError) {@package.use_shared_strings 9}
112
+ assert_nothing_raised {@package.use_shared_strings = true}
113
+ assert_equal(@package.use_shared_strings, @package.workbook.use_shared_strings)
114
+ end
115
+
116
+ def test_default_objects_are_created
117
+ assert(@package.instance_values["app"].is_a?(Axlsx::App), 'App object not created')
118
+ assert(@package.instance_values["core"].is_a?(Axlsx::Core), 'Core object not created')
119
+ assert(@package.workbook.is_a?(Axlsx::Workbook), 'Workbook object not created')
120
+ assert(Axlsx::Package.new.workbook.worksheets.size == 0, 'Workbook should not have sheets by default')
121
+ end
122
+
123
+ def test_created_at_is_propagated_to_core
124
+ time = Time.utc(2013, 1, 1, 12, 0)
125
+ p = Axlsx::Package.new :created_at => time
126
+ assert_equal(time, p.core.created)
127
+ end
128
+
129
+ def test_serialization
130
+ @package.serialize(@fname)
131
+ assert_zip_file_matches_package(@fname, @package)
132
+ assert_created_with_rubyzip(@fname, @package)
133
+ File.delete(@fname)
134
+ end
135
+
136
+ def test_serialization_with_zip_command
137
+ @package.serialize(@fname, zip_command: "zip")
138
+ assert_zip_file_matches_package(@fname, @package)
139
+ assert_created_with_zip_command(@fname, @package)
140
+ File.delete(@fname)
141
+ end
142
+
143
+ def test_serialization_with_zip_command_and_absolute_path
144
+ fname = "#{Dir.tmpdir}/#{@fname}"
145
+ @package.serialize(fname, zip_command: "zip")
146
+ assert_zip_file_matches_package(fname, @package)
147
+ assert_created_with_zip_command(fname, @package)
148
+ File.delete(fname)
149
+ end
150
+
151
+ def test_serialization_with_invalid_zip_command
152
+ assert_raises Axlsx::ZipCommand::ZipError do
153
+ @package.serialize(@fname, zip_command: "invalid_zip")
154
+ end
155
+ end
156
+
157
+ def assert_zip_file_matches_package(fname, package)
158
+ zf = Zip::File.open(fname)
159
+ package.send(:parts).each{ |part| zf.get_entry(part[:entry]) }
160
+ end
161
+
162
+ def assert_created_with_rubyzip(fname, package)
163
+ assert_equal 2098, get_mtime(fname, package).year, "XLSX files created with RubyZip have 2098 as the file mtime"
164
+ end
165
+
166
+ def assert_created_with_zip_command(fname, package)
167
+ assert_equal Time.now.utc.year, get_mtime(fname, package).year, "XLSX files created with a zip command have the current year as the file mtime"
168
+ end
169
+
170
+ def get_mtime(fname, package)
171
+ zf = Zip::File.open(fname)
172
+ part = package.send(:parts).first
173
+ entry = zf.get_entry(part[:entry])
174
+ entry.mtime.utc
175
+ end
176
+
177
+ def test_serialization_with_deprecated_argument
178
+ warnings = capture_warnings do
179
+ @package.serialize(@fname, false)
180
+ end
181
+ assert_equal 1, warnings.size
182
+ assert_includes warnings.first, "confirm_valid as a boolean is deprecated"
183
+ File.delete(@fname)
184
+ end
185
+
186
+ def test_serialization_with_deprecated_three_arguments
187
+ warnings = capture_warnings do
188
+ @package.serialize(@fname, true, zip_command: "zip")
189
+ end
190
+ assert_zip_file_matches_package(@fname, @package)
191
+ assert_created_with_zip_command(@fname, @package)
192
+ assert_equal 2, warnings.size
193
+ assert_includes warnings.first, "with 3 arguments is deprecated"
194
+ File.delete(@fname)
195
+ end
196
+
197
+ def capture_warnings(&block)
198
+ original_warn = Kernel.instance_method(:warn)
199
+ warnings = []
200
+ Kernel.send(:define_method, :warn) { |string| warnings << string }
201
+ block.call
202
+ original_verbose = $VERBOSE
203
+ $VERBOSE = nil
204
+ Kernel.send(:define_method, :warn, original_warn)
205
+ $VERBOSE = original_verbose
206
+ warnings
207
+ end
208
+
209
+ # See comment for Package#zip_entry_for_part
210
+ def test_serialization_creates_identical_files_at_any_time_if_created_at_is_set
211
+ @package.core.created = Time.now
212
+ zip_content_now = @package.to_stream.string
213
+ Timecop.travel(3600) do
214
+ zip_content_then = @package.to_stream.string
215
+ assert zip_content_then == zip_content_now, "zip files are not identical"
216
+ end
217
+ end
218
+
219
+ def test_serialization_creates_identical_files_for_identical_packages
220
+ package_1, package_2 = 2.times.map do
221
+ Axlsx::Package.new(:created_at => Time.utc(2013, 1, 1)).tap do |p|
222
+ p.workbook.add_worksheet(:name => "Basic Worksheet") do |sheet|
223
+ sheet.add_row [1, 2, 3]
224
+ end
225
+ end
226
+ end
227
+ assert package_1.to_stream.string == package_2.to_stream.string, "zip files are not identical"
228
+ end
229
+
230
+ def test_serialization_creates_files_with_excel_mime_type
231
+ assert_equal(Marcel::MimeType.for(@package.to_stream),
232
+ 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet')
233
+ end
234
+
235
+ def test_validation
236
+ assert_equal(@package.validate.size, 0, @package.validate)
237
+ Axlsx::Workbook.send(:class_variable_set, :@@date1904, 9900)
238
+ assert(@package.validate.size > 0)
239
+ end
240
+
241
+ def test_parts
242
+ p = @package.send(:parts)
243
+ #all parts have an entry
244
+ assert_equal(p.select{ |part| part[:entry] =~ /_rels\/\.rels/ }.size, 1, "rels missing")
245
+ assert_equal(p.select{ |part| part[:entry] =~ /docProps\/core\.xml/ }.size, 1, "core missing")
246
+ assert_equal(p.select{ |part| part[:entry] =~ /docProps\/app\.xml/ }.size, 1, "app missing")
247
+ assert_equal(p.select{ |part| part[:entry] =~ /xl\/_rels\/workbook\.xml\.rels/ }.size, 1, "workbook rels missing")
248
+ assert_equal(p.select{ |part| part[:entry] =~ /xl\/workbook\.xml/ }.size, 1, "workbook missing")
249
+ assert_equal(p.select{ |part| part[:entry] =~ /\[Content_Types\]\.xml/ }.size, 1, "content types missing")
250
+ assert_equal(p.select{ |part| part[:entry] =~ /xl\/styles\.xml/ }.size, 1, "styles missin")
251
+ assert_equal(p.select{ |part| part[:entry] =~ /xl\/drawings\/_rels\/drawing\d\.xml\.rels/ }.size, @package.workbook.drawings.size, "one or more drawing rels missing")
252
+ assert_equal(p.select{ |part| part[:entry] =~ /xl\/drawings\/drawing\d\.xml/ }.size, @package.workbook.drawings.size, "one or more drawings missing")
253
+ assert_equal(p.select{ |part| part[:entry] =~ /xl\/charts\/chart\d\.xml/ }.size, @package.workbook.charts.size, "one or more charts missing")
254
+ assert_equal(p.select{ |part| part[:entry] =~ /xl\/worksheets\/sheet\d\.xml/ }.size, @package.workbook.worksheets.size, "one or more sheet missing")
255
+ assert_equal(p.select{ |part| part[:entry] =~ /xl\/worksheets\/_rels\/sheet\d\.xml\.rels/ }.size, @package.workbook.worksheets.size, "one or more sheet rels missing")
256
+ assert_equal(p.select{ |part| part[:entry] =~ /xl\/comments\d\.xml/ }.size, @package.workbook.worksheets.size, "one or more sheet rels missing")
257
+ assert_equal(p.select{ |part| part[:entry] =~ /xl\/pivotTables\/pivotTable\d\.xml/ }.size, @package.workbook.worksheets.first.pivot_tables.size, "one or more pivot tables missing")
258
+ assert_equal(p.select{ |part| part[:entry] =~ /xl\/pivotTables\/_rels\/pivotTable\d\.xml.rels/ }.size, @package.workbook.worksheets.first.pivot_tables.size, "one or more pivot tables rels missing")
259
+ assert_equal(p.select{ |part| part[:entry] =~ /xl\/pivotCache\/pivotCacheDefinition\d\.xml/ }.size, @package.workbook.worksheets.first.pivot_tables.size, "one or more pivot tables missing")
260
+
261
+
262
+ #no mystery parts
263
+ assert_equal(25, p.size)
264
+
265
+ end
266
+
267
+ def test_shared_strings_requires_part
268
+ @package.use_shared_strings = true
269
+ @package.to_stream #ensure all cell_serializer paths are hit
270
+ p = @package.send(:parts)
271
+ assert_equal(p.select{ |part| part[:entry] =~/xl\/sharedStrings.xml/}.size, 1, "shared strings table missing")
272
+ end
273
+
274
+ def test_workbook_is_a_workbook
275
+ assert @package.workbook.is_a? Axlsx::Workbook
276
+ end
277
+
278
+ def test_base_content_types
279
+ ct = @package.send(:base_content_types)
280
+ assert(ct.select { |c| c.ContentType == Axlsx::RELS_CT }.size == 1, "rels content type missing")
281
+ assert(ct.select { |c| c.ContentType == Axlsx::XML_CT }.size == 1, "xml content type missing")
282
+ assert(ct.select { |c| c.ContentType == Axlsx::APP_CT }.size == 1, "app content type missing")
283
+ assert(ct.select { |c| c.ContentType == Axlsx::CORE_CT }.size == 1, "core content type missing")
284
+ assert(ct.select { |c| c.ContentType == Axlsx::STYLES_CT }.size == 1, "styles content type missing")
285
+ assert(ct.select { |c| c.ContentType == Axlsx::WORKBOOK_CT }.size == 1, "workbook content type missing")
286
+ assert(ct.size == 6)
287
+ end
288
+
289
+ def test_content_type_added_with_shared_strings
290
+ @package.use_shared_strings = true
291
+ ct = @package.send(:content_types)
292
+ assert(ct.select { |type| type.ContentType == Axlsx::SHARED_STRINGS_CT }.size == 1)
293
+ end
294
+
295
+ def test_name_to_indices
296
+ assert(Axlsx::name_to_indices('A1') == [0,0])
297
+ assert(Axlsx::name_to_indices('A100') == [0,99], 'needs to axcept rows that contain 0')
298
+ end
299
+
300
+ def test_to_stream
301
+ stream = @package.to_stream
302
+ assert(stream.is_a?(StringIO))
303
+ # this is just a roundabout guess for a package as it is build now
304
+ # in testing.
305
+ assert(stream.size > 80000)
306
+ # Stream (of zipped contents) should have appropriate default encoding
307
+ assert stream.string.valid_encoding?
308
+ assert_equal(stream.external_encoding, Encoding::ASCII_8BIT)
309
+ # Cached ids should be cleared
310
+ assert(Axlsx::Relationship.ids_cache.empty?)
311
+ end
312
+
313
+ def test_encrypt
314
+ # this is no where near close to ready yet
315
+ assert(@package.encrypt('your_mom.xlsxl', 'has a password') == false)
316
+ end
317
+ end
@@ -1,13 +1,13 @@
1
- require 'tc_helper.rb'
2
- class TestMimeTypeUtils < Test::Unit::TestCase
3
- def setup
4
- @test_img = File.dirname(__FILE__) + "/../fixtures/image1.jpeg"
5
- end
6
-
7
- def teardown
8
- end
9
-
10
- def test_mime_type_utils
11
- assert_equal(Axlsx::MimeTypeUtils::get_mime_type(@test_img), 'image/jpeg')
12
- end
13
- end
1
+ require 'tc_helper.rb'
2
+ class TestMimeTypeUtils < Test::Unit::TestCase
3
+ def setup
4
+ @test_img = File.dirname(__FILE__) + "/../fixtures/image1.jpeg"
5
+ end
6
+
7
+ def teardown
8
+ end
9
+
10
+ def test_mime_type_utils
11
+ assert_equal(Axlsx::MimeTypeUtils::get_mime_type(@test_img), 'image/jpeg')
12
+ end
13
+ end
@@ -1,19 +1,19 @@
1
- require 'tc_helper.rb'
2
- class Funk
3
- include Axlsx::Accessors
4
- include Axlsx::SerializedAttributes
5
- serializable_attributes :camel_symbol, :boolean, :integer
6
-
7
- attr_accessor :camel_symbol, :boolean, :integer
8
- end
9
-
10
- class TestSeralizedAttributes < Test::Unit::TestCase
11
- def setup
12
- @object = Funk.new
13
- end
14
-
15
- def test_camel_symbol
16
- @object.camel_symbol = :foo_bar
17
- assert_equal('camelSymbol="fooBar" ', @object.serialized_attributes)
18
- end
19
- end
1
+ require 'tc_helper.rb'
2
+ class Funk
3
+ include Axlsx::Accessors
4
+ include Axlsx::SerializedAttributes
5
+ serializable_attributes :camel_symbol, :boolean, :integer
6
+
7
+ attr_accessor :camel_symbol, :boolean, :integer
8
+ end
9
+
10
+ class TestSeralizedAttributes < Test::Unit::TestCase
11
+ def setup
12
+ @object = Funk.new
13
+ end
14
+
15
+ def test_camel_symbol
16
+ @object.camel_symbol = :foo_bar
17
+ assert_equal('camelSymbol="fooBar" ', @object.serialized_attributes)
18
+ end
19
+ end