#!/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" );
}