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

use Test ;
BEGIN { plan tests => 42 } ;

#########################
{
  eval { require "test/classtest.pm" } ;
  ok(!$@) ;

  my $foo = new Foo(123) ;
  ok($foo) ;
  
  ok( join(' ',@Foo::ISA) , "Bar Baz Class::HPLOO::Base UNIVERSAL") ;
  
  $foo->test_arg(456) ;
  ok( $foo->{arg1} , 456 ) ;
  
  $foo->test_ref(123 , [qw(a b)] , {k1 => 11 , k2 => 22}) ;

  ok( $foo->{arg2} , 123 ) ;
  
  ok( $foo->{l0} , 'a' ) ;
  ok( $foo->{l1} , 'b' ) ;
  
  ok( $foo->{opts}{k1} , 11 ) ;
  ok( $foo->{opts}{k2} , 22 ) ;  

}
#########################
{

  eval { require "test/classtest2.pm" } ;
  ok(!$@) ;
  
  print "$@\n" if $@ ;
  
  ##print "$Class::HPLOO::SYNTAX\n" ;
  
}
#########################
{

  eval { require "test/foo.pm" } ;
  ok(!$@) ;
  print ">> $@\n" if $@ ;

  my $foo = new foo();
  $foo->{A} = 123 ;
  
  ok($foo->{A} , 123) ;

  my $ret = $foo->test ;
  
  ok( $ret , q`foo
--------------
  MOHHHH 123456789
--------------
  MOHHHH 123 456 789
--------------
`);
  
}
#########################
{

  eval { require "test/attr.pm" } ;
  ok(!$@) ;
  print ">> $@\n" if $@ ;
  
  my $foo = new Foo ;
  ok($foo);
  
  ok( $foo->set_name("mohh") ) ;
  ok( $foo->get_name , 'mohh' ) ;
  
  ok( $foo->set_age(123) ) ;
  ok( $foo->get_age , 123 ) ;
  
  ok( $foo->{size} = 456 ) ;
  ok( $foo->{size} , '456.0' ) ;
  ok( $foo->get_size , '456.0' ) ;
  
  ok( $foo->set_size(1.14) ) ;
  ok( $foo->{size} , '1.14' ) ;
  ok( $foo->get_size , '1.14' ) ;
  
  ok( $foo->set_list(qw(a b c)) ) ;
  my @l = $foo->get_list ;
  ok( join(" ",@l) , 'a b c' ) ;
  ok( $#{$foo->{list}} , 2 ) ;
  
  ok( $foo->set_special(["wwwaaaaa","isssaaa"]) ) ;
  @l = @{ $foo->get_special } ;
  ok( join(" ", @l) , 'wa isa' ) ;
  ok( join(" ", @{$foo->{special}}) , 'wa isa' ) ;
  
  my $call0 = $foo->call ;
  my $call1 = $foo->{call} ;
  
  ok($call0 , $call1) ;
}
#########################
{

  eval { require "test/testsuper.pm" } ;
  ok(!$@) ;
  
  print "$@\n" if $@ ;
  
  my $t = new TestSuper() ;
  
  ok($t , $t->{2}) ;
  ok($t->{2} , $t->{3}) ;
  ok($t->{id} , 1);
  
  ok($t != $t->{n2}) ;
  ok($t->{n2}->{id} , 3);
  
  ok($t->{n2} != $t->{n3}) ;
  ok($t->{n3}->{id} , 2);
  
  ok($t->{n2}->{n3}->{id} , 4);
  
  ok($TestSuper3::id , 4) ;
  
}
#########################

print "By!\n" ;