writeexcel 0.1.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (143) hide show
  1. data/README +26 -31
  2. data/examples/a_simple.rb +42 -42
  3. data/examples/{autofilters.rb → autofilter.rb} +264 -266
  4. data/examples/bigfile.rb +29 -0
  5. data/examples/chart_area.rb +120 -0
  6. data/examples/chart_bar.rb +119 -0
  7. data/examples/chart_column.rb +119 -0
  8. data/examples/chart_line.rb +119 -0
  9. data/examples/chart_pie.rb +107 -0
  10. data/examples/chart_scatter.rb +120 -0
  11. data/examples/chart_stock.rb +147 -0
  12. data/examples/copyformat.rb +51 -51
  13. data/examples/data_validate.rb +278 -278
  14. data/examples/date_time.rb +86 -86
  15. data/examples/defined_name.rb +31 -0
  16. data/examples/demo.rb +120 -118
  17. data/examples/diag_border.rb +35 -35
  18. data/examples/formats.rb +489 -489
  19. data/examples/header.rb +136 -136
  20. data/examples/hidden.rb +28 -28
  21. data/examples/hyperlink.rb +42 -42
  22. data/examples/images.rb +52 -52
  23. data/examples/merge1.rb +39 -39
  24. data/examples/merge2.rb +44 -44
  25. data/examples/merge3.rb +65 -65
  26. data/examples/merge4.rb +82 -82
  27. data/examples/merge5.rb +79 -79
  28. data/examples/properties.rb +33 -0
  29. data/examples/properties_jp.rb +32 -0
  30. data/examples/protection.rb +46 -46
  31. data/examples/regions.rb +52 -52
  32. data/examples/repeat.rb +42 -42
  33. data/examples/stats.rb +75 -75
  34. data/examples/stocks.rb +80 -80
  35. data/examples/tab_colors.rb +30 -30
  36. data/examples/write_arrays.rb +82 -0
  37. data/lib/writeexcel.rb +1134 -18
  38. data/lib/writeexcel/biffwriter.rb +273 -260
  39. data/lib/writeexcel/chart.rb +2306 -217
  40. data/lib/writeexcel/charts/area.rb +152 -0
  41. data/lib/writeexcel/charts/bar.rb +177 -0
  42. data/lib/writeexcel/charts/column.rb +156 -0
  43. data/lib/writeexcel/charts/external.rb +61 -0
  44. data/lib/writeexcel/charts/line.rb +152 -0
  45. data/lib/writeexcel/charts/pie.rb +169 -0
  46. data/lib/writeexcel/charts/scatter.rb +192 -0
  47. data/lib/writeexcel/charts/stock.rb +211 -0
  48. data/lib/writeexcel/excelformulaparser.rb +208 -195
  49. data/lib/writeexcel/format.rb +1697 -1108
  50. data/lib/writeexcel/formula.rb +1050 -986
  51. data/lib/writeexcel/olewriter.rb +322 -322
  52. data/lib/writeexcel/properties.rb +251 -250
  53. data/lib/writeexcel/storage_lite.rb +968 -0
  54. data/lib/writeexcel/workbook.rb +3294 -2630
  55. data/lib/writeexcel/worksheet.rb +9012 -6377
  56. data/test/excelfile/Chart1.xls +0 -0
  57. data/test/excelfile/Chart2.xls +0 -0
  58. data/test/excelfile/Chart3.xls +0 -0
  59. data/test/excelfile/Chart4.xls +0 -0
  60. data/test/excelfile/Chart5.xls +0 -0
  61. data/test/perl_output/Chart1.xls.data +0 -0
  62. data/test/perl_output/Chart2.xls.data +0 -0
  63. data/test/perl_output/Chart3.xls.data +0 -0
  64. data/test/perl_output/Chart4.xls.data +0 -0
  65. data/test/perl_output/Chart5.xls.data +0 -0
  66. data/test/perl_output/a_simple.xls +0 -0
  67. data/test/perl_output/autofilter.xls +0 -0
  68. data/test/perl_output/chart_area.xls +0 -0
  69. data/test/perl_output/chart_bar.xls +0 -0
  70. data/test/perl_output/chart_column.xls +0 -0
  71. data/test/perl_output/chart_line.xls +0 -0
  72. data/test/perl_output/data_validate.xls +0 -0
  73. data/test/perl_output/date_time.xls +0 -0
  74. data/test/perl_output/demo.xls +0 -0
  75. data/test/perl_output/demo101.bin +0 -0
  76. data/test/perl_output/demo201.bin +0 -0
  77. data/test/perl_output/demo301.bin +0 -0
  78. data/test/perl_output/demo401.bin +0 -0
  79. data/test/perl_output/demo501.bin +0 -0
  80. data/test/perl_output/diag_border.xls +0 -0
  81. data/test/perl_output/headers.xls +0 -0
  82. data/test/perl_output/hyperlink.xls +0 -0
  83. data/test/perl_output/images.xls +0 -0
  84. data/test/perl_output/merge1.xls +0 -0
  85. data/test/perl_output/merge2.xls +0 -0
  86. data/test/perl_output/merge3.xls +0 -0
  87. data/test/perl_output/merge4.xls +0 -0
  88. data/test/perl_output/merge5.xls +0 -0
  89. data/test/perl_output/protection.xls +0 -0
  90. data/test/perl_output/regions.xls +0 -0
  91. data/test/perl_output/stats.xls +0 -0
  92. data/test/perl_output/stocks.xls +0 -0
  93. data/test/perl_output/tab_colors.xls +0 -0
  94. data/test/perl_output/unicode_cyrillic.xls +0 -0
  95. data/test/perl_output/workbook1.xls +0 -0
  96. data/test/perl_output/workbook2.xls +0 -0
  97. data/test/tc_all.rb +32 -31
  98. data/test/tc_biff.rb +104 -104
  99. data/test/tc_chart.rb +22 -22
  100. data/test/tc_example_match.rb +1944 -1280
  101. data/test/tc_format.rb +1254 -1267
  102. data/test/tc_formula.rb +63 -63
  103. data/test/tc_ole.rb +110 -110
  104. data/test/tc_storage_lite.rb +149 -0
  105. data/test/tc_workbook.rb +140 -115
  106. data/test/tc_worksheet.rb +115 -115
  107. data/test/test_00_IEEE_double.rb +14 -14
  108. data/test/test_01_add_worksheet.rb +12 -12
  109. data/test/test_02_merge_formats.rb +58 -58
  110. data/test/test_04_dimensions.rb +397 -397
  111. data/test/test_05_rows.rb +182 -182
  112. data/test/test_06_extsst.rb +80 -80
  113. data/test/test_11_date_time.rb +484 -484
  114. data/test/test_12_date_only.rb +506 -506
  115. data/test/test_13_date_seconds.rb +486 -486
  116. data/test/test_21_escher.rb +642 -629
  117. data/test/test_22_mso_drawing_group.rb +750 -739
  118. data/test/test_23_note.rb +78 -78
  119. data/test/test_24_txo.rb +80 -80
  120. data/test/test_25_position_object.rb +82 -0
  121. data/test/test_26_autofilter.rb +327 -327
  122. data/test/test_27_autofilter.rb +144 -144
  123. data/test/test_28_autofilter.rb +174 -174
  124. data/test/test_29_process_jpg.rb +681 -131
  125. data/test/test_30_validation_dval.rb +82 -82
  126. data/test/test_31_validation_dv_strings.rb +131 -131
  127. data/test/test_32_validation_dv_formula.rb +211 -211
  128. data/test/test_40_property_types.rb +191 -191
  129. data/test/test_41_properties.rb +238 -238
  130. data/test/test_42_set_properties.rb +442 -419
  131. data/test/test_50_name_stored.rb +305 -0
  132. data/test/test_51_name_print_area.rb +363 -0
  133. data/test/test_52_name_print_titles.rb +460 -0
  134. data/test/test_53_autofilter.rb +209 -0
  135. data/test/test_60_chart_generic.rb +576 -0
  136. data/test/test_61_chart_subclasses.rb +97 -0
  137. data/test/test_62_chart_formats.rb +270 -0
  138. data/test/test_63_chart_area_formats.rb +647 -0
  139. data/test/test_chartex.rb +35 -0
  140. data/test/ts_all.rb +46 -34
  141. data/writeexcel.gemspec +18 -0
  142. data/writeexcel.rdoc +583 -0
  143. metadata +162 -108
