1BEGIN { chdir 't' if -d 't' }
2
3use Test::More 'no_plan';
4use strict;
5use lib '../lib';
6
7my $Class   = 'Archive::Tar';
8my $FClass  = 'Archive::Tar::File';
9my $File    = 'src/long/bar.tar';
10my @Expect = (
11    qr|^c$|,
12    qr|^d$|,
13    qr|^directory/$|,
14    qr|^directory/really.*name/$|,
15    qr|^directory/.*/myfile$|,
16);
17
18use_ok( $Class );
19
20### crazy ref to special case 'all'
21for my $index ( \0, 0 .. $#Expect ) {
22
23    my %opts    = ();
24    my @expect  = ();
25
26    my $dotest = sub {
27	my $desc = shift;
28	my $next = $Class->iter( $File, 0, \%opts );
29
30	my $pp_opts = join " => ", %opts;
31	ok( $next,                  "Iterator created from $File ($pp_opts $desc)" );
32	isa_ok( $next, "CODE",      "   Iterator $desc" );
33
34	my @names;
35	while( my $f = $next->() ) {
36	    ok( $f,                 "       File object retrieved $desc" );
37	    isa_ok( $f, $FClass,    "           Object $desc" );
38
39	    push @names, $f->name;
40	}
41
42	is( scalar(@names), scalar(@expect),
43				    "   Found correct number of files $desc" );
44
45	my $i = 0;
46	for my $name ( @names ) {
47	    ok( 1,                  "   Inspecting '$name'  $desc" );
48	    like($name, $expect[$i],"       Matches $Expect[$i] $desc" );
49	    $i++;
50	}
51    };
52
53    ### do a full test vs individual filters
54    if( not ref $index ) {
55        my $regex       = $Expect[$index];
56        @expect         = ($regex);
57	%opts		= ( filter => $regex );
58	$dotest->("filter $regex");
59	%opts		= ( filter_cb => sub { my ($entry) = @_; $entry->name() =~ /$regex/ } );
60	$dotest->("filter_cb $regex");
61    } else {
62        @expect         = @Expect;
63	$dotest->("all");
64    }
65}
66