The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
use 5.006;
use strict;
use warnings;
use Test::More 0.92;
use File::Temp;
use Test::Deep qw/cmp_deeply/;
use File::pushd qw/pushd/;

use lib 't/lib';
use PCNTest;

use Path::Iterator::Rule;

#--------------------------------------------------------------------------#

my @tree = qw(
  aaaa.txt
  bbbb.txt
  aaaabbbb.txt
);

my $td = make_tree(@tree);

sub test {
    my ( $name, $rule, $expected ) = @_;

    my @got = sort map { unixify( $_, $td ) } $rule->all($td);

    local $Test::Builder::Level = $Test::Builder::Level + 1;

    cmp_deeply( \@got, $expected, $name )
      or diag explain { got => \@got, expected => $expected };
} # end test

{
    my $ruleA = Path::Iterator::Rule->new->file;
    my $ruleB = $ruleA->new->file->name("*bb*");
    $ruleA->name("*aa*");

    test( 'new *aa*', $ruleA => [qw/aaaa.txt aaaabbbb.txt/] );
    test( 'new *bb*', $ruleB => [qw/aaaabbbb.txt bbbb.txt/] );
}

{
    my $ruleA = Path::Iterator::Rule->new->file;
    my $ruleB = $ruleA->clone->name("*bb*");
    $ruleA->name("*aa*");

    test( 'cloned *aa*', $ruleA => [qw/aaaa.txt aaaabbbb.txt/] );
    test( 'cloned *bb*', $ruleB => [qw/aaaabbbb.txt bbbb.txt/] );
}

done_testing;