ricardoo27-writeexcel 0.6.12.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (245) hide show
  1. data/.document +5 -0
  2. data/.gitattributes +1 -0
  3. data/README.rdoc +136 -0
  4. data/Rakefile +52 -0
  5. data/VERSION +1 -0
  6. data/charts/chartex.rb +316 -0
  7. data/charts/demo1.rb +46 -0
  8. data/charts/demo101.bin +0 -0
  9. data/charts/demo2.rb +65 -0
  10. data/charts/demo201.bin +0 -0
  11. data/charts/demo3.rb +117 -0
  12. data/charts/demo301.bin +0 -0
  13. data/charts/demo4.rb +119 -0
  14. data/charts/demo401.bin +0 -0
  15. data/charts/demo5.rb +48 -0
  16. data/charts/demo501.bin +0 -0
  17. data/examples/a_simple.rb +43 -0
  18. data/examples/autofilter.rb +265 -0
  19. data/examples/bigfile.rb +30 -0
  20. data/examples/chart_area.rb +121 -0
  21. data/examples/chart_bar.rb +120 -0
  22. data/examples/chart_column.rb +120 -0
  23. data/examples/chart_line.rb +120 -0
  24. data/examples/chart_pie.rb +108 -0
  25. data/examples/chart_scatter.rb +121 -0
  26. data/examples/chart_stock.rb +148 -0
  27. data/examples/chess.rb +142 -0
  28. data/examples/colors.rb +129 -0
  29. data/examples/comments1.rb +27 -0
  30. data/examples/comments2.rb +352 -0
  31. data/examples/copyformat.rb +52 -0
  32. data/examples/data_validate.rb +279 -0
  33. data/examples/date_time.rb +87 -0
  34. data/examples/defined_name.rb +32 -0
  35. data/examples/demo.rb +124 -0
  36. data/examples/diag_border.rb +36 -0
  37. data/examples/formats.rb +490 -0
  38. data/examples/formula_result.rb +30 -0
  39. data/examples/header.rb +137 -0
  40. data/examples/hide_sheet.rb +29 -0
  41. data/examples/hyperlink.rb +43 -0
  42. data/examples/images.rb +63 -0
  43. data/examples/indent.rb +31 -0
  44. data/examples/merge1.rb +40 -0
  45. data/examples/merge2.rb +45 -0
  46. data/examples/merge3.rb +66 -0
  47. data/examples/merge4.rb +83 -0
  48. data/examples/merge5.rb +80 -0
  49. data/examples/merge6.rb +67 -0
  50. data/examples/outline.rb +255 -0
  51. data/examples/outline_collapsed.rb +209 -0
  52. data/examples/panes.rb +113 -0
  53. data/examples/password_protection.rb +33 -0
  54. data/examples/properties.rb +34 -0
  55. data/examples/properties_jp.rb +33 -0
  56. data/examples/protection.rb +47 -0
  57. data/examples/regions.rb +53 -0
  58. data/examples/repeat.rb +43 -0
  59. data/examples/republic.png +0 -0
  60. data/examples/right_to_left.rb +27 -0
  61. data/examples/row_wrap.rb +53 -0
  62. data/examples/set_first_sheet.rb +14 -0
  63. data/examples/stats.rb +74 -0
  64. data/examples/stocks.rb +81 -0
  65. data/examples/store_formula.rb +15 -0
  66. data/examples/tab_colors.rb +31 -0
  67. data/examples/utf8.rb +15 -0
  68. data/examples/write_arrays.rb +83 -0
  69. data/html/en/doc_en.html +5946 -0
  70. data/html/images/a_simple.jpg +0 -0
  71. data/html/images/area1.jpg +0 -0
  72. data/html/images/bar1.jpg +0 -0
  73. data/html/images/chart_area.xls +0 -0
  74. data/html/images/column1.jpg +0 -0
  75. data/html/images/data_validation.jpg +0 -0
  76. data/html/images/line1.jpg +0 -0
  77. data/html/images/pie1.jpg +0 -0
  78. data/html/images/regions.jpg +0 -0
  79. data/html/images/scatter1.jpg +0 -0
  80. data/html/images/stats.jpg +0 -0
  81. data/html/images/stock1.jpg +0 -0
  82. data/html/images/stocks.jpg +0 -0
  83. data/html/index.html +16 -0
  84. data/html/style.css +433 -0
  85. data/lib/writeexcel.rb +1159 -0
  86. data/lib/writeexcel/biffwriter.rb +223 -0
  87. data/lib/writeexcel/caller_info.rb +12 -0
  88. data/lib/writeexcel/cell_range.rb +332 -0
  89. data/lib/writeexcel/chart.rb +1968 -0
  90. data/lib/writeexcel/charts/area.rb +154 -0
  91. data/lib/writeexcel/charts/bar.rb +177 -0
  92. data/lib/writeexcel/charts/column.rb +156 -0
  93. data/lib/writeexcel/charts/external.rb +66 -0
  94. data/lib/writeexcel/charts/line.rb +154 -0
  95. data/lib/writeexcel/charts/pie.rb +169 -0
  96. data/lib/writeexcel/charts/scatter.rb +192 -0
  97. data/lib/writeexcel/charts/stock.rb +213 -0
  98. data/lib/writeexcel/col_info.rb +87 -0
  99. data/lib/writeexcel/colors.rb +68 -0
  100. data/lib/writeexcel/comments.rb +460 -0
  101. data/lib/writeexcel/compatibility.rb +65 -0
  102. data/lib/writeexcel/convert_date_time.rb +117 -0
  103. data/lib/writeexcel/data_validations.rb +370 -0
  104. data/lib/writeexcel/debug_info.rb +41 -0
  105. data/lib/writeexcel/embedded_chart.rb +35 -0
  106. data/lib/writeexcel/excelformula.y +139 -0
  107. data/lib/writeexcel/excelformulaparser.rb +587 -0
  108. data/lib/writeexcel/format.rb +1575 -0
  109. data/lib/writeexcel/formula.rb +987 -0
  110. data/lib/writeexcel/helper.rb +78 -0
  111. data/lib/writeexcel/image.rb +218 -0
  112. data/lib/writeexcel/olewriter.rb +305 -0
  113. data/lib/writeexcel/outline.rb +24 -0
  114. data/lib/writeexcel/properties.rb +242 -0
  115. data/lib/writeexcel/shared_string_table.rb +153 -0
  116. data/lib/writeexcel/storage_lite.rb +984 -0
  117. data/lib/writeexcel/workbook.rb +2478 -0
  118. data/lib/writeexcel/worksheet.rb +6925 -0
  119. data/lib/writeexcel/worksheets.rb +25 -0
  120. data/lib/writeexcel/write_file.rb +63 -0
  121. data/test/excelfile/Chart1.xls +0 -0
  122. data/test/excelfile/Chart2.xls +0 -0
  123. data/test/excelfile/Chart3.xls +0 -0
  124. data/test/excelfile/Chart4.xls +0 -0
  125. data/test/excelfile/Chart5.xls +0 -0
  126. data/test/helper.rb +31 -0
  127. data/test/perl_output/Chart1.xls.data +0 -0
  128. data/test/perl_output/Chart2.xls.data +0 -0
  129. data/test/perl_output/Chart3.xls.data +0 -0
  130. data/test/perl_output/Chart4.xls.data +0 -0
  131. data/test/perl_output/Chart5.xls.data +0 -0
  132. data/test/perl_output/README +31 -0
  133. data/test/perl_output/a_simple.xls +0 -0
  134. data/test/perl_output/autofilter.xls +0 -0
  135. data/test/perl_output/biff_add_continue_testdata +0 -0
  136. data/test/perl_output/chart_area.xls +0 -0
  137. data/test/perl_output/chart_bar.xls +0 -0
  138. data/test/perl_output/chart_column.xls +0 -0
  139. data/test/perl_output/chart_line.xls +0 -0
  140. data/test/perl_output/chess.xls +0 -0
  141. data/test/perl_output/colors.xls +0 -0
  142. data/test/perl_output/comments0.xls +0 -0
  143. data/test/perl_output/comments1.xls +0 -0
  144. data/test/perl_output/comments2.xls +0 -0
  145. data/test/perl_output/data_validate.xls +0 -0
  146. data/test/perl_output/date_time.xls +0 -0
  147. data/test/perl_output/defined_name.xls +0 -0
  148. data/test/perl_output/demo.xls +0 -0
  149. data/test/perl_output/demo101.bin +0 -0
  150. data/test/perl_output/demo201.bin +0 -0
  151. data/test/perl_output/demo301.bin +0 -0
  152. data/test/perl_output/demo401.bin +0 -0
  153. data/test/perl_output/demo501.bin +0 -0
  154. data/test/perl_output/diag_border.xls +0 -0
  155. data/test/perl_output/f_font_biff +0 -0
  156. data/test/perl_output/f_font_key +1 -0
  157. data/test/perl_output/f_xf_biff +0 -0
  158. data/test/perl_output/file_font_biff +0 -0
  159. data/test/perl_output/file_font_key +1 -0
  160. data/test/perl_output/file_xf_biff +0 -0
  161. data/test/perl_output/formula_result.xls +0 -0
  162. data/test/perl_output/headers.xls +0 -0
  163. data/test/perl_output/hidden.xls +0 -0
  164. data/test/perl_output/hide_zero.xls +0 -0
  165. data/test/perl_output/hyperlink.xls +0 -0
  166. data/test/perl_output/images.xls +0 -0
  167. data/test/perl_output/indent.xls +0 -0
  168. data/test/perl_output/merge1.xls +0 -0
  169. data/test/perl_output/merge2.xls +0 -0
  170. data/test/perl_output/merge3.xls +0 -0
  171. data/test/perl_output/merge4.xls +0 -0
  172. data/test/perl_output/merge5.xls +0 -0
  173. data/test/perl_output/merge6.xls +0 -0
  174. data/test/perl_output/ole_write_header +0 -0
  175. data/test/perl_output/outline.xls +0 -0
  176. data/test/perl_output/outline_collapsed.xls +0 -0
  177. data/test/perl_output/panes.xls +0 -0
  178. data/test/perl_output/password_protection.xls +0 -0
  179. data/test/perl_output/protection.xls +0 -0
  180. data/test/perl_output/regions.xls +0 -0
  181. data/test/perl_output/right_to_left.xls +0 -0
  182. data/test/perl_output/set_first_sheet.xls +0 -0
  183. data/test/perl_output/stats.xls +0 -0
  184. data/test/perl_output/stocks.xls +0 -0
  185. data/test/perl_output/store_formula.xls +0 -0
  186. data/test/perl_output/tab_colors.xls +0 -0
  187. data/test/perl_output/unicode_cyrillic.xls +0 -0
  188. data/test/perl_output/utf8.xls +0 -0
  189. data/test/perl_output/workbook1.xls +0 -0
  190. data/test/perl_output/workbook2.xls +0 -0
  191. data/test/perl_output/ws_colinfo +1 -0
  192. data/test/perl_output/ws_store_colinfo +0 -0
  193. data/test/perl_output/ws_store_dimensions +0 -0
  194. data/test/perl_output/ws_store_filtermode +0 -0
  195. data/test/perl_output/ws_store_filtermode_off +0 -0
  196. data/test/perl_output/ws_store_filtermode_on +0 -0
  197. data/test/perl_output/ws_store_selection +0 -0
  198. data/test/perl_output/ws_store_window2 +1 -0
  199. data/test/republic.png +0 -0
  200. data/test/test_00_IEEE_double.rb +13 -0
  201. data/test/test_01_add_worksheet.rb +10 -0
  202. data/test/test_02_merge_formats.rb +49 -0
  203. data/test/test_04_dimensions.rb +388 -0
  204. data/test/test_05_rows.rb +175 -0
  205. data/test/test_06_extsst.rb +74 -0
  206. data/test/test_11_date_time.rb +475 -0
  207. data/test/test_12_date_only.rb +525 -0
  208. data/test/test_13_date_seconds.rb +477 -0
  209. data/test/test_21_escher.rb +624 -0
  210. data/test/test_22_mso_drawing_group.rb +741 -0
  211. data/test/test_23_note.rb +57 -0
  212. data/test/test_24_txo.rb +74 -0
  213. data/test/test_25_position_object.rb +80 -0
  214. data/test/test_26_autofilter.rb +309 -0
  215. data/test/test_27_autofilter.rb +126 -0
  216. data/test/test_28_autofilter.rb +156 -0
  217. data/test/test_29_process_jpg.rb +670 -0
  218. data/test/test_30_validation_dval.rb +74 -0
  219. data/test/test_31_validation_dv_strings.rb +123 -0
  220. data/test/test_32_validation_dv_formula.rb +203 -0
  221. data/test/test_40_property_types.rb +188 -0
  222. data/test/test_41_properties.rb +235 -0
  223. data/test/test_42_set_properties.rb +434 -0
  224. data/test/test_50_name_stored.rb +295 -0
  225. data/test/test_51_name_print_area.rb +353 -0
  226. data/test/test_52_name_print_titles.rb +450 -0
  227. data/test/test_53_autofilter.rb +199 -0
  228. data/test/test_60_chart_generic.rb +574 -0
  229. data/test/test_61_chart_subclasses.rb +84 -0
  230. data/test/test_62_chart_formats.rb +268 -0
  231. data/test/test_63_chart_area_formats.rb +645 -0
  232. data/test/test_biff.rb +71 -0
  233. data/test/test_big_workbook.rb +17 -0
  234. data/test/test_compatibility.rb +12 -0
  235. data/test/test_example_match.rb +3246 -0
  236. data/test/test_format.rb +1189 -0
  237. data/test/test_formula.rb +61 -0
  238. data/test/test_ole.rb +102 -0
  239. data/test/test_storage_lite.rb +116 -0
  240. data/test/test_workbook.rb +146 -0
  241. data/test/test_worksheet.rb +106 -0
  242. data/utils/add_magic_comment.rb +80 -0
  243. data/writeexcel.gemspec +278 -0
  244. data/writeexcel.rdoc +1425 -0
  245. metadata +292 -0
