package tests::OutputFormatsHTMLTest; use strict; use base qw/Lire::Test::PluginTestCase/; use Lire::OutputFormats::HTML; use Lire::PluginManager; use Lire::Utils qw/tempdir create_file/; use File::Basename qw/dirname/; use File::Path qw/rmtree /; use Lire::Test::Mock; sub set_up { my $self = $_[0]; $self->SUPER::set_up(); $self->{'testdir'} = dirname( __FILE__ ) ; $self->{'tmpdir'} = tempdir( $self->name() . '_XXXXXX' ); return; } sub tear_down { my $self = $_[0]; $self->SUPER::tear_down(); Lire::Test::Mock->reset_factories(); rmtree( $self->{'tmpdir'} ); return; } sub create_plugin { return new Lire::OutputFormats::HTML(); } sub properties_spec_file { return dirname( __FILE__ ) . "/../Lire/OutputFormats/of_html.xml"; } sub registration_file { return dirname( __FILE__ ) . "/../Lire/OutputFormats/of_html_init"; } sub test_format_report { my $self = $_[0]; $self->test_registration_file(); Lire::Test::Mock->set_mock_factory( 'Lire::ReportParser::HTMLWriter', 'write_report' => '' ); my $html = Lire::PluginManager->get_plugin( 'output_format', 'html' ); $html->format_report( "$self->{'testdir'}/data/test-sqlite.xml", $self->{'tmpdir'}, { 'one_page' => 0, 'xhtml' => 0 } ); my ($writer) = @{Lire::Test::Mock->mock_instances( 'Lire::ReportParser::HTMLWriter' )}; my ( $ob, $report, $dir, %args ) = @{$writer->get_invocation( 'write_report' )}; $self->assert_isa( 'Lire::Report', $report ); $self->assert_str_equals( $self->{'tmpdir'}, $dir ); $self->assert_num_equals( 0, $args{'xhtml'} ); $self->assert_num_equals( 0, $args{'one_page'} ); } sub test_mime_report { my $self = $_[0]; my $page = <A link EOPAGE $self->test_registration_file(); my %args = (); Lire::Test::Mock->set_mock_factory( 'Lire::ReportParser::HTMLWriter', 'write_report' => sub { my $dir = $_[2]; %args = @_[3..$#_]; create_file( "$dir/index.html", $page ); create_file( "$dir/chart1.jpg" ); create_file( "$dir/chart2.png" ); create_file( "$dir/lire.css" ); create_file( "$dir/lire.png" ); } ); my $html = Lire::PluginManager->get_plugin( 'output_format', 'html' ); my $entity = $html->mime_report( "$self->{'testdir'}/data/test-sqlite.xml" ); $self->assert_num_equals( 1, $args{'one_page'} ); $self->assert_isa( 'MIME::Entity', $entity); $self->assert_str_equals( 'multipart/related', $entity->head()->mime_type() ); $self->assert_num_equals( 5, scalar $entity->parts() ); my $part = $entity->parts(0); $self->assert_str_equals( 'text/html', $part->head()->mime_type() ); $self->assert_str_equals( "quoted-printable\n", $part->head()->get( 'content-transfer-encoding' ) ); $self->assert_str_equals( 'utf-8', $part->head()->mime_attr( 'content-type.charset' ) ); $self->assert_str_equals( <bodyhandle()->as_string() ); A link EOF $part = $entity->parts(1); $self->assert_str_equals( 'image/jpeg', $part->head()->mime_type() ); $self->assert_str_equals( "\n", $part->head()->get( 'content-id' ) ); $self->assert_str_equals( "base64\n", $part->head()->get( 'content-transfer-encoding' ) ); $part = $entity->parts(2); $self->assert_str_equals( 'image/png', $part->head()->mime_type() ); $self->assert_str_equals( "\n", $part->head()->get( 'content-id' ) ); $self->assert_str_equals( "base64\n", $part->head()->get( 'content-transfer-encoding' ) ); $part = $entity->parts(3); $self->assert_str_equals( 'text/css', $part->head()->mime_type() ); $self->assert_str_equals( "\n", $part->head()->get( 'content-id' ) ); $self->assert_str_equals( "quoted-printable\n", $part->head()->get( 'content-transfer-encoding' ) ); } 1;