package tests::ErrorTest;

use strict;

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

use Lire::Error qw/ an_error_occured
                    directory_already_exists file_empty
                    invalid_option missing_command
                    missing_argument missing_argument_usage
                    too_many_arguments unknown_command_usage /;

sub new {
    my $self = shift()->SUPER::new( @_ );

    return $self;
}

sub set_up {
    my $self = shift;

    $self->SUPER::set_up( @_ );

    return;
}

sub tear_down {
    my $self = shift;

    $self->SUPER::tear_down( @_ );

    return;
}

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

    $self->assert_dies( qr/missing \'error\' parameter/,
                        sub { an_error_occured() } );
    $self->assert_str_equals( "An error occured: wawa was dancing reggae",
                              an_error_occured( 'wawa was dancing reggae' ) );

    return;
}

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

    $self->assert_dies( qr/missing \'option\' parameter/,
                        sub { invalid_option() } );
    $self->assert_str_equals( "invalid option: 'optional_wawa'",
                              invalid_option( 'optional_wawa' ) );

    return;
}

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

    $self->assert_dies( qr/missing \'argument\' parameter/,
                        sub { missing_argument() } );
    $self->assert_str_equals( "missing 'wawa' argument",
                              missing_argument( 'wawa' ) );

    return;
}

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

    $self->assert_dies( qr/missing \'argument\' parameter/,
                        sub { missing_argument_usage() } );
    $self->assert_str_equals( "Missing 'wawa' argument.\n",
                              missing_argument_usage( 'wawa' ) );

    return;
}

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

    $self->assert_dies( qr/missing \'directory\' parameter/,
                        sub { directory_already_exists() } );
    $self->assert_str_equals( "directory 'wawadir' already exists",
                              directory_already_exists( 'wawadir' ) );

    return;
}

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

    $self->assert_dies( qr/missing \'file\' parameter/,
                        sub { file_empty() } );
    $self->assert_str_equals( "file 'wawa_file' is empty",
                              file_empty( 'wawa_file' ) );

    return;
}

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

    $self->assert_dies( qr/missing \'command\' parameter/,
                        sub { unknown_command_usage() } );
    $self->assert_str_equals( "Unknown command: 'zoukwawa'.\n",
                              unknown_command_usage( 'zoukwawa' ) );

    return;
}

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

    $self->assert_str_equals( "too many arguments", too_many_arguments() );

    return;
}

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

    $self->assert_dies( qr/missing \'command\' parameter/,
                        sub { missing_command() } );
    $self->assert_str_equals( "missing 'wawa' command",
                              missing_command( 'wawa' ) );
    $self->assert_str_equals( "missing Topnotch 'wawa' command",
                              missing_command( 'wawa', 'Topnotch' ) );

    return;
}

1;


syntax highlighted by Code2HTML, v. 0.9.1