The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
use Test::More tests => 36;

use strict;
use warnings;

use_ok( 'Image::TextMode::SAUCE' );

{
    my $sauce = Image::TextMode::SAUCE->new;
    my $file  = 't/core/data/file-nocomments.src';

    open( my $fh, '<', $file ) or die $!;
    my $expect_write = do { local $/; <$fh> };
    $sauce->read( $fh );
    close( $fh );

    isa_ok( $sauce, 'Image::TextMode::SAUCE' );

    my %expected = (
        has_sauce     => 1,
        author        => 'Test Author',
        title         => 'Test Title',
        group         => 'Test Group',
        datatype_id   => 1,
        filetype_id   => 7,
        datatype      => 'Character',
        filetype      => 'Source',
        date          => 20080915,
        tinfo1_name   => undef,
        tinfo2_name   => undef,
        tinfo3_name   => undef,
        tinfo4_name   => undef,
        flags         => 'None',
        comment_count => 0,
    );

    for my $method ( keys %expected ) {
        is( $sauce->$method, $expected{ $method }, $method );
    }

    my $output = '';
    open( $fh, '>', \$output );
    $sauce->write( $fh );
    close( $fh );

    is( $output, $expect_write, 'write()' );
}

{
    my $sauce = Image::TextMode::SAUCE->new;
    my $file  = 't/core/data/file-comments.src';

    open( my $fh, '<', $file ) or die $!;
    my $expect_write = do { local $/; <$fh> };
    $sauce->read( $fh );
    close( $fh );

    isa_ok( $sauce, 'Image::TextMode::SAUCE' );

    my %expected = (
        has_sauce     => 1,
        author        => 'Test Author',
        title         => 'Test Title',
        group         => 'Test Group',
        datatype_id   => 1,
        filetype_id   => 7,
        datatype      => 'Character',
        filetype      => 'Source',
        date          => 20080915,
        tinfo1_name   => undef,
        tinfo2_name   => undef,
        tinfo3_name   => undef,
        tinfo4_name   => undef,
        flags         => 'None',
        comment_count => 2,
    );

    for my $method ( keys %expected ) {
        is( $sauce->$method, $expected{ $method }, $method );
    }

    is_deeply( $sauce->comments, [ 'Test', 'Comments' ] );

    my $output = '';
    open( $fh, '>', \$output );
    $sauce->write( $fh );
    close( $fh );

    is( $output, $expect_write, 'write()' );
}