use strict;
use Test::More;
use Class::InsideOut ();

$|++; # keep stdout and stderr in order on Win32

plan tests => 12;

#--------------------------------------------------------------------------#

my $class = "t::Object::Synopsis";
my $properties = {
    "t::Object::Synopsis" => {
        name        => "public",
        ssn         => "private",
        age         => "public",
        initials    => "public",
    },
};

my ($o, $p);

#--------------------------------------------------------------------------#

require_ok( $class );

is_deeply( Class::InsideOut::_properties( $class ), 
           $properties,
    "$class has/inherited its expected properties"
);

is( Class::InsideOut::_object_count( $class ), 0,
    "$class has no objects registered"
);

ok( ($o = $class->new()) && $o->isa($class),
    "Creating a $class object"
);

ok( ($p = $class->new()) && $p->isa($class),
    "Creating another $class object"
);

$o->name( "Larry" );
is( $o->name(), "Larry",
    "Setting a name for the first object"
);

$p->name( "Damian" );
is( $p->name(), "Damian",
    "Setting a name for the second object"
);

isnt( $o->name, $p->name,
    "Objects have different names"
);

is( $o->greeting, "Hello, my name is Larry",
    "Object greeting correct"
);

undef $o;
ok( ! defined $o,
    "Destroying the first object"
);

undef $p;
ok( ! defined $p,
    "Destroying the second object"
);

ok( ! Class::InsideOut::_leaking_memory( $class ),
    "$class is not leaking memory"
);

