ricardoo27-writeexcel 0.6.12.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 (245) hide show
  1. data/.document +5 -0
  2. data/.gitattributes +1 -0
  3. data/README.rdoc +136 -0
  4. data/Rakefile +52 -0
  5. data/VERSION +1 -0
  6. data/charts/chartex.rb +316 -0
  7. data/charts/demo1.rb +46 -0
  8. data/charts/demo101.bin +0 -0
  9. data/charts/demo2.rb +65 -0
  10. data/charts/demo201.bin +0 -0
  11. data/charts/demo3.rb +117 -0
  12. data/charts/demo301.bin +0 -0
  13. data/charts/demo4.rb +119 -0
  14. data/charts/demo401.bin +0 -0
  15. data/charts/demo5.rb +48 -0
  16. data/charts/demo501.bin +0 -0
  17. data/examples/a_simple.rb +43 -0
  18. data/examples/autofilter.rb +265 -0
  19. data/examples/bigfile.rb +30 -0
  20. data/examples/chart_area.rb +121 -0
  21. data/examples/chart_bar.rb +120 -0
  22. data/examples/chart_column.rb +120 -0
  23. data/examples/chart_line.rb +120 -0
  24. data/examples/chart_pie.rb +108 -0
  25. data/examples/chart_scatter.rb +121 -0
  26. data/examples/chart_stock.rb +148 -0
  27. data/examples/chess.rb +142 -0
  28. data/examples/colors.rb +129 -0
  29. data/examples/comments1.rb +27 -0
  30. data/examples/comments2.rb +352 -0
  31. data/examples/copyformat.rb +52 -0
  32. data/examples/data_validate.rb +279 -0
  33. data/examples/date_time.rb +87 -0
  34. data/examples/defined_name.rb +32 -0
  35. data/examples/demo.rb +124 -0
  36. data/examples/diag_border.rb +36 -0
  37. data/examples/formats.rb +490 -0
  38. data/examples/formula_result.rb +30 -0
  39. data/examples/header.rb +137 -0
  40. data/examples/hide_sheet.rb +29 -0
  41. data/examples/hyperlink.rb +43 -0
  42. data/examples/images.rb +63 -0
  43. data/examples/indent.rb +31 -0
  44. data/examples/merge1.rb +40 -0
  45. data/examples/merge2.rb +45 -0
  46. data/examples/merge3.rb +66 -0
  47. data/examples/merge4.rb +83 -0
  48. data/examples/merge5.rb +80 -0
  49. data/examples/merge6.rb +67 -0
  50. data/examples/outline.rb +255 -0
  51. data/examples/outline_collapsed.rb +209 -0
  52. data/examples/panes.rb +113 -0
  53. data/examples/password_protection.rb +33 -0
  54. data/examples/properties.rb +34 -0
  55. data/examples/properties_jp.rb +33 -0
  56. data/examples/protection.rb +47 -0
  57. data/examples/regions.rb +53 -0
  58. data/examples/repeat.rb +43 -0
  59. data/examples/republic.png +0 -0
  60. data/examples/right_to_left.rb +27 -0
  61. data/examples/row_wrap.rb +53 -0
  62. data/examples/set_first_sheet.rb +14 -0
  63. data/examples/stats.rb +74 -0
  64. data/examples/stocks.rb +81 -0
  65. data/examples/store_formula.rb +15 -0
  66. data/examples/tab_colors.rb +31 -0
  67. data/examples/utf8.rb +15 -0
  68. data/examples/write_arrays.rb +83 -0
  69. data/html/en/doc_en.html +5946 -0
  70. data/html/images/a_simple.jpg +0 -0
  71. data/html/images/area1.jpg +0 -0
  72. data/html/images/bar1.jpg +0 -0
  73. data/html/images/chart_area.xls +0 -0
  74. data/html/images/column1.jpg +0 -0
  75. data/html/images/data_validation.jpg +0 -0
  76. data/html/images/line1.jpg +0 -0
  77. data/html/images/pie1.jpg +0 -0
  78. data/html/images/regions.jpg +0 -0
  79. data/html/images/scatter1.jpg +0 -0
  80. data/html/images/stats.jpg +0 -0
  81. data/html/images/stock1.jpg +0 -0
  82. data/html/images/stocks.jpg +0 -0
  83. data/html/index.html +16 -0
  84. data/html/style.css +433 -0
  85. data/lib/writeexcel.rb +1159 -0
  86. data/lib/writeexcel/biffwriter.rb +223 -0
  87. data/lib/writeexcel/caller_info.rb +12 -0
  88. data/lib/writeexcel/cell_range.rb +332 -0
  89. data/lib/writeexcel/chart.rb +1968 -0
  90. data/lib/writeexcel/charts/area.rb +154 -0
  91. data/lib/writeexcel/charts/bar.rb +177 -0
  92. data/lib/writeexcel/charts/column.rb +156 -0
  93. data/lib/writeexcel/charts/external.rb +66 -0
  94. data/lib/writeexcel/charts/line.rb +154 -0
  95. data/lib/writeexcel/charts/pie.rb +169 -0
  96. data/lib/writeexcel/charts/scatter.rb +192 -0
  97. data/lib/writeexcel/charts/stock.rb +213 -0
  98. data/lib/writeexcel/col_info.rb +87 -0
  99. data/lib/writeexcel/colors.rb +68 -0
  100. data/lib/writeexcel/comments.rb +460 -0
  101. data/lib/writeexcel/compatibility.rb +65 -0
  102. data/lib/writeexcel/convert_date_time.rb +117 -0
  103. data/lib/writeexcel/data_validations.rb +370 -0
  104. data/lib/writeexcel/debug_info.rb +41 -0
  105. data/lib/writeexcel/embedded_chart.rb +35 -0
  106. data/lib/writeexcel/excelformula.y +139 -0
  107. data/lib/writeexcel/excelformulaparser.rb +587 -0
  108. data/lib/writeexcel/format.rb +1575 -0
  109. data/lib/writeexcel/formula.rb +987 -0
  110. data/lib/writeexcel/helper.rb +78 -0
  111. data/lib/writeexcel/image.rb +218 -0
  112. data/lib/writeexcel/olewriter.rb +305 -0
  113. data/lib/writeexcel/outline.rb +24 -0
  114. data/lib/writeexcel/properties.rb +242 -0
  115. data/lib/writeexcel/shared_string_table.rb +153 -0
  116. data/lib/writeexcel/storage_lite.rb +984 -0
  117. data/lib/writeexcel/workbook.rb +2478 -0
  118. data/lib/writeexcel/worksheet.rb +6925 -0
  119. data/lib/writeexcel/worksheets.rb +25 -0
  120. data/lib/writeexcel/write_file.rb +63 -0
  121. data/test/excelfile/Chart1.xls +0 -0
  122. data/test/excelfile/Chart2.xls +0 -0
  123. data/test/excelfile/Chart3.xls +0 -0
  124. data/test/excelfile/Chart4.xls +0 -0
  125. data/test/excelfile/Chart5.xls +0 -0
  126. data/test/helper.rb +31 -0
  127. data/test/perl_output/Chart1.xls.data +0 -0
  128. data/test/perl_output/Chart2.xls.data +0 -0
  129. data/test/perl_output/Chart3.xls.data +0 -0
  130. data/test/perl_output/Chart4.xls.data +0 -0
  131. data/test/perl_output/Chart5.xls.data +0 -0
  132. data/test/perl_output/README +31 -0
  133. data/test/perl_output/a_simple.xls +0 -0
  134. data/test/perl_output/autofilter.xls +0 -0
  135. data/test/perl_output/biff_add_continue_testdata +0 -0
  136. data/test/perl_output/chart_area.xls +0 -0
  137. data/test/perl_output/chart_bar.xls +0 -0
  138. data/test/perl_output/chart_column.xls +0 -0
  139. data/test/perl_output/chart_line.xls +0 -0
  140. data/test/perl_output/chess.xls +0 -0
  141. data/test/perl_output/colors.xls +0 -0
  142. data/test/perl_output/comments0.xls +0 -0
  143. data/test/perl_output/comments1.xls +0 -0
  144. data/test/perl_output/comments2.xls +0 -0
  145. data/test/perl_output/data_validate.xls +0 -0
  146. data/test/perl_output/date_time.xls +0 -0
  147. data/test/perl_output/defined_name.xls +0 -0
  148. data/test/perl_output/demo.xls +0 -0
  149. data/test/perl_output/demo101.bin +0 -0
  150. data/test/perl_output/demo201.bin +0 -0
  151. data/test/perl_output/demo301.bin +0 -0
  152. data/test/perl_output/demo401.bin +0 -0
  153. data/test/perl_output/demo501.bin +0 -0
  154. data/test/perl_output/diag_border.xls +0 -0
  155. data/test/perl_output/f_font_biff +0 -0
  156. data/test/perl_output/f_font_key +1 -0
  157. data/test/perl_output/f_xf_biff +0 -0
  158. data/test/perl_output/file_font_biff +0 -0
  159. data/test/perl_output/file_font_key +1 -0
  160. data/test/perl_output/file_xf_biff +0 -0
  161. data/test/perl_output/formula_result.xls +0 -0
  162. data/test/perl_output/headers.xls +0 -0
  163. data/test/perl_output/hidden.xls +0 -0
  164. data/test/perl_output/hide_zero.xls +0 -0
  165. data/test/perl_output/hyperlink.xls +0 -0
  166. data/test/perl_output/images.xls +0 -0
  167. data/test/perl_output/indent.xls +0 -0
  168. data/test/perl_output/merge1.xls +0 -0
  169. data/test/perl_output/merge2.xls +0 -0
  170. data/test/perl_output/merge3.xls +0 -0
  171. data/test/perl_output/merge4.xls +0 -0
  172. data/test/perl_output/merge5.xls +0 -0
  173. data/test/perl_output/merge6.xls +0 -0
  174. data/test/perl_output/ole_write_header +0 -0
  175. data/test/perl_output/outline.xls +0 -0
  176. data/test/perl_output/outline_collapsed.xls +0 -0
  177. data/test/perl_output/panes.xls +0 -0
  178. data/test/perl_output/password_protection.xls +0 -0
  179. data/test/perl_output/protection.xls +0 -0
  180. data/test/perl_output/regions.xls +0 -0
  181. data/test/perl_output/right_to_left.xls +0 -0
  182. data/test/perl_output/set_first_sheet.xls +0 -0
  183. data/test/perl_output/stats.xls +0 -0
  184. data/test/perl_output/stocks.xls +0 -0
  185. data/test/perl_output/store_formula.xls +0 -0
  186. data/test/perl_output/tab_colors.xls +0 -0
  187. data/test/perl_output/unicode_cyrillic.xls +0 -0
  188. data/test/perl_output/utf8.xls +0 -0
  189. data/test/perl_output/workbook1.xls +0 -0
  190. data/test/perl_output/workbook2.xls +0 -0
  191. data/test/perl_output/ws_colinfo +1 -0
  192. data/test/perl_output/ws_store_colinfo +0 -0
  193. data/test/perl_output/ws_store_dimensions +0 -0
  194. data/test/perl_output/ws_store_filtermode +0 -0
  195. data/test/perl_output/ws_store_filtermode_off +0 -0
  196. data/test/perl_output/ws_store_filtermode_on +0 -0
  197. data/test/perl_output/ws_store_selection +0 -0
  198. data/test/perl_output/ws_store_window2 +1 -0
  199. data/test/republic.png +0 -0
  200. data/test/test_00_IEEE_double.rb +13 -0
  201. data/test/test_01_add_worksheet.rb +10 -0
  202. data/test/test_02_merge_formats.rb +49 -0
  203. data/test/test_04_dimensions.rb +388 -0
  204. data/test/test_05_rows.rb +175 -0
  205. data/test/test_06_extsst.rb +74 -0
  206. data/test/test_11_date_time.rb +475 -0
  207. data/test/test_12_date_only.rb +525 -0
  208. data/test/test_13_date_seconds.rb +477 -0
  209. data/test/test_21_escher.rb +624 -0
  210. data/test/test_22_mso_drawing_group.rb +741 -0
  211. data/test/test_23_note.rb +57 -0
  212. data/test/test_24_txo.rb +74 -0
  213. data/test/test_25_position_object.rb +80 -0
  214. data/test/test_26_autofilter.rb +309 -0
  215. data/test/test_27_autofilter.rb +126 -0
  216. data/test/test_28_autofilter.rb +156 -0
  217. data/test/test_29_process_jpg.rb +670 -0
  218. data/test/test_30_validation_dval.rb +74 -0
  219. data/test/test_31_validation_dv_strings.rb +123 -0
  220. data/test/test_32_validation_dv_formula.rb +203 -0
  221. data/test/test_40_property_types.rb +188 -0
  222. data/test/test_41_properties.rb +235 -0
  223. data/test/test_42_set_properties.rb +434 -0
  224. data/test/test_50_name_stored.rb +295 -0
  225. data/test/test_51_name_print_area.rb +353 -0
  226. data/test/test_52_name_print_titles.rb +450 -0
  227. data/test/test_53_autofilter.rb +199 -0
  228. data/test/test_60_chart_generic.rb +574 -0
  229. data/test/test_61_chart_subclasses.rb +84 -0
  230. data/test/test_62_chart_formats.rb +268 -0
  231. data/test/test_63_chart_area_formats.rb +645 -0
  232. data/test/test_biff.rb +71 -0
  233. data/test/test_big_workbook.rb +17 -0
  234. data/test/test_compatibility.rb +12 -0
  235. data/test/test_example_match.rb +3246 -0
  236. data/test/test_format.rb +1189 -0
  237. data/test/test_formula.rb +61 -0
  238. data/test/test_ole.rb +102 -0
  239. data/test/test_storage_lite.rb +116 -0
  240. data/test/test_workbook.rb +146 -0
  241. data/test/test_worksheet.rb +106 -0
  242. data/utils/add_magic_comment.rb +80 -0
  243. data/writeexcel.gemspec +278 -0
  244. data/writeexcel.rdoc +1425 -0
  245. metadata +292 -0
