ricardoo27-writeexcel 0.6.12.1

Sign up to get free protection for your applications and to get access to all the features.
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,74 @@
1
+ # -*- coding: utf-8 -*-
2
+ ##########################################################################
3
+ # test_30_validation_dval.rb
4
+ #
5
+ # Tests for the Excel DVAL structure used in data validation.
6
+ #
7
+ # reverse('©'), September 2005, 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_validation_dval < Test::Unit::TestCase
17
+
18
+ def setup
19
+ @workbook = WriteExcel.new(StringIO.new)
20
+ @worksheet = @workbook.add_worksheet
21
+ @validations = Writeexcel::Worksheet::DataValidations.new
22
+ end
23
+
24
+ def test_1
25
+ obj_id = 1
26
+ dv_count = 1
27
+
28
+ caption = " \tData validation: _store_dval(#{obj_id}, #{dv_count})"
29
+ target = %w(
30
+ B2 01 12 00 04 00 00 00 00 00 00 00 00 00 01 00
31
+ 00 00 01 00 00 00
32
+ ).join(' ')
33
+
34
+ result = unpack_record(@validations.__send__("dval_record", obj_id, dv_count))
35
+ assert_equal(target, result, caption)
36
+ end
37
+
38
+ def test_2
39
+ obj_id = -1
40
+ dv_count = 1
41
+
42
+ caption = " \tData validation: _store_dval(#{obj_id}, #{dv_count})"
43
+ target = %w(
44
+ B2 01 12 00 04 00 00 00 00 00 00 00 00 00 FF FF
45
+ FF FF 01 00 00 00
46
+ ).join(' ')
47
+
48
+ result = unpack_record(@validations.__send__("dval_record", obj_id, dv_count))
49
+ assert_equal(target, result, caption)
50
+ end
51
+
52
+ def test_3
53
+ obj_id = 1
54
+ dv_count = 2
55
+
56
+ caption = " \tData validation: _store_dval(#{obj_id}, #{dv_count})"
57
+ target = %w(
58
+ B2 01 12 00 04 00 00 00 00 00 00 00 00 00 01 00
59
+ 00 00 02 00 00 00
60
+ ).join(' ')
61
+
62
+ result = unpack_record(@validations.__send__("dval_record", obj_id, dv_count))
63
+ assert_equal(target, result, caption)
64
+ end
65
+
66
+ ###############################################################################
67
+ #
68
+ # Unpack the binary data into a format suitable for printing in tests.
69
+ #
70
+ def unpack_record(data)
71
+ data.unpack('C*').map! {|c| sprintf("%02X", c) }.join(' ')
72
+ end
73
+
74
+ end
@@ -0,0 +1,123 @@
1
+ # -*- coding: utf-8 -*-
2
+ ##########################################################################
3
+ # test_31_validation_dv_strings.rb
4
+ #
5
+ # Tests for the packed caption/message strings used in the Excel DV structure
6
+ # as part of data validation.
7
+ #
8
+ # reverse('©'), September 2005, John McNamara, jmcnamara@cpan.org
9
+ #
10
+ # original written in Perl by John McNamara
11
+ # converted to Ruby by Hideo Nakamura, cxn03651@msj.biglobe.ne.jp
12
+ #
13
+ #########################################################################
14
+ require 'helper'
15
+ require 'stringio'
16
+
17
+ class TC_validation_dv_strings < Test::Unit::TestCase
18
+
19
+ def setup
20
+ workbook = WriteExcel.new(StringIO.new)
21
+ worksheet = workbook.add_worksheet
22
+ @data_validation = Writeexcel::Worksheet::DataValidation.new(worksheet.__send__("parser"), {})
23
+ end
24
+
25
+ def test_empty_string
26
+ string = ''
27
+ max_length = 32
28
+
29
+ caption = " \tData validation: _pack_dv_string('', #{max_length})"
30
+ target = %w(
31
+ 01 00 00 00
32
+ ).join(' ')
33
+ result = unpack_record(@data_validation.__send__("pack_dv_string", string, max_length))
34
+ assert_equal(target, result, caption)
35
+ end
36
+
37
+ def test_nil
38
+ string = nil
39
+ max_length = 32
40
+
41
+ caption = " \tData validation: _pack_dv_string('', #{max_length})"
42
+ target = %w(
43
+ 01 00 00 00
44
+ ).join(' ')
45
+ result = unpack_record(@data_validation.__send__("pack_dv_string", string, max_length))
46
+ assert_equal(target, result, caption)
47
+ end
48
+
49
+ def test_single_space
50
+ string = ' '
51
+ max_length = 32
52
+
53
+ caption = " \tData validation: _pack_dv_string('', #{max_length})"
54
+ target = %w(
55
+ 01 00 00 20
56
+ ).join(' ')
57
+ result = unpack_record(@data_validation.__send__("pack_dv_string", string, max_length))
58
+ assert_equal(target, result, caption)
59
+ end
60
+
61
+ def test_single_character
62
+ string = 'A'
63
+ max_length = 32
64
+
65
+ caption = " \tData validation: _pack_dv_string('', #{max_length})"
66
+ target = %w(
67
+ 01 00 00 41
68
+ ).join(' ')
69
+ result = unpack_record(@data_validation.__send__("pack_dv_string", string, max_length))
70
+ assert_equal(target, result, caption)
71
+ end
72
+
73
+ def test_string_longer_than_32_characters_for_dialog_captions
74
+ string = 'This string is longer than 32 characters'
75
+ max_length = 32
76
+
77
+ caption = " \tData validation: _pack_dv_string('', #{max_length})"
78
+ target = %w(
79
+ 20 00 00 54 68 69 73 20
80
+ 73 74 72 69 6E 67 20 69 73 20 6C 6F 6E 67 65 72
81
+ 20 74 68 61 6E 20 33 32 20 63 68
82
+ ).join(' ')
83
+ result = unpack_record(@data_validation.__send__("pack_dv_string", string, max_length))
84
+ assert_equal(target, result, caption)
85
+ end
86
+
87
+ def test_string_longer_than_32_characters_for_dialog_messages
88
+ string = 'ABCD' * 64
89
+ max_length = 255
90
+
91
+ caption = " \tData validation: _pack_dv_string('', #{max_length})"
92
+ target = %w(
93
+ FF 00 00 41 42 43 44 41 42 43 44 41 42 43 44 41
94
+ 42 43 44 41 42 43 44 41 42 43 44 41 42 43 44 41
95
+ 42 43 44 41 42 43 44 41 42 43 44 41 42 43 44 41
96
+ 42 43 44 41 42 43 44 41 42 43 44 41 42 43 44 41
97
+ 42 43 44 41 42 43 44 41 42 43 44 41 42 43 44 41
98
+ 42 43 44 41 42 43 44 41 42 43 44 41 42 43 44 41
99
+ 42 43 44 41 42 43 44 41 42 43 44 41 42 43 44 41
100
+ 42 43 44 41 42 43 44 41 42 43 44 41 42 43 44 41
101
+ 42 43 44 41 42 43 44 41 42 43 44 41 42 43 44 41
102
+ 42 43 44 41 42 43 44 41 42 43 44 41 42 43 44 41
103
+ 42 43 44 41 42 43 44 41 42 43 44 41 42 43 44 41
104
+ 42 43 44 41 42 43 44 41 42 43 44 41 42 43 44 41
105
+ 42 43 44 41 42 43 44 41 42 43 44 41 42 43 44 41
106
+ 42 43 44 41 42 43 44 41 42 43 44 41 42 43 44 41
107
+ 42 43 44 41 42 43 44 41 42 43 44 41 42 43 44 41
108
+ 42 43 44 41 42 43 44 41 42 43 44 41 42 43 44 41
109
+ 42 43
110
+ ).join(' ')
111
+ result = unpack_record(@data_validation.__send__("pack_dv_string", string, max_length))
112
+ assert_equal(target, result, caption)
113
+ end
114
+
115
+ ###############################################################################
116
+ #
117
+ # Unpack the binary data into a format suitable for printing in tests.
118
+ #
119
+ def unpack_record(data)
120
+ data.unpack('C*').map! {|c| sprintf("%02X", c) }.join(' ')
121
+ end
122
+
123
+ end
@@ -0,0 +1,203 @@
1
+ # -*- coding: utf-8 -*-
2
+ ##########################################################################
3
+ # test_32_validation_dv_formula.rb
4
+ #
5
+ # Tests for the Excel DVAL structure used in data validation.
6
+ #
7
+ # reverse('©'), September 2005, 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_validation_dv_formula < Test::Unit::TestCase
17
+
18
+ def setup
19
+ @workbook = WriteExcel.new(StringIO.new)
20
+ @worksheet = @workbook.add_worksheet
21
+ @worksheet2 = @workbook.add_worksheet
22
+ @data_validation = Writeexcel::Worksheet::DataValidation.new(@worksheet.__send__("parser"), {})
23
+ end
24
+
25
+ def test_integer_values
26
+ formula = '10'
27
+
28
+ caption = " \tData validation: _pack_dv_formula('#{formula}')"
29
+ bytes = %w(
30
+ 03 00 00 E0 1E 0A 00
31
+ )
32
+
33
+ # Zero out Excel's random unused word to allow comparison.
34
+ bytes[2] = '00'
35
+ bytes[3] = '00'
36
+ target = bytes.join(" ")
37
+
38
+ result = unpack_record(@data_validation.__send__("pack_dv_formula", formula))
39
+ assert_equal(target, result, caption)
40
+ end
41
+
42
+ def test_decimal_values
43
+ formula = '1.2345'
44
+
45
+ caption = " \tData validation: _pack_dv_formula('#{formula}')"
46
+ bytes = %w(
47
+ 09 00 E0 3F 1F 8D 97 6E 12 83 C0 F3 3F
48
+ )
49
+
50
+ # Zero out Excel's random unused word to allow comparison.
51
+ bytes[2] = '00'
52
+ bytes[3] = '00'
53
+ target = bytes.join(" ")
54
+
55
+ result = unpack_record(@data_validation.__send__("pack_dv_formula", formula))
56
+ assert_equal(target, result, caption)
57
+ end
58
+
59
+ def test_date_values
60
+ formula = @worksheet.__send__("convert_date_time", '2008-07-24T')
61
+
62
+ caption = " \tData validation: _pack_dv_formula('2008-07-24T')"
63
+ bytes = %w(
64
+ 03 00 E0 3F 1E E5 9A
65
+ )
66
+
67
+ # Zero out Excel's random unused word to allow comparison.
68
+ bytes[2] = '00'
69
+ bytes[3] = '00'
70
+ target = bytes.join(" ")
71
+
72
+ result = unpack_record(@data_validation.__send__("pack_dv_formula", formula))
73
+ assert_equal(target, result, caption)
74
+ end
75
+
76
+ def test_time_values
77
+ formula = @worksheet.__send__("convert_date_time", 'T12:00')
78
+
79
+ caption = " \tData validation: _pack_dv_formula('T12:00')"
80
+ bytes = %w(
81
+ 09 00 E0 3F 1F 00 00 00 00 00 00 E0 3F
82
+ )
83
+
84
+ # Zero out Excel's random unused word to allow comparison.
85
+ bytes[2] = '00'
86
+ bytes[3] = '00'
87
+ target = bytes.join(" ")
88
+
89
+ result = unpack_record(@data_validation.__send__("pack_dv_formula", formula))
90
+ assert_equal(target, result, caption)
91
+ end
92
+
93
+ def test_cell_reference_value_C9
94
+ formula = '=C9'
95
+
96
+ caption = " \tData validation: _pack_dv_formula('#{formula}')"
97
+ bytes = %w(
98
+ 05 00 E0 3F 44 08 00 02 C0
99
+ )
100
+
101
+ # Zero out Excel's random unused word to allow comparison.
102
+ bytes[2] = '00'
103
+ bytes[3] = '00'
104
+ target = bytes.join(" ")
105
+
106
+ result = unpack_record(@data_validation.__send__("pack_dv_formula", formula))
107
+ assert_equal(target, result, caption)
108
+ end
109
+
110
+ def test_cell_reference_value_E3_E6
111
+ formula = '=E3:E6'
112
+
113
+ caption = " \tData validation: _pack_dv_formula('#{formula}')"
114
+ bytes = %w(
115
+ 09 00 0C 00 25 02 00 05 00 04 C0 04 C0
116
+ )
117
+
118
+ # Zero out Excel's random unused word to allow comparison.
119
+ bytes[2] = '00'
120
+ bytes[3] = '00'
121
+ target = bytes.join(" ")
122
+
123
+ result = unpack_record(@data_validation.__send__("pack_dv_formula", formula))
124
+ assert_equal(target, result, caption)
125
+ end
126
+
127
+ def test_cell_reference_value_E3_E6_absolute
128
+ formula = '=$E$3:$E$6'
129
+
130
+ caption = " \tData validation: _pack_dv_formula('#{formula}')"
131
+ bytes = %w(
132
+ 09 00 0C 00 25 02 00 05 00 04 00 04 00
133
+ )
134
+
135
+ # Zero out Excel's random unused word to allow comparison.
136
+ bytes[2] = '00'
137
+ bytes[3] = '00'
138
+ target = bytes.join(" ")
139
+
140
+ result = unpack_record(@data_validation.__send__("pack_dv_formula", formula))
141
+ assert_equal(target, result, caption)
142
+ end
143
+
144
+ def test_list_values
145
+ formula = ['a', 'bb', 'ccc']
146
+
147
+ caption = " \tData validation: _pack_dv_formula(['a', 'bb', 'ccc'])"
148
+ bytes = %w(
149
+ 0B 00 0C 00 17 08 00 61 00 62 62 00 63 63 63
150
+ )
151
+
152
+ # Zero out Excel's random unused word to allow comparison.
153
+ bytes[2] = '00'
154
+ bytes[3] = '00'
155
+ target = bytes.join(" ")
156
+
157
+ result = unpack_record(@data_validation.__send__("pack_dv_formula", formula))
158
+ assert_equal(target, result, caption)
159
+ end
160
+
161
+ def test_empty_string
162
+ formula = ''
163
+
164
+ caption = " \tData validation: _pack_dv_formula('')"
165
+ bytes = %w(
166
+ 00 00 00
167
+ )
168
+
169
+ # Zero out Excel's random unused word to allow comparison.
170
+ bytes[2] = '00'
171
+ bytes[3] = '00'
172
+ target = bytes.join(" ")
173
+
174
+ result = unpack_record(@data_validation.__send__("pack_dv_formula", formula))
175
+ assert_equal(target, result, caption)
176
+ end
177
+
178
+ def test_undefined_value
179
+ formula = nil
180
+
181
+ caption = " \tData validation: _pack_dv_formula(nil)"
182
+ bytes = %w(
183
+ 00 00 00
184
+ )
185
+
186
+ # Zero out Excel's random unused word to allow comparison.
187
+ bytes[2] = '00'
188
+ bytes[3] = '00'
189
+ target = bytes.join(" ")
190
+
191
+ result = unpack_record(@data_validation.__send__("pack_dv_formula", formula))
192
+ assert_equal(target, result, caption)
193
+ end
194
+
195
+ ###############################################################################
196
+ #
197
+ # Unpack the binary data into a format suitable for printing in tests.
198
+ #
199
+ def unpack_record(data)
200
+ data.unpack('C*').map! {|c| sprintf("%02X", c) }.join(' ')
201
+ end
202
+
203
+ end
@@ -0,0 +1,188 @@
1
+ # -*- coding: utf-8 -*-
2
+ ##########################################################################
3
+ # test_40_property_types.rb
4
+ #
5
+ # Tests for the basic property types used in OLE property sets.
6
+ #
7
+ # reverse('©'), September 2005, 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
+
15
+ class TC_property_types < Test::Unit::TestCase
16
+
17
+ def setup
18
+ @smiley = '☺' # chr 0x263A; in perl
19
+ end
20
+
21
+ def test_pack_a_VT_I2
22
+ caption = " \tDoc properties: pack_VT_I2(1252)"
23
+ target = %w(
24
+ 02 00 00 00 E4 04 00 00
25
+ ).join(' ')
26
+
27
+ result = unpack_record(pack_VT_I2(1252))
28
+ assert_equal(target, result, caption)
29
+ end
30
+
31
+ def test_pack_a_VT_LPSTR_string_and_check_for_padding
32
+ string = ''
33
+ codepage = 0x04E4
34
+ caption = " \tDoc properties: _pack_VT_LPSTR('#{string}',\t#{codepage}')"
35
+ target = %w(
36
+ 1E 00 00 00 01 00 00 00 00 00 00 00
37
+ ).join(' ')
38
+
39
+ result = unpack_record(pack_VT_LPSTR(string, codepage))
40
+ assert_equal(target, result, caption)
41
+ end
42
+
43
+ def test_pack_a_VT_LPSTR_string_and_check_for_padding_2
44
+ string = 'a'
45
+ codepage = 0x04E4
46
+ caption = " \tDoc properties: _pack_VT_LPSTR('#{string}',\t#{codepage}')"
47
+ target = %w(
48
+ 1E 00 00 00 02 00 00 00 61 00 00 00
49
+ ).join(' ')
50
+
51
+ result = unpack_record(pack_VT_LPSTR(string, codepage))
52
+ assert_equal(target, result, caption)
53
+ end
54
+
55
+ def test_pack_a_VT_LPSTR_string_and_check_for_padding_3
56
+ string = 'bb'
57
+ codepage = 0x04E4
58
+ caption = " \tDoc properties: _pack_VT_LPSTR('#{string}',\t#{codepage}')"
59
+ target = %w(
60
+ 1E 00 00 00 03 00 00 00 62 62 00 00
61
+ ).join(' ')
62
+
63
+ result = unpack_record(pack_VT_LPSTR(string, codepage))
64
+ assert_equal(target, result, caption)
65
+ end
66
+
67
+ def test_pack_a_VT_LPSTR_string_and_check_for_padding_4
68
+ string = 'ccc'
69
+ codepage = 0x04E4
70
+ caption = " \tDoc properties: _pack_VT_LPSTR('#{string}',\t#{codepage}')"
71
+ target = %w(
72
+ 1E 00 00 00 04 00 00 00 63 63 63 00
73
+ ).join(' ')
74
+
75
+ result = unpack_record(pack_VT_LPSTR(string, codepage))
76
+ assert_equal(target, result, caption)
77
+ end
78
+
79
+ def test_pack_a_VT_LPSTR_string_and_check_for_padding_5
80
+ string = 'dddd'
81
+ codepage = 0x04E4
82
+ caption = " \tDoc properties: _pack_VT_LPSTR('#{string}',\t#{codepage}')"
83
+ target = %w(
84
+ 1E 00 00 00 05 00 00 00 64 64 64 64 00 00 00 00
85
+ ).join(' ')
86
+
87
+ result = unpack_record(pack_VT_LPSTR(string, codepage))
88
+ assert_equal(target, result, caption)
89
+ end
90
+
91
+ def test_pack_a_VT_LPSTR_string_and_check_for_padding_6
92
+ string = 'Username'
93
+ codepage = 0x04E4
94
+ caption = " \tDoc properties: _pack_VT_LPSTR('#{string}',\t#{codepage}')"
95
+ target = %w(
96
+ 1E 00 00 00 09 00 00 00 55 73 65 72 6E 61 6D 65
97
+ 00 00 00 00
98
+ ).join(' ')
99
+
100
+ result = unpack_record(pack_VT_LPSTR(string, codepage))
101
+ assert_equal(target, result, caption)
102
+ end
103
+
104
+ def test_pack_a_VT_LPSTR_UTF8_string
105
+ string = @smiley
106
+ codepage = 0xFDE9
107
+ caption = " \tDoc properties: _pack_VT_LPSTR('#{@smiley}',\t#{codepage}')"
108
+ target = %w(
109
+ 1E 00 00 00 04 00 00 00 E2 98 BA 00
110
+ ).join(' ')
111
+
112
+ result = unpack_record(pack_VT_LPSTR(string, codepage))
113
+ assert_equal(target, result, caption)
114
+ end
115
+
116
+ def test_pack_a_VT_LPSTR_UTF8_string_2
117
+ string = "a" + @smiley
118
+ codepage = 0xFDE9
119
+ caption = " \tDoc properties: _pack_VT_LPSTR('a#{@smiley}',\t#{codepage}')"
120
+ target = %w(
121
+ 1E 00 00 00 05 00 00 00 61 E2 98 BA 00 00 00 00
122
+ ).join(' ')
123
+
124
+ result = unpack_record(pack_VT_LPSTR(string, codepage))
125
+ assert_equal(target, result, caption)
126
+ end
127
+
128
+ def test_pack_a_VT_LPSTR_UTF8_string_3
129
+ string = "aa" + @smiley
130
+ codepage = 0xFDE9
131
+ caption = " \tDoc properties: _pack_VT_LPSTR('#{string}',\t#{codepage}')"
132
+ target = %w(
133
+ 1E 00 00 00 06 00 00 00 61 61 E2 98 BA 00 00 00
134
+ ).join(' ')
135
+
136
+ result = unpack_record( pack_VT_LPSTR(string, codepage) )
137
+ assert_equal(target, result, caption)
138
+ end
139
+
140
+ def test_pack_a_VT_LPSTR_UTF8_string_4
141
+ string = "aaa" + @smiley
142
+ codepage = 0xFDE9
143
+ caption = " \tDoc properties: _pack_VT_LPSTR('#{string}',\t#{codepage}')"
144
+ target = %w(
145
+ 1E 00 00 00 07 00 00 00 61 61 61 E2 98 BA 00 00
146
+ ).join(' ')
147
+
148
+ result = unpack_record( pack_VT_LPSTR(string, codepage) )
149
+ assert_equal(target, result, caption)
150
+ end
151
+
152
+ def test_pack_a_VT_LPSTR_UTF8_string_5
153
+ string = "aaaa" + @smiley
154
+ codepage = 0xFDE9
155
+ caption = " \tDoc properties: _pack_VT_LPSTR('#{string}',\t#{codepage}')"
156
+ target = %w(
157
+ 1E 00 00 00 08 00 00 00 61 61 61 61 E2 98 BA 00
158
+ ).join(' ')
159
+
160
+ result = unpack_record( pack_VT_LPSTR(string, codepage) )
161
+ assert_equal(target, result, caption)
162
+ end
163
+
164
+ def test_pack_a_VT_FILETIME
165
+ # Wed Aug 13 00:40:00 2008
166
+ # $sec,$min,$hour,$mday,$mon,$year
167
+ # We normalise the time using timegm() so that the tests don't fail due to
168
+ # different timezones.
169
+ filetime = Time.gm(2008,8,13,0,40,0)
170
+
171
+ caption = " \tDoc properties: _pack_VT_FILETIME()"
172
+ target = %w(
173
+ 40 00 00 00 00 70 EB 1D DD FC C8 01
174
+ ).join(' ')
175
+
176
+ result = unpack_record( pack_VT_FILETIME(filetime) )
177
+ assert_equal(target, result, caption)
178
+ end
179
+
180
+ ###############################################################################
181
+ #
182
+ # Unpack the binary data into a format suitable for printing in tests.
183
+ #
184
+ def unpack_record(data)
185
+ data.unpack('C*').map! {|c| sprintf("%02X", c) }.join(' ')
186
+ end
187
+
188
+ end