DataStore-CAS-FS
view release on metacpan or search on metacpan
done_testing;
};
sub _append_sorted_paths {
my ($result, $prefix, $node)= @_;
for (sort keys %$node) {
push @$result, $prefix.'/'.$_;
_append_sorted_paths($result, $prefix.'/'.$_, $node->{$_})
if ref $node->{$_} eq 'HASH';
}
}
subtest tree_iterator => sub {
my $cas= new_ok('DataStore::CAS::FS', [ store => $sto, root => $rootEntry ], 'create file view of cas' );
my $iter= $cas->tree_iterator;
my @expected= '/';
_append_sorted_paths(\@expected, '', $tree);
my @actual;
while (defined (my $x= $iter->())) {
push @actual, $x->resolved_canonical_path;
}
is_deeply( \@actual, \@expected, 'iterate tree in order' )
or diag "Expected: ".join(' ', @expected)."\nActual: ".join(' ', @actual);
@expected= ('/a/b');
_append_sorted_paths(\@expected, '/a/b', $tree->{a}{b});
$iter= $cas->tree_iterator(path => '/a/b');
@actual= ();
while (defined (my $x= $iter->())) {
push @actual, $x->resolved_canonical_path;
}
is_deeply( \@actual, \@expected, 'iterate subtree in order' )
or diag "Expected: ".join(' ', @expected)."\nActual: ".join(' ', @actual);
$iter= $cas->path('a','b')->tree_iterator();
@actual= ();
while (defined (my $x= $iter->())) {
push @actual, $x->resolved_canonical_path;
}
is_deeply( \@actual, \@expected, 'iterate subtree from path object' )
or diag "Expected: ".join(' ', @expected)."\nActual: ".join(' ', @actual);
# Reset, and should give same result
@actual= ();
$iter->reset;
while (defined (my $x= $iter->())) {
push @actual, $x->resolved_canonical_path;
}
is_deeply( \@actual, \@expected, 'iteration is same after ->reset()' )
or diag "Expected: ".join(' ', @expected)."\nActual: ".join(' ', @actual);
# Simulate a --max-depth using the skip_dir method on the iterator
@actual= ();
$iter->reset;
while (defined (my $x= $iter->())) {
push @actual, $x->resolved_canonical_path;
$iter->skip_dir
if @{$x->path_dirents} >= 6 && $x->type eq 'dir';
}
@expected= grep { (split m|/|, $_) <= 6 } @expected;
is_deeply( \@actual, \@expected, 'iteration skipped properly' )
or diag "Expected: ".join(' ', @expected)."\nActual: ".join(' ', @actual);
done_testing;
};
done_testing;
( run in 0.709 second using v1.01-cache-2.11-cpan-71847e10f99 )