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

use strict;
use warnings;
use Test::More;

use FindBin qw($Bin);
use lib "$Bin/lib";

eval { require MooX };

if ($@) {
	plan skip_all => "No MooX installed";
	done_testing;
	exit 0;
}

require TestMooXClassStashMooX;

my $test = TestMooXClassStashMooX->new;
isa_ok($test,'TestMooXClassStashMooX');

my $stash = $test->class_stash;
isa_ok($stash,'MooX::ClassStash');

my $other_test = TestMooXClassStashMooX->new;
my $other_stash = $test->class_stash;
is($stash,$other_stash,'Other object has same MooX::ClassStash');

is($test->i,1,'Checking that default value still works for i');

is($test->class_stash->get_attribute( i => 'is'),'ro','get_attribute method works with key');

is_deeply([$test->class_stash->list_all_methods],[qw(
	class_stash
	i
	new
	package_stash
)],'Proper methods in class stash');

is_deeply([$test->class_stash->list_all_keywords],[qw(
	after
	around
	before
	extends
	has
	with
)],'Proper keywords in class stash');

$test->class_stash->add_data( bla => 'blub' );

is_deeply($test->class_stash->get_data,{
	bla => 'blub'
},'Proper data in class stash for this caller');

$test->class_stash->add_attribute( l => (
	is => 'ro',
));

is($test->class_stash->get_attribute( l => 'is' ),'ro','get_attribute of a new added attribute works');

done_testing;