#!/usr/bin/perl
use strict;
use warnings;
use blib;
use Test::More;
use t::Common;
use Object::LocalVars qw();
use Scalar::Util qw( refaddr );
use Data::Dumper qw(Dumper);
# work around win32 console buffering
Test::More->builder->failure_output(*STDOUT)
if ($^O eq 'MSWin32' && $ENV{HARNESS_VERBOSE});
my $class = "t::Object::Complete::Diamond";
plan tests => TC() + 3;
my $o = test_constructor($class);
my $expected_after_new = {
grandparent => 1,
leftparent => 1,
rightparent => 1,
diamond => 1,
};
my $expected_after_destroy = {
grandparent => 0,
leftparent => 0,
rightparent => 0,
diamond => 0,
};
SKIP: {
skip "because we don't have a $class object", 3
unless $o;
# Check that constructors called only once around diamond
is_deeply($o->report_counts, $expected_after_new,
"constructors only called once" )
or diag "Got:\n" . Dumper($class->report_counts);
# Check proper destruction
my $addr = refaddr( $o );
$o = undef;
ok( ! defined $o, "releasing object reference" );
is_deeply($class->report_counts, $expected_after_destroy,
"destructors only called once" )
or diag "Got:\n" . Dumper($class->report_counts);
}