axlsx 1.1.4 → 1.3.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 (242) hide show
  1. data/.yardopts +6 -2
  2. data/CHANGELOG.md +72 -0
  3. data/README.md +114 -31
  4. data/Rakefile +11 -3
  5. data/examples/auto_filter.rb +16 -0
  6. data/examples/auto_filter.xlsx +0 -0
  7. data/examples/basic_charts.rb +58 -0
  8. data/examples/chart_colors.rb +17 -2
  9. data/examples/data_validation.rb +50 -0
  10. data/examples/example.rb +171 -60
  11. data/examples/example.xlsx +0 -0
  12. data/examples/example_streamed.xlsx +0 -0
  13. data/examples/extractive.pdf +0 -0
  14. data/examples/extractive.rb +3 -0
  15. data/examples/extractive.xlsx +0 -0
  16. data/examples/hyperlinks.rb +23 -0
  17. data/examples/hyperlinks.xlsx +0 -0
  18. data/examples/no-use_autowidth.xlsx +0 -0
  19. data/examples/page_setup.rb +11 -0
  20. data/examples/page_setup.xlsx +0 -0
  21. data/examples/scraping_html.rb +91 -0
  22. data/examples/shared_strings_example.xlsx +0 -0
  23. data/examples/sheet_protection.rb +10 -0
  24. data/examples/sheet_view.rb +34 -0
  25. data/examples/skydrive/axlsx.csv +1 -0
  26. data/examples/skydrive/axlsx.xlsx +0 -0
  27. data/examples/skydrive/real_example.rb +8 -8
  28. data/examples/sprk2012/Screen Shot 2012-09-11 at 10.42.06 PM.png +0 -0
  29. data/examples/sprk2012/Screen Shot 2012-09-11 at 11.07.48 PM.png +0 -0
  30. data/examples/sprk2012/Screen Shot 2012-09-11 at 8.31.50 PM.png +0 -0
  31. data/examples/sprk2012/Screen Shot 2012-09-11 at 9.23.27 PM.png +0 -0
  32. data/examples/sprk2012/Screen Shot 2012-09-11 at 9.32.06 PM.png +0 -0
  33. data/examples/sprk2012/Screen Shot 2012-09-11 at 9.33.35 PM.png +0 -0
  34. data/examples/sprk2012/Screen Shot 2012-09-11 at 9.46.44 PM.png +0 -0
  35. data/examples/sprk2012/Screen Shot 2012-09-12 at 5.07.23 PM.png +0 -0
  36. data/examples/sprk2012/basics.rb +11 -0
  37. data/examples/sprk2012/basics.xlsx +0 -0
  38. data/examples/sprk2012/gravatar.jpeg +0 -0
  39. data/examples/sprk2012/hair_club.jpg +0 -0
  40. data/examples/sprk2012/images.rb +9 -0
  41. data/examples/sprk2012/images.xlsx +0 -0
  42. data/examples/sprk2012/line_chart.rb +56 -0
  43. data/examples/sprk2012/line_chart.xlsx +0 -0
  44. data/examples/sprk2012/sprk2012.key +0 -0
  45. data/examples/sprk2012/styles.rb +20 -0
  46. data/examples/sprk2012/styles.xlsx +0 -0
  47. data/examples/styles.rb +62 -0
  48. data/examples/styles.xlsx +0 -0
  49. data/examples/two_cell_anchor_image.rb +11 -0
  50. data/lib/axlsx/content_type/content_type.rb +2 -0
  51. data/lib/axlsx/content_type/default.rb +30 -15
  52. data/lib/axlsx/content_type/override.rb +29 -14
  53. data/lib/axlsx/doc_props/app.rb +161 -104
  54. data/lib/axlsx/doc_props/core.rb +9 -5
  55. data/lib/axlsx/drawing/ax_data_source.rb +7 -6
  56. data/lib/axlsx/drawing/axis.rb +82 -36
  57. data/lib/axlsx/drawing/bar_3D_chart.rb +49 -45
  58. data/lib/axlsx/drawing/bar_series.rb +2 -1
  59. data/lib/axlsx/drawing/cat_axis.rb +43 -39
  60. data/lib/axlsx/drawing/chart.rb +65 -54
  61. data/lib/axlsx/drawing/d_lbls.rb +100 -0
  62. data/lib/axlsx/drawing/drawing.rb +20 -8
  63. data/lib/axlsx/drawing/graphic_frame.rb +2 -1
  64. data/lib/axlsx/drawing/line_3D_chart.rb +3 -10
  65. data/lib/axlsx/drawing/num_data.rb +2 -2
  66. data/lib/axlsx/drawing/num_data_source.rb +4 -1
  67. data/lib/axlsx/drawing/pic.rb +44 -4
  68. data/lib/axlsx/drawing/pie_3D_chart.rb +10 -7
  69. data/lib/axlsx/drawing/scatter_chart.rb +2 -8
  70. data/lib/axlsx/drawing/title.rb +21 -9
  71. data/lib/axlsx/drawing/two_cell_anchor.rb +46 -9
  72. data/lib/axlsx/drawing/view_3D.rb +42 -32
  73. data/lib/axlsx/drawing/vml_drawing.rb +42 -0
  74. data/lib/axlsx/drawing/vml_shape.rb +125 -0
  75. data/lib/axlsx/package.rb +43 -16
  76. data/lib/axlsx/rels/relationship.rb +3 -3
  77. data/lib/axlsx/rels/relationships.rb +1 -11
  78. data/lib/axlsx/stylesheet/gradient_fill.rb +1 -1
  79. data/lib/axlsx/stylesheet/styles.rb +11 -2
  80. data/lib/axlsx/stylesheet/table_style.rb +3 -3
  81. data/lib/axlsx/util/constants.rb +131 -2
  82. data/lib/axlsx/util/simple_typed_list.rb +18 -22
  83. data/lib/axlsx/util/validators.rb +100 -9
  84. data/lib/axlsx/version.rb +2 -7
  85. data/lib/axlsx/workbook/defined_name.rb +174 -0
  86. data/lib/axlsx/workbook/defined_names.rb +21 -0
  87. data/lib/axlsx/workbook/workbook.rb +70 -13
  88. data/lib/axlsx/workbook/worksheet/auto_filter/auto_filter.rb +77 -0
  89. data/lib/axlsx/workbook/worksheet/auto_filter/filter_column.rb +102 -0
  90. data/lib/axlsx/workbook/worksheet/auto_filter/filters.rb +253 -0
  91. data/lib/axlsx/workbook/worksheet/cell.rb +41 -8
  92. data/lib/axlsx/workbook/worksheet/col.rb +15 -0
  93. data/lib/axlsx/workbook/worksheet/cols.rb +20 -0
  94. data/lib/axlsx/workbook/worksheet/comment.rb +101 -0
  95. data/lib/axlsx/workbook/worksheet/comments.rb +85 -0
  96. data/lib/axlsx/workbook/worksheet/conditional_formattings.rb +25 -0
  97. data/lib/axlsx/workbook/worksheet/data_bar.rb +1 -1
  98. data/lib/axlsx/workbook/worksheet/data_validation.rb +245 -0
  99. data/lib/axlsx/workbook/worksheet/data_validations.rb +28 -0
  100. data/lib/axlsx/workbook/worksheet/date_time_converter.rb +1 -1
  101. data/lib/axlsx/workbook/worksheet/dimension.rb +65 -0
  102. data/lib/axlsx/workbook/worksheet/merged_cells.rb +35 -0
  103. data/lib/axlsx/workbook/worksheet/page_set_up_pr.rb +47 -0
  104. data/lib/axlsx/workbook/worksheet/page_setup.rb +241 -0
  105. data/lib/axlsx/workbook/worksheet/pane.rb +144 -0
  106. data/lib/axlsx/workbook/worksheet/print_options.rb +63 -0
  107. data/lib/axlsx/workbook/worksheet/protected_range.rb +46 -0
  108. data/lib/axlsx/workbook/worksheet/protected_ranges.rb +34 -0
  109. data/lib/axlsx/workbook/worksheet/row.rb +36 -20
  110. data/lib/axlsx/workbook/worksheet/selection.rb +111 -0
  111. data/lib/axlsx/workbook/worksheet/sheet_calc_pr.rb +49 -0
  112. data/lib/axlsx/workbook/worksheet/sheet_data.rb +25 -0
  113. data/lib/axlsx/workbook/worksheet/sheet_pr.rb +107 -0
  114. data/lib/axlsx/workbook/worksheet/sheet_protection.rb +224 -0
  115. data/lib/axlsx/workbook/worksheet/sheet_view.rb +379 -0
  116. data/lib/axlsx/workbook/worksheet/table.rb +10 -3
  117. data/lib/axlsx/workbook/worksheet/table_style_info.rb +68 -0
  118. data/lib/axlsx/workbook/worksheet/tables.rb +31 -0
  119. data/lib/axlsx/workbook/worksheet/worksheet.rb +414 -254
  120. data/lib/axlsx/workbook/worksheet/worksheet_comments.rb +57 -0
  121. data/lib/axlsx/workbook/worksheet/worksheet_drawing.rb +64 -0
  122. data/lib/axlsx/workbook/worksheet/worksheet_hyperlink.rb +101 -0
  123. data/lib/axlsx/workbook/worksheet/worksheet_hyperlinks.rb +38 -0
  124. data/lib/axlsx.rb +38 -16
  125. data/test/content_type/tc_content_type.rb +1 -6
  126. data/test/doc_props/tc_app.rb +31 -1
  127. data/test/doc_props/tc_core.rb +3 -1
  128. data/test/drawing/tc_axis.rb +38 -3
  129. data/test/drawing/tc_bar_3D_chart.rb +12 -12
  130. data/test/drawing/tc_bar_series.rb +1 -2
  131. data/test/drawing/tc_cat_axis.rb +3 -3
  132. data/test/drawing/tc_chart.rb +29 -9
  133. data/test/drawing/tc_d_lbls.rb +47 -0
  134. data/test/drawing/tc_drawing.rb +11 -5
  135. data/test/drawing/tc_hyperlink.rb +4 -5
  136. data/test/drawing/tc_line_series.rb +7 -3
  137. data/test/drawing/tc_num_data.rb +5 -1
  138. data/test/drawing/tc_pic.rb +22 -2
  139. data/test/drawing/tc_pie_3D_chart.rb +4 -8
  140. data/test/drawing/tc_pie_series.rb +7 -2
  141. data/test/drawing/tc_scatter_chart.rb +6 -1
  142. data/test/drawing/tc_scatter_series.rb +1 -1
  143. data/test/drawing/tc_series.rb +1 -1
  144. data/test/drawing/tc_title.rb +16 -0
  145. data/test/drawing/tc_two_cell_anchor.rb +1 -2
  146. data/test/drawing/tc_view_3D.rb +18 -18
  147. data/test/drawing/tc_vml_drawing.rb +25 -0
  148. data/test/drawing/tc_vml_shape.rb +100 -0
  149. data/test/rels/tc_relationship.rb +1 -0
  150. data/test/stylesheet/tc_gradient_fill.rb +8 -0
  151. data/test/stylesheet/tc_pattern_fill.rb +7 -1
  152. data/test/stylesheet/tc_styles.rb +16 -4
  153. data/test/stylesheet/tc_table_style.rb +8 -0
  154. data/test/stylesheet/tc_table_style_element.rb +10 -1
  155. data/test/tc_helper.rb +1 -0
  156. data/test/tc_package.rb +94 -17
  157. data/test/util/tc_simple_typed_list.rb +13 -0
  158. data/test/util/tc_validators.rb +101 -8
  159. data/test/workbook/tc_defined_name.rb +41 -0
  160. data/test/workbook/tc_workbook.rb +5 -3
  161. data/test/workbook/worksheet/auto_filter/tc_auto_filter.rb +38 -0
  162. data/test/workbook/worksheet/auto_filter/tc_filter_column.rb +76 -0
  163. data/test/workbook/worksheet/auto_filter/tc_filters.rb +50 -0
  164. data/test/workbook/worksheet/tc_cell.rb +53 -7
  165. data/test/workbook/worksheet/tc_col.rb +9 -0
  166. data/test/workbook/worksheet/tc_comment.rb +57 -0
  167. data/test/workbook/worksheet/tc_comments.rb +57 -0
  168. data/test/workbook/worksheet/tc_conditional_formatting.rb +44 -0
  169. data/test/workbook/worksheet/tc_data_bar.rb +1 -1
  170. data/test/workbook/worksheet/tc_data_validation.rb +265 -0
  171. data/test/workbook/worksheet/tc_page_set_up_pr.rb +15 -0
  172. data/test/workbook/worksheet/tc_page_setup.rb +143 -0
  173. data/test/workbook/worksheet/tc_pane.rb +94 -0
  174. data/test/workbook/worksheet/tc_print_options.rb +72 -0
  175. data/test/workbook/worksheet/tc_protected_range.rb +17 -0
  176. data/test/workbook/worksheet/tc_row.rb +32 -14
  177. data/test/workbook/worksheet/tc_selection.rb +94 -0
  178. data/test/workbook/worksheet/tc_sheet_calc_pr.rb +18 -0
  179. data/test/workbook/worksheet/tc_sheet_pr.rb +27 -0
  180. data/test/workbook/worksheet/tc_sheet_protection.rb +117 -0
  181. data/test/workbook/worksheet/tc_sheet_view.rb +214 -0
  182. data/test/workbook/worksheet/{table/tc_table.rb → tc_table.rb} +9 -12
  183. data/test/workbook/worksheet/tc_table_style_info.rb +53 -0
  184. data/test/workbook/worksheet/tc_worksheet.rb +155 -51
  185. data/test/workbook/worksheet/tc_worksheet_hyperlink.rb +64 -0
  186. metadata +194 -81
  187. data/examples/#extractive.csv# +0 -0
  188. data/examples/#extractive.rb# +0 -45
  189. data/examples/chart_colors.rb~ +0 -0
  190. data/examples/chart_colors.xlsx +0 -0
  191. data/examples/colored_series_data.xlsx +0 -0
  192. data/examples/conditional_formatting/getting_barred.xlsx +0 -0
  193. data/examples/example.csv +0 -1000
  194. data/examples/extractive.csv +0 -1
  195. data/examples/extractive.csv~ +0 -1
  196. data/examples/extractive.rb~ +0 -3
  197. data/examples/stack.rb +0 -21
  198. data/examples/stack.rb~ +0 -27
  199. data/examples/stack.xlsx +0 -0
  200. data/examples/~$chart_colors.xlsx +0 -0
  201. data/examples/~$extractive.xlsx +0 -0
  202. data/lib/axlsx/drawing/ax_data_source.rb~ +0 -55
  203. data/lib/axlsx/drawing/data_source.rb~ +0 -51
  204. data/lib/axlsx/drawing/hlink_click.rb~ +0 -0
  205. data/lib/axlsx/drawing/hyperlink.rb~ +0 -64
  206. data/lib/axlsx/drawing/num_data.rb~ +0 -51
  207. data/lib/axlsx/drawing/num_data_source.rb~ +0 -54
  208. data/lib/axlsx/drawing/num_val.rb~ +0 -40
  209. data/lib/axlsx/drawing/picture_locking.rb~ +0 -36
  210. data/lib/axlsx/drawing/ref.rb~ +0 -41
  211. data/lib/axlsx/drawing/str_data.rb~ +0 -58
  212. data/lib/axlsx/drawing/str_val.rb~ +0 -35
  213. data/lib/axlsx/util/cbf.rb +0 -333
  214. data/lib/axlsx/util/cfb.rb~ +0 -201
  215. data/lib/axlsx/util/font_tables.rb~ +0 -0
  216. data/lib/axlsx/util/ms_off_crypto.rb +0 -189
  217. data/lib/axlsx/util/ms_off_crypto.rb~ +0 -3
  218. data/lib/axlsx/util/ms_offcrypto.rb~ +0 -0
  219. data/lib/axlsx/util/parser.rb~ +0 -6
  220. data/lib/axlsx/util/storage.rb~ +0 -0
  221. data/lib/axlsx/workbook/shared_strings_table.rb~ +0 -69
  222. data/lib/axlsx/workbook/worksheet/cfvo.rb~ +0 -0
  223. data/lib/axlsx/workbook/worksheet/col.rb~ +0 -0
  224. data/lib/axlsx/workbook/worksheet/color_scale.rb~ +0 -46
  225. data/lib/axlsx/workbook/worksheet/data_bar.rb~ +0 -0
  226. data/lib/axlsx/workbook/worksheet/icon_set.rb~ +0 -95
  227. data/lib/axlsx/workbook/worksheet/shared_strings_table.rb~ +0 -0
  228. data/lib/axlsx/workbook/worksheet/table.rb~ +0 -97
  229. data/lib/schema/dc.xsd~ +0 -118
  230. data/lib/schema/dcterms.xsd~ +0 -331
  231. data/lib/schema/opc-coreProperties.xsd~ +0 -50
  232. data/test/drawing/tc_data_source.rb~ +0 -30
  233. data/test/drawing/tc_num_data.rb~ +0 -35
  234. data/test/drawing/tc_num_val.rb~ +0 -29
  235. data/test/drawing/tc_str_data.rb~ +0 -30
  236. data/test/drawing/tc_str_val.rb~ +0 -26
  237. data/test/workbook/worksheet/table/tc_table.rb~ +0 -72
  238. data/test/workbook/worksheet/tc_cfvo.rb~ +0 -20
  239. data/test/workbook/worksheet/tc_col.rb~ +0 -10
  240. data/test/workbook/worksheet/tc_color_scale.rb~ +0 -0
  241. data/test/workbook/worksheet/tc_data_bar.rb~ +0 -0
  242. data/test/workbook/worksheet/tc_icon_set.rb~ +0 -0
