The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
use strict;
$^W++;
use Class::Prototyped qw(:NEW_MAIN);
use Data::Dumper;
use Test;

BEGIN {
	$|++;
	plan tests => 8;
}

$Data::Dumper::Sortkeys = 1;
$Data::Dumper::Sortkeys = 1;

my $p1 = new( a => 2, b => sub {'b'} );

ok( scalar(Class::Prototyped->reflect->_defaults),
		scalar($p1->reflect->_defaults) );

ok( scalar($p1->reflect->_defaults) ne scalar($p1->reflect->defaultAttributes) );

{
	my $temp = Data::Dumper->Dump([$p1->reflect->_defaults, $p1->reflect->_defaults]);
	ok( $temp =~ s/\$VAR1//g, 2);
}

{
	my $temp = Data::Dumper->Dump([$p1->reflect->_defaults, $p1->reflect->defaultAttributes]);
	ok( $temp =~ s/\$VAR1//g, 1);

	$temp = $p1->reflect->defaultAttributes;
	$temp->{METHOD}->{superable} = 1;
	$p1->reflect->defaultAttributes($temp);

	ok( scalar(Class::Prototyped->reflect->_defaults) ne
			scalar($p1->reflect->_defaults) );

	ok( Data::Dumper->Dump([Class::Prototyped->reflect->_defaults]),
			Data::Dumper->Dump([{ FIELD => undef, METHOD => undef, PARENT => undef }]) );

	ok( Data::Dumper->Dump([$p1->reflect->_defaults]),
			Data::Dumper->Dump([{ FIELD => undef, METHOD => {superable => 1}, PARENT => undef }]) );

	$p1->reflect->addSlot(c => sub {'c'});

	ok( Data::Dumper->Dump([[$p1->reflect->getSlots]]),
			Data::Dumper->Dump([[
					['a', 'FIELD'] => 2,
					['b', 'METHOD'] => sub { },
					['c', 'METHOD', 'superable' => 1] => sub { }
				]]) );

}