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