The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
use Test::More;
use Test::Exception;
my $obj;
my $aref = [qw|baz boz|];
my $struct = {foo => {bar => $aref}};
my $path = '/foo/bar';
my $annotation = 'this is a test annotation';

BEGIN: {
    plan tests => 12
                  ;
    
    use_ok('Class::Data::Annotated');
}

{
    isa_ok($obj = Class::Data::Annotated->new($struct), 'Class::Data::Annotated');
    dies_ok( sub {Class::Data::Annotated->new()}, 'I just gotta have data');
    can_ok($obj, 'annotate');
    $obj->annotate($path, $annotation);
    is($obj->{Annotations}{$path}, $annotation, 'Annotation for data matches expected');
    ok(!$obj->annotate('/foo/baz', $annotation), 'Failed to add annotation for nonmatching path in data');
}

{
    can_ok($obj, '_validate_path');
    dies_ok(sub {$obj->_validate_path('foo/bar')}, 'Missing root slash does not validate');
    dies_ok(sub {$obj->_validate_path('/foo/bar/')}, 'slash on the end does validate');
}

{
    can_ok($obj, 'get');
    is_deeply($obj->get($path), $aref, 'got correct data from object with path'); 
    is($obj->get_annotation($path), $annotation, 'Retrieved annotation for a path');
}