@@ -0,0 +1,214 @@
1
+ # encoding: UTF-8
2
+ $LOAD_PATH.unshift "#{File.dirname(__FILE__)}/../../"
3
+ require 'tc_helper.rb'
4
+
5
+ class TestSheetView < Test::Unit::TestCase
6
+ def setup
7
+ #inverse defaults for booleans
8
+ @boolean_options = { :right_to_left => true, :show_formulas => true, :show_outline_symbols => true,
9
+ :show_white_space => true, :tab_selected => true, :default_grid_color => false, :show_grid_lines => false,
10
+ :show_row_col_headers => false, :show_ruler => false, :show_zeros => false, :window_protection => true }
11
+ @symbol_options = { :view => :page_break_preview }
12
+ @nil_options = { :color_id => 2, :top_left_cell => 'A2' }
13
+ @int_0 = { :zoom_scale_normal => 100, :zoom_scale_page_layout_view => 100, :zoom_scale_sheet_layout_view => 100, :workbook_view_id => 2 }
14
+ @int_100 = { :zoom_scale => 10 }
15
+
16
+ @integer_options = { :color_id => 2, :workbook_view_id => 2 }.merge(@int_0).merge(@int_100)
17
+ @string_options = { :top_left_cell => 'A2' }
18
+
19
+
20
+ @options = @boolean_options.merge(@boolean_options).merge(@symbol_options).merge(@nil_options).merge(@int_0).merge(@int_100)
21
+
22
+ @sv = Axlsx::SheetView.new(@options)
23
+ end
24
+
25
+ def test_initialize
26
+ sv = Axlsx::SheetView.new
27
+
28
+ @boolean_options.each do |key, value|
29
+ assert_equal(!value, sv.send(key.to_sym), "initialized default #{key} should be #{!value}")
30
+ assert_equal(value, @sv.send(key.to_sym), "initialized options #{key} should be #{value}")
31
+ end
32
+
33
+ @nil_options.each do |key, value|
34
+ assert_equal(nil, sv.send(key.to_sym), "initialized default #{key} should be nil")
35
+ assert_equal(value, @sv.send(key.to_sym), "initialized options #{key} should be #{value}")
36
+ end
37
+
38
+ @int_0.each do |key, value|
39
+ assert_equal(0, sv.send(key.to_sym), "initialized default #{key} should be 0")
40
+ assert_equal(value, @sv.send(key.to_sym), "initialized options #{key} should be #{value}")
41
+ end
42
+
43
+ @int_100.each do |key, value|
44
+ assert_equal(100, sv.send(key.to_sym), "initialized default #{key} should be 100")
45
+ assert_equal(value, @sv.send(key.to_sym), "initialized options #{key} should be #{value}")
46
+ end
47
+ end
48
+
49
+ def test_boolean_attribute_validation
50
+ @boolean_options.each do |key, value|
51
+ assert_raise(ArgumentError, "#{key} must be boolean") { @sv.send("#{key}=".to_sym, 'A') }
52
+ assert_nothing_raised { @sv.send("#{key}=".to_sym, true) }
53
+ end
54
+ end
55
+
56
+ def test_string_attribute_validation
57
+ @string_options.each do |key, value|
58
+ assert_raise(ArgumentError, "#{key} must be string") { @sv.send("#{key}=".to_sym, :symbol) }
59
+ assert_nothing_raised { @sv.send("#{key}=".to_sym, "foo") }
60
+ end
61
+ end
62
+
63
+ def test_symbol_attribute_validation
64
+ @symbol_options.each do |key, value|
65
+ assert_raise(ArgumentError, "#{key} must be symbol") { @sv.send("#{key}=".to_sym, "foo") }
66
+ assert_nothing_raised { @sv.send("#{key}=".to_sym, value) }
67
+ end
68
+ end
69
+
70
+ def test_integer_attribute_validation
71
+ @integer_options.each do |key, value|
72
+ assert_raise(ArgumentError, "#{key} must be integer") { @sv.send("#{key}=".to_sym, "foo") }
73
+ assert_nothing_raised { @sv.send("#{key}=".to_sym, value) }
74
+ end
75
+ end
76
+
77
+ def test_color_id
78
+ assert_raise(ArgumentError) { @sv.color_id = "10" }
79
+ assert_nothing_raised { @sv.color_id = 2 }
80
+ assert_equal(@sv.color_id, 2)
81
+ end
82
+
83
+ def test_default_grid_color
84
+ assert_raise(ArgumentError) { @sv.default_grid_color = "foo" }
85
+ assert_nothing_raised { @sv.default_grid_color = false }
86
+ assert_equal(@sv.default_grid_color, false)
87
+ end
88
+
89
+ def test_right_to_left
90
+ assert_raise(ArgumentError) { @sv.right_to_left = "foo´" }
91
+ assert_nothing_raised { @sv.right_to_left = true }
92
+ assert_equal(@sv.right_to_left, true)
93
+ end
94
+
95
+ def test_show_formulas
96
+ assert_raise(ArgumentError) { @sv.show_formulas = 'foo' }
97
+ assert_nothing_raised { @sv.show_formulas = false }
98
+ assert_equal(@sv.show_formulas, false)
99
+ end
100
+
101
+ def test_show_grid_lines
102
+ assert_raise(ArgumentError) { @sv.show_grid_lines = "foo" }
103
+ assert_nothing_raised { @sv.show_grid_lines = false }
104
+ assert_equal(@sv.show_grid_lines, false)
105
+ end
106
+
107
+ def test_show_outline_symbols
108
+ assert_raise(ArgumentError) { @sv.show_outline_symbols = 'foo' }
109
+ assert_nothing_raised { @sv.show_outline_symbols = false }
110
+ assert_equal(@sv.show_outline_symbols, false)
111
+ end
112
+
113
+ def test_show_row_col_headers
114
+ assert_raise(ArgumentError) { @sv.show_row_col_headers = "foo" }
115
+ assert_nothing_raised { @sv.show_row_col_headers = false }
116
+ assert_equal(@sv.show_row_col_headers, false)
117
+ end
118
+
119
+ def test_show_ruler
120
+ assert_raise(ArgumentError) { @sv.show_ruler = 'foo' }
121
+ assert_nothing_raised { @sv.show_ruler = false }
122
+ assert_equal(@sv.show_ruler, false)
123
+ end
124
+
125
+ def test_show_white_space
126
+ assert_raise(ArgumentError) { @sv.show_white_space = 'foo' }
127
+ assert_nothing_raised { @sv.show_white_space = false }
128
+ assert_equal(@sv.show_white_space, false)
129
+ end
130
+
131
+ def test_show_zeros
132
+ assert_raise(ArgumentError) { @sv.show_zeros = "foo" }
133
+ assert_nothing_raised { @sv.show_zeros = false }
134
+ assert_equal(@sv.show_zeros, false)
135
+ end
136
+
137
+ def test_tab_selected
138
+ assert_raise(ArgumentError) { @sv.tab_selected = "foo" }
139
+ assert_nothing_raised { @sv.tab_selected = false }
140
+ assert_equal(@sv.tab_selected, false)
141
+ end
142
+
143
+ def test_top_left_cell
144
+ assert_raise(ArgumentError) { @sv.top_left_cell = :cell_adress }
145
+ assert_nothing_raised { @sv.top_left_cell = "A2" }
146
+ assert_equal(@sv.top_left_cell, "A2")
147
+ end
148
+
149
+ def test_view
150
+ assert_raise(ArgumentError) { @sv.view = 'view' }
151
+ assert_nothing_raised { @sv.view = :page_break_preview }
152
+ assert_equal(@sv.view, :page_break_preview)
153
+ end
154
+
155
+ def test_window_protection
156
+ assert_raise(ArgumentError) { @sv.window_protection = "foo" }
157
+ assert_nothing_raised { @sv.window_protection = false }
158
+ assert_equal(@sv.window_protection, false)
159
+ end
160
+
161
+ def test_workbook_view_id
162
+ assert_raise(ArgumentError) { @sv.workbook_view_id = "1" }
163
+ assert_nothing_raised { @sv.workbook_view_id = 1 }
164
+ assert_equal(@sv.workbook_view_id, 1)
165
+ end
166
+
167
+ def test_zoom_scale
168
+ assert_raise(ArgumentError) { @sv.zoom_scale = "50" }
169
+ assert_nothing_raised { @sv.zoom_scale = 50 }
170
+ assert_equal(@sv.zoom_scale, 50)
171
+ end
172
+
173
+ def test_zoom_scale_normal
174
+ assert_raise(ArgumentError) { @sv.zoom_scale_normal = "50" }
175
+ assert_nothing_raised { @sv.zoom_scale_normal = 50 }
176
+ assert_equal(@sv.zoom_scale_normal, 50)
177
+ end
178
+
179
+ def test_zoom_scale_page_layout_view
180
+ assert_raise(ArgumentError) { @sv.zoom_scale_page_layout_view = "50" }
181
+ assert_nothing_raised { @sv.zoom_scale_page_layout_view = 50 }
182
+ assert_equal(@sv.zoom_scale_page_layout_view, 50)
183
+ end
184
+
185
+ def test_zoom_scale_sheet_layout_view
186
+ assert_raise(ArgumentError) { @sv.zoom_scale_sheet_layout_view = "50" }
187
+ assert_nothing_raised { @sv.zoom_scale_sheet_layout_view = 50 }
188
+ assert_equal(@sv.zoom_scale_sheet_layout_view, 50)
189
+ end
190
+
191
+ def test_to_xml
192
+ p = Axlsx::Package.new
193
+ @ws = p.workbook.add_worksheet :name => "sheetview"
194
+ @ws.sheet_view do |vs|
195
+ vs.view = :page_break_preview
196
+ end
197
+
198
+ doc = Nokogiri::XML.parse(@ws.sheet_view.to_xml_string)
199
+
200
+ assert_equal(1, doc.xpath("//sheetView[@tabSelected='false']").size)
201
+
202
+ assert_equal(1, doc.xpath("//sheetView[@tabSelected='false'][@showWhiteSpace='false'][@showOutlineSymbols='false'][@showFormulas='false']
203
+ [@rightToLeft='false'][@windowProtection='false'][@showZeros='true'][@showRuler='true']
204
+ [@showRowColHeaders='true'][@showGridLines='true'][@defaultGridColor='true']
205
+ [@zoomScale='100'][@workbookViewId='0'][@zoomScaleSheetLayoutView='0'][@zoomScalePageLayoutView='0']
206
+ [@zoomScaleNormal='0'][@view='page_break_preview']").size)
207
+ end
208
+
209
+ def test_add_selection
210
+ @sv.add_selection(:top_left, :active_cell => "A1")
211
+ assert_equal('A1', @sv.selections[:top_left].active_cell)
212
+ end
213
+
214
+ end
@@ -15,6 +15,12 @@ class TestTable < Test::Unit::TestCase
15
15
 
16
16
  end
17
17
 
18
+ def test_table_style_info
19
+ table = @ws.add_table('A1:D5', :name => 'foo', :style_info => { :show_row_stripes => true, :name => "TableStyleMedium25" })
20
+ assert_equal('TableStyleMedium25', table.table_style_info.name)
21
+ assert_equal(true, table.table_style_info.show_row_stripes)
22
+ end
23
+
18
24
  def test_add_table
19
25
  name = "test"
20
26
  table = @ws.add_table("A1:D5", :name => name)
@@ -22,29 +28,20 @@ class TestTable < Test::Unit::TestCase
22
28
  assert_equal(@ws.workbook.tables.last, table, "must be added to workbook table collection")
23
29
  assert_equal(@ws.tables.last, table, "must be added to worksheet table collection")
24
30
  assert_equal(table.name, name, "options for name are applied")
25
-
26
- end
27
-
28
- def test_charts
29
- assert(@ws.drawing.charts.empty?)
30
- chart = @ws.add_chart(Axlsx::Pie3DChart, :title=>"bob", :start_at=>[0,0], :end_at=>[1,1])
31
- assert_equal(@ws.drawing.charts.last, chart, "add chart is returned")
32
- chart = @ws.add_chart(Axlsx::Pie3DChart, :title=>"nancy", :start_at=>[1,5], :end_at=>[5,10])
33
- assert_equal(@ws.drawing.charts.last, chart, "add chart is returned")
34
31
  end
35
32
 
36
33
  def test_pn
37
- table = @ws.add_table("A1:D5")
34
+ @ws.add_table("A1:D5")
38
35
  assert_equal(@ws.tables.first.pn, "tables/table1.xml")
39
36
  end
40
37
 
41
38
  def test_rId
42
- table = @ws.add_table("A1:D5")
39
+ @ws.add_table("A1:D5")
43
40
  assert_equal(@ws.tables.first.rId, "rId1")
44
41
  end
45
42
 
46
43
  def test_index
47
- table = @ws.add_table("A1:D5")
44
+ @ws.add_table("A1:D5")
48
45
  assert_equal(@ws.tables.first.index, @ws.workbook.tables.index(@ws.tables.first))
49
46
  end
50
47
 
@@ -0,0 +1,53 @@
1
+ require 'tc_helper.rb'
2
+
3
+ class TestTableStyleInfo < Test::Unit::TestCase
4
+ def setup
5
+ p = Axlsx::Package.new
6
+ @ws = p.workbook.add_worksheet
7
+ 40.times do
8
+ @ws.add_row %w(aa bb cc dd ee ff gg hh ii jj kk)
9
+ end
10
+ @table = @ws.add_table(Axlsx::cell_range([@ws.rows.first.cells.first,@ws.rows.last.cells.last], false), :name => 'foo')
11
+ @options = { :show_first_column => 1,
12
+ :show_last_column => 1,
13
+ :show_row_stripes => 1,
14
+ :show_column_stripes => 1,
15
+ :name => "TableStyleDark4" }
16
+
17
+
18
+ end
19
+
20
+ def test_initialize
21
+ table_style = Axlsx::TableStyleInfo.new @options
22
+ @options.each do |key, value|
23
+ assert_equal(value, table_style.send(key.to_sym))
24
+ end
25
+ end
26
+
27
+ def test_boolean_properties
28
+ table_style = Axlsx::TableStyleInfo.new
29
+ @options.keys.each do |key|
30
+ assert_nothing_raised { table_style.send("#{key.to_sym}=", true) }
31
+ assert_raises(ArgumentError) { table_style.send(key.to_sym, 'foo') }
32
+ end
33
+ end
34
+ def doc
35
+ @doc ||= Nokogiri::XML(Axlsx::TableStyleInfo.new(@options).to_xml_string)
36
+ end
37
+
38
+ def test_to_xml_string_first_column
39
+ assert(doc.xpath('//tableStyleInfo[@showLastColumn=1]'))
40
+ end
41
+
42
+ def test_to_xml_string_row_stripes
43
+ assert(doc.xpath('//tableStyleInfo[@showRowStripes=1]'))
44
+ end
45
+
46
+ def test_to_xml_string_column_stripes
47
+ assert(doc.xpath('//tableStyleInfo[@showColumnStripes=1]'))
48
+ end
49
+
50
+ def test_to_xml_string_name
51
+ assert(doc.xpath("//tableStyleInfo[@name=#{@options[:name]}]"))
52
+ end
53
+ end
@@ -14,6 +14,14 @@ class TestWorksheet < Test::Unit::TestCase
14
14
  assert_equal(ws.pn, "worksheets/sheet2.xml")
15
15
  end
16
16
 
17
+ def test_name_is_html_encoded
18
+ @ws.name = '<foo> & <bar>'
19
+ assert_equal(@ws.name, '&lt;foo&gt; &amp; &lt;bar&gt;')
20
+ end
21
+
22
+ def test_name_exception_on_colon
23
+ assert_raises(ArgumentError) { @ws.name = 'foo:bar' }
24
+ end
17
25
  def test_page_margins
18
26
  assert(@ws.page_margins.is_a? Axlsx::PageMargins)
19
27
  end
@@ -25,6 +33,28 @@ class TestWorksheet < Test::Unit::TestCase
25
33
  end
26
34
  end
27
35
 
36
+ def test_page_setup
37
+ assert(@ws.page_setup.is_a? Axlsx::PageSetup)
38
+ end
39
+
40
+ def test_page_setup_yield
41
+ @ws.page_setup do |ps|
42
+ assert(ps.is_a? Axlsx::PageSetup)
43
+ assert(@ws.page_setup == ps)
44
+ end
45
+ end
46
+
47
+ def test_print_options
48
+ assert(@ws.print_options.is_a? Axlsx::PrintOptions)
49
+ end
50
+
51
+ def test_print_options_yield
52
+ @ws.print_options do |po|
53
+ assert(po.is_a? Axlsx::PrintOptions)
54
+ assert(@ws.print_options == po)
55
+ end
56
+ end
57
+
28
58
  def test_no_autowidth
29
59
  @ws.workbook.use_autowidth = false
30
60
  @ws.add_row [1,2,3,4]
@@ -33,16 +63,22 @@ class TestWorksheet < Test::Unit::TestCase
33
63
 
34
64
  def test_initialization_options
35
65
  page_margins = {:left => 2, :right => 2, :bottom => 2, :top => 2, :header => 2, :footer => 2}
36
- optioned = @ws.workbook.add_worksheet(:name => 'bob', :page_margins => page_margins, :selected => true, :show_gridlines => false)
37
- assert_equal(optioned.page_margins.left, page_margins[:left])
38
- assert_equal(optioned.page_margins.right, page_margins[:right])
39
- assert_equal(optioned.page_margins.top, page_margins[:top])
40
- assert_equal(optioned.page_margins.bottom, page_margins[:bottom])
41
- assert_equal(optioned.page_margins.header, page_margins[:header])
42
- assert_equal(optioned.page_margins.footer, page_margins[:footer])
66
+ page_setup = {:fit_to_height => 1, :fit_to_width => 1, :orientation => :landscape, :paper_width => "210mm", :paper_height => "297mm", :scale => 80}
67
+ print_options = {:grid_lines => true, :headings => true, :horizontal_centered => true, :vertical_centered => true}
68
+ optioned = @ws.workbook.add_worksheet(:name => 'bob', :page_margins => page_margins, :page_setup => page_setup, :print_options => print_options, :selected => true, :show_gridlines => false)
69
+ page_margins.keys.each do |key|
70
+ assert_equal(page_margins[key], optioned.page_margins.send(key))
71
+ end
72
+ page_setup.keys.each do |key|
73
+ assert_equal(page_setup[key], optioned.page_setup.send(key))
74
+ end
75
+ print_options.keys.each do |key|
76
+ assert_equal(print_options[key], optioned.print_options.send(key))
77
+ end
43
78
  assert_equal(optioned.name, 'bob')
44
79
  assert_equal(optioned.selected, true)
45
80
  assert_equal(optioned.show_gridlines, false)
81
+
46
82
  end
47
83
 
48
84
 
@@ -77,7 +113,12 @@ class TestWorksheet < Test::Unit::TestCase
77
113
  def test_dimension
78
114
  @ws.add_row [1, 2, 3]
79
115
  @ws.add_row [4, 5, 6]
80
- assert_equal @ws.dimension, "A1:C2"
116
+ assert_equal @ws.dimension.sqref, "A1:C2"
117
+ end
118
+
119
+ def test_dimension_with_empty_row
120
+ @ws.add_row
121
+ assert_equal "A1:AA200", @ws.dimension.sqref
81
122
  end
82
123
 
83
124
  def test_referencing
@@ -107,7 +148,9 @@ class TestWorksheet < Test::Unit::TestCase
107
148
  end
108
149
 
109
150
  def test_drawing
110
- assert @ws.drawing.is_a? Axlsx::Drawing
151
+ assert @ws.drawing == nil
152
+ @ws.add_chart(Axlsx::Pie3DChart)
153
+ assert @ws.drawing.is_a?(Axlsx::Drawing)
111
154
  end
112
155
 
113
156
  def test_col_style
@@ -152,10 +195,16 @@ class TestWorksheet < Test::Unit::TestCase
152
195
  end
153
196
  assert_equal(@ws.rows[1].cells[0].style, 0)
154
197
  assert_equal(@ws.rows[2].cells[1].style, 0)
198
+ @ws.row_style( 1..2, 1, :col_offset => 2)
199
+ @ws.rows[(1..2)].each do |r|
200
+ r.cells[(2..-1)].each do |c|
201
+ assert_equal(c.style, 1)
202
+ end
203
+ end
155
204
  end
156
205
 
157
206
  def test_to_xml_string_fit_to_page
158
- @ws.fit_to_page = true
207
+ @ws.page_setup.fit_to_width = 1
159
208
  doc = Nokogiri::XML(@ws.to_xml_string)
160
209
  assert_equal(doc.xpath('//xmlns:worksheet/xmlns:sheetPr/xmlns:pageSetUpPr[@fitToPage="true"]').size, 1)
161
210
  end
@@ -166,6 +215,11 @@ class TestWorksheet < Test::Unit::TestCase
166
215
  assert_equal(doc.xpath('//xmlns:worksheet/xmlns:dimension[@ref="A1:C1"]').size, 1)
167
216
  end
168
217
 
218
+ def test_fit_to_page_assignation_does_nothing
219
+ @ws.fit_to_page = true
220
+ assert_equal(@ws.fit_to_page?, false)
221
+ end
222
+
169
223
  def test_to_xml_string_selected
170
224
  @ws.selected = true
171
225
  doc = Nokogiri::XML(@ws.to_xml_string)
@@ -178,13 +232,6 @@ class TestWorksheet < Test::Unit::TestCase
178
232
  assert_equal(doc.xpath('//xmlns:worksheet/xmlns:sheetViews/xmlns:sheetView[@showGridLines="false"]').size, 1)
179
233
  end
180
234
 
181
-
182
- def test_to_xml_string_show_selection
183
- doc = Nokogiri::XML(@ws.to_xml_string)
184
- assert_equal(doc.xpath('//xmlns:worksheet/xmlns:sheetViews/xmlns:sheetView/xmlns:selection[@activeCell="A1"]').size, 1)
185
- assert_equal(doc.xpath('//xmlns:worksheet/xmlns:sheetViews/xmlns:sheetView/xmlns:selection[@sqref="A1"]').size, 1)
186
- end
187
-
188
235
  def test_to_xml_string_auto_fit_data
189
236
  @ws.add_row [1, "two"]
190
237
  doc = Nokogiri::XML(@ws.to_xml_string)
@@ -199,7 +246,7 @@ class TestWorksheet < Test::Unit::TestCase
199
246
 
200
247
  def test_to_xml_string_auto_filter
201
248
  @ws.add_row [1, "two"]
202
- @ws.auto_filter = "A1:B1"
249
+ @ws.auto_filter.range = "A1:B1"
203
250
  doc = Nokogiri::XML(@ws.to_xml_string)
204
251
  assert_equal(doc.xpath('//xmlns:worksheet/xmlns:autoFilter[@ref="A1:B1"]').size, 1)
205
252
  end
@@ -213,6 +260,12 @@ class TestWorksheet < Test::Unit::TestCase
213
260
  assert_equal(doc.xpath('//xmlns:worksheet/xmlns:mergeCells/xmlns:mergeCell[@ref="E1:F1"]').size, 1)
214
261
  end
215
262
 
263
+ def test_to_xml_string_sheet_protection
264
+ @ws.sheet_protection.password = 'fish'
265
+ doc = Nokogiri::XML(@ws.to_xml_string)
266
+ assert(doc.xpath('//xmlns:sheetProtection'))
267
+ end
268
+
216
269
  def test_to_xml_string_page_margins
217
270
  @ws.page_margins do |pm|
218
271
  pm.left = 9
@@ -222,8 +275,26 @@ class TestWorksheet < Test::Unit::TestCase
222
275
  assert_equal(doc.xpath('//xmlns:worksheet/xmlns:pageMargins[@left="9"][@right="7"]').size, 1)
223
276
  end
224
277
 
278
+ def test_to_xml_string_page_setup
279
+ @ws.page_setup do |ps|
280
+ ps.paper_width = "210mm"
281
+ ps.scale = 80
282
+ end
283
+ doc = Nokogiri::XML(@ws.to_xml_string)
284
+ assert_equal(doc.xpath('//xmlns:worksheet/xmlns:pageSetup[@paperWidth="210mm"][@scale="80"]').size, 1)
285
+ end
286
+
287
+ def test_to_xml_string_print_options
288
+ @ws.print_options do |po|
289
+ po.grid_lines = true
290
+ po.horizontal_centered = true
291
+ end
292
+ doc = Nokogiri::XML(@ws.to_xml_string)
293
+ assert_equal(doc.xpath('//xmlns:worksheet/xmlns:printOptions[@gridLines="true"][@horizontalCentered="true"]').size, 1)
294
+ end
295
+
225
296
  def test_to_xml_string_drawing
226
- c = @ws.add_chart Axlsx::Pie3DChart
297
+ @ws.add_chart Axlsx::Pie3DChart
227
298
  doc = Nokogiri::XML(@ws.to_xml_string)
228
299
  assert_equal(doc.xpath('//xmlns:worksheet/xmlns:drawing[@r:id="rId1"]').size, 1)
229
300
  end
@@ -237,64 +308,71 @@ class TestWorksheet < Test::Unit::TestCase
237
308
  assert_equal(doc.xpath('//xmlns:worksheet/xmlns:tableParts/xmlns:tablePart[@r:id="rId1"]').size, 1)
238
309
  end
239
310
 
240
- def test_abs_auto_filter
241
- @ws.add_row [1, "two", 3]
242
- @ws.auto_filter = "A1:C1"
243
- assert_equal(@ws.abs_auto_filter, "'Sheet1'!$A$1:$C$1")
244
- end
245
-
246
311
  def test_to_xml_string
247
312
  schema = Nokogiri::XML::Schema(File.open(Axlsx::SML_XSD))
248
313
  doc = Nokogiri::XML(@ws.to_xml_string)
249
- errors = []
250
- schema.validate(doc).each do |error|
251
- errors.push error
252
- puts error.message
253
- end
254
- assert(errors.empty?, "error free validation")
314
+ assert(schema.validate(doc).map{ |e| puts e.message; e }.empty?, "error free validation")
315
+ end
316
+
317
+ def test_styles
318
+ assert(@ws.styles.is_a?(Axlsx::Styles), 'worksheet provides access to styles')
319
+ end
320
+
321
+ def test_to_xml_string_with_illegal_chars
322
+ nasties = "\v\u2028\u0001\u0002\u0003\u0004\u0005\u0006\u0007\u0008\u001f"
323
+ @ws.add_row [nasties]
324
+ assert_equal(0, @ws.rows.last.cells.last.value.index("\v"))
325
+ assert_equal(nil,@ws.to_xml_string.index("\v"))
255
326
  end
256
327
 
328
+ def test_to_xml_string_with_newlines
329
+ cell_with_newline = "foo\n\r\nbar"
330
+ @ws.add_row [cell_with_newline]
331
+ assert_equal("foo\n\r\nbar", @ws.rows.last.cells.last.value)
332
+ assert_not_nil(@ws.to_xml_string.index("foo\n\r\nbar"))
333
+ end
257
334
  # Make sure the XML for all optional elements (like pageMargins, autoFilter, ...)
258
335
  # is generated in correct order.
259
336
  def test_valid_with_optional_elements
260
337
  @ws.page_margins.set :left => 9
261
- @ws.auto_filter = "A1:C3"
338
+ @ws.page_setup.set :fit_to_width => 1
339
+ @ws.print_options.set :headings => true
340
+ @ws.auto_filter.range = "A1:C3"
262
341
  @ws.merge_cells "A4:A5"
263
342
  @ws.add_chart Axlsx::Pie3DChart
264
343
  @ws.add_table "E1:F3"
265
344
  schema = Nokogiri::XML::Schema(File.open(Axlsx::SML_XSD))
266
345
  doc = Nokogiri::XML(@ws.to_xml_string)
267
- errors = []
268
- schema.validate(doc).each do |error|
269
- errors.push error
270
- puts error.message
271
- end
272
- assert(errors.empty?, "error free validation")
273
-
346
+ assert(schema.validate(doc).map { |e| puts e.message; e }.empty?, schema.validate(doc).map { |e| e.message }.join('\n'))
274
347
  end
275
348
 
276
349
  def test_relationships
350
+ @ws.add_row [1,2,3]
277
351
  assert(@ws.relationships.empty?, "No Drawing relationship until you add a chart")
278
352
  c = @ws.add_chart Axlsx::Pie3DChart
279
353
  assert_equal(@ws.relationships.size, 1, "adding a chart creates the relationship")
280
354
  c = @ws.add_chart Axlsx::Pie3DChart
281
355
  assert_equal(@ws.relationships.size, 1, "multiple charts still only result in one relationship")
356
+ c = @ws.add_comment :text => 'builder', :author => 'bob', :ref => @ws.rows.last.cells.last
357
+ assert_equal(@ws.relationships.size, 4, "adding a comment adds 3 relationships")
358
+ c = @ws.add_comment :text => 'not that is a comment!', :author => 'travis', :ref => "A1"
359
+ assert_equal(@ws.relationships.size, 4, "adding multiple comments in the same worksheet should not add any additional comment relationships")
282
360
  end
283
361
 
284
362
 
285
363
  def test_name_unique
286
- assert_raise(ArgumentError, "worksheet name must be unique") { n = @ws.name; @ws.workbook.add_worksheet(:name=> @ws) }
364
+ assert_raise(ArgumentError, "worksheet name must be unique") { n = @ws.name; @ws.workbook.add_worksheet(:name=> n) }
287
365
  end
288
366
 
289
367
  def test_name_size
290
- assert_raise(ArgumentError, "name too long!") { @ws.name = Array.new(32, "A").join('') }
291
- assert_nothing_raised { @ws.name = Array.new(31, "A").join('') }
368
+ assert_raise(ArgumentError, "name too long!") { @ws.name = Array.new(32, "A").join() }
369
+ assert_nothing_raised { @ws.name = Array.new(31, "A").join() }
292
370
  end
293
371
 
294
372
  def test_set_fixed_width_column
295
373
  @ws.add_row ["mule", "donkey", "horse"], :widths => [20, :ignore, nil]
296
374
  assert(@ws.column_info.size == 3, "a data item for each column")
297
- assert_equal(@ws.column_info[0].width, 20, "adding a row with fixed width updates :fixed attribute")
375
+ assert_equal(20, @ws.column_info[0].width, "adding a row with fixed width updates :fixed attribute")
298
376
  assert_equal(@ws.column_info[1].width, nil, ":ignore does not set any data")
299
377
  end
300
378
 
@@ -311,23 +389,49 @@ class TestWorksheet < Test::Unit::TestCase
311
389
  assert_raise(ArgumentError, 'only accept Integer, Float or Fixnum') { @ws.column_widths 2, 7, "-1" }
312
390
  end
313
391
 
392
+ def test_protect_range
393
+ assert(@ws.send(:protected_ranges).is_a?(Axlsx::SimpleTypedList))
394
+ assert_equal(0, @ws.send(:protected_ranges).size)
395
+ @ws.protect_range('A1:A3')
396
+ assert_equal('A1:A3', @ws.send(:protected_ranges).last.sqref)
397
+ end
398
+
399
+ def test_protect_range_with_cells
400
+ @ws.add_row [1, 2, 3]
401
+ assert_nothing_raised {@ws.protect_range(@ws.rows.first.cells) }
402
+ assert_equal('A1:C1', @ws.send(:protected_ranges).last.sqref)
403
+
404
+ end
314
405
  def test_merge_cells
315
- assert(@ws.merged_cells.is_a?(Array))
316
- assert_equal(@ws.merged_cells.size, 0)
317
406
  @ws.add_row [1,2,3]
318
407
  @ws.add_row [4,5,6]
319
408
  @ws.add_row [7,8,9]
320
409
  @ws.merge_cells "A1:A2"
321
410
  @ws.merge_cells "B2:C3"
322
411
  @ws.merge_cells @ws.rows.last.cells[(0..1)]
323
- assert_equal(@ws.merged_cells.size, 3)
324
- assert_equal(@ws.merged_cells.last, "A3:B3")
412
+ assert_equal(@ws.send(:merged_cells).size, 3)
413
+ assert_equal(@ws.send(:merged_cells).last, "A3:B3")
325
414
  end
326
-
415
+
416
+ def test_merge_cells_sorts_correctly_by_row_when_given_array
417
+ 10.times do |i|
418
+ @ws.add_row [i]
419
+ end
420
+ @ws.merge_cells [@ws.rows[8].cells.first, @ws.rows[9].cells.first]
421
+ assert_equal "A9:A10", @ws.send(:merged_cells).first
422
+ end
423
+
327
424
  def test_auto_filter
328
- assert(@ws.auto_filter.nil?)
425
+ assert(@ws.auto_filter.range.nil?)
329
426
  assert_raise(ArgumentError) { @ws.auto_filter = 123 }
330
- @ws.auto_filter = "A1:D9"
331
- assert_equal(@ws.auto_filter, "A1:D9")
427
+ @ws.auto_filter.range = "A1:D9"
428
+ assert_equal(@ws.auto_filter.range, "A1:D9")
429
+ end
430
+
431
+ def test_sheet_pr_for_auto_filter
432
+ @ws.auto_filter.range = 'A1:D9'
433
+ @ws.auto_filter.add_column 0, :filters, :filter_items => [1]
434
+ doc = Nokogiri::XML(@ws.to_xml_string)
435
+ assert(doc.xpath('//sheetPr[@filterMode="true"]'))
332
436
  end
333
437
  end