The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/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__