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
@@ -0,0 +1,209 @@
1
+ ##########################################################################
2
+ # test_53_autofilter.rb
3
+ #
4
+ # Tests for the Excel EXTERNSHEET and NAME records created by print_are()..
5
+ #
6
+ # reverse('ゥ'), September 2008, 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
+ require 'test/unit'
14
+ require 'rubygems'
15
+ require 'writeexcel'
16
+ require 'stringio'
17
+
18
+ class TC_autofilter < Test::Unit::TestCase
19
+ def setup
20
+ @test_file = StringIO.new
21
+ @workbook = WriteExcel.new(@test_file)
22
+ @workbook.not_using_tmpfile
23
+ end
24
+
25
+ def test_autofilter_on_one_sheet
26
+ worksheet1 = @workbook.add_worksheet
27
+
28
+ worksheet1.autofilter('A1:C5')
29
+
30
+ # Test the EXTERNSHEET record.
31
+ @workbook.calculate_extern_sizes
32
+ @workbook.store_externsheet
33
+
34
+ target = [%w(
35
+ 17 00 08 00 01 00 00 00 00 00 00 00
36
+ ).join('')].pack('H*')
37
+
38
+ caption = " \tExternsheet"
39
+ result = _unpack_externsheet(@workbook.data)
40
+ target = _unpack_externsheet(target)
41
+ assert_equal(target, result)
42
+
43
+ # Test the NAME record.
44
+ @workbook.clear_data_for_test
45
+ @workbook.store_names
46
+
47
+ target = [%w(
48
+ 18 00 1B 00 21 00 00 01 0B 00 00 00 01 00 00 00
49
+ 00 00 00 0D 3B 00 00 00 00 04 00 00 00 02 00
50
+ ).join('')].pack('H*')
51
+
52
+ caption = " \t+ Name = autofilter ( Sheet1!A1:C5 )";
53
+ result = _unpack_name(@workbook.data)
54
+ target = _unpack_name(target)
55
+ assert_equal(target, result)
56
+ end
57
+
58
+ def test_autofilter_on_two_sheets
59
+ worksheet1 = @workbook.add_worksheet
60
+ worksheet2 = @workbook.add_worksheet
61
+
62
+ worksheet1.autofilter('A1:C5')
63
+ worksheet2.autofilter('A1:C5')
64
+
65
+ # Test the EXTERNSHEET record.
66
+ @workbook.calculate_extern_sizes
67
+ @workbook.store_externsheet
68
+
69
+ target = [%w(
70
+ 17 00 0E 00 02 00 00 00 00 00 00 00 00 00 01 00
71
+ 01 00
72
+ ).join('')].pack('H*')
73
+
74
+ caption = " \tExternsheet"
75
+ result = _unpack_externsheet(@workbook.data)
76
+ target = _unpack_externsheet(target)
77
+ assert_equal(target, result)
78
+
79
+ # Test the NAME record.
80
+ @workbook.clear_data_for_test
81
+ @workbook.store_names
82
+
83
+ target = [%w(
84
+ 18 00 1B 00 21 00 00 01 0B 00 00 00 01 00 00 00
85
+ 00 00 00 0D 3B 00 00 00 00 04 00 00 00 02 00
86
+
87
+ 18 00 1B 00 21 00 00 01 0B 00 00 00 02 00 00 00
88
+ 00 00 00 0D 3B 01 00 00 00 04 00 00 00 02 00
89
+ ).join('')].pack('H*')
90
+
91
+ caption = " \t+ Name = autofilter ( Sheet1!A1:C5, Sheet2!A1:C5 )";
92
+ result = _unpack_name(@workbook.data)
93
+ target = _unpack_name(target)
94
+ assert_equal(target, result)
95
+ end
96
+
97
+ ###############################################################################
98
+ #
99
+ # Unpack the binary data into a format suitable for printing in tests.
100
+ #
101
+ def unpack_record(data)
102
+ data.unpack('C*').map! {|c| sprintf("%02X", c) }.join(' ')
103
+ end
104
+
105
+ ###############################################################################
106
+ #
107
+ # _unpack_externsheet()
108
+ #
109
+ # Unpack the EXTERNSHEET recordfor easier comparison.
110
+ #
111
+ def _unpack_externsheet(data)
112
+ externsheet = Hash.new
113
+
114
+ externsheet['record'] = data[0, 2].unpack('v')[0]
115
+ data[0, 2] = ''
116
+ externsheet['length'] = data[0, 2].unpack('v')[0]
117
+ data[0, 2] = ''
118
+ externsheet['count'] = data[0, 2].unpack('v')[0]
119
+ data[0, 2] = ''
120
+ externsheet['array'] = [];
121
+
122
+ externsheet['count'].times do
123
+ externsheet['array'] << data[0, 6].unpack('vvv')
124
+ data[0, 6] = ''
125
+ end
126
+ externsheet
127
+ end
128
+
129
+ ###############################################################################
130
+ #
131
+ # _unpack_name()
132
+ #
133
+ # Unpack 1 or more NAME structures into a AoH for easier comparison.
134
+ #
135
+ def _unpack_name(data)
136
+ names = Array.new
137
+ while data.length > 0
138
+ name = Hash.new
139
+
140
+ name['record'] = data[0, 2].unpack('v')[0]
141
+ data[0, 2] = ''
142
+ name['length'] = data[0, 2].unpack('v')[0]
143
+ data[0, 2] = ''
144
+ name['flags'] = data[0, 2].unpack('v')[0]
145
+ data[0, 2] = ''
146
+ name['shortcut'] = data[0, 1].unpack('C')[0]
147
+ data[0, 1] = ''
148
+ name['str_len'] = data[0, 1].unpack('C')[0]
149
+ data[0, 1] = ''
150
+ name['formula_len'] = data[0, 2].unpack('v')[0]
151
+ data[0, 2] = ''
152
+ name['itals'] = data[0, 2].unpack('v')[0]
153
+ data[0, 2] = ''
154
+ name['sheet_index'] = data[0, 2].unpack('v')[0]
155
+ data[0, 2] = ''
156
+ name['menu_len'] = data[0, 1].unpack('C')[0]
157
+ data[0, 1] = ''
158
+ name['desc_len'] = data[0, 1].unpack('C')[0]
159
+ data[0, 1] = ''
160
+ name['help_len'] = data[0, 1].unpack('C')[0]
161
+ data[0, 1] = ''
162
+ name['status_len'] = data[0, 1].unpack('C')[0]
163
+ data[0, 1] = ''
164
+ name['encoding'] = data[0, 1].unpack('C')[0]
165
+ data[0, 1] = ''
166
+
167
+ # Decode the individual flag fields.
168
+ flag = Hash.new
169
+ flag['hidden'] = name['flags'] & 0x0001
170
+ flag['function'] = name['flags'] & 0x0002
171
+ flag['vb'] = name['flags'] & 0x0004
172
+ flag['macro'] = name['flags'] & 0x0008
173
+ flag['complex'] = name['flags'] & 0x0010
174
+ flag['builtin'] = name['flags'] & 0x0020
175
+ flag['group'] = name['flags'] & 0x0FC0
176
+ flag['binary'] = name['flags'] & 0x1000
177
+ name['flags'] = flag
178
+
179
+ # Decode the string part of the NAME structure.
180
+ if name['encoding'] == 1
181
+ # UTF-16 name. Leave in hex.
182
+ name['string'] = data[0, 2 * name['str_len']].unpack('H*')[0].upcase
183
+ data[0, 2 * name['str_len']] = ''
184
+ elsif flag['builtin'] != 0
185
+ # 1 digit builtin name. Leave in hex.
186
+ name['string'] = data[0, name['str_len']].unpack('H*')[0].upcase
187
+ data[0, name['str_len']] = ''
188
+ else
189
+ # ASCII name.
190
+ name['string'] = data[0, name['str_len']].unpack('C*').pack('C*')
191
+ data[0, name['str_len']] = ''
192
+ end
193
+
194
+ # Keep the formula as a hex string.
195
+ name['formula'] = data[0, name['formula_len']].unpack('H*')[0].upcase
196
+ data[0, name['formula_len']] = ''
197
+
198
+ names << name
199
+ end
200
+ names
201
+ end
202
+
203
+ def assert_hash_equal?(result, target)
204
+ assert_equal(result.keys.sort, target.keys.sort)
205
+ result.each_key do |key|
206
+ assert_equal(result[key], target[key])
207
+ end
208
+ end
209
+ end
@@ -0,0 +1,576 @@
1
+ $LOAD_PATH.unshift "#{File.dirname(__FILE__)}/../lib"
2
+
3
+ require "test/unit"
4
+ require 'writeexcel'
5
+ require 'stringio'
6
+
7
+ ###############################################################################
8
+ #
9
+ # A test for Chart.
10
+ #
11
+ # Tests for the Excel chart.rb methods.
12
+ #
13
+ # reverse(''), December 2009, John McNamara, jmcnamara@cpan.org
14
+ #
15
+ # original written in Perl by John McNamara
16
+ # converted to Ruby by Hideo Nakamura, cxn03651@msj.biglobe.ne.jp
17
+ #
18
+ class TC_ChartGeneric < Test::Unit::TestCase
19
+ def setup
20
+ io = StringIO.new
21
+ workbook = WriteExcel.new(io)
22
+ @chart = Chart.new('', 'chart', 0, 0, 0, 0, 0, 0, 0, 0)
23
+ end
24
+
25
+ ###############################################################################
26
+ #
27
+ # Test the _store_fbi method.
28
+ #
29
+ def test_store_fbi
30
+ caption = " \tChart: _store_fbi()"
31
+ expected = %w(
32
+ 60 10 0A 00 B8 38 A1 22 C8 00 00 00 05 00
33
+ ).join(' ')
34
+ got = unpack_record(@chart.store_fbi(5, 10, 0x38B8, 0x22A1, 0x0000))
35
+ assert_equal(expected, got, caption)
36
+
37
+ expected = %w(
38
+ 60 10 0A 00 B8 38 A1 22 C8 00 00 00 06 00
39
+ ).join(' ')
40
+ got = unpack_record(@chart.store_fbi(6, 10, 0x38B8, 0x22A1, 0x0000))
41
+ assert_equal(expected, got, caption)
42
+ end
43
+
44
+ ###############################################################################
45
+ #
46
+ # Test the _store_chart method.
47
+ #
48
+ def test_store_chart
49
+ caption = " \tChart: _store_chart()"
50
+ expected = %w(
51
+ 02 10 10 00 00 00 00 00 00 00 00 00 E0 51 DD 02
52
+ 38 B8 C2 01
53
+ ).join(' ')
54
+ values = [0x0000, 0x0000, 0x02DD51E0, 0x01C2B838]
55
+ got = unpack_record(@chart.store_chart(*values))
56
+ assert_equal(expected, got, caption)
57
+ end
58
+
59
+ ###############################################################################
60
+ #
61
+ # Test the _store_series method.
62
+ #
63
+ def test_store_series
64
+ caption = " \tChart: _store_series()"
65
+ expected = %w(
66
+ 03 10 0C 00 01 00 01 00 08 00 08 00 01 00 00 00
67
+ ).join(' ')
68
+ got = unpack_record(@chart.store_series(8, 8))
69
+ assert_equal(expected, got, caption)
70
+ end
71
+
72
+ ###############################################################################
73
+ #
74
+ # Test the _store_begin method.
75
+ #
76
+ def test_store_begin
77
+ caption = " \tChart: _store_begin()"
78
+ expected = %w(
79
+ 33 10 00 00
80
+ ).join(' ')
81
+ got = unpack_record(@chart.store_begin)
82
+ assert_equal(expected, got, caption)
83
+ end
84
+
85
+ ###############################################################################
86
+ #
87
+ # Test the _store_end method.
88
+ #
89
+ def test_store_end
90
+ caption = " \tChart: _store_end()"
91
+ expected = %w(
92
+ 34 10 00 00
93
+ ).join(' ')
94
+ got = unpack_record(@chart.store_end)
95
+ assert_equal(expected, got, caption)
96
+ end
97
+
98
+ ###############################################################################
99
+ #
100
+ # Test the _store_ai method.
101
+ #
102
+ def test_store_ai
103
+ caption = " \tChart: _store_ai()"
104
+ values = [0, 1, '']
105
+ expected = %w(
106
+ 51 10 08 00 00 01 00 00 00 00 00 00
107
+ ).join(' ')
108
+ got = unpack_record(@chart.store_ai(*values))
109
+ assert_equal(expected, got, caption)
110
+
111
+ values = [1, 2, ['3B00000000070000000000'].pack('H*')]
112
+ expected = %w(
113
+ 51 10 13 00 01 02 00 00 00 00 0B 00 3B 00 00 00
114
+ 00 07 00 00 00 00 00
115
+ ).join(' ')
116
+ got = unpack_record(@chart.store_ai(*values))
117
+ assert_equal(expected, got, caption)
118
+ end
119
+
120
+ ###############################################################################
121
+ #
122
+ # Test the _store_dataformat method.
123
+ #
124
+ def test_store_dataformat
125
+ caption = " \tChart: _store_dataformat()"
126
+ expected = %w(
127
+ 06 10 08 00 FF FF 00 00 00 00 00 00
128
+ ).join(' ')
129
+ got = unpack_record(@chart.store_dataformat(0, 0, 0xFFFF))
130
+ assert_equal(expected, got, caption)
131
+
132
+ expected = %w(
133
+ 06 10 08 00 00 00 00 00 FD FF 00 00
134
+ ).join(' ')
135
+ got = unpack_record(@chart.store_dataformat(0, 0xFFFD, 0))
136
+ assert_equal(expected, got, caption)
137
+ end
138
+
139
+ ###############################################################################
140
+ #
141
+ # Test the _store_3dbarshape method.
142
+ #
143
+ def test_store_3dbarshape
144
+ caption = " \tChart: _store_3dbarshape()"
145
+ expected = %w(
146
+ 5F 10 02 00 00 00
147
+ ).join(' ')
148
+ got = unpack_record(@chart.store_3dbarshape)
149
+ assert_equal(expected, got, caption)
150
+ end
151
+
152
+ ###############################################################################
153
+ #
154
+ # Test the _store_sertocrt method.
155
+ #
156
+ def test_store_sertocrt
157
+ caption = " \tChart: _store_sertocrt()"
158
+ expected = %w(
159
+ 45 10 02 00 00 00
160
+ ).join(' ')
161
+ got = unpack_record(@chart.store_sertocrt)
162
+ assert_equal(expected, got, caption)
163
+ end
164
+
165
+ ###############################################################################
166
+ #
167
+ # Test the _store_shtprops method.
168
+ #
169
+ def test_store_shtprops
170
+ caption = " \tChart: _store_shtprops()"
171
+ expected = %w(
172
+ 44 10 04 00 0E 00 00 00
173
+ ).join(' ')
174
+ got = unpack_record(@chart.store_shtprops)
175
+ assert_equal(expected, got, caption)
176
+ end
177
+
178
+ ###############################################################################
179
+ #
180
+ # Test the _store_defaulttext method.
181
+ #
182
+ def test_store_defaulttext
183
+ caption = " \tChart: _store_defaulttext()"
184
+ expected = %w(
185
+ 24 10 02 00 02 00
186
+ ).join(' ')
187
+ got = unpack_record(@chart.store_defaulttext)
188
+ assert_equal(expected, got, caption)
189
+ end
190
+
191
+ ###############################################################################
192
+ #
193
+ # Test the _store_charttext method.
194
+ #
195
+ def test_store_charttext
196
+ caption = " \tChart: _store_charttext()"
197
+ expected = %w(
198
+ 25 10 20 00 02 02 01 00 00 00 00 00 46 FF FF FF
199
+ 06 FF FF FF 00 00 00 00 00 00 00 00 B1 00 4D 00
200
+ 00 00 00 00
201
+ ).join(' ')
202
+ got = unpack_record(@chart.store_charttext)
203
+ assert_equal(expected, got, caption)
204
+ end
205
+
206
+ ###############################################################################
207
+ #
208
+ # Test the _store_fontx method.
209
+ #
210
+ def test_store_fontx
211
+ caption = " \tChart: _store_fontx()"
212
+ expected = %w(
213
+ 26 10 02 00 05 00
214
+ ).join(' ')
215
+ got = unpack_record(@chart.store_fontx(5))
216
+ assert_equal(expected, got, caption)
217
+ end
218
+
219
+ ###############################################################################
220
+ #
221
+ # Test the _store_axesused method.
222
+ #
223
+ def test_store_axesused
224
+ caption = " \tChart: _store_axesused()"
225
+ expected = %w(
226
+ 46 10 02 00 01 00
227
+ ).join(' ')
228
+ got = unpack_record(@chart.store_axesused(1))
229
+ assert_equal(expected, got, caption)
230
+ end
231
+
232
+ ###############################################################################
233
+ #
234
+ # Test the _store_axisparent method.
235
+ #
236
+ def test_store_axisparent
237
+ caption = " \tChart: _store_axisparent()"
238
+ expected = %w(
239
+ 41 10 12 00 00 00 F8 00 00 00 F5 01 00 00 7F 0E
240
+ 00 00 36 0B 00 00
241
+ ).join(' ')
242
+ values = [0, 0x00F8, 0x01F5, 0x0E7F, 0x0B36]
243
+ got = unpack_record(@chart.store_axisparent(*values))
244
+ assert_equal(expected, got, caption)
245
+ end
246
+
247
+ ###############################################################################
248
+ #
249
+ # Test the _store_axis method.
250
+ #
251
+ def test_store_axis
252
+ caption = " \tChart: _store_axis()"
253
+ expected = %w(
254
+ 1D 10 12 00 00 00 00 00 00 00 00 00 00 00 00 00
255
+ 00 00 00 00 00 00
256
+ ).join(' ')
257
+ got = unpack_record(@chart.store_axis(0))
258
+ assert_equal(expected, got, caption)
259
+ end
260
+
261
+ ###############################################################################
262
+ #
263
+ # Test the _store_catserrange method.
264
+ #
265
+ def test_store_catserrange
266
+ caption = " \tChart: _store_catserrange()"
267
+ expected = %w(
268
+ 20 10 08 00 01 00 01 00 01 00 01 00
269
+ ).join(' ')
270
+ got = unpack_record(@chart.store_catserrange)
271
+ assert_equal(expected, got, caption)
272
+ end
273
+
274
+ ###############################################################################
275
+ #
276
+ # Test the _store_axcext method.
277
+ #
278
+ def test_store_axcext
279
+ caption = " \tChart: _store_axcext()"
280
+ expected = %w(
281
+ 62 10 12 00 00 00 00 00 01 00 00 00 01 00 00 00
282
+ 00 00 00 00 EF 00
283
+ ).join(' ')
284
+ got = unpack_record(@chart.store_axcext)
285
+ assert_equal(expected, got, caption)
286
+ end
287
+
288
+ ###############################################################################
289
+ #
290
+ # Test the _store_tick method.
291
+ #
292
+ def test_store_tick
293
+ caption = " \tChart: _store_tick()"
294
+ expected = %w(
295
+ 1E 10 1E 00 02 00 03 01 00 00 00 00 00 00 00 00
296
+ 00 00 00 00 00 00 00 00 00 00 00 00 23 00 4D 00
297
+ 00 00
298
+ ).join(' ')
299
+ got = unpack_record(@chart.store_tick)
300
+ assert_equal(expected, got, caption)
301
+ end
302
+
303
+ ###############################################################################
304
+ #
305
+ # Test the _store_valuerange method.
306
+ #
307
+ def test_store_valuerange
308
+ caption = " \tChart: _store_valuerange()"
309
+ expected = %w(
310
+ 1F 10 2A 00 00 00 00 00 00 00 00 00 00 00 00 00
311
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
312
+ 00 00 00 00 00 00 00 00 00 00 00 00 1F 01
313
+ ).join(' ')
314
+ got = unpack_record(@chart.store_valuerange)
315
+ assert_equal(expected, got, caption)
316
+ end
317
+
318
+ ###############################################################################
319
+ #
320
+ # Test the _store_axislineformat method.
321
+ #
322
+ def test_store_axislineformat
323
+ caption = " \tChart: _store_axislineformat()"
324
+ expected = %w(
325
+ 21 10 02 00 01 00
326
+ ).join(' ')
327
+ got = unpack_record(@chart.store_axislineformat)
328
+ assert_equal(expected, got, caption)
329
+ end
330
+
331
+ ###############################################################################
332
+ #
333
+ # Test the _store_lineformat method.
334
+ #
335
+ def test_store_lineformat
336
+ caption = " \tChart: _store_lineformat()"
337
+ expected = %w(
338
+ 07 10 0C 00 00 00 00 00 00 00 FF FF 09 00 4D 00
339
+ ).join(' ')
340
+ values = [0x00000000, 0x0000, 0xFFFF, 0x0009, 0x004D]
341
+ got = unpack_record(@chart.store_lineformat(*values))
342
+ assert_equal(expected, got, caption)
343
+ end
344
+
345
+ ###############################################################################
346
+ #
347
+ # Test the _store_frame method.
348
+ #
349
+ def test_store_frame
350
+ caption = " \tChart: _store_frame()"
351
+ expected = %w(
352
+ 32 10 04 00 00 00 03 00
353
+ ).join(' ')
354
+ got = unpack_record(@chart.store_frame(0x00, 0x03))
355
+ assert_equal(expected, got, caption)
356
+ end
357
+
358
+ ###############################################################################
359
+ #
360
+ # Test the _store_areaformat method.
361
+ #
362
+ def test_store_areaformat
363
+ caption = " \tChart: _store_areaformat()"
364
+ expected = %w(
365
+ 0A 10 10 00 C0 C0 C0 00 00 00 00 00 01 00 00 00
366
+ 16 00 4F 00
367
+ ).join(' ')
368
+ values = [0x00C0C0C0, 0x00, 0x01, 0x00, 0x16, 0x4F]
369
+ got = unpack_record(@chart.store_areaformat(*values))
370
+ assert_equal(expected, got, caption)
371
+ end
372
+
373
+ ###############################################################################
374
+ #
375
+ # Test the _store_chartformat method.
376
+ #
377
+ def test_store_chartformat
378
+ caption = " \tChart: _store_chartformat()"
379
+ expected = %w(
380
+ 14 10 14 00 00 00 00 00 00 00 00 00 00 00 00 00
381
+ 00 00 00 00 00 00 00 00
382
+ ).join(' ')
383
+ got = unpack_record(@chart.store_chartformat)
384
+ assert_equal(expected, got, caption)
385
+ end
386
+
387
+ ###############################################################################
388
+ #
389
+ # Test the _store_legend method.
390
+ #
391
+ def test_store_legend
392
+ caption = " \tChart: _store_legend()"
393
+ expected = %w(
394
+ 15 10 14 00 F9 05 00 00 E9 0E 00 00 7D 04 00 00
395
+ 9C 00 00 00 00 01 0F 00
396
+ ).join(' ')
397
+ values = [0x05F9, 0x0EE9, 0x047D, 0x009C, 0x00, 0x01, 0x000F]
398
+ got = unpack_record(@chart.store_legend(*values))
399
+ assert_equal(expected, got, caption)
400
+ end
401
+
402
+ ###############################################################################
403
+ #
404
+ # Test the _store_pos method.
405
+ #
406
+ def test_store_pos
407
+ caption = " \tChart: _store_pos()"
408
+ expected = %w(
409
+ 4F 10 14 00 05 00 02 00 83 0E 00 00 F9 06 00 00
410
+ 00 00 00 00 00 00 00 00
411
+ ).join(' ')
412
+ values = [5, 2, 0x0E83, 0x06F9, 0, 0]
413
+ got = unpack_record(@chart.store_pos(*values))
414
+ assert_equal(expected, got, caption)
415
+ end
416
+
417
+ ###############################################################################
418
+ #
419
+ # Test the _store_text method.
420
+ #
421
+ def test_store_text
422
+ caption = " \tChart: _store_text()"
423
+ expected = %w(
424
+ 25 10 20 00 02 02 01 00 00 00 00 00 46 FF FF FF
425
+ 06 FF FF FF 00 00 00 00 00 00 00 00 B1 00 4D 00
426
+ 20 10 00 00
427
+ ).join(' ')
428
+ values = [0xFFFFFF46, 0xFFFFFF06, 0, 0, 0x00B1, 0x1020]
429
+ got = unpack_record(@chart.store_text(*values))
430
+ assert_equal(expected, got, caption)
431
+ end
432
+
433
+ ###############################################################################
434
+ #
435
+ # Test the _store_plotgrowth method.
436
+ #
437
+ def test_store_plotgrowth
438
+ caption = " \tChart: _store_plotgrowth()"
439
+ expected = %w(
440
+ 64 10 08 00 00 00 01 00 00 00 01 00
441
+ ).join(' ')
442
+ got = unpack_record(@chart.store_plotgrowth)
443
+ assert_equal(expected, got, caption)
444
+ end
445
+
446
+ ###############################################################################
447
+ #
448
+ # Test the _store_seriestext method.
449
+ #
450
+ def test_store_seriestext
451
+ caption = " \tChart: _store_seriestext()"
452
+ expected = %w(
453
+ 0D 10 14 00 00 00 10 00 4E 61 6D 65
454
+ 20 66 6F 72 20 53 65 72
455
+ 69 65 73 31
456
+ ).join(' ')
457
+ str = 'Name for Series1'
458
+ got = unpack_record(@chart.store_seriestext(str, 0))
459
+ assert_equal(expected, got, caption)
460
+ end
461
+
462
+ ###############################################################################
463
+ #
464
+ # Test the _store_seriestext method.
465
+ #
466
+ def test_store_seriestext_utf16
467
+ caption = " \tChart: _store_seriestext()"
468
+ expected = %w(
469
+ 0D 10 24 00 00 00 10 01 4E 00 61 00 6D 00 65 00
470
+ 20 00 66 00 6F 00 72 00 20 00 53 00 65 00 72 00
471
+ 69 00 65 00 73 00 31 00
472
+ ).join(' ')
473
+ str = 'Name for Series1'.unpack('C*').pack('n*')
474
+ got = unpack_record(@chart.store_seriestext(str, 1))
475
+ assert_equal(expected, got, caption)
476
+ end
477
+
478
+ ###############################################################################
479
+ #
480
+ # Test the _store_objectlink method.
481
+ #
482
+ def test_store_objectlink
483
+ caption = " \tChart: _store_objectlink()"
484
+ expected = %w(
485
+ 27 10 06 00 01 00 00 00 00 00
486
+ ).join(' ')
487
+ got = unpack_record(@chart.store_objectlink(1))
488
+ assert_equal(expected, got, caption)
489
+ end
490
+
491
+ ###############################################################################
492
+ #
493
+ # Test the _store_pieformat method.
494
+ #
495
+ def test_store_pieformat
496
+ caption = " \tChart: _store_pieformat()"
497
+ expected = %w(
498
+ 0B 10 02 00 00 00
499
+ ).join(' ')
500
+ got = unpack_record(@chart.store_pieformat)
501
+ assert_equal(expected, got, caption)
502
+ end
503
+
504
+ ###############################################################################
505
+ #
506
+ # Test the _store_markerformat method.
507
+ #
508
+ def test_store_markerformat
509
+ caption = " \tChart: _store_markerformat()"
510
+ expected = %w(
511
+ 09 10 14 00 00 00 00 00 00 00 00 00 02 00 01 00
512
+ 4D 00 4D 00 3C 00 00 00
513
+ ).join(' ')
514
+ values = [0x00, 0x00, 0x02, 0x01, 0x4D, 0x4D, 0x3C]
515
+ got = unpack_record(@chart.store_markerformat(*values))
516
+ assert_equal(expected, got, caption)
517
+ end
518
+
519
+ ###############################################################################
520
+ #
521
+ # Test the _store_dropbar method.
522
+ #
523
+ def test_store_dropbar
524
+ caption = " \tChart: _store_dropbar()"
525
+ expected = %w(
526
+ 3D 10 02 00 96 00
527
+ ).join(' ')
528
+ got = unpack_record(@chart.store_dropbar)
529
+ assert_equal(expected, got, caption)
530
+ end
531
+
532
+ ###############################################################################
533
+ #
534
+ # Test the _store_chartline method.
535
+ #
536
+ def test_store_chartline
537
+ caption = " \tChart: _store_chartline()"
538
+ expected = %w(
539
+ 1C 10 02 00 01 00
540
+ ).join(' ')
541
+ got = unpack_record(@chart.store_chartline)
542
+ assert_equal(expected, got, caption)
543
+ end
544
+
545
+ ###############################################################################
546
+ #
547
+ # Test the _store_serparent method.
548
+ #
549
+ def test_store_serparent
550
+ caption = " \tChart: _store_serparent()"
551
+ expected = %w(
552
+ 4A 10 02 00 01 00
553
+ ).join(' ')
554
+ got = unpack_record(@chart.store_serparent(1))
555
+ assert_equal(expected, got, caption)
556
+ end
557
+
558
+ ###############################################################################
559
+ #
560
+ # Test the _store_serauxtrend method.
561
+ #
562
+ def test_store_serauxtrend
563
+ caption = " \tChart: _store_serauxtrend()"
564
+ expected = %w(
565
+ 4B 10 1C 00 00 01 FF FF FF FF 00 01 FF FF 00 00
566
+ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
567
+ ).join(' ')
568
+ values = [0x00, 0x01, 0x00, 0x00]
569
+ got = unpack_record(@chart.store_serauxtrend(*values))
570
+ assert_equal(expected, got, caption)
571
+ end
572
+
573
+ def unpack_record(data)
574
+ data.unpack('C*').map! {|c| sprintf("%02X", c) }.join(' ')
575
+ end
576
+ end