###############################################################################
#
# A test for Spreadsheet::WriteExcel::Chart.
#
# Tests for the set*area() Chart methods.
#
# reverse('©'), January 2010, John McNamara, jmcnamara@cpan.org
#
# prove -I../lib --nocolor -v 63_chart_area_formats.t
use strict;
use Spreadsheet::WriteExcel;
use Test::More tests => 52;
#use Test::More 'no_plan';
###############################################################################
#
# Tests setup
#
my $test_file = 'temp_test_file.xls';
my $workbook = Spreadsheet::WriteExcel->new( $test_file );
my $chart = $workbook->add_chart( type => 'column' );
$chart->{_using_tmpfile} = 0;
my $got_line;
my $got_area;
my $expected_line;
my $expected_area;
my $caption1 = " \tChart: chartarea format - line";
my $caption2 = " \tChart: chartarea format - area";
###############################################################################
#
# 1. Test the chartarea format methods. See the set_*area() properties below.
#
reset_chart( $chart );
$chart->set_chartarea(
color => 'red',
line_color => 'black',
line_pattern => 2,
line_weight => 3,
);
$expected_line = join ' ', qw(
07 10 0C 00 00 00 00 00 01 00 01 00 00 00 08 00
);
$expected_area = join ' ', qw(
0A 10 10 00 FF 00 00 00 00 00 00 00 01 00 00 00
0A 00 08 00
);
( $got_line, $got_area ) = get_chartarea_formats( $chart );
is( $got_line, $expected_line, $caption1 );
is( $got_area, $expected_area, $caption2 );
###############################################################################
#
# 3. Test the chartarea format methods. See the set_*area() properties below.
#
reset_chart( $chart );
$chart->set_chartarea( color => 'red', );
$expected_line = join ' ', qw(
07 10 0C 00 00 00 00 00 05 00 FF FF 08 00 4D 00
);
$expected_area = join ' ', qw(
0A 10 10 00 FF 00 00 00 00 00 00 00 01 00 00 00
0A 00 08 00
);
( $got_line, $got_area ) = get_chartarea_formats( $chart );
is( $got_line, $expected_line, $caption1 );
is( $got_area, $expected_area, $caption2 );
###############################################################################
#
# 5. Test the chartarea format methods. See the set_*area() properties below.
#
reset_chart( $chart );
$chart->set_chartarea( line_color => 'red', );
$expected_line = join ' ', qw(
07 10 0C 00 FF 00 00 00 00 00 FF FF 00 00 0A 00
);
$expected_area = join ' ', qw(
0A 10 10 00 FF FF FF 00 00 00 00 00 00 00 00 00
4E 00 4D 00
);
( $got_line, $got_area ) = get_chartarea_formats( $chart );
is( $got_line, $expected_line, $caption1 );
is( $got_area, $expected_area, $caption2 );
###############################################################################
#
# 7. Test the chartarea format methods. See the set_*area() properties below.
#
reset_chart( $chart );
$chart->set_chartarea( line_pattern => 2, );
$expected_line = join ' ', qw(
07 10 0C 00 00 00 00 00 01 00 FF FF 00 00 4F 00
);
$expected_area = join ' ', qw(
0A 10 10 00 FF FF FF 00 00 00 00 00 00 00 00 00
4E 00 4D 00
);
( $got_line, $got_area ) = get_chartarea_formats( $chart );
is( $got_line, $expected_line, $caption1 );
is( $got_area, $expected_area, $caption2 );
###############################################################################
#
# 9. Test the chartarea format methods. See the set_*area() properties below.
#
reset_chart( $chart );
$chart->set_chartarea( line_weight => 3, );
$expected_line = join ' ', qw(
07 10 0C 00 00 00 00 00 00 00 01 00 00 00 4F 00
);
$expected_area = join ' ', qw(
0A 10 10 00 FF FF FF 00 00 00 00 00 00 00 00 00
4E 00 4D 00
);
( $got_line, $got_area ) = get_chartarea_formats( $chart );
is( $got_line, $expected_line, $caption1 );
is( $got_area, $expected_area, $caption2 );
###############################################################################
#
# 11. Test the chartarea format methods. See the set_*area() properties below.
#
reset_chart( $chart );
$chart->set_chartarea(
color => 'red',
line_color => 'black',
);
$expected_line = join ' ', qw(
07 10 0C 00 00 00 00 00 00 00 FF FF 00 00 08 00
);
$expected_area = join ' ', qw(
0A 10 10 00 FF 00 00 00 00 00 00 00 01 00 00 00
0A 00 08 00
);
( $got_line, $got_area ) = get_chartarea_formats( $chart );
is( $got_line, $expected_line, $caption1 );
is( $got_area, $expected_area, $caption2 );
###############################################################################
#
# 13. Test the chartarea format methods. See the set_*area() properties below.
#
reset_chart( $chart );
$chart->set_chartarea(
color => 'red',
line_pattern => 2,
);
$expected_line = join ' ', qw(
07 10 0C 00 00 00 00 00 01 00 FF FF 00 00 4F 00
);
$expected_area = join ' ', qw(
0A 10 10 00 FF 00 00 00 00 00 00 00 01 00 00 00
0A 00 08 00
);
( $got_line, $got_area ) = get_chartarea_formats( $chart );
is( $got_line, $expected_line, $caption1 );
is( $got_area, $expected_area, $caption2 );
###############################################################################
#
# 15. Test the chartarea format methods. See the set_*area() properties below.
#
reset_chart( $chart );
$chart->set_chartarea(
color => 'red',
line_weight => 3,
);
$expected_line = join ' ', qw(
07 10 0C 00 00 00 00 00 00 00 01 00 00 00 4F 00
);
$expected_area = join ' ', qw(
0A 10 10 00 FF 00 00 00 00 00 00 00 01 00 00 00
0A 00 08 00
);
( $got_line, $got_area ) = get_chartarea_formats( $chart );
is( $got_line, $expected_line, $caption1 );
is( $got_area, $expected_area, $caption2 );
###############################################################################
#
# Set some variables for embedded chart tests.
#
$caption1 = " \tChart: embedded chartarea format - line";
$caption2 = " \tChart: embedded chartarea format - area";
$chart->{_embedded} = 1;
###############################################################################
#
# 17. Test the chartarea format methods. See the set_*area() properties below.
#
reset_chart( $chart, 1 );
$chart->set_chartarea();
$expected_line = join ' ', qw(
07 10 0C 00 00 00 00 00 00 00 00 00 09 00 4D 00
);
$expected_area = join ' ', qw(
0A 10 10 00 FF FF FF 00 00 00 00 00 01 00 01 00
4E 00 4D 00
);
( $got_line, $got_area ) = get_chartarea_formats( $chart );
is( $got_line, $expected_line, $caption1 );
is( $got_area, $expected_area, $caption2 );
###############################################################################
#
# 19. Test the chartarea format methods. See the set_*area() properties below.
#
reset_chart( $chart, 1 );
$chart->set_chartarea(
color => 'red',
line_color => 'black',
line_pattern => 2,
line_weight => 3,
);
$expected_line = join ' ', qw(
07 10 0C 00 00 00 00 00 01 00 01 00 00 00 08 00
);
$expected_area = join ' ', qw(
0A 10 10 00 FF 00 00 00 00 00 00 00 01 00 00 00
0A 00 08 00
);
( $got_line, $got_area ) = get_chartarea_formats( $chart );
is( $got_line, $expected_line, $caption1 );
is( $got_area, $expected_area, $caption2 );
###############################################################################
#
# 21. Test the chartarea format methods. See the set_*area() properties below.
#
reset_chart( $chart, 1 );
$chart->set_chartarea( color => 'red', );
$expected_line = join ' ', qw(
07 10 0C 00 00 00 00 00 00 00 FF FF 09 00 4D 00
);
$expected_area = join ' ', qw(
0A 10 10 00 FF 00 00 00 00 00 00 00 01 00 00 00
0A 00 08 00
);
( $got_line, $got_area ) = get_chartarea_formats( $chart );
is( $got_line, $expected_line, $caption1 );
is( $got_area, $expected_area, $caption2 );
###############################################################################
#
# 23. Test the chartarea format methods. See the set_*area() properties below.
#
reset_chart( $chart, 1 );
$chart->set_chartarea( line_color => 'red', );
$expected_line = join ' ', qw(
07 10 0C 00 FF 00 00 00 00 00 FF FF 00 00 0A 00
);
$expected_area = join ' ', qw(
0A 10 10 00 FF FF FF 00 00 00 00 00 01 00 01 00
4E 00 4D 00
);
( $got_line, $got_area ) = get_chartarea_formats( $chart );
is( $got_line, $expected_line, $caption1 );
is( $got_area, $expected_area, $caption2 );
###############################################################################
#
# 25. Test the chartarea format methods. See the set_*area() properties below.
#
reset_chart( $chart, 1 );
$chart->set_chartarea( line_pattern => 2, );
$expected_line = join ' ', qw(
07 10 0C 00 00 00 00 00 01 00 FF FF 00 00 4F 00
);
$expected_area = join ' ', qw(
0A 10 10 00 FF FF FF 00 00 00 00 00 01 00 01 00
4E 00 4D 00
);
( $got_line, $got_area ) = get_chartarea_formats( $chart );
is( $got_line, $expected_line, $caption1 );
is( $got_area, $expected_area, $caption2 );
###############################################################################
#
# 27. Test the chartarea format methods. See the set_*area() properties below.
#
reset_chart( $chart, 1 );
$chart->set_chartarea( line_weight => 3, );
$expected_line = join ' ', qw(
07 10 0C 00 00 00 00 00 00 00 01 00 00 00 4F 00
);
$expected_area = join ' ', qw(
0A 10 10 00 FF FF FF 00 00 00 00 00 01 00 01 00
4E 00 4D 00
);
( $got_line, $got_area ) = get_chartarea_formats( $chart );
is( $got_line, $expected_line, $caption1 );
is( $got_area, $expected_area, $caption2 );
###############################################################################
#
# 29. Test the chartarea format methods. See the set_*area() properties below.
#
reset_chart( $chart, 1 );
$chart->set_chartarea(
color => 'red',
line_color => 'black',
);
$expected_line = join ' ', qw(
07 10 0C 00 00 00 00 00 00 00 FF FF 00 00 08 00
);
$expected_area = join ' ', qw(
0A 10 10 00 FF 00 00 00 00 00 00 00 01 00 00 00
0A 00 08 00
);
( $got_line, $got_area ) = get_chartarea_formats( $chart );
is( $got_line, $expected_line, $caption1 );
is( $got_area, $expected_area, $caption2 );
###############################################################################
#
# 31. Test the chartarea format methods. See the set_*area() properties below.
#
reset_chart( $chart, 1 );
$chart->set_chartarea(
color => 'red',
line_pattern => 2,
);
$expected_line = join ' ', qw(
07 10 0C 00 00 00 00 00 01 00 FF FF 00 00 4F 00
);
$expected_area = join ' ', qw(
0A 10 10 00 FF 00 00 00 00 00 00 00 01 00 00 00
0A 00 08 00
);
( $got_line, $got_area ) = get_chartarea_formats( $chart );
is( $got_line, $expected_line, $caption1 );
is( $got_area, $expected_area, $caption2 );
###############################################################################
#
# 33. Test the chartarea format methods. See the set_*area() properties below.
#
reset_chart( $chart, 1 );
$chart->set_chartarea(
color => 'red',
line_weight => 3,
);
$expected_line = join ' ', qw(
07 10 0C 00 00 00 00 00 00 00 01 00 00 00 4F 00
);
$expected_area = join ' ', qw(
0A 10 10 00 FF 00 00 00 00 00 00 00 01 00 00 00
0A 00 08 00
);
( $got_line, $got_area ) = get_chartarea_formats( $chart );
is( $got_line, $expected_line, $caption1 );
is( $got_area, $expected_area, $caption2 );
###############################################################################
#
# Set some variables for embedded chart tests.
#
$caption1 = " \tChart: plotarea format - line";
$caption2 = " \tChart: plotarea format - area";
$chart->{_embedded} = 0;
###############################################################################
#
# 35. Test the plotarea format methods. See the set_*area() properties below.
#
reset_chart( $chart );
$chart->set_plotarea();
$expected_line = join ' ', qw(
07 10 0C 00 80 80 80 00 00 00 00 00 00 00 17 00
);
$expected_area = join ' ', qw(
0A 10 10 00 C0 C0 C0 00 00 00 00 00 01 00 00 00
16 00 4F 00
);
( $got_line, $got_area ) = get_plotarea_formats( $chart );
is( $got_line, $expected_line, $caption1 );
is( $got_area, $expected_area, $caption2 );
###############################################################################
#
# 37. Test the plotarea format methods. See the set_*area() properties below.
#
reset_chart( $chart );
$chart->set_plotarea(
color => 'red',
line_color => 'black',
line_pattern => 2,
line_weight => 3,
);
$expected_line = join ' ', qw(
07 10 0C 00 00 00 00 00 01 00 01 00 00 00 08 00
);
$expected_area = join ' ', qw(
0A 10 10 00 FF 00 00 00 00 00 00 00 01 00 00 00
0A 00 08 00
);
( $got_line, $got_area ) = get_plotarea_formats( $chart );
is( $got_line, $expected_line, $caption1 );
is( $got_area, $expected_area, $caption2 );
###############################################################################
#
# 39. Test the plotarea format methods. See the set_*area() properties below.
#
reset_chart( $chart );
$chart->set_plotarea( color => 'red', );
$expected_line = join ' ', qw(
07 10 0C 00 80 80 80 00 00 00 00 00 00 00 17 00
);
$expected_area = join ' ', qw(
0A 10 10 00 FF 00 00 00 00 00 00 00 01 00 00 00
0A 00 08 00
);
( $got_line, $got_area ) = get_plotarea_formats( $chart );
is( $got_line, $expected_line, $caption1 );
is( $got_area, $expected_area, $caption2 );
###############################################################################
#
# 41. Test the plotarea format methods. See the set_*area() properties below.
#
reset_chart( $chart );
$chart->set_plotarea( line_color => 'red', );
$expected_line = join ' ', qw(
07 10 0C 00 FF 00 00 00 00 00 00 00 00 00 0A 00
);
$expected_area = join ' ', qw(
0A 10 10 00 C0 C0 C0 00 00 00 00 00 01 00 00 00
16 00 08 00
);
( $got_line, $got_area ) = get_plotarea_formats( $chart );
is( $got_line, $expected_line, $caption1 );
is( $got_area, $expected_area, $caption2 );
###############################################################################
#
# 43. Test the plotarea format methods. See the set_*area() properties below.
#
reset_chart( $chart );
$chart->set_plotarea( line_pattern => 2, );
$expected_line = join ' ', qw(
07 10 0C 00 80 80 80 00 01 00 00 00 00 00 17 00
);
$expected_area = join ' ', qw(
0A 10 10 00 C0 C0 C0 00 00 00 00 00 01 00 00 00
16 00 08 00
);
( $got_line, $got_area ) = get_plotarea_formats( $chart );
is( $got_line, $expected_line, $caption1 );
is( $got_area, $expected_area, $caption2 );
###############################################################################
#
# 45. Test the plotarea format methods. See the set_*area() properties below.
#
reset_chart( $chart );
$chart->set_plotarea( line_weight => 3, );
$expected_line = join ' ', qw(
07 10 0C 00 80 80 80 00 00 00 01 00 00 00 17 00
);
$expected_area = join ' ', qw(
0A 10 10 00 C0 C0 C0 00 00 00 00 00 01 00 00 00
16 00 08 00
);
( $got_line, $got_area ) = get_plotarea_formats( $chart );
is( $got_line, $expected_line, $caption1 );
is( $got_area, $expected_area, $caption2 );
###############################################################################
#
# 47. Test the plotarea format methods. See the set_*area() properties below.
#
reset_chart( $chart );
$chart->set_plotarea(
color => 'red',
line_color => 'black',
);
$expected_line = join ' ', qw(
07 10 0C 00 00 00 00 00 00 00 00 00 00 00 08 00
);
$expected_area = join ' ', qw(
0A 10 10 00 FF 00 00 00 00 00 00 00 01 00 00 00
0A 00 08 00
);
( $got_line, $got_area ) = get_plotarea_formats( $chart );
is( $got_line, $expected_line, $caption1 );
is( $got_area, $expected_area, $caption2 );
###############################################################################
#
# 49. Test the plotarea format methods. See the set_*area() properties below.
#
reset_chart( $chart );
$chart->set_plotarea(
color => 'red',
line_pattern => 2,
);
$expected_line = join ' ', qw(
07 10 0C 00 80 80 80 00 01 00 00 00 00 00 17 00
);
$expected_area = join ' ', qw(
0A 10 10 00 FF 00 00 00 00 00 00 00 01 00 00 00
0A 00 08 00
);
( $got_line, $got_area ) = get_plotarea_formats( $chart );
is( $got_line, $expected_line, $caption1 );
is( $got_area, $expected_area, $caption2 );
###############################################################################
#
# 51. Test the plotarea format methods. See the set_*area() properties below.
#
reset_chart( $chart );
$chart->set_plotarea(
color => 'red',
line_weight => 3,
);
$expected_line = join ' ', qw(
07 10 0C 00 80 80 80 00 00 00 01 00 00 00 17 00
);
$expected_area = join ' ', qw(
0A 10 10 00 FF 00 00 00 00 00 00 00 01 00 00 00
0A 00 08 00
);
( $got_line, $got_area ) = get_plotarea_formats( $chart );
is( $got_line, $expected_line, $caption1 );
is( $got_area, $expected_area, $caption2 );
###############################################################################
#
# Utility functions used by the test suite.
#
###############################################################################
###############################################################################
#
# Reset the chart data for testing.
#
sub reset_chart {
my $chart = shift;
my $embedded = shift;
# Reset the chart data.
$chart->{_data} = '';
$chart->_set_default_properties();
if ( $embedded ) {
$chart->_set_embedded_config_data();
}
}
###############################################################################
#
# Extract Line and Area format records from the Chartarea Frame stream.
#
sub get_chartarea_formats {
$chart = shift;
$chart->_store_chartarea_frame_stream();
my $line = unpack_record( substr $chart->{_data}, 12, 16 );
my $area = unpack_record( substr $chart->{_data}, 28, 20 );
return ( $line, $area );
}
###############################################################################
#
# Extract Line and Area format records from the Chartarea Frame stream.
#
sub get_plotarea_formats {
$chart = shift;
$chart->_store_plotarea_frame_stream();
my $line = unpack_record( substr $chart->{_data}, 12, 16 );
my $area = unpack_record( substr $chart->{_data}, 28, 20 );
return ( $line, $area );
}
###############################################################################
#
# Unpack the binary data into a format suitable for printing in tests.
#
sub unpack_record {
return join ' ', map { sprintf '%02X', $_ } unpack 'C*', shift;
}
###############################################################################
#
# Clean up.
#
$workbook->close();
unlink $test_file;
__END__