package tests::TestDlfAnalyserTestCaseTest;

use strict;

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

use Lire::DlfAnalyser;
use Lire::Test::DlfAnalyserTestCase;

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

    return $self;
}

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

    $self->{'analyser'} =
      new Class::Inner( 'parent' => 'Lire::DlfAnalyser',
                        methods =>
                        {
                         'new' => sub { bless {}, shift },
                         'name' => sub { 'myanalyser' },
                         'src_schema' => sub { 'test' },
                         'dst_schema' => sub { 'test-derived' },
                        } );

    $self->{'test'} =
      new Class::Inner( 'parent' => 'Lire::Test::DlfAnalyserTestCase',
                        'methods' =>
                        {
                         'new' => sub { bless {}, shift },
                         'create_analyser' => sub { $self->{'analyser'} }
                        } );
    return;
}

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

    return;
}

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

    my $process = $self->{'test'}->create_mock_process();
    $self->assert_isa( 'Lire::Test::MockDlfAnalyserProcess', $process );
    $self->assert_str_equals( $self->{'analyser'},
                              $process->{'_analyser_instance'} );
    $self->assert_str_equals( $self->{'analyser'},
                              $process->analyser_instance() );
    $self->assert_num_equals( 0, $process->{'_dlf_count'} );
    $self->assert_num_equals( 0, $process->{'_error_count'} );
    $self->assert_deep_equals( [], $process->{'_errors'} );
    $self->assert_deep_equals( [], $process->{'_dlf'} );
    $self->assert_null( $process->dlf_source() );

    my $store = bless {}, 'Lire::DlfStore';
    $process = $self->{'test'}->create_mock_process( $store );
    $self->assert_str_equals( $store, $process->dlf_store() );
}

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

    my $process = $self->{'test'}->create_mock_process();
    $self->assert_isa( 'Lire::Test::MockDlfAnalyserProcess', $process );
    $process->error( 'Test error' );
    $self->assert_deep_equals( [ 'Test error' ],
                               $process->{'_errors'} );

    $process->error( 'Another error' );
    $self->assert_deep_equals( [ 'Test error', 'Another error' ],
                               $process->errors() );
    $self->assert_num_equals( 2, $process->error_count() );
}

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

    my $process = $self->{'test'}->create_mock_process();
    $self->assert_isa( 'Lire::Test::MockDlfAnalyserProcess', $process );

    my $dlf = { 'connection_id' => 'An id' };
    $process->write_dlf( $dlf );
    $self->assert_deep_equals( [ [ $dlf ] ], $process->{'_dlf'} );
    $self->assert_str_not_equals( $dlf, $process->{'_dlf'}[0][0] );

    $dlf->{'time_start'} = time;
    $process->write_dlf( $dlf, [ 1, 2, 3 ] );
    $self->assert_deep_equals( [ [{ 'connection_id' => 'An id' }], 
                                 [ $dlf, 1, 2, 3 ] ],
                                 $process->dlf()  );
    $self->assert_num_equals( 2, $process->dlf_count() );
}

1;


syntax highlighted by Code2HTML, v. 0.9.1