DSlib/t/38_typepassthrough.t
#!/usr/bin/perl
# ########################################################################## #
# Title: Build time tests of DS::Transformer::TypePassthrough.pm
# Creation date: 2007-04-16
# Author: Michael Zedeler
# Description: Tests DS::Transformer::TypePassthrough
# File: $Source: /data/cvs/lib/DSlib/t/38_typepassthrough.t,v $
# Repository: kronhjorten
# State: $State: Exp $
# Documentation: inline
# Recepient: -
# ########################################################################## #
use strict;
use warnings;
use Test::More tests => 19;
BEGIN {
$| = 1;
$^W = 1;
}
use_ok('DS::Transformer::TypePassthrough');
use DS::Source;
use DS::Target;
use DS::TypeSpec;
use DS::TypeSpec::Field;
my $typespec = new DS::TypeSpec('mytype',
[ new DS::TypeSpec::Field( 'pk1' ),
new DS::TypeSpec::Field( 'monkeys' )]
);
my $other_typespec = new DS::TypeSpec('mytype',
[ new DS::TypeSpec::Field( 'pk1' ),
new DS::TypeSpec::Field( 'elephants' )]
);
ok( not $typespec->contains( $other_typespec ) );
ok( not $other_typespec->contains( $typespec ) );
my $source;
my $target;
#
# Tests that tries to attach and detach connectors
# checking that they are properly detached
#
$source = new DS::Source();
$source->out_type( $typespec );
$target = new DS::Target();
$target->in_type( $typespec );
my $transformer;
for( $transformer ) {
$_ = new DS::Transformer::TypePassthrough;
ok( $_ );
isa_ok( $_ => 'DS::Transformer::TypePassthrough' );
eval {
$_->in_type( $typespec );
};
isnt( $@, '', 'Setting in_type should throw exception' );
eval {
$_->out_type( $typespec );
};
isnt( $@, '', 'Setting out_type should throw exception' );
eval {
$_->attach_source( $source )
};
is( $@, '', 'Attaching source should not throw exception' );
# Double check that types are the same
ok( $_->out_type->contains( $source->out_type ) );
ok( $source->out_type->contains( $_->out_type ) );
ok( $source->out_type->{name} eq $_->out_type->{name} );
eval {
$_->attach_target( $target );
};
is( $@, '', 'Attaching target should not throw exception' );
# Double check that types are the same
ok( $_->in_type->contains( $target->in_type ) );
ok( $target->in_type->contains( $_->in_type ) );
ok( $target->in_type->{name} eq $_->in_type->{name} );
# Now attach target first and source second
$_ = new DS::Transformer::TypePassthrough;
eval {
$_->attach_target( $target );
};
is( $@, '', 'Attaching target should not throw exception' );
eval {
$_->attach_source( $source )
};
is( $@, '', 'Attaching source should not throw exception' );
# Second part
# Testing that incompatible types leads to exceptions.
$target->in_type( $other_typespec );
# Start over with a new pt transformer
$_ = new DS::Transformer::TypePassthrough;
$_->attach_source( $source );
eval {
$_->attach_target( $target );
};
isnt( $@, '' );
# Start over with a new pt transformer
$_ = new DS::Transformer::TypePassthrough;
$_->attach_target( $target );
eval {
$_->attach_source( $source );
};
isnt( $@, '' );
}