writeexcel 0.5.0 → 0.6.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.
- data/.gitattributes +1 -1
- data/.gitignore +24 -24
- data/README.rdoc +34 -55
- data/VERSION +1 -1
- data/charts/chartex.rb +316 -316
- data/charts/demo1.rb +46 -46
- data/charts/demo2.rb +65 -65
- data/charts/demo3.rb +117 -117
- data/charts/demo4.rb +119 -119
- data/charts/demo5.rb +48 -48
- data/examples/a_simple.rb +43 -43
- data/examples/autofilter.rb +265 -265
- data/examples/bigfile.rb +30 -30
- data/examples/chart_area.rb +121 -121
- data/examples/chart_bar.rb +120 -120
- data/examples/chart_column.rb +120 -120
- data/examples/chart_line.rb +120 -120
- data/examples/chart_pie.rb +108 -108
- data/examples/chart_scatter.rb +121 -121
- data/examples/chart_stock.rb +148 -148
- data/examples/chess.rb +142 -142
- data/examples/colors.rb +129 -129
- data/examples/comments1.rb +27 -27
- data/examples/comments2.rb +352 -352
- data/examples/copyformat.rb +52 -52
- data/examples/data_validate.rb +279 -279
- data/examples/date_time.rb +87 -87
- data/examples/defined_name.rb +32 -32
- data/examples/demo.rb +124 -124
- data/examples/diag_border.rb +36 -36
- data/examples/formats.rb +490 -490
- data/examples/formula_result.rb +30 -30
- data/examples/header.rb +137 -137
- data/examples/hide_sheet.rb +29 -29
- data/examples/hyperlink.rb +43 -43
- data/examples/images.rb +63 -63
- data/examples/indent.rb +31 -31
- data/examples/merge1.rb +40 -40
- data/examples/merge2.rb +45 -45
- data/examples/merge3.rb +66 -66
- data/examples/merge4.rb +83 -83
- data/examples/merge5.rb +80 -80
- data/examples/merge6.rb +67 -67
- data/examples/outline.rb +255 -255
- data/examples/outline_collapsed.rb +209 -209
- data/examples/panes.rb +113 -113
- data/examples/properties.rb +34 -34
- data/examples/properties_jp.rb +33 -33
- data/examples/protection.rb +47 -47
- data/examples/regions.rb +53 -53
- data/examples/repeat.rb +43 -43
- data/examples/right_to_left.rb +27 -27
- data/examples/row_wrap.rb +53 -53
- data/examples/stats.rb +74 -74
- data/examples/stocks.rb +81 -81
- data/examples/tab_colors.rb +31 -31
- data/examples/utf8.rb +15 -15
- data/examples/write_arrays.rb +83 -83
- data/lib/writeexcel/biffwriter.rb +232 -232
- data/lib/writeexcel/caller_info.rb +12 -12
- data/lib/writeexcel/chart.rb +2190 -2177
- data/lib/writeexcel/charts/area.rb +154 -154
- data/lib/writeexcel/charts/bar.rb +177 -177
- data/lib/writeexcel/charts/column.rb +156 -156
- data/lib/writeexcel/charts/external.rb +66 -66
- data/lib/writeexcel/charts/line.rb +154 -154
- data/lib/writeexcel/charts/pie.rb +169 -169
- data/lib/writeexcel/charts/scatter.rb +192 -192
- data/lib/writeexcel/charts/stock.rb +213 -213
- data/lib/writeexcel/colors.rb +64 -64
- data/lib/writeexcel/compatibility.rb +0 -255
- data/lib/writeexcel/debug_info.rb +37 -33
- data/lib/writeexcel/excelformulaparser.rb +587 -587
- data/lib/writeexcel/format.rb +13 -4
- data/lib/writeexcel/formula.rb +26 -9
- data/lib/writeexcel/helper.rb +68 -64
- data/lib/writeexcel/olewriter.rb +311 -311
- data/lib/writeexcel/properties.rb +242 -240
- data/lib/writeexcel/storage_lite.rb +984 -978
- data/lib/writeexcel/workbook.rb +3210 -3192
- data/lib/writeexcel/worksheet.rb +143 -51
- data/lib/writeexcel/write_file.rb +44 -40
- data/lib/writeexcel.rb +1159 -1159
- data/test/helper.rb +31 -28
- data/test/perl_output/README +31 -31
- data/test/test_00_IEEE_double.rb +13 -13
- data/test/test_01_add_worksheet.rb +10 -10
- data/test/test_02_merge_formats.rb +53 -53
- data/test/test_04_dimensions.rb +392 -392
- data/test/test_05_rows.rb +179 -179
- data/test/test_06_extsst.rb +77 -77
- data/test/test_11_date_time.rb +479 -479
- data/test/test_12_date_only.rb +501 -501
- data/test/test_13_date_seconds.rb +481 -481
- data/test/test_21_escher.rb +637 -637
- data/test/test_22_mso_drawing_group.rb +745 -745
- data/test/test_23_note.rb +73 -73
- data/test/test_24_txo.rb +75 -75
- data/test/test_25_position_object.rb +84 -84
- data/test/test_26_autofilter.rb +314 -314
- data/test/test_27_autofilter.rb +131 -131
- data/test/test_28_autofilter.rb +161 -161
- data/test/test_29_process_jpg.rb +683 -683
- data/test/test_30_validation_dval.rb +77 -77
- data/test/test_31_validation_dv_strings.rb +126 -126
- data/test/test_32_validation_dv_formula.rb +206 -206
- data/test/test_40_property_types.rb +188 -188
- data/test/test_41_properties.rb +235 -235
- data/test/test_42_set_properties.rb +437 -437
- data/test/test_50_name_stored.rb +299 -299
- data/test/test_51_name_print_area.rb +357 -357
- data/test/test_52_name_print_titles.rb +454 -454
- data/test/test_53_autofilter.rb +203 -203
- data/test/test_60_chart_generic.rb +578 -578
- data/test/test_61_chart_subclasses.rb +95 -95
- data/test/test_62_chart_formats.rb +272 -272
- data/test/test_63_chart_area_formats.rb +649 -649
- data/test/test_biff.rb +75 -75
- data/test/test_compatibility.rb +12 -627
- data/test/test_example_match.rb +3144 -3144
- data/test/test_formula.rb +61 -61
- data/test/test_ole.rb +106 -106
- data/test/test_storage_lite.rb +125 -125
- data/test/test_workbook.rb +139 -139
- data/test/test_worksheet.rb +110 -110
- data/utils/add_magic_comment.rb +80 -80
- data/writeexcel.gemspec +4 -6
- data/writeexcel.rdoc +58 -15
- metadata +9 -6
- data/test/test_new_encoding.rb +0 -205
data/test/test_workbook.rb
CHANGED
@@ -1,139 +1,139 @@
|
|
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 teardown
|
13
|
-
@workbook.close
|
14
|
-
end
|
15
|
-
|
16
|
-
def test_new
|
17
|
-
assert_kind_of(Workbook, @workbook)
|
18
|
-
end
|
19
|
-
|
20
|
-
def test_add_worksheet
|
21
|
-
sheetnames = ['sheet1', 'sheet2']
|
22
|
-
(0 .. sheetnames.size-1).each do |i|
|
23
|
-
sheets = @workbook.sheets
|
24
|
-
assert_equal(i, sheets.size)
|
25
|
-
@workbook.add_worksheet(sheetnames[i])
|
26
|
-
sheets = @workbook.sheets
|
27
|
-
assert_equal(i+1, sheets.size)
|
28
|
-
end
|
29
|
-
end
|
30
|
-
|
31
|
-
def test_set_tempdir_after_sheet_added
|
32
|
-
# after shees added, call set_tempdir raise RuntimeError
|
33
|
-
@workbook.add_worksheet('name')
|
34
|
-
assert_raise(RuntimeError, "already sheet exists, but set_tempdir() doesn't raise"){
|
35
|
-
@workbook.set_tempdir
|
36
|
-
}
|
37
|
-
end
|
38
|
-
|
39
|
-
def test_set_tempdir_with_invalid_dir
|
40
|
-
# invalid dir raise RuntimeError
|
41
|
-
while true do
|
42
|
-
dir = Time.now.to_s
|
43
|
-
break unless FileTest.directory?(dir)
|
44
|
-
sleep 0.1
|
45
|
-
end
|
46
|
-
assert_raise(RuntimeError, "set_tempdir() doesn't raise invalid dir:#{dir}."){
|
47
|
-
@workbook.set_tempdir(dir)
|
48
|
-
}
|
49
|
-
end
|
50
|
-
|
51
|
-
=begin
|
52
|
-
#
|
53
|
-
# Comment out because Workbook#check_sheetname was set to private method.
|
54
|
-
#
|
55
|
-
def test_check_sheetname
|
56
|
-
valids = valid_sheetname
|
57
|
-
invalids = invalid_sheetname
|
58
|
-
worksheet1 = @workbook.add_worksheet # implicit name 'Sheet1'
|
59
|
-
worksheet2 = @workbook.add_worksheet # implicit name 'Sheet2'
|
60
|
-
worksheet3 = @workbook.add_worksheet 'Sheet3' # implicit name 'Sheet3'
|
61
|
-
worksheet1 = @workbook.add_worksheet 'Sheetz' # implicit name 'Sheetz'
|
62
|
-
|
63
|
-
valids.each do |test|
|
64
|
-
target = test[0]
|
65
|
-
sheetname = test[1]
|
66
|
-
caption = test[2]
|
67
|
-
assert_nothing_raised { @workbook.check_sheetname(sheetname) }
|
68
|
-
end
|
69
|
-
invalids.each do |test|
|
70
|
-
target = test[0]
|
71
|
-
sheetname = test[1]
|
72
|
-
caption = test[2]
|
73
|
-
assert_raise(RuntimeError, "sheetname: #{sheetname}") {
|
74
|
-
@workbook.check_sheetname(sheetname)
|
75
|
-
}
|
76
|
-
end
|
77
|
-
end
|
78
|
-
=end
|
79
|
-
|
80
|
-
def test_raise_set_compatibility_after_sheet_creation
|
81
|
-
@workbook.add_worksheet
|
82
|
-
assert_raise(RuntimeError) { @workbook.compatibility_mode }
|
83
|
-
end
|
84
|
-
|
85
|
-
def valid_sheetname
|
86
|
-
[
|
87
|
-
# Tests for valid names
|
88
|
-
[ 'PASS', nil, 'No worksheet name' ],
|
89
|
-
[ 'PASS', '', 'Blank worksheet name' ],
|
90
|
-
[ 'PASS', 'Sheet10', 'Valid worksheet name' ],
|
91
|
-
[ 'PASS', 'a' * 31, 'Valid 31 char name' ]
|
92
|
-
]
|
93
|
-
end
|
94
|
-
|
95
|
-
def invalid_sheetname
|
96
|
-
[
|
97
|
-
# Tests for invalid names
|
98
|
-
[ 'FAIL', 'Sheet1', 'Caught duplicate name' ],
|
99
|
-
[ 'FAIL', 'Sheet2', 'Caught duplicate name' ],
|
100
|
-
[ 'FAIL', 'Sheet3', 'Caught duplicate name' ],
|
101
|
-
[ 'FAIL', 'sheet1', 'Caught case-insensitive name'],
|
102
|
-
[ 'FAIL', 'SHEET1', 'Caught case-insensitive name'],
|
103
|
-
[ 'FAIL', 'sheetz', 'Caught case-insensitive name'],
|
104
|
-
[ 'FAIL', 'SHEETZ', 'Caught case-insensitive name'],
|
105
|
-
[ 'FAIL', 'a' * 32, 'Caught long name' ],
|
106
|
-
[ 'FAIL', '[', 'Caught invalid char' ],
|
107
|
-
[ 'FAIL', ']', 'Caught invalid char' ],
|
108
|
-
[ 'FAIL', ':', 'Caught invalid char' ],
|
109
|
-
[ 'FAIL', '*', 'Caught invalid char' ],
|
110
|
-
[ 'FAIL', '?', 'Caught invalid char' ],
|
111
|
-
[ 'FAIL', '/', 'Caught invalid char' ],
|
112
|
-
[ 'FAIL', '\\', 'Caught invalid char' ]
|
113
|
-
]
|
114
|
-
end
|
115
|
-
|
116
|
-
def test_add_format_must_accept_one_or_more_hash_params
|
117
|
-
font = {
|
118
|
-
:font => 'MS 明朝',
|
119
|
-
:size => 12,
|
120
|
-
:color => 'blue',
|
121
|
-
:bold => 1
|
122
|
-
}
|
123
|
-
shading = {
|
124
|
-
:bg_color => 'green',
|
125
|
-
:pattern => 1
|
126
|
-
}
|
127
|
-
properties = font.merge(shading)
|
128
|
-
|
129
|
-
format1 = @workbook.add_format(properties)
|
130
|
-
format2 = @workbook.add_format(font, shading)
|
131
|
-
assert(format_equal?(format1, format2))
|
132
|
-
end
|
133
|
-
|
134
|
-
def format_equal?(f1, f2)
|
135
|
-
require 'yaml'
|
136
|
-
re = /xf_index: \d+\n/
|
137
|
-
YAML.dump(f1).sub(re, '') == YAML.dump(f2).sub(re, '')
|
138
|
-
end
|
139
|
-
end
|
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 teardown
|
13
|
+
@workbook.close
|
14
|
+
end
|
15
|
+
|
16
|
+
def test_new
|
17
|
+
assert_kind_of(Workbook, @workbook)
|
18
|
+
end
|
19
|
+
|
20
|
+
def test_add_worksheet
|
21
|
+
sheetnames = ['sheet1', 'sheet2']
|
22
|
+
(0 .. sheetnames.size-1).each do |i|
|
23
|
+
sheets = @workbook.sheets
|
24
|
+
assert_equal(i, sheets.size)
|
25
|
+
@workbook.add_worksheet(sheetnames[i])
|
26
|
+
sheets = @workbook.sheets
|
27
|
+
assert_equal(i+1, sheets.size)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
def test_set_tempdir_after_sheet_added
|
32
|
+
# after shees added, call set_tempdir raise RuntimeError
|
33
|
+
@workbook.add_worksheet('name')
|
34
|
+
assert_raise(RuntimeError, "already sheet exists, but set_tempdir() doesn't raise"){
|
35
|
+
@workbook.set_tempdir
|
36
|
+
}
|
37
|
+
end
|
38
|
+
|
39
|
+
def test_set_tempdir_with_invalid_dir
|
40
|
+
# invalid dir raise RuntimeError
|
41
|
+
while true do
|
42
|
+
dir = Time.now.to_s
|
43
|
+
break unless FileTest.directory?(dir)
|
44
|
+
sleep 0.1
|
45
|
+
end
|
46
|
+
assert_raise(RuntimeError, "set_tempdir() doesn't raise invalid dir:#{dir}."){
|
47
|
+
@workbook.set_tempdir(dir)
|
48
|
+
}
|
49
|
+
end
|
50
|
+
|
51
|
+
=begin
|
52
|
+
#
|
53
|
+
# Comment out because Workbook#check_sheetname was set to private method.
|
54
|
+
#
|
55
|
+
def test_check_sheetname
|
56
|
+
valids = valid_sheetname
|
57
|
+
invalids = invalid_sheetname
|
58
|
+
worksheet1 = @workbook.add_worksheet # implicit name 'Sheet1'
|
59
|
+
worksheet2 = @workbook.add_worksheet # implicit name 'Sheet2'
|
60
|
+
worksheet3 = @workbook.add_worksheet 'Sheet3' # implicit name 'Sheet3'
|
61
|
+
worksheet1 = @workbook.add_worksheet 'Sheetz' # implicit name 'Sheetz'
|
62
|
+
|
63
|
+
valids.each do |test|
|
64
|
+
target = test[0]
|
65
|
+
sheetname = test[1]
|
66
|
+
caption = test[2]
|
67
|
+
assert_nothing_raised { @workbook.check_sheetname(sheetname) }
|
68
|
+
end
|
69
|
+
invalids.each do |test|
|
70
|
+
target = test[0]
|
71
|
+
sheetname = test[1]
|
72
|
+
caption = test[2]
|
73
|
+
assert_raise(RuntimeError, "sheetname: #{sheetname}") {
|
74
|
+
@workbook.check_sheetname(sheetname)
|
75
|
+
}
|
76
|
+
end
|
77
|
+
end
|
78
|
+
=end
|
79
|
+
|
80
|
+
def test_raise_set_compatibility_after_sheet_creation
|
81
|
+
@workbook.add_worksheet
|
82
|
+
assert_raise(RuntimeError) { @workbook.compatibility_mode }
|
83
|
+
end
|
84
|
+
|
85
|
+
def valid_sheetname
|
86
|
+
[
|
87
|
+
# Tests for valid names
|
88
|
+
[ 'PASS', nil, 'No worksheet name' ],
|
89
|
+
[ 'PASS', '', 'Blank worksheet name' ],
|
90
|
+
[ 'PASS', 'Sheet10', 'Valid worksheet name' ],
|
91
|
+
[ 'PASS', 'a' * 31, 'Valid 31 char name' ]
|
92
|
+
]
|
93
|
+
end
|
94
|
+
|
95
|
+
def invalid_sheetname
|
96
|
+
[
|
97
|
+
# Tests for invalid names
|
98
|
+
[ 'FAIL', 'Sheet1', 'Caught duplicate name' ],
|
99
|
+
[ 'FAIL', 'Sheet2', 'Caught duplicate name' ],
|
100
|
+
[ 'FAIL', 'Sheet3', 'Caught duplicate name' ],
|
101
|
+
[ 'FAIL', 'sheet1', 'Caught case-insensitive name'],
|
102
|
+
[ 'FAIL', 'SHEET1', 'Caught case-insensitive name'],
|
103
|
+
[ 'FAIL', 'sheetz', 'Caught case-insensitive name'],
|
104
|
+
[ 'FAIL', 'SHEETZ', 'Caught case-insensitive name'],
|
105
|
+
[ 'FAIL', 'a' * 32, 'Caught long name' ],
|
106
|
+
[ 'FAIL', '[', 'Caught invalid char' ],
|
107
|
+
[ 'FAIL', ']', 'Caught invalid char' ],
|
108
|
+
[ 'FAIL', ':', 'Caught invalid char' ],
|
109
|
+
[ 'FAIL', '*', 'Caught invalid char' ],
|
110
|
+
[ 'FAIL', '?', 'Caught invalid char' ],
|
111
|
+
[ 'FAIL', '/', 'Caught invalid char' ],
|
112
|
+
[ 'FAIL', '\\', 'Caught invalid char' ]
|
113
|
+
]
|
114
|
+
end
|
115
|
+
|
116
|
+
def test_add_format_must_accept_one_or_more_hash_params
|
117
|
+
font = {
|
118
|
+
:font => 'MS 明朝',
|
119
|
+
:size => 12,
|
120
|
+
:color => 'blue',
|
121
|
+
:bold => 1
|
122
|
+
}
|
123
|
+
shading = {
|
124
|
+
:bg_color => 'green',
|
125
|
+
:pattern => 1
|
126
|
+
}
|
127
|
+
properties = font.merge(shading)
|
128
|
+
|
129
|
+
format1 = @workbook.add_format(properties)
|
130
|
+
format2 = @workbook.add_format(font, shading)
|
131
|
+
assert(format_equal?(format1, format2))
|
132
|
+
end
|
133
|
+
|
134
|
+
def format_equal?(f1, f2)
|
135
|
+
require 'yaml'
|
136
|
+
re = /xf_index: \d+\n/
|
137
|
+
YAML.dump(f1).sub(re, '') == YAML.dump(f2).sub(re, '')
|
138
|
+
end
|
139
|
+
end
|
data/test/test_worksheet.rb
CHANGED
@@ -1,110 +1,110 @@
|
|
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 teardown
|
19
|
-
@ws = nil
|
20
|
-
@format = nil
|
21
|
-
@workbook.close
|
22
|
-
end
|
23
|
-
|
24
|
-
def test_methods_exist
|
25
|
-
assert_respond_to(@ws, :write)
|
26
|
-
assert_respond_to(@ws, :write_blank)
|
27
|
-
assert_respond_to(@ws, :write_row)
|
28
|
-
assert_respond_to(@ws, :write_col)
|
29
|
-
end
|
30
|
-
|
31
|
-
def test_methods_no_error
|
32
|
-
assert_nothing_raised{ @ws.write(0,0,nil) }
|
33
|
-
assert_nothing_raised{ @ws.write(0,0,"Hello") }
|
34
|
-
assert_nothing_raised{ @ws.write(0,0,888) }
|
35
|
-
assert_nothing_raised{ @ws.write_row(0,0,["one","two","three"]) }
|
36
|
-
assert_nothing_raised{ @ws.write_row(0,0,[1,2,3]) }
|
37
|
-
assert_nothing_raised{ @ws.write_col(0,0,["one","two","three"]) }
|
38
|
-
assert_nothing_raised{ @ws.write_col(0,0,[1,2,3]) }
|
39
|
-
assert_nothing_raised{ @ws.write_blank(0,0,nil) }
|
40
|
-
assert_nothing_raised{ @ws.write_url(0,0,"http://www.ruby-lang.org") }
|
41
|
-
end
|
42
|
-
|
43
|
-
def test_write_syntax
|
44
|
-
assert_nothing_raised{@ws.write(0,0,"Hello")}
|
45
|
-
assert_nothing_raised{@ws.write(0,0,666)}
|
46
|
-
end
|
47
|
-
|
48
|
-
def test_store_dimensions
|
49
|
-
file = "delete_this"
|
50
|
-
File.open(file,"w+"){ |f| f.print @ws.store_dimensions }
|
51
|
-
pf = @perldir + "ws_store_dimensions"
|
52
|
-
p_od = IO.readlines(pf).to_s.dump
|
53
|
-
r_od = IO.readlines(file).to_s.dump
|
54
|
-
assert_equal_filesize(pf ,file, "Invalid size for store_selection")
|
55
|
-
assert_equal(p_od, r_od,"Octal dumps are not identical")
|
56
|
-
File.delete(file)
|
57
|
-
end
|
58
|
-
|
59
|
-
def test_store_colinfo
|
60
|
-
file = "delete_this"
|
61
|
-
File.open(file,"w+"){ |f| f.print @ws.store_colinfo }
|
62
|
-
pf = @perldir + "ws_store_colinfo"
|
63
|
-
p_od = IO.readlines(pf).to_s.dump
|
64
|
-
r_od = IO.readlines(file).to_s.dump
|
65
|
-
assert_equal_filesize(pf, file, "Invalid size for store_colinfo")
|
66
|
-
assert_equal(p_od,r_od,"Perl and Ruby octal dumps don't match")
|
67
|
-
File.delete(file)
|
68
|
-
end
|
69
|
-
|
70
|
-
def test_store_selection
|
71
|
-
file = "delete_this"
|
72
|
-
File.open(file,"w+"){ |f| f.print @ws.store_selection(1,1,2,2) }
|
73
|
-
pf = @perldir + "ws_store_selection"
|
74
|
-
p_od = IO.readlines(pf).to_s.dump
|
75
|
-
r_od = IO.readlines(file).to_s.dump
|
76
|
-
assert_equal_filesize(pf, file, "Invalid size for store_selection")
|
77
|
-
assert_equal(p_od, r_od,"Octal dumps are not identical")
|
78
|
-
File.delete(file)
|
79
|
-
end
|
80
|
-
|
81
|
-
def test_store_filtermode
|
82
|
-
file = "delete_this"
|
83
|
-
File.open(file,"w+"){ |f| f.print @ws.store_filtermode }
|
84
|
-
pf = @perldir + "ws_store_filtermode_off"
|
85
|
-
p_od = IO.readlines(pf).to_s.dump
|
86
|
-
r_od = IO.readlines(file).to_s.dump
|
87
|
-
assert_equal_filesize(pf, file, "Invalid size for store_filtermode_off")
|
88
|
-
assert_equal(p_od, r_od,"Octal dumps are not identical")
|
89
|
-
File.delete(file)
|
90
|
-
|
91
|
-
@ws.autofilter(1,1,2,2)
|
92
|
-
@ws.filter_column(1, 'x < 2000')
|
93
|
-
File.open(file,"w+"){ |f| f.print @ws.store_filtermode }
|
94
|
-
pf = @perldir + "ws_store_filtermode_on"
|
95
|
-
p_od = IO.readlines(pf).to_s.dump
|
96
|
-
r_od = IO.readlines(file).to_s.dump
|
97
|
-
assert_equal_filesize(pf, file, "Invalid size for store_filtermode_off")
|
98
|
-
assert_equal(p_od, r_od,"Octal dumps are not identical")
|
99
|
-
File.delete(file)
|
100
|
-
end
|
101
|
-
|
102
|
-
def test_new
|
103
|
-
assert_equal(@sheetname, @ws.name)
|
104
|
-
end
|
105
|
-
|
106
|
-
|
107
|
-
def assert_equal_filesize(target, test, msg = "Bad file size")
|
108
|
-
assert_equal(File.size(target),File.size(test),msg)
|
109
|
-
end
|
110
|
-
end
|
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 teardown
|
19
|
+
@ws = nil
|
20
|
+
@format = nil
|
21
|
+
@workbook.close
|
22
|
+
end
|
23
|
+
|
24
|
+
def test_methods_exist
|
25
|
+
assert_respond_to(@ws, :write)
|
26
|
+
assert_respond_to(@ws, :write_blank)
|
27
|
+
assert_respond_to(@ws, :write_row)
|
28
|
+
assert_respond_to(@ws, :write_col)
|
29
|
+
end
|
30
|
+
|
31
|
+
def test_methods_no_error
|
32
|
+
assert_nothing_raised{ @ws.write(0,0,nil) }
|
33
|
+
assert_nothing_raised{ @ws.write(0,0,"Hello") }
|
34
|
+
assert_nothing_raised{ @ws.write(0,0,888) }
|
35
|
+
assert_nothing_raised{ @ws.write_row(0,0,["one","two","three"]) }
|
36
|
+
assert_nothing_raised{ @ws.write_row(0,0,[1,2,3]) }
|
37
|
+
assert_nothing_raised{ @ws.write_col(0,0,["one","two","three"]) }
|
38
|
+
assert_nothing_raised{ @ws.write_col(0,0,[1,2,3]) }
|
39
|
+
assert_nothing_raised{ @ws.write_blank(0,0,nil) }
|
40
|
+
assert_nothing_raised{ @ws.write_url(0,0,"http://www.ruby-lang.org") }
|
41
|
+
end
|
42
|
+
|
43
|
+
def test_write_syntax
|
44
|
+
assert_nothing_raised{@ws.write(0,0,"Hello")}
|
45
|
+
assert_nothing_raised{@ws.write(0,0,666)}
|
46
|
+
end
|
47
|
+
|
48
|
+
def test_store_dimensions
|
49
|
+
file = "delete_this"
|
50
|
+
File.open(file,"w+"){ |f| f.print @ws.store_dimensions }
|
51
|
+
pf = @perldir + "ws_store_dimensions"
|
52
|
+
p_od = IO.readlines(pf).to_s.dump
|
53
|
+
r_od = IO.readlines(file).to_s.dump
|
54
|
+
assert_equal_filesize(pf ,file, "Invalid size for store_selection")
|
55
|
+
assert_equal(p_od, r_od,"Octal dumps are not identical")
|
56
|
+
File.delete(file)
|
57
|
+
end
|
58
|
+
|
59
|
+
def test_store_colinfo
|
60
|
+
file = "delete_this"
|
61
|
+
File.open(file,"w+"){ |f| f.print @ws.store_colinfo }
|
62
|
+
pf = @perldir + "ws_store_colinfo"
|
63
|
+
p_od = IO.readlines(pf).to_s.dump
|
64
|
+
r_od = IO.readlines(file).to_s.dump
|
65
|
+
assert_equal_filesize(pf, file, "Invalid size for store_colinfo")
|
66
|
+
assert_equal(p_od,r_od,"Perl and Ruby octal dumps don't match")
|
67
|
+
File.delete(file)
|
68
|
+
end
|
69
|
+
|
70
|
+
def test_store_selection
|
71
|
+
file = "delete_this"
|
72
|
+
File.open(file,"w+"){ |f| f.print @ws.store_selection(1,1,2,2) }
|
73
|
+
pf = @perldir + "ws_store_selection"
|
74
|
+
p_od = IO.readlines(pf).to_s.dump
|
75
|
+
r_od = IO.readlines(file).to_s.dump
|
76
|
+
assert_equal_filesize(pf, file, "Invalid size for store_selection")
|
77
|
+
assert_equal(p_od, r_od,"Octal dumps are not identical")
|
78
|
+
File.delete(file)
|
79
|
+
end
|
80
|
+
|
81
|
+
def test_store_filtermode
|
82
|
+
file = "delete_this"
|
83
|
+
File.open(file,"w+"){ |f| f.print @ws.store_filtermode }
|
84
|
+
pf = @perldir + "ws_store_filtermode_off"
|
85
|
+
p_od = IO.readlines(pf).to_s.dump
|
86
|
+
r_od = IO.readlines(file).to_s.dump
|
87
|
+
assert_equal_filesize(pf, file, "Invalid size for store_filtermode_off")
|
88
|
+
assert_equal(p_od, r_od,"Octal dumps are not identical")
|
89
|
+
File.delete(file)
|
90
|
+
|
91
|
+
@ws.autofilter(1,1,2,2)
|
92
|
+
@ws.filter_column(1, 'x < 2000')
|
93
|
+
File.open(file,"w+"){ |f| f.print @ws.store_filtermode }
|
94
|
+
pf = @perldir + "ws_store_filtermode_on"
|
95
|
+
p_od = IO.readlines(pf).to_s.dump
|
96
|
+
r_od = IO.readlines(file).to_s.dump
|
97
|
+
assert_equal_filesize(pf, file, "Invalid size for store_filtermode_off")
|
98
|
+
assert_equal(p_od, r_od,"Octal dumps are not identical")
|
99
|
+
File.delete(file)
|
100
|
+
end
|
101
|
+
|
102
|
+
def test_new
|
103
|
+
assert_equal(@sheetname, @ws.name)
|
104
|
+
end
|
105
|
+
|
106
|
+
|
107
|
+
def assert_equal_filesize(target, test, msg = "Bad file size")
|
108
|
+
assert_equal(File.size(target),File.size(test),msg)
|
109
|
+
end
|
110
|
+
end
|
data/utils/add_magic_comment.rb
CHANGED
@@ -1,80 +1,80 @@
|
|
1
|
-
#!/usr/bin/ruby -w
|
2
|
-
# -*- coding: utf-8 -*-
|
3
|
-
require 'stringio'
|
4
|
-
#
|
5
|
-
# magic commentを付与する
|
6
|
-
#
|
7
|
-
|
8
|
-
# カレントディレクトリ以下の.rbファイルパスの配列を返す
|
9
|
-
def rb_files
|
10
|
-
Dir.glob("./**/*\.rb")
|
11
|
-
end
|
12
|
-
|
13
|
-
# カレントディレクトリ以下の.orgファイルパスの配列を返す
|
14
|
-
def org_files
|
15
|
-
Dir.glob("./**/*\.org")
|
16
|
-
end
|
17
|
-
|
18
|
-
# ファイル名を*.orgに変更し、変更後のファイル名を返す
|
19
|
-
def rename_to_org(file)
|
20
|
-
orgfile = change_ext_name(file, 'org')
|
21
|
-
File.rename(file, orgfile)
|
22
|
-
orgfile
|
23
|
-
end
|
24
|
-
|
25
|
-
# ファイル名の拡張子を変更した際のフルパスを返す(実際の変更はしない)
|
26
|
-
def change_ext_name(file, new_ext)
|
27
|
-
File.join(File.dirname(file), File.basename(file, ".*")) + ".#{new_ext}"
|
28
|
-
end
|
29
|
-
|
30
|
-
# shebang か
|
31
|
-
def shebang?(line)
|
32
|
-
line =~ /^#!.*ruby/ ? true : false
|
33
|
-
end
|
34
|
-
|
35
|
-
# magic_comment か
|
36
|
-
def magic_comment?(line)
|
37
|
-
line =~ /coding[:=]\s*[\w.-]+/ ? true : false
|
38
|
-
end
|
39
|
-
|
40
|
-
def add_magic_comment(input = nil, output = nil)
|
41
|
-
input ||= STDIN
|
42
|
-
output ||= STDOUT
|
43
|
-
|
44
|
-
magic_comment = "# -*- coding: utf-8 -*-\n"
|
45
|
-
if shebang?(line = input.gets)
|
46
|
-
output.write(line)
|
47
|
-
if magic_comment?(line = input.gets)
|
48
|
-
output.write(line)
|
49
|
-
else
|
50
|
-
output.write(magic_comment)
|
51
|
-
output.write(line)
|
52
|
-
end
|
53
|
-
elsif magic_comment?(line)
|
54
|
-
output.write(line)
|
55
|
-
else
|
56
|
-
output.write(magic_comment)
|
57
|
-
output.write(line)
|
58
|
-
end
|
59
|
-
while(line = input.gets)
|
60
|
-
output.write(line)
|
61
|
-
end
|
62
|
-
end
|
63
|
-
|
64
|
-
if $0 == __FILE__
|
65
|
-
|
66
|
-
rb_files.each do |file|
|
67
|
-
orgfile = rename_to_org(file)
|
68
|
-
print("#{file}: renamed to #{orgfile}.\n")
|
69
|
-
io = StringIO.new
|
70
|
-
File.open(orgfile) do |fin|
|
71
|
-
File.open(file, 'w') { |fout| add_magic_comment(fin, fout) }
|
72
|
-
end
|
73
|
-
print("#{file}: contains magic comment.\n")
|
74
|
-
end
|
75
|
-
#
|
76
|
-
# orgファイルをすべて消すには、以下を有効に。
|
77
|
-
#
|
78
|
-
org_files.each { |f| File.unlink(f) }
|
79
|
-
|
80
|
-
end
|
1
|
+
#!/usr/bin/ruby -w
|
2
|
+
# -*- coding: utf-8 -*-
|
3
|
+
require 'stringio'
|
4
|
+
#
|
5
|
+
# magic commentを付与する
|
6
|
+
#
|
7
|
+
|
8
|
+
# カレントディレクトリ以下の.rbファイルパスの配列を返す
|
9
|
+
def rb_files
|
10
|
+
Dir.glob("./**/*\.rb")
|
11
|
+
end
|
12
|
+
|
13
|
+
# カレントディレクトリ以下の.orgファイルパスの配列を返す
|
14
|
+
def org_files
|
15
|
+
Dir.glob("./**/*\.org")
|
16
|
+
end
|
17
|
+
|
18
|
+
# ファイル名を*.orgに変更し、変更後のファイル名を返す
|
19
|
+
def rename_to_org(file)
|
20
|
+
orgfile = change_ext_name(file, 'org')
|
21
|
+
File.rename(file, orgfile)
|
22
|
+
orgfile
|
23
|
+
end
|
24
|
+
|
25
|
+
# ファイル名の拡張子を変更した際のフルパスを返す(実際の変更はしない)
|
26
|
+
def change_ext_name(file, new_ext)
|
27
|
+
File.join(File.dirname(file), File.basename(file, ".*")) + ".#{new_ext}"
|
28
|
+
end
|
29
|
+
|
30
|
+
# shebang か
|
31
|
+
def shebang?(line)
|
32
|
+
line =~ /^#!.*ruby/ ? true : false
|
33
|
+
end
|
34
|
+
|
35
|
+
# magic_comment か
|
36
|
+
def magic_comment?(line)
|
37
|
+
line =~ /coding[:=]\s*[\w.-]+/ ? true : false
|
38
|
+
end
|
39
|
+
|
40
|
+
def add_magic_comment(input = nil, output = nil)
|
41
|
+
input ||= STDIN
|
42
|
+
output ||= STDOUT
|
43
|
+
|
44
|
+
magic_comment = "# -*- coding: utf-8 -*-\n"
|
45
|
+
if shebang?(line = input.gets)
|
46
|
+
output.write(line)
|
47
|
+
if magic_comment?(line = input.gets)
|
48
|
+
output.write(line)
|
49
|
+
else
|
50
|
+
output.write(magic_comment)
|
51
|
+
output.write(line)
|
52
|
+
end
|
53
|
+
elsif magic_comment?(line)
|
54
|
+
output.write(line)
|
55
|
+
else
|
56
|
+
output.write(magic_comment)
|
57
|
+
output.write(line)
|
58
|
+
end
|
59
|
+
while(line = input.gets)
|
60
|
+
output.write(line)
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
if $0 == __FILE__
|
65
|
+
|
66
|
+
rb_files.each do |file|
|
67
|
+
orgfile = rename_to_org(file)
|
68
|
+
print("#{file}: renamed to #{orgfile}.\n")
|
69
|
+
io = StringIO.new
|
70
|
+
File.open(orgfile) do |fin|
|
71
|
+
File.open(file, 'w') { |fout| add_magic_comment(fin, fout) }
|
72
|
+
end
|
73
|
+
print("#{file}: contains magic comment.\n")
|
74
|
+
end
|
75
|
+
#
|
76
|
+
# orgファイルをすべて消すには、以下を有効に。
|
77
|
+
#
|
78
|
+
org_files.each { |f| File.unlink(f) }
|
79
|
+
|
80
|
+
end
|