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 autodie;
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->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;