package tests::ReportParserAsciiWriterTest;

use base qw/Lire::Test::TestCase tests::TestStoreFixture/;

use Lire::ReportParser::AsciiWriter;
use Lire::Utils qw/tempfile/;

sub set_up {
    my $self = $_[0];
    $self->SUPER::set_up();

    $self->init();

    return;
}

sub tear_down {
    my $self = $_[0];
    $self->SUPER::tear_down();

    unlink $self->{'unlink'}
      if $self->{'unlink'};

    return;
}

sub test_new {
    my $self = $_[0];

    my $parser = new Lire::ReportParser::AsciiWriter();
    $self->assert_isa( 'Lire::ReportParser::AsciiWriter', $parser );
    $self->assert_num_equals( 74, $parser->{'columns'} );
    $self->assert_num_equals( 180, $parser->{'max_name_len'} );
    $self->assert_str_equals( \*STDOUT, $parser->{'_fh'} );
    $self->assert_str_equals( '', $parser->{'_encoding'} );

    my $fh = tempfile();
    $parser = new Lire::ReportParser::AsciiWriter( 'output' => $fh,
                                                   'encoding' => 'UTF-8',
                                                   'columns' => 70,
                                                   'max_name_length' => 100,
                                                 );
    $self->assert_isa( 'Lire::ReportParser::AsciiWriter', $parser );
    $self->assert_num_equals( 70, $parser->{'columns'} );
    $self->assert_num_equals( 100, $parser->{'max_name_len'} );
    $self->assert_str_equals( $fh, $parser->{'_fh'} );
    $self->assert_str_equals( 'UTF-8', $parser->{'_encoding'} );
}

sub test_parsefile {
    my $self = $_[0];

    my ( $fh, $file ) = tempfile( 'report_XXXXXX', 'SUFFIX' => '.txt' );
    $self->{'unlink'} = $file;

    my $parser = new Lire::ReportParser::AsciiWriter( 'output' => $fh,
                                                      'encoding' => 'UTF-16LE'
                                                    );
    $parser->parsefile( "$self->{'testdir'}/data/test-utf8.xml" );
    close $fh;

    open my $exp_fh, "$self->{'testdir'}/data/test-utf-16le.txt"
      or die "open failed: $!";
    open my $gen_fh, $file
      or die "open failed: $!";

    local $/ = undef;
    my $expected = <$exp_fh>;
    my $generated = <$gen_fh>;
    $expected =~ s/\0/./g;
    $generated =~ s/\0/./g;
    $self->assert_str_equals( $expected, $generated );
}

1;


syntax highlighted by Code2HTML, v. 0.9.1