#!/usr/bin/perl

use Carp;
use Person;

$| = 1;
my $testno = 1;
print "1..30\n";

alarm(5) unless $^P;

#ok(Person->census, 0);

my $p1 = Person->new();
ok($p1);
ok(! defined($p1->name));
ok(! defined($p1->age));
ok(! defined($p1->spouse));
#ok(Person->census, 1);
my $p2 = Person->new(NAME => "N2");
ok($p2);
ok($p2->name, "N2");
ok(! defined($p2->age));
ok(! defined($p2->spouse));
#ok(Person->census, 2);
my $p3 = Person->new(AGE => 30, NAME => "N3");
ok($p3);
ok($p3->name, "N3");
ok($p3->age, 30);
ok(! defined($p3->spouse));
#ok(Person->census, 3);

$p1->name("N1");
ok($p1->name, "N1");
$p2->name("NN2");
ok($p2->name, "NN2");

$p2->age("22");
ok($p2->age, "22");
$p3->age("33");
ok($p3->age, "33");

ok(! defined($p1->spouse));
ok(! defined($p2->spouse));
ok(! defined($p3->spouse));

$p2->spouse($p3);
ok($p2->spouse->name, $p3->name);
ok($p3->spouse->name, $p2->name);
ok(! defined($p1->spouse));

$p2->spouse($p1);
$p1->age(31);
ok($p2->spouse->name, $p1->name);
ok($p1->spouse->name, $p2->name);
ok(! defined($p3->spouse));

ok($p1->as_string, "Person  N1 is 31 years old and is married to NN2"); 
ok($p2->as_string, "Person  NN2 is 22 years old and is married to N1"); 
ok($p3->as_string, "Person  N3 is 33 years old"); 

ok(! defined eval {Employee->new(NOSTRILS => 2)});
ok(! defined eval {Employee->new(AGE => 30, NOSTRILS => 2)});



sub ok {
  my $bad;
  if (@_ == 1) {
    $bad = 1, print "not " unless $_[0];
    print "ok ", $testno++;
    if (! $_[0]) {
      my ($p, $f, $l) = caller;
      print " # at line $l",
    }
    print "\n";
  } elsif (@_ == 2) {
    my ($ac, $ex) = @_;
    $bad = ($ex ne $ac);
    print "not " if $bad;
    print "ok ", $testno++;
    if ($bad) {
      for ($ex, $ac) { tr/\n//d } 
      print "# expected '$ex'; received '$ac'";
    }
    print "\n";
  } else {
    croak "Usage: ok(success?) or ok(actual, expected)";
  }
  ++$BAD if $bad;
}

END {
  if ($BAD) {
    print "$BAD tests failed.\n";
  }
}
