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 tests => 8;
use Scalar::Util qw(reftype);

use Class::Ref;

my @array = (['foobar']);

my $obj = Class::Ref->new(\@array);

isa_ok $obj, 'Class::Ref::ARRAY', 'blessed into ARRAY wrapper';

is reftype $obj, 'REF', 'blessed ref is correct type';

is_deeply $$obj, \@array, 'inner ref is correct';

isa_ok $obj->[0], 'Class::Ref::ARRAY', 'deep array blessed';

isa_ok tied(@{$obj->[0]}), 'Class::Ref::ARRAY::Tie', 'deep array tied';

is_deeply ${$obj->[0]}, $array[0], 'deep ARRAY preserved';

{
    local $Class::Ref::raw_access = 1;
    is_deeply $obj->[0], $array[0], 'raw access enabled';
}

is $obj->[0]->[0], 'foobar', 'deep wrapping access';