#!/usr/bin/perl # ########################################################################## # # Title: Build time tests of DS/Importer.pm # Creation date: 2007-04-16 # Author: Michael Zedeler # Description: Runs tests of DS/Importer.pm # File: $Source: /data/cvs/lib/DSlib/t/35_importer.t,v $ # Repository: kronhjorten # State: $State: Exp $ # Documentation: inline # Recepient: - # ########################################################################## # use strict; use warnings; use Test::More tests => 47; BEGIN { $| = 1; $^W = 1; } use_ok( 'DS::Importer' ); my $importer; $importer = new DS::Importer(); ok( $importer ); # Shouldn't be possible to call importer without target eval { $importer->execute(); }; ok( defined( $@ ) and $@ ne ''); # Test if importer imports correctly $importer = new ImporterTest(10); my $counter = new CountTarget(); isa_ok( $counter, 'CountTarget' ); { # Suppress type check warning when attaching source and target without types local $SIG{__WARN__} = sub {}; $importer->attach_target( $counter ); } is_deeply( $importer->_fetch(), {count => 1} ); $importer->pass_row( $importer->_fetch() ); is( $counter->{row}->{count}, 2); isnt( $counter->{eos}, 1); $importer->execute(); is( $importer->{counter}, 11 ); is( $counter->{row}->{count}, 10); is( $counter->{eos}, 1); is( $importer->_fetch, undef ); package ImporterTest; use base qw{ DS::Importer }; sub new { my( $class, $max ) = @_; my $self = $class->SUPER::new(); $self->{counter} = 1; $self->{max} = $max; return $self; } sub _fetch { my( $self ) = @_; if( $self->{counter} > $self->{max} ) { return undef; } else { return {count => $self->{counter}++}; } } 1; package CountTarget; use base qw{ DS::Target }; sub new { my( $class ) = @_; my $self = $class->SUPER::new(); return $self; } sub receive_row { my( $self, $row ) = @_; # Check that we didn't get end of stream before # ($self->{eos} is undef until set further down below when end of stream # has been received main::is( $self->{eos}, undef ); # Got end of stream event? if( $row ) { # Check that we got a hash ref main::is( ref( $row ), 'HASH' ); # Check that count has been set main::isnt( $row->{count}, undef ); # Check that the counter has increased since last call if( $self->{row} ) { main::is( $row->{count}, $self->{row}->{count} + 1); } $self->{row} = {%$row}; } else { $self->{eos} = 1; } } 1;