The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#########################

use Test;
BEGIN { plan tests => 11 } ;
use Object::MultiType ;

#########################
{

  my $obj = Object::MultiType->new(
  code => sub { return ${$_[0]} } ,
  ) ;
  
  my $saver = &$obj(args) ;
  
  ok( eval { $saver->is_saver } ) ;
  
  my $self = scalar(${$$obj->{SUBCODE}{self}}) ;
  
  ok($self,undef) ;
  
}
#########################
{
  my $scalar = 'abc' ;
  my @array  = qw(x y z);
  my %hash   = (A => 1 , B => 2) ;

  my $obj = Object::MultiType->new(
  scalar => \$scalar ,
  array  => \@array ,
  hash   => \%hash ,
  ) ;
  
  my $str = sprintf('%s',$obj) ;
  ok($str,'abc');
  
  my $cp = $obj ;
  $cp .= '_x' ;
  ok($cp,'abc_x');
  
  my $array_1 = $obj->[1] ;
  ok($array_1,'y');
  
  my $hash_B = $obj->{B} ;
  ok($hash_B,'2');
  
  my $obj2 = Object::MultiType->new(
  scalarsub => sub { return 'GENDATA' } ,
  ) ;
  
  my $str2 = sprintf('%s',$obj2) ;
  ok($str2,'GENDATA');
  
}
#########################
{
  my $obj0 = Object::MultiType->new(scalar => 'obj0') ;
  my $obj1 = Object::MultiType->new(scalar => \'obj1') ;
  my $obj2 = Object::MultiType->new(scalar => \'obj2') ;
  
  ok( sprintf('%s',$obj0) ,'obj0');
  ok( sprintf('%s',$obj1) ,'obj1');
  ok( sprintf('%s',$obj2) ,'obj2');
}
#########################
{

  my $data ;

  local(*OUT) ;
  tie(*OUT , 'TestTieHandle' , \$data ) ;
  
  my $obj = Object::MultiType->new( glob => \*OUT ) ;
  print $obj "GLOB ref OK!\n" ;

  ok($data,"GLOB ref OK!\n");
  
}
#########################


package TestTieHandle ;

sub TIEHANDLE {
  bless({ data => $_[1] },__PACKAGE__) ;
}

sub PRINT {
  my $this = shift ;
  ${$this->{data}} .= join("", (@_[0..$#_])) ;
}

#########################