DataStore-CAS-FS

 view release on metacpan or  search on metacpan

t/50-fs.t  view on Meta::CPAN

	
	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 )