@@ -0,0 +1,450 @@
1
+ # -*- coding: utf-8 -*-
2
+ ##########################################################################
3
+ # test_52_name_print_titles.rb
4
+ #
5
+ # Tests for the Excel EXTERNSHEET and NAME records created by print_are()..
6
+ #
7
+ # reverse('ゥ'), September 2008, John McNamara, jmcnamara@cpan.org
8
+ #
9
+ # original written in Perl by John McNamara
10
+ # converted to Ruby by Hideo Nakamura, cxn03651@msj.biglobe.ne.jp
11
+ #
12
+ #########################################################################
13
+ require 'helper'
14
+ require 'stringio'
15
+
16
+ class TC_Name_Print_Titles < Test::Unit::TestCase
17
+ def setup
18
+ @test_file = StringIO.new
19
+ @workbook = WriteExcel.new(@test_file)
20
+ @workbook.not_using_tmpfile
21
+ end
22
+
23
+ def test_repeat_rows_for_top_row_only
24
+ worksheet1 = @workbook.add_worksheet
25
+
26
+ worksheet1.repeat_rows(0)
27
+
28
+ # Test the EXTERNSHEET record.
29
+ @workbook.__send__("calculate_extern_sizes")
30
+ @workbook.__send__("store_externsheet")
31
+
32
+ target = [%w(
33
+ 17 00 08 00 01 00 00 00 00 00 00 00
34
+ ).join('')].pack('H*')
35
+
36
+ caption = " \tExternsheet"
37
+ result = _unpack_externsheet(@workbook.data)
38
+ target = _unpack_externsheet(target)
39
+ assert_equal(target, result)
40
+
41
+ # Test the NAME record.
42
+ @workbook.clear_data_for_test
43
+ @workbook.__send__("store_names")
44
+
45
+ target = [%w(
46
+ 18 00 1B 00 20 00 00 01 0B 00 00 00 01 00 00 00
47
+ 00 00 00 07 3B 00 00 00 00 00 00 00 00 FF 00
48
+ ).join('')].pack('H*')
49
+
50
+ caption = " \t+ Name repeats ( Sheet1!1:1 )";
51
+ result = _unpack_name(@workbook.data)
52
+ target = _unpack_name(target)
53
+ assert_equal(target, result)
54
+ end
55
+
56
+ def test_repeat_rows_for_top_10_rows
57
+ worksheet1 = @workbook.add_worksheet
58
+
59
+ worksheet1.repeat_rows(0, 9)
60
+
61
+ # Test the EXTERNSHEET record.
62
+ @workbook.__send__("calculate_extern_sizes")
63
+ @workbook.__send__("store_externsheet")
64
+
65
+ target = [%w(
66
+ 17 00 08 00 01 00 00 00 00 00 00 00
67
+ ).join('')].pack('H*')
68
+
69
+ caption = " \tExternsheet"
70
+ result = _unpack_externsheet(@workbook.data)
71
+ target = _unpack_externsheet(target)
72
+ assert_equal(target, result)
73
+
74
+ # Test the NAME record.
75
+ @workbook.clear_data_for_test
76
+ @workbook.__send__("store_names")
77
+
78
+ target = [%w(
79
+ 18 00 1B 00 20 00 00 01 0B 00 00 00 01 00 00 00
80
+ 00 00 00 07 3B 00 00 00 00 09 00 00 00 FF 00
81
+ ).join('')].pack('H*')
82
+
83
+ caption = " \t+ Name repeats ( Sheet1!1:10 )";
84
+ result = _unpack_name(@workbook.data)
85
+ target = _unpack_name(target)
86
+ assert_equal(target, result)
87
+ end
88
+
89
+ def test_repeat_columns_for_a_single_column
90
+ worksheet1 = @workbook.add_worksheet
91
+
92
+ worksheet1.repeat_columns(0)
93
+
94
+ # Test the EXTERNSHEET record.
95
+ @workbook.__send__("calculate_extern_sizes")
96
+ @workbook.__send__("store_externsheet")
97
+
98
+ target = [%w(
99
+ 17 00 08 00 01 00 00 00 00 00 00 00
100
+ ).join('')].pack('H*')
101
+
102
+ caption = " \tExternsheet"
103
+ result = _unpack_externsheet(@workbook.data)
104
+ target = _unpack_externsheet(target)
105
+ assert_equal(target, result)
106
+
107
+ # Test the NAME record.
108
+ @workbook.clear_data_for_test
109
+ @workbook.__send__("store_names")
110
+
111
+ target = [%w(
112
+ 18 00 1B 00 20 00 00 01 0B 00 00 00 01 00 00 00
113
+ 00 00 00 07 3B 00 00 00 00 FF FF 00 00 00 00
114
+ ).join('')].pack('H*')
115
+
116
+ caption = " \t+ Name repeats ( Sheet1!A:A )";
117
+ result = _unpack_name(@workbook.data)
118
+ target = _unpack_name(target)
119
+ assert_equal(target, result)
120
+ end
121
+
122
+ def test_repeat_columns_for_a_single_column_A1_notation
123
+ worksheet1 = @workbook.add_worksheet
124
+
125
+ worksheet1.repeat_columns('A:A')
126
+
127
+ # Test the EXTERNSHEET record.
128
+ @workbook.__send__("calculate_extern_sizes")
129
+ @workbook.__send__("store_externsheet")
130
+
131
+ target = [%w(
132
+ 17 00 08 00 01 00 00 00 00 00 00 00
133
+ ).join('')].pack('H*')
134
+
135
+ caption = " \tExternsheet"
136
+ result = _unpack_externsheet(@workbook.data)
137
+ target = _unpack_externsheet(target)
138
+ assert_equal(target, result)
139
+
140
+ # Test the NAME record.
141
+ @workbook.clear_data_for_test
142
+ @workbook.__send__("store_names")
143
+
144
+ target = [%w(
145
+ 18 00 1B 00 20 00 00 01 0B 00 00 00 01 00 00 00
146
+ 00 00 00 07 3B 00 00 00 00 FF FF 00 00 00 00
147
+ ).join('')].pack('H*')
148
+
149
+ caption = " \t+ Name repeats ( Sheet1!A:A )";
150
+ result = _unpack_name(@workbook.data)
151
+ target = _unpack_name(target)
152
+ assert_equal(target, result)
153
+ end
154
+
155
+ def test_repeat_columns_for_a_10_columns
156
+ worksheet1 = @workbook.add_worksheet
157
+
158
+ worksheet1.repeat_columns(0, 9)
159
+
160
+ # Test the EXTERNSHEET record.
161
+ @workbook.__send__("calculate_extern_sizes")
162
+ @workbook.__send__("store_externsheet")
163
+
164
+ target = [%w(
165
+ 17 00 08 00 01 00 00 00 00 00 00 00
166
+ ).join('')].pack('H*')
167
+
168
+ caption = " \tExternsheet"
169
+ result = _unpack_externsheet(@workbook.data)
170
+ target = _unpack_externsheet(target)
171
+ assert_equal(target, result)
172
+
173
+ # Test the NAME record.
174
+ @workbook.clear_data_for_test
175
+ @workbook.__send__("store_names")
176
+
177
+ target = [%w(
178
+ 18 00 1B 00 20 00 00 01 0B 00 00 00 01 00 00 00
179
+ 00 00 00 07 3B 00 00 00 00 FF FF 00 00 09 00
180
+ ).join('')].pack('H*')
181
+
182
+ caption = " \t+ Name repeats ( Sheet1!A:J )";
183
+ result = _unpack_name(@workbook.data)
184
+ target = _unpack_name(target)
185
+ assert_equal(target, result)
186
+ end
187
+
188
+ def test_repeat_columns_for_a_10_columns_A1_notation
189
+ worksheet1 = @workbook.add_worksheet
190
+
191
+ worksheet1.repeat_columns('A:J')
192
+
193
+ # Test the EXTERNSHEET record.
194
+ @workbook.__send__("calculate_extern_sizes")
195
+ @workbook.__send__("store_externsheet")
196
+
197
+ target = [%w(
198
+ 17 00 08 00 01 00 00 00 00 00 00 00
199
+ ).join('')].pack('H*')
200
+
201
+ caption = " \tExternsheet"
202
+ result = _unpack_externsheet(@workbook.data)
203
+ target = _unpack_externsheet(target)
204
+ assert_equal(target, result)
205
+
206
+ # Test the NAME record.
207
+ @workbook.clear_data_for_test
208
+ @workbook.__send__("store_names")
209
+
210
+ target = [%w(
211
+ 18 00 1B 00 20 00 00 01 0B 00 00 00 01 00 00 00
212
+ 00 00 00 07 3B 00 00 00 00 FF FF 00 00 09 00
213
+ ).join('')].pack('H*')
214
+
215
+ caption = " \t+ Name repeats ( Sheet1!A:J )";
216
+ result = _unpack_name(@workbook.data)
217
+ target = _unpack_name(target)
218
+ assert_equal(target, result)
219
+ end
220
+
221
+ def test_repeat_rows_on_multiple_sheets
222
+ worksheet1 = @workbook.add_worksheet
223
+ worksheet2 = @workbook.add_worksheet
224
+ worksheet3 = @workbook.add_worksheet
225
+
226
+ worksheet1.repeat_rows(0, 1)
227
+ worksheet2.repeat_rows(3, 4)
228
+ worksheet3.repeat_rows(6, 7)
229
+
230
+ # Test the EXTERNSHEET record.
231
+ @workbook.__send__("calculate_extern_sizes")
232
+ @workbook.__send__("store_externsheet")
233
+
234
+ target = [%w(
235
+ 17 00 14 00 03 00 00 00 00 00 00 00 00 00 01 00
236
+ 01 00 00 00 02 00 02 00
237
+ ).join('')].pack('H*')
238
+
239
+ caption = " \tExternsheet"
240
+ result = _unpack_externsheet(@workbook.data)
241
+ target = _unpack_externsheet(target)
242
+ assert_equal(target, result)
243
+
244
+ # Test the NAME record.
245
+ @workbook.clear_data_for_test
246
+ @workbook.__send__("store_names")
247
+
248
+ target = [%w(
249
+ 18 00 1B 00 20 00 00 01 0B 00 00 00 01 00 00 00
250
+ 00 00 00 07 3B 00 00 00 00 01 00 00 00 FF 00
251
+
252
+ 18 00 1B 00 20 00 00 01 0B 00 00 00 02 00 00 00
253
+ 00 00 00 07 3B 01 00 03 00 04 00 00 00 FF 00
254
+
255
+ 18 00 1B 00 20 00 00 01 0B 00 00 00 03 00 00 00
256
+ 00 00 00 07 3B 02 00 06 00 07 00 00 00 FF 00
257
+ ).join('')].pack('H*')
258
+
259
+ caption = " \t+ Name repeats ( Sheet1!1:2, Sheet2!4:5, Sheet3!7:8 )";
260
+ result = _unpack_name(@workbook.data)
261
+ target = _unpack_name(target)
262
+ assert_equal(target, result)
263
+ end
264
+
265
+ def test_repeat_rows_on_multiple_sheets_with_sheets_spaced_out
266
+ worksheet1 = @workbook.add_worksheet
267
+ worksheet2 = @workbook.add_worksheet
268
+ worksheet3 = @workbook.add_worksheet
269
+ worksheet4 = @workbook.add_worksheet
270
+ worksheet5 = @workbook.add_worksheet
271
+
272
+ worksheet1.repeat_rows(0, 1)
273
+ worksheet3.repeat_rows(3, 4)
274
+ worksheet5.repeat_rows(6, 7)
275
+
276
+ # Test the EXTERNSHEET record.
277
+ @workbook.__send__("calculate_extern_sizes")
278
+ @workbook.__send__("store_externsheet")
279
+
280
+ target = [%w(
281
+ 17 00 14 00 03 00 00 00 00 00 00 00 00 00 02 00
282
+ 02 00 00 00 04 00 04 00
283
+ ).join('')].pack('H*')
284
+
285
+ caption = " \tExternsheet"
286
+ result = _unpack_externsheet(@workbook.data)
287
+ target = _unpack_externsheet(target)
288
+ assert_equal(target, result)
289
+
290
+ # Test the NAME record.
291
+ @workbook.clear_data_for_test
292
+ @workbook.__send__("store_names")
293
+
294
+ target = [%w(
295
+ 18 00 1B 00 20 00 00 01 0B 00 00 00 01 00 00 00
296
+ 00 00 00 07 3B 00 00 00 00 01 00 00 00 FF 00
297
+
298
+ 18 00 1B 00 20 00 00 01 0B 00 00 00 03 00 00 00
299
+ 00 00 00 07 3B 01 00 03 00 04 00 00 00 FF 00
300
+
301
+ 18 00 1B 00 20 00 00 01 0B 00 00 00 05 00 00 00
302
+ 00 00 00 07 3B 02 00 06 00 07 00 00 00 FF 00
303
+ ).join('')].pack('H*')
304
+
305
+ caption = " \t+ Name repeats ( Sheet1!1:2, Sheet3!4:5, Sheet5!7:8 )";
306
+ result = _unpack_name(@workbook.data)
307
+ target = _unpack_name(target)
308
+ assert_equal(target, result)
309
+ end
310
+
311
+ def test_repeat_rows_and_repeat_columns_together
312
+ worksheet1 = @workbook.add_worksheet
313
+
314
+ worksheet1.repeat_rows(1, 2)
315
+ worksheet1.repeat_columns(3, 4)
316
+
317
+ # Test the EXTERNSHEET record.
318
+ @workbook.__send__("calculate_extern_sizes")
319
+ @workbook.__send__("store_externsheet")
320
+
321
+ target = [%w(
322
+ 17 00 08 00 01 00 00 00 00 00 00 00
323
+ ).join('')].pack('H*')
324
+
325
+ caption = " \tExternsheet"
326
+ result = _unpack_externsheet(@workbook.data)
327
+ target = _unpack_externsheet(target)
328
+ assert_equal(target, result)
329
+
330
+ # Test the NAME record.
331
+ @workbook.clear_data_for_test
332
+ @workbook.__send__("store_names")
333
+
334
+ target = [%w(
335
+ 18 00 2A 00 20 00 00 01 1A 00 00 00 01 00 00 00
336
+ 00 00 00 07 29 17 00 3B 00 00 00 00 FF FF 03 00
337
+ 04 00 3B 00 00 01 00 02 00 00 00 FF 00 10
338
+ ).join('')].pack('H*')
339
+
340
+ caption = " \t+ Name repeats ( Sheet1!2:3, Sheet1!D:E )";
341
+ result = _unpack_name(@workbook.data)
342
+ target = _unpack_name(target)
343
+ assert_equal(target, result)
344
+ end
345
+
346
+ ###############################################################################
347
+ #
348
+ # _unpack_externsheet()
349
+ #
350
+ # Unpack the EXTERNSHEET recordfor easier comparison.
351
+ #
352
+ def _unpack_externsheet(data)
353
+ externsheet = Hash.new
354
+
355
+ externsheet['record'] = data[0, 2].unpack('v')[0]
356
+ data[0, 2] = ''
357
+ externsheet['length'] = data[0, 2].unpack('v')[0]
358
+ data[0, 2] = ''
359
+ externsheet['count'] = data[0, 2].unpack('v')[0]
360
+ data[0, 2] = ''
361
+ externsheet['array'] = [];
362
+
363
+ externsheet['count'].times do
364
+ externsheet['array'] << data[0, 6].unpack('vvv')
365
+ data[0, 6] = ''
366
+ end
367
+ externsheet
368
+ end
369
+
370
+ ###############################################################################
371
+ #
372
+ # _unpack_name()
373
+ #
374
+ # Unpack 1 or more NAME structures into a AoH for easier comparison.
375
+ #
376
+ def _unpack_name(data)
377
+ names = Array.new
378
+ while data.length > 0
379
+ name = Hash.new
380
+
381
+ name['record'] = data[0, 2].unpack('v')[0]
382
+ data[0, 2] = ''
383
+ name['length'] = data[0, 2].unpack('v')[0]
384
+ data[0, 2] = ''
385
+ name['flags'] = data[0, 2].unpack('v')[0]
386
+ data[0, 2] = ''
387
+ name['shortcut'] = data[0, 1].unpack('C')[0]
388
+ data[0, 1] = ''
389
+ name['str_len'] = data[0, 1].unpack('C')[0]
390
+ data[0, 1] = ''
391
+ name['formula_len'] = data[0, 2].unpack('v')[0]
392
+ data[0, 2] = ''
393
+ name['itals'] = data[0, 2].unpack('v')[0]
394
+ data[0, 2] = ''
395
+ name['sheet_index'] = data[0, 2].unpack('v')[0]
396
+ data[0, 2] = ''
397
+ name['menu_len'] = data[0, 1].unpack('C')[0]
398
+ data[0, 1] = ''
399
+ name['desc_len'] = data[0, 1].unpack('C')[0]
400
+ data[0, 1] = ''
401
+ name['help_len'] = data[0, 1].unpack('C')[0]
402
+ data[0, 1] = ''
403
+ name['status_len'] = data[0, 1].unpack('C')[0]
404
+ data[0, 1] = ''
405
+ name['encoding'] = data[0, 1].unpack('C')[0]
406
+ data[0, 1] = ''
407
+
408
+ # Decode the individual flag fields.
409
+ flag = Hash.new
410
+ flag['hidden'] = name['flags'] & 0x0001
411
+ flag['function'] = name['flags'] & 0x0002
412
+ flag['vb'] = name['flags'] & 0x0004
413
+ flag['macro'] = name['flags'] & 0x0008
414
+ flag['complex'] = name['flags'] & 0x0010
415
+ flag['builtin'] = name['flags'] & 0x0020
416
+ flag['group'] = name['flags'] & 0x0FC0
417
+ flag['binary'] = name['flags'] & 0x1000
418
+ name['flags'] = flag
419
+
420
+ # Decode the string part of the NAME structure.
421
+ if name['encoding'] == 1
422
+ # UTF-16 name. Leave in hex.
423
+ name['string'] = data[0, 2 * name['str_len']].unpack('H*')[0].upcase
424
+ data[0, 2 * name['str_len']] = ''
425
+ elsif flag['builtin'] != 0
426
+ # 1 digit builtin name. Leave in hex.
427
+ name['string'] = data[0, name['str_len']].unpack('H*')[0].upcase
428
+ data[0, name['str_len']] = ''
429
+ else
430
+ # ASCII name.
431
+ name['string'] = data[0, name['str_len']].unpack('C*').pack('C*')
432
+ data[0, name['str_len']] = ''
433
+ end
434
+
435
+ # Keep the formula as a hex string.
436
+ name['formula'] = data[0, name['formula_len']].unpack('H*')[0].upcase
437
+ data[0, name['formula_len']] = ''
438
+
439
+ names << name
440
+ end
441
+ names
442
+ end
443
+
444
+ def assert_hash_equal?(result, target)
445
+ assert_equal(result.keys.sort, target.keys.sort)
446
+ result.each_key do |key|
447
+ assert_equal(result[key], target[key])
448
+ end
449
+ end
450
+ end
@@ -0,0 +1,199 @@
1
+ # -*- coding: utf-8 -*-
2
+ ##########################################################################
3
+ # test_53_autofilter.rb
4
+ #
5
+ # Tests for the Excel EXTERNSHEET and NAME records created by print_are()..
6
+ #
7
+ # reverse('ゥ'), September 2008, John McNamara, jmcnamara@cpan.org
8
+ #
9
+ # original written in Perl by John McNamara
10
+ # converted to Ruby by Hideo Nakamura, cxn03651@msj.biglobe.ne.jp
11
+ #
12
+ #########################################################################
13
+ require 'helper'
14
+ require 'stringio'
15
+
16
+ class TC_autofilter < Test::Unit::TestCase
17
+ def setup
18
+ @test_file = StringIO.new
19
+ @workbook = WriteExcel.new(@test_file)
20
+ @workbook.not_using_tmpfile
21
+ end
22
+
23
+ def test_autofilter_on_one_sheet
24
+ worksheet1 = @workbook.add_worksheet
25
+
26
+ worksheet1.autofilter('A1:C5')
27
+
28
+ # Test the EXTERNSHEET record.
29
+ @workbook.__send__("calculate_extern_sizes")
30
+ @workbook.__send__("store_externsheet")
31
+
32
+ target = [%w(
33
+ 17 00 08 00 01 00 00 00 00 00 00 00
34
+ ).join('')].pack('H*')
35
+
36
+ caption = " \tExternsheet"
37
+ result = _unpack_externsheet(@workbook.data)
38
+ target = _unpack_externsheet(target)
39
+ assert_equal(target, result)
40
+
41
+ # Test the NAME record.
42
+ @workbook.clear_data_for_test
43
+ @workbook.__send__("store_names")
44
+
45
+ target = [%w(
46
+ 18 00 1B 00 21 00 00 01 0B 00 00 00 01 00 00 00
47
+ 00 00 00 0D 3B 00 00 00 00 04 00 00 00 02 00
48
+ ).join('')].pack('H*')
49
+
50
+ caption = " \t+ Name = autofilter ( Sheet1!A1:C5 )";
51
+ result = _unpack_name(@workbook.data)
52
+ target = _unpack_name(target)
53
+ assert_equal(target, result)
54
+ end
55
+
56
+ def test_autofilter_on_two_sheets
57
+ worksheet1 = @workbook.add_worksheet
58
+ worksheet2 = @workbook.add_worksheet
59
+
60
+ worksheet1.autofilter('A1:C5')
61
+ worksheet2.autofilter('A1:C5')
62
+
63
+ # Test the EXTERNSHEET record.
64
+ @workbook.__send__("calculate_extern_sizes")
65
+ @workbook.__send__("store_externsheet")
66
+
67
+ target = [%w(
68
+ 17 00 0E 00 02 00 00 00 00 00 00 00 00 00 01 00
69
+ 01 00
70
+ ).join('')].pack('H*')
71
+
72
+ caption = " \tExternsheet"
73
+ result = _unpack_externsheet(@workbook.data)
74
+ target = _unpack_externsheet(target)
75
+ assert_equal(target, result)
76
+
77
+ # Test the NAME record.
78
+ @workbook.clear_data_for_test
79
+ @workbook.__send__("store_names")
80
+
81
+ target = [%w(
82
+ 18 00 1B 00 21 00 00 01 0B 00 00 00 01 00 00 00
83
+ 00 00 00 0D 3B 00 00 00 00 04 00 00 00 02 00
84
+
85
+ 18 00 1B 00 21 00 00 01 0B 00 00 00 02 00 00 00
86
+ 00 00 00 0D 3B 01 00 00 00 04 00 00 00 02 00
87
+ ).join('')].pack('H*')
88
+
89
+ caption = " \t+ Name = autofilter ( Sheet1!A1:C5, Sheet2!A1:C5 )";
90
+ result = _unpack_name(@workbook.data)
91
+ target = _unpack_name(target)
92
+ assert_equal(target, result)
93
+ end
94
+
95
+ ###############################################################################
96
+ #
97
+ # _unpack_externsheet()
98
+ #
99
+ # Unpack the EXTERNSHEET recordfor easier comparison.
100
+ #
101
+ def _unpack_externsheet(data)
102
+ externsheet = Hash.new
103
+
104
+ externsheet['record'] = data[0, 2].unpack('v')[0]
105
+ data[0, 2] = ''
106
+ externsheet['length'] = data[0, 2].unpack('v')[0]
107
+ data[0, 2] = ''
108
+ externsheet['count'] = data[0, 2].unpack('v')[0]
109
+ data[0, 2] = ''
110
+ externsheet['array'] = [];
111
+
112
+ externsheet['count'].times do
113
+ externsheet['array'] << data[0, 6].unpack('vvv')
114
+ data[0, 6] = ''
115
+ end
116
+ externsheet
117
+ end
118
+
119
+ ###############################################################################
120
+ #
121
+ # _unpack_name()
122
+ #
123
+ # Unpack 1 or more NAME structures into a AoH for easier comparison.
124
+ #
125
+ def _unpack_name(data)
126
+ names = Array.new
127
+ while data.length > 0
128
+ name = Hash.new
129
+
130
+ name['record'] = data[0, 2].unpack('v')[0]
131
+ data[0, 2] = ''
132
+ name['length'] = data[0, 2].unpack('v')[0]
133
+ data[0, 2] = ''
134
+ name['flags'] = data[0, 2].unpack('v')[0]
135
+ data[0, 2] = ''
136
+ name['shortcut'] = data[0, 1].unpack('C')[0]
137
+ data[0, 1] = ''
138
+ name['str_len'] = data[0, 1].unpack('C')[0]
139
+ data[0, 1] = ''
140
+ name['formula_len'] = data[0, 2].unpack('v')[0]
141
+ data[0, 2] = ''
142
+ name['itals'] = data[0, 2].unpack('v')[0]
143
+ data[0, 2] = ''
144
+ name['sheet_index'] = data[0, 2].unpack('v')[0]
145
+ data[0, 2] = ''
146
+ name['menu_len'] = data[0, 1].unpack('C')[0]
147
+ data[0, 1] = ''
148
+ name['desc_len'] = data[0, 1].unpack('C')[0]
149
+ data[0, 1] = ''
150
+ name['help_len'] = data[0, 1].unpack('C')[0]
151
+ data[0, 1] = ''
152
+ name['status_len'] = data[0, 1].unpack('C')[0]
153
+ data[0, 1] = ''
154
+ name['encoding'] = data[0, 1].unpack('C')[0]
155
+ data[0, 1] = ''
156
+
157
+ # Decode the individual flag fields.
158
+ flag = Hash.new
159
+ flag['hidden'] = name['flags'] & 0x0001
160
+ flag['function'] = name['flags'] & 0x0002
161
+ flag['vb'] = name['flags'] & 0x0004
162
+ flag['macro'] = name['flags'] & 0x0008
163
+ flag['complex'] = name['flags'] & 0x0010
164
+ flag['builtin'] = name['flags'] & 0x0020
165
+ flag['group'] = name['flags'] & 0x0FC0
166
+ flag['binary'] = name['flags'] & 0x1000
167
+ name['flags'] = flag
168
+
169
+ # Decode the string part of the NAME structure.
170
+ if name['encoding'] == 1
171
+ # UTF-16 name. Leave in hex.
172
+ name['string'] = data[0, 2 * name['str_len']].unpack('H*')[0].upcase
173
+ data[0, 2 * name['str_len']] = ''
174
+ elsif flag['builtin'] != 0
175
+ # 1 digit builtin name. Leave in hex.
176
+ name['string'] = data[0, name['str_len']].unpack('H*')[0].upcase
177
+ data[0, name['str_len']] = ''
178
+ else
179
+ # ASCII name.
180
+ name['string'] = data[0, name['str_len']].unpack('C*').pack('C*')
181
+ data[0, name['str_len']] = ''
182
+ end
183
+
184
+ # Keep the formula as a hex string.
185
+ name['formula'] = data[0, name['formula_len']].unpack('H*')[0].upcase
186
+ data[0, name['formula_len']] = ''
187
+
188
+ names << name
189
+ end
190
+ names
191
+ end
192
+
193
+ def assert_hash_equal?(result, target)
194
+ assert_equal(result.keys.sort, target.keys.sort)
195
+ result.each_key do |key|
196
+ assert_equal(result[key], target[key])
197
+ end
198
+ end
199
+ end