The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/perl
use strict;
use warnings;
use blib;  

use Test::More; 
use Object::LocalVars qw(); 
use Scalar::Util qw( refaddr );
use t::Common;
# work around win32 console buffering
Test::More->builder->failure_output(*STDOUT) 
    if ($^O eq 'MSWin32' && $ENV{HARNESS_VERBOSE});

my $class = "t::Object::PropsOverload";
my @props = qw( name color );

plan tests => TC() + TA() * @props + 7;

my $o = test_constructor($class);

SKIP: {
    skip "because we don't have a $class object", TA() * @props +7 unless $o;
    {
        no strict 'refs';
        ok( defined *{"t::Object::PropsOverload::DATA::name"}{HASH},
            "object property 'name' initialized in the master data hash" );
        ok( defined *{"t::Object::PropsOverload::DATA::color"}{HASH},
            "object property 'color' initialized in the master data hash" );
    }
    test_accessors( $o, $_ ) for @props;

    my $addr = refaddr $o;

    ok( exists $t::Object::PropsOverload::DATA::name{$addr}, 
        "found object property 'name' data in the master data hash" );
    ok( exists $t::Object::PropsOverload::DATA::color{$addr}, 
        "found object property 'color' data in the master data hash" );
    $o = undef;
    ok( ! defined $o, "releasing object reference" );
    ok( ! exists $t::Object::PropsOverload::DATA::name{$addr}, 
        "... and object property 'name' data has been cleaned up" );
    ok( ! exists $t::Object::PropsOverload::DATA::color{$addr}, 
        "... and object property 'color' data has been cleaned up" );

}