@@ -0,0 +1,61 @@
1
+ # -*- coding: utf-8 -*-
2
+ require 'helper'
3
+
4
+ class TC_Formula < Test::Unit::TestCase
5
+
6
+ def setup
7
+ @formula = Writeexcel::Formula.new(0)
8
+ end
9
+
10
+ def test_scan
11
+ # scan must return array of token info
12
+ string01 = '1 + 2 * LEN("String")'
13
+ expected01 = [
14
+ [:NUMBER, '1'],
15
+ ['+', '+'],
16
+ [:NUMBER, '2'],
17
+ ['*', '*'],
18
+ [:FUNC, 'LEN'],
19
+ ['(', '('],
20
+ [:STRING, '"String"'],
21
+ [')', ')'],
22
+ [:EOL, nil]
23
+ ]
24
+ assert_kind_of(Array, @formula.scan(string01))
25
+ assert_equal(expected01, @formula.scan(string01))
26
+
27
+ string02 = 'IF(A1>=0,SIN(0),COS(90))'
28
+ expected02 = [
29
+ [:FUNC, 'IF'],
30
+ ['(', '('],
31
+ [:REF2D, 'A1'],
32
+ [:GE, '>='],
33
+ [:NUMBER, '0'],
34
+ [',', ','],
35
+ [:FUNC, 'SIN'],
36
+ ['(', '('],
37
+ [:NUMBER, '0'],
38
+ [')', ')'],
39
+ [',', ','],
40
+ [:FUNC, 'COS'],
41
+ ['(', '('],
42
+ [:NUMBER, '90'],
43
+ [')', ')'],
44
+ [')', ')'],
45
+ [:EOL, nil]
46
+ ]
47
+ assert_kind_of(Array, @formula.scan(string02))
48
+ assert_equal(expected02, @formula.scan(string02))
49
+ end
50
+
51
+ def test_reverse
52
+ testcase = [
53
+ [ [0,1,2,3,4], [0,[1,[2,3,[4]]]] ],
54
+ [ [0,1,2,3,4,5], [[0,1,[2,3]],[4,5]] ]
55
+ ]
56
+ testcase.each do |t|
57
+ assert_equal(t[0], @formula.reverse(t[1]))
58
+ end
59
+ end
60
+
61
+ end
@@ -0,0 +1,102 @@
1
+ # -*- coding: utf-8 -*-
2
+ require 'helper'
3
+ require 'stringio'
4
+
5
+ class TC_OLE < Test::Unit::TestCase
6
+
7
+ def setup
8
+ @file = StringIO.new
9
+ @ole = OLEWriter.new(@file)
10
+ end
11
+
12
+ def test_constructor
13
+ assert_kind_of(OLEWriter, @ole)
14
+ end
15
+
16
+ def test_constants
17
+ assert_equal(7087104, OLEWriter::MaxSize)
18
+ assert_equal(4096, OLEWriter::BlockSize)
19
+ assert_equal(512, OLEWriter::BlockDiv)
20
+ assert_equal(127, OLEWriter::ListBlocks)
21
+ end
22
+
23
+ def test_calculate_sizes
24
+ assert_respond_to(@ole, :calculate_sizes)
25
+ assert_nothing_raised{ @ole.calculate_sizes }
26
+ assert_equal(0, @ole.big_blocks)
27
+ assert_equal(1, @ole.list_blocks)
28
+ assert_equal(0, @ole.root_start)
29
+ end
30
+
31
+ def test_set_size_too_big
32
+ assert(!@ole.set_size(999999999))
33
+ end
34
+
35
+ def test_book_size_large
36
+ assert_nothing_raised{ @ole.set_size(8192) }
37
+ assert_equal(8192, @ole.book_size)
38
+ end
39
+
40
+ def test_book_size_small
41
+ assert_nothing_raised{ @ole.set_size(2048) }
42
+ assert_equal(4096, @ole.book_size)
43
+ end
44
+
45
+ def test_biff_size
46
+ assert_nothing_raised{ @ole.set_size(2048) }
47
+ assert_equal(2048, @ole.biff_size)
48
+ end
49
+
50
+ def test_size_allowed
51
+ assert_nothing_raised{ @ole.set_size }
52
+ assert_equal(true, @ole.size_allowed)
53
+ end
54
+
55
+ def test_big_block_size_default
56
+ assert_nothing_raised{ @ole.set_size }
57
+ assert_nothing_raised{ @ole.calculate_sizes }
58
+ assert_equal(8, @ole.big_blocks, "Bad big block size")
59
+ end
60
+
61
+ def test_big_block_size_rounded_up
62
+ assert_nothing_raised{ @ole.set_size(4099) }
63
+ assert_nothing_raised{ @ole.calculate_sizes }
64
+ assert_equal(9, @ole.big_blocks, "Bad big block size")
65
+ end
66
+
67
+ def test_list_block_size
68
+ assert_nothing_raised{ @ole.set_size }
69
+ assert_nothing_raised{ @ole.calculate_sizes }
70
+ assert_equal(1, @ole.list_blocks, "Bad list block size")
71
+ end
72
+
73
+ def test_root_start_size_default
74
+ assert_nothing_raised{ @ole.set_size }
75
+ assert_nothing_raised{ @ole.calculate_sizes }
76
+ assert_equal(8, @ole.big_blocks, "Bad root start size")
77
+ end
78
+
79
+ def test_root_start_size_rounded_up
80
+ assert_nothing_raised{ @ole.set_size(4099) }
81
+ assert_nothing_raised{ @ole.calculate_sizes }
82
+ assert_equal(9, @ole.big_blocks, "Bad root start size")
83
+ end
84
+
85
+ def test_write_header
86
+ assert_nothing_raised{ @ole.write_header }
87
+ #assert_nothing_raised{ @ole.close }
88
+ #assert_equal(512, File.size(@file))
89
+ end
90
+
91
+ def test_write_big_block_depot
92
+ assert_nothing_raised{ @ole.write_big_block_depot }
93
+ #assert_nothing_raised{ @ole.close }
94
+ #assert_equal(8, File.size(@file))
95
+ end
96
+
97
+ def test_write_property_storage_size
98
+ assert_nothing_raised{ @ole.write_property_storage }
99
+ #assert_nothing_raised{ @ole.close }
100
+ #assert_equal(512, File.size(@file))
101
+ end
102
+ end
@@ -0,0 +1,116 @@
1
+ # -*- coding: utf-8 -*-
2
+ require 'helper'
3
+ require 'stringio'
4
+
5
+ class TC_OLEStorageLite < Test::Unit::TestCase
6
+ TEST_DIR = File.expand_path(File.dirname(__FILE__))
7
+ PERL_OUTDIR = File.join(TEST_DIR, 'perl_output')
8
+ EXCEL_OUTDIR = File.join(TEST_DIR, 'excelfile')
9
+
10
+ def setup
11
+ @ole = OLEStorageLite.new
12
+ end
13
+
14
+ def test_olestoragelite_new
15
+ ole = OLEStorageLite.new
16
+ assert_nil(ole.file)
17
+
18
+ io = StringIO.new
19
+ ole = OLEStorageLite.new(io)
20
+ assert_equal(io, ole.file)
21
+
22
+ file = 'test.ole'
23
+ ole = OLEStorageLite.new(file)
24
+ assert_equal(file, ole.file)
25
+
26
+ end
27
+
28
+ def test_asc2ucs
29
+ result = @ole.asc2ucs('Root Entry')
30
+ target = %w(
31
+ 52 00 6F 00 6F 00 74 00 20 00 45 00 6E 00 74 00 72 00 79 00
32
+ ).join(" ")
33
+ assert_equal(target, unpack_record(result))
34
+ end
35
+
36
+ def test_ucs2asc
37
+ strings = [
38
+ 'Root Entry',
39
+ ''
40
+ ]
41
+ strings.each do |str|
42
+ result = @ole.ucs2asc(@ole.asc2ucs(str))
43
+ assert_equal(str, result)
44
+ end
45
+ end
46
+
47
+ def unpack_record(data)
48
+ data.unpack('C*').map! {|c| sprintf("%02X", c) }.join(' ')
49
+ end
50
+
51
+ end
52
+
53
+ class TC_OLEStorageLitePPSFile < Test::Unit::TestCase
54
+ def test_constructor
55
+ data = [
56
+ { :name => 'name', :data => 'data' },
57
+ { :name => '', :data => 'data' },
58
+ { :name => 'name', :data => '' },
59
+ { :name => '', :data => '' },
60
+ ]
61
+ data.each do |d|
62
+ olefile = OLEStorageLitePPSFile.new(d[:name])
63
+ assert_equal(d[:name], olefile.name)
64
+ end
65
+ data.each do |d|
66
+ olefile = OLEStorageLitePPSFile.new(d[:name], d[:data])
67
+ assert_equal(d[:name], olefile.name)
68
+ assert_equal(d[:data], olefile.data)
69
+ end
70
+ end
71
+
72
+ def test_append_no_file
73
+ olefile = OLEStorageLitePPSFile.new('name')
74
+ assert_equal('', olefile.data)
75
+
76
+ data = [ "data", "\r\n", "\r", "\n" ]
77
+ data.each do |d|
78
+ olefile = OLEStorageLitePPSFile.new('name')
79
+ olefile.append(d)
80
+ assert_equal(d, olefile.data)
81
+ end
82
+ end
83
+
84
+ def test_append_tempfile
85
+ data = [ "data", "\r\n", "\r", "\n" ]
86
+ data.each do |d|
87
+ olefile = OLEStorageLitePPSFile.new('name')
88
+ olefile.set_file
89
+ pps_file = olefile.pps_file
90
+
91
+ olefile.append(d)
92
+ pps_file.open
93
+ pps_file.binmode
94
+ assert_equal(d, pps_file.read)
95
+ end
96
+ end
97
+
98
+ def test_append_stringio
99
+ data = [ "data", "\r\n", "\r", "\n" ]
100
+ data.each do |d|
101
+ sio = StringIO.new
102
+ olefile = OLEStorageLitePPSFile.new('name')
103
+ olefile.set_file(sio)
104
+ pps_file = olefile.pps_file
105
+
106
+ olefile.append(d)
107
+ pps_file.rewind
108
+ assert_equal(d, pps_file.read)
109
+ end
110
+ end
111
+
112
+ def unpack_record(data)
113
+ data.unpack('C*').map! {|c| sprintf("%02X", c) }.join(' ')
114
+ end
115
+
116
+ end
@@ -0,0 +1,146 @@
1
+ # -*- coding: utf-8 -*-
2
+ require 'helper'
3
+ require "stringio"
4
+
5
+ class TC_Workbook < Test::Unit::TestCase
6
+
7
+ def setup
8
+ @test_file = StringIO.new
9
+ @workbook = Workbook.new(@test_file)
10
+ end
11
+
12
+ def test_new
13
+ assert_kind_of(Workbook, @workbook)
14
+ end
15
+
16
+ def test_add_worksheet
17
+ sheetnames = ['sheet1', 'sheet2']
18
+ (0 .. sheetnames.size-1).each do |i|
19
+ sheets = @workbook.sheets
20
+ assert_equal(i, sheets.size)
21
+ @workbook.add_worksheet(sheetnames[i])
22
+ sheets = @workbook.sheets
23
+ assert_equal(i+1, sheets.size)
24
+ end
25
+ end
26
+
27
+ def test_set_tempdir_after_sheet_added
28
+ # after shees added, call set_tempdir raise RuntimeError
29
+ @workbook.add_worksheet('name')
30
+ assert_raise(RuntimeError, "already sheet exists, but set_tempdir() doesn't raise"){
31
+ @workbook.set_tempdir
32
+ }
33
+ end
34
+
35
+ def test_set_tempdir_with_invalid_dir
36
+ # invalid dir raise RuntimeError
37
+ while true do
38
+ dir = Time.now.to_s
39
+ break unless FileTest.directory?(dir)
40
+ sleep 0.1
41
+ end
42
+ assert_raise(RuntimeError, "set_tempdir() doesn't raise invalid dir:#{dir}."){
43
+ @workbook.set_tempdir(dir)
44
+ }
45
+ end
46
+
47
+ def test_check_sheetname
48
+ worksheet1 = @workbook.add_worksheet # implicit name 'Sheet1'
49
+ worksheet2 = @workbook.add_worksheet # implicit name 'Sheet2'
50
+ worksheet3 = @workbook.add_worksheet 'Sheet3' # explicit name 'Sheet3'
51
+ worksheet4 = @workbook.add_worksheet 'Sheetz' # explicit name 'Sheetz'
52
+
53
+ valid_sheetnames.each do |test|
54
+ target = test[0]
55
+ sheetname = test[1]
56
+ caption = test[2]
57
+ assert_nothing_raised { @workbook.add_worksheet(sheetname) }
58
+ end
59
+
60
+ invalid_sheetnames.each do |test|
61
+ target = test[0]
62
+ sheetname = test[1]
63
+ caption = test[2]
64
+ assert_raise(RuntimeError, "sheetname: #{sheetname}") {
65
+ @workbook.add_worksheet(sheetname)
66
+ }
67
+ end
68
+ end
69
+
70
+ def test_check_sheetname_raise_if_same_utf16be_sheet_name
71
+ smily = [0x263a].pack('n')
72
+ @workbook.add_worksheet(smily, true)
73
+ assert_raise(RuntimeError) { @workbook.add_worksheet(smily, true)}
74
+ end
75
+
76
+ def test_check_sheetname_utf8_only
77
+ ['Лист 1', 'Лист 2', 'Лист 3'].each do |sheetname|
78
+ assert_nothing_raised { @workbook.add_worksheet(sheetname) }
79
+ end
80
+ end
81
+
82
+ def test_check_unicode_bytes_even
83
+ assert_nothing_raised(RuntimeError){ @workbook.add_worksheet('ab', 1)}
84
+ assert_raise(RuntimeError){ @workbook.add_worksheet('abc', 1)}
85
+ end
86
+
87
+ def test_raise_set_compatibility_after_sheet_creation
88
+ @workbook.add_worksheet
89
+ assert_raise(RuntimeError) { @workbook.compatibility_mode }
90
+ end
91
+
92
+ def valid_sheetnames
93
+ [
94
+ # Tests for valid names
95
+ [ 'PASS', nil, 'No worksheet name' ],
96
+ [ 'PASS', '', 'Blank worksheet name' ],
97
+ [ 'PASS', 'Sheet10', 'Valid worksheet name' ],
98
+ [ 'PASS', 'a' * 31, 'Valid 31 char name' ]
99
+ ]
100
+ end
101
+
102
+ def invalid_sheetnames
103
+ [
104
+ # Tests for invalid names
105
+ [ 'FAIL', 'Sheet1', 'Caught duplicate name' ],
106
+ [ 'FAIL', 'Sheet2', 'Caught duplicate name' ],
107
+ [ 'FAIL', 'Sheet3', 'Caught duplicate name' ],
108
+ [ 'FAIL', 'sheet1', 'Caught case-insensitive name'],
109
+ [ 'FAIL', 'SHEET1', 'Caught case-insensitive name'],
110
+ [ 'FAIL', 'sheetz', 'Caught case-insensitive name'],
111
+ [ 'FAIL', 'SHEETZ', 'Caught case-insensitive name'],
112
+ [ 'FAIL', 'a' * 32, 'Caught long name' ],
113
+ [ 'FAIL', '[', 'Caught invalid char' ],
114
+ [ 'FAIL', ']', 'Caught invalid char' ],
115
+ [ 'FAIL', ':', 'Caught invalid char' ],
116
+ [ 'FAIL', '*', 'Caught invalid char' ],
117
+ [ 'FAIL', '?', 'Caught invalid char' ],
118
+ [ 'FAIL', '/', 'Caught invalid char' ],
119
+ [ 'FAIL', '\\', 'Caught invalid char' ]
120
+ ]
121
+ end
122
+
123
+ def test_add_format_must_accept_one_or_more_hash_params
124
+ font = {
125
+ :font => 'MS 明朝',
126
+ :size => 12,
127
+ :color => 'blue',
128
+ :bold => 1
129
+ }
130
+ shading = {
131
+ :bg_color => 'green',
132
+ :pattern => 1
133
+ }
134
+ properties = font.merge(shading)
135
+
136
+ format1 = @workbook.add_format(properties)
137
+ format2 = @workbook.add_format(font, shading)
138
+ assert(format_equal?(format1, format2))
139
+ end
140
+
141
+ def format_equal?(f1, f2)
142
+ require 'yaml'
143
+ re = /xf_index: \d+\n/
144
+ YAML.dump(f1).sub(re, '') == YAML.dump(f2).sub(re, '')
145
+ end
146
+ end
@@ -0,0 +1,106 @@
1
+ # -*- coding: utf-8 -*-
2
+ require 'helper'
3
+ require 'stringio'
4
+
5
+ class TC_Worksheet < Test::Unit::TestCase
6
+ TEST_DIR = File.expand_path(File.dirname(__FILE__))
7
+ PERL_OUTDIR = File.join(TEST_DIR, 'perl_output')
8
+
9
+ def setup
10
+ @test_file = StringIO.new
11
+ @workbook = WriteExcel.new(@test_file)
12
+ @sheetname = 'test'
13
+ @ws = @workbook.add_worksheet(@sheetname, 0)
14
+ @perldir = "#{PERL_OUTDIR}/"
15
+ @format = Writeexcel::Format.new(:color=>"green")
16
+ end
17
+
18
+ def test_methods_exist
19
+ assert_respond_to(@ws, :write)
20
+ assert_respond_to(@ws, :write_blank)
21
+ assert_respond_to(@ws, :write_row)
22
+ assert_respond_to(@ws, :write_col)
23
+ end
24
+
25
+ def test_methods_no_error
26
+ assert_nothing_raised{ @ws.write(0,0,nil) }
27
+ assert_nothing_raised{ @ws.write(0,0,"Hello") }
28
+ assert_nothing_raised{ @ws.write(0,0,888) }
29
+ assert_nothing_raised{ @ws.write_row(0,0,["one","two","three"]) }
30
+ assert_nothing_raised{ @ws.write_row(0,0,[1,2,3]) }
31
+ assert_nothing_raised{ @ws.write_col(0,0,["one","two","three"]) }
32
+ assert_nothing_raised{ @ws.write_col(0,0,[1,2,3]) }
33
+ assert_nothing_raised{ @ws.write_blank(0,0,nil) }
34
+ assert_nothing_raised{ @ws.write_url(0,0,"http://www.ruby-lang.org") }
35
+ end
36
+
37
+ def test_write_syntax
38
+ assert_nothing_raised{@ws.write(0,0,"Hello")}
39
+ assert_nothing_raised{@ws.write(0,0,666)}
40
+ end
41
+
42
+ def test_store_dimensions
43
+ file = "delete_this"
44
+ File.open(file,"w+"){ |f| f.print @ws.__send__("store_dimensions") }
45
+ pf = @perldir + "ws_store_dimensions"
46
+ p_od = IO.readlines(pf).to_s.dump
47
+ r_od = IO.readlines(file).to_s.dump
48
+ assert_equal_filesize(pf ,file, "Invalid size for store_selection")
49
+ assert_equal(p_od, r_od,"Octal dumps are not identical")
50
+ File.delete(file)
51
+ end
52
+
53
+ def test_store_colinfo
54
+ colinfo = Writeexcel::Worksheet::ColInfo.new(0, 0, 8.43, nil, false, 0, false)
55
+
56
+ file = "delete_this"
57
+ File.open(file,"w+"){ |f| f.print @ws.__send__("store_colinfo", colinfo) }
58
+ pf = @perldir + "ws_store_colinfo"
59
+ p_od = IO.readlines(pf).to_s.dump
60
+ r_od = IO.readlines(file).to_s.dump
61
+ assert_equal_filesize(pf, file, "Invalid size for store_colinfo")
62
+ assert_equal(p_od,r_od,"Perl and Ruby octal dumps don't match")
63
+ File.delete(file)
64
+ end
65
+
66
+ def test_store_selection
67
+ file = "delete_this"
68
+ File.open(file,"w+"){ |f| f.print @ws.__send__("store_selection", 1,1,2,2) }
69
+ pf = @perldir + "ws_store_selection"
70
+ p_od = IO.readlines(pf).to_s.dump
71
+ r_od = IO.readlines(file).to_s.dump
72
+ assert_equal_filesize(pf, file, "Invalid size for store_selection")
73
+ assert_equal(p_od, r_od,"Octal dumps are not identical")
74
+ File.delete(file)
75
+ end
76
+
77
+ def test_store_filtermode
78
+ file = "delete_this"
79
+ File.open(file,"w+"){ |f| f.print @ws.__send__("store_filtermode") }
80
+ pf = @perldir + "ws_store_filtermode_off"
81
+ p_od = IO.readlines(pf).to_s.dump
82
+ r_od = IO.readlines(file).to_s.dump
83
+ assert_equal_filesize(pf, file, "Invalid size for store_filtermode_off")
84
+ assert_equal(p_od, r_od,"Octal dumps are not identical")
85
+ File.delete(file)
86
+
87
+ @ws.autofilter(1,1,2,2)
88
+ @ws.filter_column(1, 'x < 2000')
89
+ File.open(file,"w+"){ |f| f.print @ws.__send__("store_filtermode") }
90
+ pf = @perldir + "ws_store_filtermode_on"
91
+ p_od = IO.readlines(pf).to_s.dump
92
+ r_od = IO.readlines(file).to_s.dump
93
+ assert_equal_filesize(pf, file, "Invalid size for store_filtermode_off")
94
+ assert_equal(p_od, r_od,"Octal dumps are not identical")
95
+ File.delete(file)
96
+ end
97
+
98
+ def test_new
99
+ assert_equal(@sheetname, @ws.name)
100
+ end
101
+
102
+
103
+ def assert_equal_filesize(target, test, msg = "Bad file size")
104
+ assert_equal(File.size(target),File.size(test),msg)
105
+ end
106
+ end