@@ -1,191 +1,191 @@
1
- ##########################################################################
2
- # test_40_property_types.rb
3
- #
4
- # Tests for the basic property types used in OLE property sets.
5
- #
6
- # reverse('©'), September 2005, John McNamara, jmcnamara@cpan.org
7
- #
8
- # original written in Perl by John McNamara
9
- # converted to Ruby by Hideo Nakamura, cxn03651@msj.biglobe.ne.jp
10
- #
11
- #########################################################################
12
- $LOAD_PATH.unshift "#{File.dirname(__FILE__)}/../lib"
13
-
14
- require 'test/unit'
15
- require 'rubygems'
16
- require 'writeexcel'
17
-
18
- class TC_property_types < Test::Unit::TestCase
19
-
20
- def setup
21
- @smiley = '☺' # chr 0x263A; in perl
22
- end
23
-
24
- def test_pack_a_VT_I2
25
- caption = " \tDoc properties: pack_VT_I2(1252)"
26
- target = %w(
27
- 02 00 00 00 E4 04 00 00
28
- ).join(' ')
29
-
30
- result = unpack_record( pack_VT_I2(1252) )
31
- assert_equal(target, result, caption)
32
- end
33
-
34
- def test_pack_a_VT_LPSTR_string_and_check_for_padding
35
- string = ''
36
- codepage = 0x04E4
37
- caption = " \tDoc properties: _pack_VT_LPSTR('#{string}',\t#{codepage}')"
38
- target = %w(
39
- 1E 00 00 00 01 00 00 00 00 00 00 00
40
- ).join(' ')
41
-
42
- result = unpack_record( pack_VT_LPSTR(string, codepage) )
43
- assert_equal(target, result, caption)
44
- end
45
-
46
- def test_pack_a_VT_LPSTR_string_and_check_for_padding_2
47
- string = 'a'
48
- codepage = 0x04E4
49
- caption = " \tDoc properties: _pack_VT_LPSTR('#{string}',\t#{codepage}')"
50
- target = %w(
51
- 1E 00 00 00 02 00 00 00 61 00 00 00
52
- ).join(' ')
53
-
54
- result = unpack_record( pack_VT_LPSTR(string, codepage) )
55
- assert_equal(target, result, caption)
56
- end
57
-
58
- def test_pack_a_VT_LPSTR_string_and_check_for_padding_3
59
- string = 'bb'
60
- codepage = 0x04E4
61
- caption = " \tDoc properties: _pack_VT_LPSTR('#{string}',\t#{codepage}')"
62
- target = %w(
63
- 1E 00 00 00 03 00 00 00 62 62 00 00
64
- ).join(' ')
65
-
66
- result = unpack_record( pack_VT_LPSTR(string, codepage) )
67
- assert_equal(target, result, caption)
68
- end
69
-
70
- def test_pack_a_VT_LPSTR_string_and_check_for_padding_4
71
- string = 'ccc'
72
- codepage = 0x04E4
73
- caption = " \tDoc properties: _pack_VT_LPSTR('#{string}',\t#{codepage}')"
74
- target = %w(
75
- 1E 00 00 00 04 00 00 00 63 63 63 00
76
- ).join(' ')
77
-
78
- result = unpack_record( pack_VT_LPSTR(string, codepage) )
79
- assert_equal(target, result, caption)
80
- end
81
-
82
- def test_pack_a_VT_LPSTR_string_and_check_for_padding_5
83
- string = 'dddd'
84
- codepage = 0x04E4
85
- caption = " \tDoc properties: _pack_VT_LPSTR('#{string}',\t#{codepage}')"
86
- target = %w(
87
- 1E 00 00 00 05 00 00 00 64 64 64 64 00 00 00 00
88
- ).join(' ')
89
-
90
- result = unpack_record( pack_VT_LPSTR(string, codepage) )
91
- assert_equal(target, result, caption)
92
- end
93
-
94
- def test_pack_a_VT_LPSTR_string_and_check_for_padding_5
95
- string = 'Username'
96
- codepage = 0x04E4
97
- caption = " \tDoc properties: _pack_VT_LPSTR('#{string}',\t#{codepage}')"
98
- target = %w(
99
- 1E 00 00 00 09 00 00 00 55 73 65 72 6E 61 6D 65
100
- 00 00 00 00
101
- ).join(' ')
102
-
103
- result = unpack_record( pack_VT_LPSTR(string, codepage) )
104
- assert_equal(target, result, caption)
105
- end
106
-
107
- def test_pack_a_VT_LPSTR_UTF8_string
108
- string = @smiley
109
- codepage = 0xFDE9
110
- caption = " \tDoc properties: _pack_VT_LPSTR('#{@smiley}',\t#{codepage}')"
111
- target = %w(
112
- 1E 00 00 00 04 00 00 00 E2 98 BA 00
113
- ).join(' ')
114
-
115
- result = unpack_record( pack_VT_LPSTR(string, codepage) )
116
- assert_equal(target, result, caption)
117
- end
118
-
119
- def test_pack_a_VT_LPSTR_UTF8_string_2
120
- string = "a" + @smiley
121
- codepage = 0xFDE9
122
- caption = " \tDoc properties: _pack_VT_LPSTR('a#{@smiley}',\t#{codepage}')"
123
- target = %w(
124
- 1E 00 00 00 05 00 00 00 61 E2 98 BA 00 00 00 00
125
- ).join(' ')
126
-
127
- result = unpack_record( pack_VT_LPSTR(string, codepage) )
128
- assert_equal(target, result, caption)
129
- end
130
-
131
- def test_pack_a_VT_LPSTR_UTF8_string_3
132
- string = "aa" + @smiley
133
- codepage = 0xFDE9
134
- caption = " \tDoc properties: _pack_VT_LPSTR('#{string}',\t#{codepage}')"
135
- target = %w(
136
- 1E 00 00 00 06 00 00 00 61 61 E2 98 BA 00 00 00
137
- ).join(' ')
138
-
139
- result = unpack_record( pack_VT_LPSTR(string, codepage) )
140
- assert_equal(target, result, caption)
141
- end
142
-
143
- def test_pack_a_VT_LPSTR_UTF8_string_4
144
- string = "aaa" + @smiley
145
- codepage = 0xFDE9
146
- caption = " \tDoc properties: _pack_VT_LPSTR('#{string}',\t#{codepage}')"
147
- target = %w(
148
- 1E 00 00 00 07 00 00 00 61 61 61 E2 98 BA 00 00
149
- ).join(' ')
150
-
151
- result = unpack_record( pack_VT_LPSTR(string, codepage) )
152
- assert_equal(target, result, caption)
153
- end
154
-
155
- def test_pack_a_VT_LPSTR_UTF8_string_5
156
- string = "aaaa" + @smiley
157
- codepage = 0xFDE9
158
- caption = " \tDoc properties: _pack_VT_LPSTR('#{string}',\t#{codepage}')"
159
- target = %w(
160
- 1E 00 00 00 08 00 00 00 61 61 61 61 E2 98 BA 00
161
- ).join(' ')
162
-
163
- result = unpack_record( pack_VT_LPSTR(string, codepage) )
164
- assert_equal(target, result, caption)
165
- end
166
-
167
- def test_pack_a_VT_FILETIME
168
- # Wed Aug 13 00:40:00 2008
169
- # $sec,$min,$hour,$mday,$mon,$year
170
- # We normalise the time using timegm() so that the tests don't fail due to
171
- # different timezones.
172
- filetime = Time.gm(2008,8,13,0,40,0)
173
-
174
- caption = " \tDoc properties: _pack_VT_FILETIME()"
175
- target = %w(
176
- 40 00 00 00 00 70 EB 1D DD FC C8 01
177
- ).join(' ')
178
-
179
- result = unpack_record( pack_VT_FILETIME(filetime) )
180
- assert_equal(target, result, caption)
181
- end
182
-
183
- ###############################################################################
184
- #
185
- # Unpack the binary data into a format suitable for printing in tests.
186
- #
187
- def unpack_record(data)
188
- data.unpack('C*').map! {|c| sprintf("%02X", c) }.join(' ')
189
- end
190
-
191
- end
1
+ ##########################################################################
2
+ # test_40_property_types.rb
3
+ #
4
+ # Tests for the basic property types used in OLE property sets.
5
+ #
6
+ # reverse('©'), September 2005, John McNamara, jmcnamara@cpan.org
7
+ #
8
+ # original written in Perl by John McNamara
9
+ # converted to Ruby by Hideo Nakamura, cxn03651@msj.biglobe.ne.jp
10
+ #
11
+ #########################################################################
12
+ $LOAD_PATH.unshift "#{File.dirname(__FILE__)}/../lib"
13
+
14
+ require 'test/unit'
15
+ require 'rubygems'
16
+ require 'writeexcel'
17
+
18
+ class TC_property_types < Test::Unit::TestCase
19
+
20
+ def setup
21
+ @smiley = '☺' # chr 0x263A; in perl
22
+ end
23
+
24
+ def test_pack_a_VT_I2
25
+ caption = " \tDoc properties: pack_VT_I2(1252)"
26
+ target = %w(
27
+ 02 00 00 00 E4 04 00 00
28
+ ).join(' ')
29
+
30
+ result = unpack_record( pack_VT_I2(1252) )
31
+ assert_equal(target, result, caption)
32
+ end
33
+
34
+ def test_pack_a_VT_LPSTR_string_and_check_for_padding
35
+ string = ''
36
+ codepage = 0x04E4
37
+ caption = " \tDoc properties: _pack_VT_LPSTR('#{string}',\t#{codepage}')"
38
+ target = %w(
39
+ 1E 00 00 00 01 00 00 00 00 00 00 00
40
+ ).join(' ')
41
+
42
+ result = unpack_record( pack_VT_LPSTR(string, codepage) )
43
+ assert_equal(target, result, caption)
44
+ end
45
+
46
+ def test_pack_a_VT_LPSTR_string_and_check_for_padding_2
47
+ string = 'a'
48
+ codepage = 0x04E4
49
+ caption = " \tDoc properties: _pack_VT_LPSTR('#{string}',\t#{codepage}')"
50
+ target = %w(
51
+ 1E 00 00 00 02 00 00 00 61 00 00 00
52
+ ).join(' ')
53
+
54
+ result = unpack_record( pack_VT_LPSTR(string, codepage) )
55
+ assert_equal(target, result, caption)
56
+ end
57
+
58
+ def test_pack_a_VT_LPSTR_string_and_check_for_padding_3
59
+ string = 'bb'
60
+ codepage = 0x04E4
61
+ caption = " \tDoc properties: _pack_VT_LPSTR('#{string}',\t#{codepage}')"
62
+ target = %w(
63
+ 1E 00 00 00 03 00 00 00 62 62 00 00
64
+ ).join(' ')
65
+
66
+ result = unpack_record( pack_VT_LPSTR(string, codepage) )
67
+ assert_equal(target, result, caption)
68
+ end
69
+
70
+ def test_pack_a_VT_LPSTR_string_and_check_for_padding_4
71
+ string = 'ccc'
72
+ codepage = 0x04E4
73
+ caption = " \tDoc properties: _pack_VT_LPSTR('#{string}',\t#{codepage}')"
74
+ target = %w(
75
+ 1E 00 00 00 04 00 00 00 63 63 63 00
76
+ ).join(' ')
77
+
78
+ result = unpack_record( pack_VT_LPSTR(string, codepage) )
79
+ assert_equal(target, result, caption)
80
+ end
81
+
82
+ def test_pack_a_VT_LPSTR_string_and_check_for_padding_5
83
+ string = 'dddd'
84
+ codepage = 0x04E4
85
+ caption = " \tDoc properties: _pack_VT_LPSTR('#{string}',\t#{codepage}')"
86
+ target = %w(
87
+ 1E 00 00 00 05 00 00 00 64 64 64 64 00 00 00 00
88
+ ).join(' ')
89
+
90
+ result = unpack_record( pack_VT_LPSTR(string, codepage) )
91
+ assert_equal(target, result, caption)
92
+ end
93
+
94
+ def test_pack_a_VT_LPSTR_string_and_check_for_padding_6
95
+ string = 'Username'
96
+ codepage = 0x04E4
97
+ caption = " \tDoc properties: _pack_VT_LPSTR('#{string}',\t#{codepage}')"
98
+ target = %w(
99
+ 1E 00 00 00 09 00 00 00 55 73 65 72 6E 61 6D 65
100
+ 00 00 00 00
101
+ ).join(' ')
102
+
103
+ result = unpack_record( pack_VT_LPSTR(string, codepage) )
104
+ assert_equal(target, result, caption)
105
+ end
106
+
107
+ def test_pack_a_VT_LPSTR_UTF8_string
108
+ string = @smiley
109
+ codepage = 0xFDE9
110
+ caption = " \tDoc properties: _pack_VT_LPSTR('#{@smiley}',\t#{codepage}')"
111
+ target = %w(
112
+ 1E 00 00 00 04 00 00 00 E2 98 BA 00
113
+ ).join(' ')
114
+
115
+ result = unpack_record( pack_VT_LPSTR(string, codepage) )
116
+ assert_equal(target, result, caption)
117
+ end
118
+
119
+ def test_pack_a_VT_LPSTR_UTF8_string_2
120
+ string = "a" + @smiley
121
+ codepage = 0xFDE9
122
+ caption = " \tDoc properties: _pack_VT_LPSTR('a#{@smiley}',\t#{codepage}')"
123
+ target = %w(
124
+ 1E 00 00 00 05 00 00 00 61 E2 98 BA 00 00 00 00
125
+ ).join(' ')
126
+
127
+ result = unpack_record( pack_VT_LPSTR(string, codepage) )
128
+ assert_equal(target, result, caption)
129
+ end
130
+
131
+ def test_pack_a_VT_LPSTR_UTF8_string_3
132
+ string = "aa" + @smiley
133
+ codepage = 0xFDE9
134
+ caption = " \tDoc properties: _pack_VT_LPSTR('#{string}',\t#{codepage}')"
135
+ target = %w(
136
+ 1E 00 00 00 06 00 00 00 61 61 E2 98 BA 00 00 00
137
+ ).join(' ')
138
+
139
+ result = unpack_record( pack_VT_LPSTR(string, codepage) )
140
+ assert_equal(target, result, caption)
141
+ end
142
+
143
+ def test_pack_a_VT_LPSTR_UTF8_string_4
144
+ string = "aaa" + @smiley
145
+ codepage = 0xFDE9
146
+ caption = " \tDoc properties: _pack_VT_LPSTR('#{string}',\t#{codepage}')"
147
+ target = %w(
148
+ 1E 00 00 00 07 00 00 00 61 61 61 E2 98 BA 00 00
149
+ ).join(' ')
150
+
151
+ result = unpack_record( pack_VT_LPSTR(string, codepage) )
152
+ assert_equal(target, result, caption)
153
+ end
154
+
155
+ def test_pack_a_VT_LPSTR_UTF8_string_5
156
+ string = "aaaa" + @smiley
157
+ codepage = 0xFDE9
158
+ caption = " \tDoc properties: _pack_VT_LPSTR('#{string}',\t#{codepage}')"
159
+ target = %w(
160
+ 1E 00 00 00 08 00 00 00 61 61 61 61 E2 98 BA 00
161
+ ).join(' ')
162
+
163
+ result = unpack_record( pack_VT_LPSTR(string, codepage) )
164
+ assert_equal(target, result, caption)
165
+ end
166
+
167
+ def test_pack_a_VT_FILETIME
168
+ # Wed Aug 13 00:40:00 2008
169
+ # $sec,$min,$hour,$mday,$mon,$year
170
+ # We normalise the time using timegm() so that the tests don't fail due to
171
+ # different timezones.
172
+ filetime = Time.gm(2008,8,13,0,40,0)
173
+
174
+ caption = " \tDoc properties: _pack_VT_FILETIME()"
175
+ target = %w(
176
+ 40 00 00 00 00 70 EB 1D DD FC C8 01
177
+ ).join(' ')
178
+
179
+ result = unpack_record( pack_VT_FILETIME(filetime) )
180
+ assert_equal(target, result, caption)
181
+ end
182
+
183
+ ###############################################################################
184
+ #
185
+ # Unpack the binary data into a format suitable for printing in tests.
186
+ #
187
+ def unpack_record(data)
188
+ data.unpack('C*').map! {|c| sprintf("%02X", c) }.join(' ')
189
+ end
190
+
191
+ end
@@ -1,238 +1,238 @@
1
- ##########################################################################
2
- # test_41_properties.rb
3
- #
4
- # Tests for OLE property sets.
5
- #
6
- # reverse('©'), September 2005, John McNamara, jmcnamara@cpan.org
7
- #
8
- # original written in Perl by John McNamara
9
- # converted to Ruby by Hideo Nakamura, cxn03651@msj.biglobe.ne.jp
10
- #
11
- #########################################################################
12
- $LOAD_PATH.unshift "#{File.dirname(__FILE__)}/../lib"
13
-
14
- require 'test/unit'
15
- require 'rubygems'
16
- require 'writeexcel'
17
-
18
- class TC_properties < Test::Unit::TestCase
19
-
20
- def setup
21
- @smiley = '☺' # chr 0x263A; in perl
22
- end
23
-
24
- def test_codepage_only
25
- properties = [[0x0001, 'VT_I2', 0x04E4]]
26
- caption = " \tDoc properties: _create_property_set('Code page')"
27
- target = %w(
28
- FE FF 00 00 05 01 02 00 00 00 00 00 00 00 00 00
29
- 00 00 00 00 00 00 00 00 01 00 00 00 E0 85 9F F2
30
- F9 4F 68 10 AB 91 08 00 2B 27 B3 D9 30 00 00 00
31
- 18 00 00 00 01 00 00 00 01 00 00 00 10 00 00 00
32
- 02 00 00 00 E4 04 00 00
33
- ).join(' ')
34
-
35
- result = unpack_record( create_summary_property_set(properties))
36
- assert_equal(target, result, caption)
37
- end
38
-
39
- def test_same_as_previous_plus_title
40
- properties = [
41
- [0x0001, 'VT_I2', 0x04E4 ],
42
- [0x0002, 'VT_LPSTR', 'Title'],
43
- ]
44
- caption = " \tDoc properties: _create_property_set('+ Title')"
45
- target = %w(
46
- FE FF 00 00 05 01 02 00 00 00 00 00 00 00 00 00
47
- 00 00 00 00 00 00 00 00 01 00 00 00 E0 85 9F F2
48
- F9 4F 68 10 AB 91 08 00 2B 27 B3 D9 30 00 00 00
49
- 30 00 00 00 02 00 00 00 01 00 00 00 18 00 00 00
50
- 02 00 00 00 20 00 00 00 02 00 00 00 E4 04 00 00
51
- 1E 00 00 00 06 00 00 00 54 69 74 6C 65 00 00 00
52
- ).join(' ')
53
-
54
- result = unpack_record( create_summary_property_set(properties))
55
- assert_equal(target, result, caption)
56
- end
57
-
58
- def test_same_as_previous_plus_subject
59
- properties = [
60
- [0x0001, 'VT_I2', 0x04E4 ],
61
- [0x0002, 'VT_LPSTR', 'Title'],
62
- [0x0003, 'VT_LPSTR', 'Subject'],
63
- ]
64
- caption = " \tDoc properties: _create_property_set('+ Subject')"
65
- target = %w(
66
- FE FF 00 00 05 01 02 00 00 00 00 00 00 00 00 00
67
- 00 00 00 00 00 00 00 00 01 00 00 00 E0 85 9F F2
68
- F9 4F 68 10 AB 91 08 00 2B 27 B3 D9 30 00 00 00
69
- 48 00 00 00 03 00 00 00 01 00 00 00 20 00 00 00
70
- 02 00 00 00 28 00 00 00 03 00 00 00 38 00 00 00
71
- 02 00 00 00 E4 04 00 00 1E 00 00 00 06 00 00 00
72
- 54 69 74 6C 65 00 00 00 1E 00 00 00 08 00 00 00
73
- 53 75 62 6A 65 63 74 00
74
- ).join(' ')
75
-
76
- result = unpack_record( create_summary_property_set(properties))
77
- assert_equal(target, result, caption)
78
- end
79
-
80
- def test_same_as_previous_plus_author
81
- properties = [
82
- [0x0001, 'VT_I2', 0x04E4 ],
83
- [0x0002, 'VT_LPSTR', 'Title'],
84
- [0x0003, 'VT_LPSTR', 'Subject'],
85
- [0x0004, 'VT_LPSTR', 'Author' ],
86
- ]
87
- caption = " \tDoc properties: _create_property_set('+ Keywords')"
88
- target = %w(
89
- FE FF 00 00 05 01 02 00 00 00 00 00 00 00 00 00
90
- 00 00 00 00 00 00 00 00 01 00 00 00 E0 85 9F F2
91
- F9 4F 68 10 AB 91 08 00 2B 27 B3 D9 30 00 00 00
92
- 60 00 00 00 04 00 00 00 01 00 00 00 28 00 00 00
93
- 02 00 00 00 30 00 00 00 03 00 00 00 40 00 00 00
94
- 04 00 00 00 50 00 00 00 02 00 00 00 E4 04 00 00
95
- 1E 00 00 00 06 00 00 00 54 69 74 6C 65 00 00 00
96
- 1E 00 00 00 08 00 00 00 53 75 62 6A 65 63 74 00
97
- 1E 00 00 00 07 00 00 00 41 75 74 68 6F 72 00 00
98
- ).join(' ')
99
-
100
- result = unpack_record( create_summary_property_set(properties))
101
- assert_equal(target, result, caption)
102
- end
103
-
104
- def test_same_as_previous_plus_keywords
105
- properties = [
106
- [0x0001, 'VT_I2', 0x04E4 ],
107
- [0x0002, 'VT_LPSTR', 'Title'],
108
- [0x0003, 'VT_LPSTR', 'Subject'],
109
- [0x0004, 'VT_LPSTR', 'Author' ],
110
- [0x0005, 'VT_LPSTR', 'Keywords'],
111
- ]
112
- caption = " \tDoc properties: _create_property_set('+ Keywords')"
113
- target = %w(
114
- FE FF 00 00 05 01 02 00 00 00 00 00 00 00 00 00
115
- 00 00 00 00 00 00 00 00 01 00 00 00 E0 85 9F F2
116
- F9 4F 68 10 AB 91 08 00 2B 27 B3 D9 30 00 00 00
117
- 7C 00 00 00 05 00 00 00 01 00 00 00 30 00 00 00
118
- 02 00 00 00 38 00 00 00 03 00 00 00 48 00 00 00
119
- 04 00 00 00 58 00 00 00 05 00 00 00 68 00 00 00
120
- 02 00 00 00 E4 04 00 00 1E 00 00 00 06 00 00 00
121
- 54 69 74 6C 65 00 00 00 1E 00 00 00 08 00 00 00
122
- 53 75 62 6A 65 63 74 00 1E 00 00 00 07 00 00 00
123
- 41 75 74 68 6F 72 00 00 1E 00 00 00 09 00 00 00
124
- 4B 65 79 77 6F 72 64 73 00 00 00 00
125
- ).join(' ')
126
-
127
- result = unpack_record( create_summary_property_set(properties))
128
- assert_equal(target, result, caption)
129
- end
130
-
131
- def test_same_as_previous_plus_comments
132
- properties = [
133
- [0x0001, 'VT_I2', 0x04E4 ],
134
- [0x0002, 'VT_LPSTR', 'Title'],
135
- [0x0003, 'VT_LPSTR', 'Subject'],
136
- [0x0004, 'VT_LPSTR', 'Author' ],
137
- [0x0005, 'VT_LPSTR', 'Keywords'],
138
- [0x0006, 'VT_LPSTR', 'Comments'],
139
- ]
140
- caption = " \tDoc properties: _create_property_set('+ Comments')"
141
- target = %w(
142
- FE FF 00 00 05 01 02 00 00 00 00 00 00 00 00 00
143
- 00 00 00 00 00 00 00 00 01 00 00 00 E0 85 9F F2
144
- F9 4F 68 10 AB 91 08 00 2B 27 B3 D9 30 00 00 00
145
- 98 00 00 00 06 00 00 00 01 00 00 00 38 00 00 00
146
- 02 00 00 00 40 00 00 00 03 00 00 00 50 00 00 00
147
- 04 00 00 00 60 00 00 00 05 00 00 00 70 00 00 00
148
- 06 00 00 00 84 00 00 00 02 00 00 00 E4 04 00 00
149
- 1E 00 00 00 06 00 00 00 54 69 74 6C 65 00 00 00
150
- 1E 00 00 00 08 00 00 00 53 75 62 6A 65 63 74 00
151
- 1E 00 00 00 07 00 00 00 41 75 74 68 6F 72 00 00
152
- 1E 00 00 00 09 00 00 00 4B 65 79 77 6F 72 64 73
153
- 00 00 00 00 1E 00 00 00 09 00 00 00 43 6F 6D 6D
154
- 65 6E 74 73 00 00 00 00
155
- ).join(' ')
156
-
157
- result = unpack_record( create_summary_property_set(properties))
158
- assert_equal(target, result, caption)
159
- end
160
-
161
- def test_same_as_previous_plus_last_author
162
- properties = [
163
- [0x0001, 'VT_I2', 0x04E4 ],
164
- [0x0002, 'VT_LPSTR', 'Title'],
165
- [0x0003, 'VT_LPSTR', 'Subject'],
166
- [0x0004, 'VT_LPSTR', 'Author' ],
167
- [0x0005, 'VT_LPSTR', 'Keywords'],
168
- [0x0006, 'VT_LPSTR', 'Comments'],
169
- [0x0008, 'VT_LPSTR', 'Username'],
170
- ]
171
- caption = " \tDoc properties: _create_property_set('+ Comments')"
172
- target = %w(
173
- FE FF 00 00 05 01 02 00 00 00 00 00 00 00 00 00
174
- 00 00 00 00 00 00 00 00 01 00 00 00 E0 85 9F F2
175
- F9 4F 68 10 AB 91 08 00 2B 27 B3 D9 30 00 00 00
176
- B4 00 00 00 07 00 00 00 01 00 00 00 40 00 00 00
177
- 02 00 00 00 48 00 00 00 03 00 00 00 58 00 00 00
178
- 04 00 00 00 68 00 00 00 05 00 00 00 78 00 00 00
179
- 06 00 00 00 8C 00 00 00 08 00 00 00 A0 00 00 00
180
- 02 00 00 00 E4 04 00 00 1E 00 00 00 06 00 00 00
181
- 54 69 74 6C 65 00 00 00 1E 00 00 00 08 00 00 00
182
- 53 75 62 6A 65 63 74 00 1E 00 00 00 07 00 00 00
183
- 41 75 74 68 6F 72 00 00 1E 00 00 00 09 00 00 00
184
- 4B 65 79 77 6F 72 64 73 00 00 00 00 1E 00 00 00
185
- 09 00 00 00 43 6F 6D 6D 65 6E 74 73 00 00 00 00
186
- 1E 00 00 00 09 00 00 00 55 73 65 72 6E 61 6D 65
187
- 00 00 00 00
188
- ).join(' ')
189
-
190
- result = unpack_record( create_summary_property_set(properties))
191
- assert_equal(target, result, caption)
192
- end
193
-
194
- def test_same_as_previous_plus_creation_date
195
- filetime = Time.gm(2008,8,19,23,20,13)
196
- properties = [
197
- [0x0001, 'VT_I2', 0x04E4 ],
198
- [0x0002, 'VT_LPSTR', 'Title'],
199
- [0x0003, 'VT_LPSTR', 'Subject'],
200
- [0x0004, 'VT_LPSTR', 'Author' ],
201
- [0x0005, 'VT_LPSTR', 'Keywords'],
202
- [0x0006, 'VT_LPSTR', 'Comments'],
203
- [0x0008, 'VT_LPSTR', 'Username'],
204
- [0x000C, 'VT_FILETIME', filetime ],
205
- ]
206
- caption = " \tDoc properties: _create_property_set('+ Comments')"
207
- target = %w(
208
- FE FF 00 00 05 01 02 00 00 00 00 00 00 00 00 00
209
- 00 00 00 00 00 00 00 00 01 00 00 00 E0 85 9F F2
210
- F9 4F 68 10 AB 91 08 00 2B 27 B3 D9 30 00 00 00
211
- C8 00 00 00 08 00 00 00 01 00 00 00 48 00 00 00
212
- 02 00 00 00 50 00 00 00 03 00 00 00 60 00 00 00
213
- 04 00 00 00 70 00 00 00 05 00 00 00 80 00 00 00
214
- 06 00 00 00 94 00 00 00 08 00 00 00 A8 00 00 00
215
- 0C 00 00 00 BC 00 00 00 02 00 00 00 E4 04 00 00
216
- 1E 00 00 00 06 00 00 00 54 69 74 6C 65 00 00 00
217
- 1E 00 00 00 08 00 00 00 53 75 62 6A 65 63 74 00
218
- 1E 00 00 00 07 00 00 00 41 75 74 68 6F 72 00 00
219
- 1E 00 00 00 09 00 00 00 4B 65 79 77 6F 72 64 73
220
- 00 00 00 00 1E 00 00 00 09 00 00 00 43 6F 6D 6D
221
- 65 6E 74 73 00 00 00 00 1E 00 00 00 09 00 00 00
222
- 55 73 65 72 6E 61 6D 65 00 00 00 00 40 00 00 00
223
- 80 74 89 21 52 02 C9 01
224
- ).join(' ')
225
-
226
- result = unpack_record( create_summary_property_set(properties))
227
- assert_equal(target, result, caption)
228
- end
229
-
230
- ###############################################################################
231
- #
232
- # Unpack the binary data into a format suitable for printing in tests.
233
- #
234
- def unpack_record(data)
235
- data.unpack('C*').map! {|c| sprintf("%02X", c) }.join(' ')
236
- end
237
-
238
- end
1
+ ##########################################################################
2
+ # test_41_properties.rb
3
+ #
4
+ # Tests for OLE property sets.
5
+ #
6
+ # reverse('©'), September 2005, John McNamara, jmcnamara@cpan.org
7
+ #
8
+ # original written in Perl by John McNamara
9
+ # converted to Ruby by Hideo Nakamura, cxn03651@msj.biglobe.ne.jp
10
+ #
11
+ #########################################################################
12
+ $LOAD_PATH.unshift "#{File.dirname(__FILE__)}/../lib"
13
+
14
+ require 'test/unit'
15
+ require 'rubygems'
16
+ require 'writeexcel'
17
+
18
+ class TC_properties < Test::Unit::TestCase
19
+
20
+ def setup
21
+ @smiley = '☺' # chr 0x263A; in perl
22
+ end
23
+
24
+ def test_codepage_only
25
+ properties = [[0x0001, 'VT_I2', 0x04E4]]
26
+ caption = " \tDoc properties: _create_property_set('Code page')"
27
+ target = %w(
28
+ FE FF 00 00 05 01 02 00 00 00 00 00 00 00 00 00
29
+ 00 00 00 00 00 00 00 00 01 00 00 00 E0 85 9F F2
30
+ F9 4F 68 10 AB 91 08 00 2B 27 B3 D9 30 00 00 00
31
+ 18 00 00 00 01 00 00 00 01 00 00 00 10 00 00 00
32
+ 02 00 00 00 E4 04 00 00
33
+ ).join(' ')
34
+
35
+ result = unpack_record( create_summary_property_set(properties))
36
+ assert_equal(target, result, caption)
37
+ end
38
+
39
+ def test_same_as_previous_plus_title
40
+ properties = [
41
+ [0x0001, 'VT_I2', 0x04E4 ],
42
+ [0x0002, 'VT_LPSTR', 'Title'],
43
+ ]
44
+ caption = " \tDoc properties: _create_property_set('+ Title')"
45
+ target = %w(
46
+ FE FF 00 00 05 01 02 00 00 00 00 00 00 00 00 00
47
+ 00 00 00 00 00 00 00 00 01 00 00 00 E0 85 9F F2
48
+ F9 4F 68 10 AB 91 08 00 2B 27 B3 D9 30 00 00 00
49
+ 30 00 00 00 02 00 00 00 01 00 00 00 18 00 00 00
50
+ 02 00 00 00 20 00 00 00 02 00 00 00 E4 04 00 00
51
+ 1E 00 00 00 06 00 00 00 54 69 74 6C 65 00 00 00
52
+ ).join(' ')
53
+
54
+ result = unpack_record( create_summary_property_set(properties))
55
+ assert_equal(target, result, caption)
56
+ end
57
+
58
+ def test_same_as_previous_plus_subject
59
+ properties = [
60
+ [0x0001, 'VT_I2', 0x04E4 ],
61
+ [0x0002, 'VT_LPSTR', 'Title'],
62
+ [0x0003, 'VT_LPSTR', 'Subject'],
63
+ ]
64
+ caption = " \tDoc properties: _create_property_set('+ Subject')"
65
+ target = %w(
66
+ FE FF 00 00 05 01 02 00 00 00 00 00 00 00 00 00
67
+ 00 00 00 00 00 00 00 00 01 00 00 00 E0 85 9F F2
68
+ F9 4F 68 10 AB 91 08 00 2B 27 B3 D9 30 00 00 00
69
+ 48 00 00 00 03 00 00 00 01 00 00 00 20 00 00 00
70
+ 02 00 00 00 28 00 00 00 03 00 00 00 38 00 00 00
71
+ 02 00 00 00 E4 04 00 00 1E 00 00 00 06 00 00 00
72
+ 54 69 74 6C 65 00 00 00 1E 00 00 00 08 00 00 00
73
+ 53 75 62 6A 65 63 74 00
74
+ ).join(' ')
75
+
76
+ result = unpack_record( create_summary_property_set(properties))
77
+ assert_equal(target, result, caption)
78
+ end
79
+
80
+ def test_same_as_previous_plus_author
81
+ properties = [
82
+ [0x0001, 'VT_I2', 0x04E4 ],
83
+ [0x0002, 'VT_LPSTR', 'Title'],
84
+ [0x0003, 'VT_LPSTR', 'Subject'],
85
+ [0x0004, 'VT_LPSTR', 'Author' ],
86
+ ]
87
+ caption = " \tDoc properties: _create_property_set('+ Keywords')"
88
+ target = %w(
89
+ FE FF 00 00 05 01 02 00 00 00 00 00 00 00 00 00
90
+ 00 00 00 00 00 00 00 00 01 00 00 00 E0 85 9F F2
91
+ F9 4F 68 10 AB 91 08 00 2B 27 B3 D9 30 00 00 00
92
+ 60 00 00 00 04 00 00 00 01 00 00 00 28 00 00 00
93
+ 02 00 00 00 30 00 00 00 03 00 00 00 40 00 00 00
94
+ 04 00 00 00 50 00 00 00 02 00 00 00 E4 04 00 00
95
+ 1E 00 00 00 06 00 00 00 54 69 74 6C 65 00 00 00
96
+ 1E 00 00 00 08 00 00 00 53 75 62 6A 65 63 74 00
97
+ 1E 00 00 00 07 00 00 00 41 75 74 68 6F 72 00 00
98
+ ).join(' ')
99
+
100
+ result = unpack_record( create_summary_property_set(properties))
101
+ assert_equal(target, result, caption)
102
+ end
103
+
104
+ def test_same_as_previous_plus_keywords
105
+ properties = [
106
+ [0x0001, 'VT_I2', 0x04E4 ],
107
+ [0x0002, 'VT_LPSTR', 'Title'],
108
+ [0x0003, 'VT_LPSTR', 'Subject'],
109
+ [0x0004, 'VT_LPSTR', 'Author' ],
110
+ [0x0005, 'VT_LPSTR', 'Keywords'],
111
+ ]
112
+ caption = " \tDoc properties: _create_property_set('+ Keywords')"
113
+ target = %w(
114
+ FE FF 00 00 05 01 02 00 00 00 00 00 00 00 00 00
115
+ 00 00 00 00 00 00 00 00 01 00 00 00 E0 85 9F F2
116
+ F9 4F 68 10 AB 91 08 00 2B 27 B3 D9 30 00 00 00
117
+ 7C 00 00 00 05 00 00 00 01 00 00 00 30 00 00 00
118
+ 02 00 00 00 38 00 00 00 03 00 00 00 48 00 00 00
119
+ 04 00 00 00 58 00 00 00 05 00 00 00 68 00 00 00
120
+ 02 00 00 00 E4 04 00 00 1E 00 00 00 06 00 00 00
121
+ 54 69 74 6C 65 00 00 00 1E 00 00 00 08 00 00 00
122
+ 53 75 62 6A 65 63 74 00 1E 00 00 00 07 00 00 00
123
+ 41 75 74 68 6F 72 00 00 1E 00 00 00 09 00 00 00
124
+ 4B 65 79 77 6F 72 64 73 00 00 00 00
125
+ ).join(' ')
126
+
127
+ result = unpack_record( create_summary_property_set(properties))
128
+ assert_equal(target, result, caption)
129
+ end
130
+
131
+ def test_same_as_previous_plus_comments
132
+ properties = [
133
+ [0x0001, 'VT_I2', 0x04E4 ],
134
+ [0x0002, 'VT_LPSTR', 'Title'],
135
+ [0x0003, 'VT_LPSTR', 'Subject'],
136
+ [0x0004, 'VT_LPSTR', 'Author' ],
137
+ [0x0005, 'VT_LPSTR', 'Keywords'],
138
+ [0x0006, 'VT_LPSTR', 'Comments'],
139
+ ]
140
+ caption = " \tDoc properties: _create_property_set('+ Comments')"
141
+ target = %w(
142
+ FE FF 00 00 05 01 02 00 00 00 00 00 00 00 00 00
143
+ 00 00 00 00 00 00 00 00 01 00 00 00 E0 85 9F F2
144
+ F9 4F 68 10 AB 91 08 00 2B 27 B3 D9 30 00 00 00
145
+ 98 00 00 00 06 00 00 00 01 00 00 00 38 00 00 00
146
+ 02 00 00 00 40 00 00 00 03 00 00 00 50 00 00 00
147
+ 04 00 00 00 60 00 00 00 05 00 00 00 70 00 00 00
148
+ 06 00 00 00 84 00 00 00 02 00 00 00 E4 04 00 00
149
+ 1E 00 00 00 06 00 00 00 54 69 74 6C 65 00 00 00
150
+ 1E 00 00 00 08 00 00 00 53 75 62 6A 65 63 74 00
151
+ 1E 00 00 00 07 00 00 00 41 75 74 68 6F 72 00 00
152
+ 1E 00 00 00 09 00 00 00 4B 65 79 77 6F 72 64 73
153
+ 00 00 00 00 1E 00 00 00 09 00 00 00 43 6F 6D 6D
154
+ 65 6E 74 73 00 00 00 00
155
+ ).join(' ')
156
+
157
+ result = unpack_record( create_summary_property_set(properties))
158
+ assert_equal(target, result, caption)
159
+ end
160
+
161
+ def test_same_as_previous_plus_last_author
162
+ properties = [
163
+ [0x0001, 'VT_I2', 0x04E4 ],
164
+ [0x0002, 'VT_LPSTR', 'Title'],
165
+ [0x0003, 'VT_LPSTR', 'Subject'],
166
+ [0x0004, 'VT_LPSTR', 'Author' ],
167
+ [0x0005, 'VT_LPSTR', 'Keywords'],
168
+ [0x0006, 'VT_LPSTR', 'Comments'],
169
+ [0x0008, 'VT_LPSTR', 'Username'],
170
+ ]
171
+ caption = " \tDoc properties: _create_property_set('+ Comments')"
172
+ target = %w(
173
+ FE FF 00 00 05 01 02 00 00 00 00 00 00 00 00 00
174
+ 00 00 00 00 00 00 00 00 01 00 00 00 E0 85 9F F2
175
+ F9 4F 68 10 AB 91 08 00 2B 27 B3 D9 30 00 00 00
176
+ B4 00 00 00 07 00 00 00 01 00 00 00 40 00 00 00
177
+ 02 00 00 00 48 00 00 00 03 00 00 00 58 00 00 00
178
+ 04 00 00 00 68 00 00 00 05 00 00 00 78 00 00 00
179
+ 06 00 00 00 8C 00 00 00 08 00 00 00 A0 00 00 00
180
+ 02 00 00 00 E4 04 00 00 1E 00 00 00 06 00 00 00
181
+ 54 69 74 6C 65 00 00 00 1E 00 00 00 08 00 00 00
182
+ 53 75 62 6A 65 63 74 00 1E 00 00 00 07 00 00 00
183
+ 41 75 74 68 6F 72 00 00 1E 00 00 00 09 00 00 00
184
+ 4B 65 79 77 6F 72 64 73 00 00 00 00 1E 00 00 00
185
+ 09 00 00 00 43 6F 6D 6D 65 6E 74 73 00 00 00 00
186
+ 1E 00 00 00 09 00 00 00 55 73 65 72 6E 61 6D 65
187
+ 00 00 00 00
188
+ ).join(' ')
189
+
190
+ result = unpack_record( create_summary_property_set(properties))
191
+ assert_equal(target, result, caption)
192
+ end
193
+
194
+ def test_same_as_previous_plus_creation_date
195
+ filetime = Time.gm(2008,8,19,23,20,13)
196
+ properties = [
197
+ [0x0001, 'VT_I2', 0x04E4 ],
198
+ [0x0002, 'VT_LPSTR', 'Title'],
199
+ [0x0003, 'VT_LPSTR', 'Subject'],
200
+ [0x0004, 'VT_LPSTR', 'Author' ],
201
+ [0x0005, 'VT_LPSTR', 'Keywords'],
202
+ [0x0006, 'VT_LPSTR', 'Comments'],
203
+ [0x0008, 'VT_LPSTR', 'Username'],
204
+ [0x000C, 'VT_FILETIME', filetime ],
205
+ ]
206
+ caption = " \tDoc properties: _create_property_set('+ Comments')"
207
+ target = %w(
208
+ FE FF 00 00 05 01 02 00 00 00 00 00 00 00 00 00
209
+ 00 00 00 00 00 00 00 00 01 00 00 00 E0 85 9F F2
210
+ F9 4F 68 10 AB 91 08 00 2B 27 B3 D9 30 00 00 00
211
+ C8 00 00 00 08 00 00 00 01 00 00 00 48 00 00 00
212
+ 02 00 00 00 50 00 00 00 03 00 00 00 60 00 00 00
213
+ 04 00 00 00 70 00 00 00 05 00 00 00 80 00 00 00
214
+ 06 00 00 00 94 00 00 00 08 00 00 00 A8 00 00 00
215
+ 0C 00 00 00 BC 00 00 00 02 00 00 00 E4 04 00 00
216
+ 1E 00 00 00 06 00 00 00 54 69 74 6C 65 00 00 00
217
+ 1E 00 00 00 08 00 00 00 53 75 62 6A 65 63 74 00
218
+ 1E 00 00 00 07 00 00 00 41 75 74 68 6F 72 00 00
219
+ 1E 00 00 00 09 00 00 00 4B 65 79 77 6F 72 64 73
220
+ 00 00 00 00 1E 00 00 00 09 00 00 00 43 6F 6D 6D
221
+ 65 6E 74 73 00 00 00 00 1E 00 00 00 09 00 00 00
222
+ 55 73 65 72 6E 61 6D 65 00 00 00 00 40 00 00 00
223
+ 80 74 89 21 52 02 C9 01
224
+ ).join(' ')
225
+
226
+ result = unpack_record( create_summary_property_set(properties))
227
+ assert_equal(target, result, caption)
228
+ end
229
+
230
+ ###############################################################################
231
+ #
232
+ # Unpack the binary data into a format suitable for printing in tests.
233
+ #
234
+ def unpack_record(data)
235
+ data.unpack('C*').map! {|c| sprintf("%02X", c) }.join(' ')
236
+ end
237
+
238
+ end