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.
#
# Check that max/min columns of the Excel ROW record are written correctly.
#
# reverse('©'), October 2007, John McNamara, jmcnamara@cpan.org
#


use strict;

use Spreadsheet::WriteExcel;
use Test::More tests => 7;


###############################################################################
#
# Tests setup
#
my $test_file   = "temp_test_file.xls";
my $workbook    = Spreadsheet::WriteExcel->new($test_file);
my $worksheet;
my @rows;
my @tests;
my $row;
my $col1;
my $col2;

$workbook->compatibility_mode(1);



###############################################################################
#
# Test 1.
#
$row  = 1;
$col1 = 0;
$col2 = 0;
$worksheet = $workbook->add_worksheet();
$worksheet->set_row($row, 15);
push @tests,    [
                    " \tset_row(): row = $row, col1 = $col1, col2 = $col2",
                    {
                        col_min => 0,
                        col_max => 0,
                    }
                ];

###############################################################################
#
# Test 2.
#
$row  = 2;
$col1 = 0;
$col2 = 0;
$worksheet = $workbook->add_worksheet();
$worksheet->write($row, $col1, 'Test');
$worksheet->write($row, $col2, 'Test');
push @tests,    [
                    " \twrite():   row = $row, col1 = $col1, col2 = $col2",
                    {
                        col_min => 0,
                        col_max => 1,
                    }
                ];


###############################################################################
#
# Test 3.
#
$row  = 3;
$col1 = 0;
$col2 = 1;
$worksheet = $workbook->add_worksheet();
$worksheet->write($row, $col1, 'Test');
$worksheet->write($row, $col2, 'Test');
push @tests,    [
                    " \twrite():   row = $row, col1 = $col1, col2 = $col2",
                    {
                        col_min => 0,
                        col_max => 2,
                    }
                ];


###############################################################################
#
# Test 4.
#
$row  = 4;
$col1 = 1;
$col2 = 1;
$worksheet = $workbook->add_worksheet();
$worksheet->write($row, $col1, 'Test');
$worksheet->write($row, $col2, 'Test');
push @tests,    [
                    " \twrite():   row = $row, col1 = $col1, col2 = $col2",
                    {
                        col_min => 1,
                        col_max => 2,
                    }
                ];


###############################################################################
#
# Test 5.
#
$row  = 5;
$col1 = 1;
$col2 = 255;
$worksheet = $workbook->add_worksheet();
$worksheet->write($row, $col1, 'Test');
$worksheet->write($row, $col2, 'Test');
push @tests,    [
                    " \twrite():   row = $row, col1 = $col1, col2 = $col2",
                    {
                        col_min => 1,
                        col_max => 256,
                    }
                ];


###############################################################################
#
# Test 6.
#
$row  = 6;
$col1 = 255;
$col2 = 255;
$worksheet = $workbook->add_worksheet();
$worksheet->write($row, $col1, 'Test');
$worksheet->write($row, $col2, 'Test');
push @tests,    [
                    " \twrite():   row = $row, col1 = $col1, col2 = $col2",
                    {
                        col_min => 255,
                        col_max => 256,
                    }
                ];

###############################################################################
#
# Test 7.
#
$row  = 7;
$col1 = 2;
$col2 = 9;
$worksheet = $workbook->add_worksheet();
$worksheet->set_row($row, 15);
$worksheet->write($row, $col1, 'Test');
$worksheet->write($row, $col2, 'Test');
push @tests,    [
                    " \tset_row + write():   row = $row, col1 = $col1, col2 = $col2",
                    {
                        col_min => 2,
                        col_max => 10,
                    }
                ];




# Read in the row records
$workbook->{_biff_only} = 1;
$workbook->close();

open    XLSFILE, $test_file or die "Couldn't open test file\n";
binmode XLSFILE;

my $header;
my $data;
while (read XLSFILE, $header, 4) {

    my ($record, $length) = unpack 'vv', $header;
    read XLSFILE, $data, $length;

    # Read the row records only.
    next unless $record == 0x0208;
    my ($col_min, $col_max) = unpack 'x2 vv', $data;

    push @rows,
                {
                    col_min => $col_min,
                    col_max => $col_max,
                };
}


for my $i (0 .. @tests -1) {

    is_deeply($rows[$i], $tests[$i]->[1], $tests[$i]->[0]);
}





# Clean up.
unlink $test_file;

__END__