#!/usr/bin/perl -w
###############################################################################
#
# A test for Spreadsheet::WriteExcel.
#
# Tests for some of the internal method used to write the NOTE record that
# is used in cell comments.
#
# reverse('©'), September 2005, John McNamara, jmcnamara@cpan.org
#
use strict;
use Spreadsheet::WriteExcel;
use Test::More tests => 5;
###############################################################################
#
# Tests setup
#
my $test_file = "temp_test_file.xls";
my $workbook = Spreadsheet::WriteExcel->new($test_file);
my $worksheet = $workbook->add_worksheet();
my $target;
my $result;
my $caption;
my $row;
my $col;
my $obj_id;
my $visible;
my $author;
my $encoding;
my @data;
###############################################################################
#
# Test 1 NOTE. Blank author name.
#
@data = $worksheet->_comment_params(2, 0, 'Test');
$row = $data[0];
$col = $data[1];
$author = $data[4];
$encoding = $data[5];
$visible = $data[6];
$obj_id = 1;
$caption = " \t_store_note()";
$target = join " ", qw(
1C 00 0C 00 02 00 00 00 00 00 01 00 00 00 00 00
);
$result = unpack_record($worksheet->_store_note($row,
$col,
$obj_id,
$author,
$encoding,
$visible,
));
is($result, $target, $caption);
###############################################################################
#
# Test 2 NOTE. Defined author name
#
@data = $worksheet->_comment_params(2, 0, 'Test', author => 'Username');
$row = $data[0];
$col = $data[1];
$author = $data[4];
$encoding = $data[5];
$visible = $data[6];
$obj_id = 1;
$caption = " \t_store_note()";
$target = join " ", qw(
1C 00 14 00 02 00 00 00 00 00 01 00 08 00 00 55
73 65 72 6E 61 6D 65 00
);
$result = unpack_record($worksheet->_store_note($row,
$col,
$obj_id,
$author,
$encoding,
$visible,
));
is($result, $target, $caption);
###############################################################################
#
# Test 3 NOTE. Visible note.
#
@data = $worksheet->_comment_params(4, 2, 'Test', author => 'Username',
visible => 1
);
$row = $data[0];
$col = $data[1];
$author = $data[4];
$encoding = $data[5];
$visible = $data[6];
$obj_id = 1;
$caption = " \t_store_note()";
$target = join " ", qw(
1C 00 14 00 04 00 02 00 02 00 01 00 08 00 00 55
73 65 72 6E 61 6D 65 00
);
$result = unpack_record($worksheet->_store_note($row,
$col,
$obj_id,
$author,
$encoding,
$visible,
));
is($result, $target, $caption);
###############################################################################
#
# Test 3 NOTE. UTF16 author name.
#
$author = pack "n", 0x20Ac; # Euro symbol
@data = $worksheet->_comment_params(4, 2, 'Test', author =>$author,
author_encoding => 1
);
$row = $data[0];
$col = $data[1];
$author = $data[4];
$encoding = $data[5];
$visible = $data[6];
$obj_id = 1;
$caption = " \t_store_note()";
$target = join " ", qw(
1C 00 0E 00 04 00 02 00 00 00 01 00 01 00 01 AC
20 00
);
$result = unpack_record($worksheet->_store_note($row,
$col,
$obj_id,
$author,
$encoding,
$visible,
));
is($result, $target, $caption);
###############################################################################
#
# Test 4 NOTE. UTF8 author name. Perl 5.8 only.
#
SKIP: {
skip " \t_store_note() skipped test requires Perl 5.8 Unicode support", 1
if $] < 5.008;
$author = chr 0x20Ac; # Euro symbol
@data = $worksheet->_comment_params(4, 2, 'Test', author =>$author);
$row = $data[0];
$col = $data[1];
$author = $data[4];
$encoding = $data[5];
$visible = $data[6];
$obj_id = 1;
$caption = " \t_store_note()";
$target = join " ", qw(
1C 00 0E 00 04 00 02 00 00 00 01 00 01 00 01 AC
20 00
);
$result = unpack_record($worksheet->_store_note($row,
$col,
$obj_id,
$author,
$encoding,
$visible,
));
is($result, $target, $caption);
}
###############################################################################
#
# Unpack the binary data into a format suitable for printing in tests.
#
sub unpack_record {
return join ' ', map {sprintf "%02X", $_} unpack "C*", $_[0];
}
# Cleanup
$workbook->close();
unlink $test_file;
__END__