The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
use lib 't/lib';
use strict;
use warnings;

use Test::More;

use Tests qw( %runs );

plan tests => 1 + 6 * $runs{error}{plan};

my $CLASS = 'Tree';
use_ok( $CLASS )
    or Test::More->builder->BAILOUT( "Cannot load $CLASS" );

my $root = $CLASS->new;
my $child1 = $CLASS->new;
my $child2 = $CLASS->new;

$root->add_child( $child1 );

my %defaults = (
    func      => 'remove_child',
    validator => 'children',
    value     => 1,
);

$runs{error}{func}->( $root, %defaults,
    args => [], error => "remove_child(): Nothing to remove",
);

$runs{error}{func}->( $root, %defaults,
    args => [ undef ], error => "remove_child(): 'undef' is out-of-bounds",
);

$runs{error}{func}->( $root, %defaults,
    args => [ 'foo' ], error => "remove_child(): 'foo' is not a legal index",
);

$runs{error}{func}->( $root, %defaults,
    args => [ 1 ], error => "remove_child(): '1' is out-of-bounds",
);

$runs{error}{func}->( $root, %defaults,
    args => [ -1 ], error => "remove_child(): '-1' is out-of-bounds",
);

$runs{error}{func}->( $root, %defaults,
    args => [ $child2 ], error => "remove_child(): '$child2' not found",
);