3
###############################################################################
5
# A test for Spreadsheet::WriteExcel.
7
# Tests for valid worksheet name handling.
9
# reverse('�'), March 2005, John McNamara, jmcnamara@cpan.org
15
use Spreadsheet::WriteExcel;
16
use Test::More tests => 69;
19
# Tests for valid and invalid worksheet names
21
# Tests for valid names
22
[ 'PASS', undef, 'No worksheet name' ],
23
[ 'PASS', '', 'Blank worksheet name' ],
24
[ 'PASS', 'Sheet10', 'Valid worksheet name' ],
25
[ 'PASS', 'a' x 31, 'Valid 31 char name' ],
27
# Tests for invalid names
28
[ 'FAIL', 'Sheet1', 'Caught duplicate name' ],
29
[ 'FAIL', 'Sheet2', 'Caught duplicate name' ],
30
[ 'FAIL', 'Sheet3', 'Caught duplicate name' ],
31
[ 'FAIL', 'sheet1', 'Caught case-insensitive name'],
32
[ 'FAIL', 'SHEET1', 'Caught case-insensitive name'],
33
[ 'FAIL', 'sheetz', 'Caught case-insensitive name'],
34
[ 'FAIL', 'SHEETZ', 'Caught case-insensitive name'],
35
[ 'FAIL', 'a' x 32, 'Caught long name' ],
36
[ 'FAIL', '[', 'Caught invalid char' ],
37
[ 'FAIL', ']', 'Caught invalid char' ],
38
[ 'FAIL', ':', 'Caught invalid char' ],
39
[ 'FAIL', '*', 'Caught invalid char' ],
40
[ 'FAIL', '?', 'Caught invalid char' ],
41
[ 'FAIL', '/', 'Caught invalid char' ],
42
[ 'FAIL', '\\', 'Caught invalid char' ],
49
###############################################################################
51
# Tests 1. ASCII tests
53
my $test_file = "temp_test_file.xml";
54
my $workbook = Spreadsheet::WriteExcel->new($test_file);
55
my $worksheet1 = $workbook->add_worksheet(); # Implicit name 'Sheet1'
56
my $worksheet2 = $workbook->add_worksheet(); # Implicit name 'Sheet2'
57
my $worksheet3 = $workbook->add_worksheet('Sheet3');
58
my $worksheet4 = $workbook->add_worksheet('Sheetz');
60
for my $test_ref (@tests1) {
62
my $target = $test_ref->[0];
63
my $sheetname = $test_ref->[1];
64
my $caption = $test_ref->[2];
66
eval {$workbook->_check_sheetname($sheetname)};
68
my $result = $@ ? 'FAIL' : 'PASS';
70
$sheetname = 'undef' unless defined $sheetname;
72
is($result, $target, sprintf " \t%-7s %-28s: %s",
73
'ASCII:', $caption, $sheetname);
79
###############################################################################
81
# Tests 2. UTF16-BE tests
84
$workbook = Spreadsheet::WriteExcel->new($test_file);
85
$worksheet1 = $workbook->add_worksheet(); # Implicit name 'Sheet1'
86
$worksheet2 = $workbook->add_worksheet(); # Implicit name 'Sheet2'
87
$worksheet3 = $workbook->add_worksheet('Sheet3');
88
$worksheet4 = $workbook->add_worksheet("\0S\0h\0e\0e\0t\0z", 1);
90
for my $test_ref (@tests1) {
92
my $target = $test_ref->[0];
93
my $sheetname = $test_ref->[1];
94
my $caption = $test_ref->[2];
96
# Convert ASCII to UTF16-BE if not blank or undef
97
$sheetname = pack "n*", unpack "C*", $sheetname if $sheetname;
99
eval {$workbook->_check_sheetname($sheetname, 1)};
101
my $result = $@ ? 'FAIL' : 'PASS';
103
$sheetname = 'undef' unless defined $sheetname;
105
# Change null byte to \0 for printing
106
$sheetname =~ s/\0/\\0/g;
108
is($result, $target, sprintf " \t%-7s %-28s: %s",
109
'UTF-16:', $caption, $sheetname);
116
###############################################################################
118
# Tests 3. UTF-8 tests
124
my $uni = chr 0x263A;
126
# Tests for valid names
127
[ 'PASS', $uni, 'Unicode char' ],
128
[ 'PASS', $uni x 31, 'Valid 31 char name' ],
130
# Tests for invalid names
131
[ 'FAIL', chr 0x0438, 'Caught duplicate name' ],
132
[ 'FAIL', chr 0x0418, 'Caught case-insensitive name'],
133
[ 'FAIL', $uni x 32, 'Caught long name' ],
134
[ 'FAIL', '[' . $uni, 'Caught invalid char' ],
135
[ 'FAIL', ']' . $uni, 'Caught invalid char' ],
136
[ 'FAIL', ':' . $uni, 'Caught invalid char' ],
137
[ 'FAIL', '*' . $uni, 'Caught invalid char' ],
138
[ 'FAIL', '?' . $uni, 'Caught invalid char' ],
139
[ 'FAIL', '/' . $uni, 'Caught invalid char' ],
140
[ 'FAIL', '\\'. $uni, 'Caught invalid char' ],
144
skip "\tskipped tests requires Perl 5.8 Unicode support", 0 + @tests1 + @tests2 if $] < 5.008;
147
$workbook = Spreadsheet::WriteExcel->new($test_file);
148
$worksheet1 = $workbook->add_worksheet(); # Implicit name 'Sheet1'
149
$worksheet2 = $workbook->add_worksheet(); # Implicit name 'Sheet2'
150
$worksheet3 = $workbook->add_worksheet('Sheet3');
151
$worksheet4 = $workbook->add_worksheet("\0S\0h\0e\0e\0t\0z", 1);
152
my $worksheet5 = $workbook->add_worksheet(chr 0x0438);
155
for my $test_ref (@tests1) {
157
my $target = $test_ref->[0];
158
my $sheetname = $test_ref->[1];
159
my $caption = $test_ref->[2];
162
$sheetname = Encode::encode_utf8($sheetname) if $sheetname;
164
eval {$workbook->_check_sheetname($sheetname)};
166
my $result = $@ ? 'FAIL' : 'PASS';
168
$sheetname = 'undef' unless defined $sheetname;
170
# Change null byte to \0 for printing
171
$sheetname =~ s/\0/\\0/g;
173
is($result, $target, sprintf " \t%-7s %-28s: %s",
174
'UTF-8:', $caption, $sheetname);
178
for my $test_ref (@tests2) {
180
my $target = $test_ref->[0];
181
my $sheetname = $test_ref->[1];
182
my $caption = $test_ref->[2];
184
eval {$workbook->_check_sheetname($sheetname)};
186
my $result = $@ ? 'FAIL' : 'PASS';
188
$sheetname = 'undef' unless defined $sheetname;
190
is($result, $target, sprintf " \t%-7s %-28s: %s",
191
'UTF-8:', $caption, '');