home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / perl560.zip / t / lib / filefind.t < prev    next >
Text File  |  2000-03-05  |  5KB  |  169 lines

  1. ####!./perl
  2.  
  3.  
  4. my %Expect;
  5. my $symlink_exists = eval { symlink("",""); 1 };
  6.  
  7. BEGIN {
  8.     chdir 't' if -d 't';
  9.     unshift @INC, '../lib';
  10. }
  11.  
  12. if ( $symlink_exists ) { print "1..117\n"; }
  13. else                   { print "1..61\n"; }
  14.  
  15. use File::Find;
  16.  
  17. find(sub { print "ok 1\n" if $_ eq 'filefind.t'; }, ".");
  18. finddepth(sub { print "ok 2\n" if $_ eq 'filefind.t'; }, ".");
  19.  
  20.  
  21. my $case = 2;
  22.  
  23. END {
  24.     unlink 'fa/fa_ord','fa/fsl','fa/faa/faa_ord',
  25.        'fa/fab/fab_ord','fa/fab/faba/faba_ord','fb/fb_ord','fb/fba/fba_ord';
  26.     rmdir 'fa/faa';
  27.     rmdir 'fa/fab/faba';
  28.     rmdir 'fa/fab';
  29.     rmdir 'fa';
  30.     rmdir 'fb/fba';
  31.     rmdir 'fb';
  32.     chdir '..';
  33.     rmdir 'for_find';
  34. }
  35.  
  36. sub Check($) {
  37.   $case++;
  38.   if ($_[0]) { print "ok $case\n"; }
  39.   else       { print "not ok $case\n"; }
  40. }
  41.  
  42. sub CheckDie($) {
  43.   $case++;
  44.   if ($_[0]) { print "ok $case\n"; }
  45.   else { print "not ok $case\n $!\n"; exit 0; }
  46. }
  47.  
  48. sub touch {
  49.   CheckDie( open(my $T,'>',$_[0]) );
  50. }
  51.  
  52. sub MkDir($$) {
  53.   CheckDie( mkdir($_[0],$_[1]) );
  54. }
  55.  
  56. sub wanted {
  57.   print "# '$_' => 1\n";
  58.   s#\.$## if ($^O eq 'VMS' && $_ ne '.');
  59.   Check( $Expect{$_} );
  60.   delete $Expect{$_};
  61.   $File::Find::prune=1 if  $_ eq 'faba';
  62. }
  63.  
  64. sub dn_wanted {
  65.   my $n = $File::Find::name;
  66.   $n =~ s#\.$## if ($^O eq 'VMS' && $n ne '.');
  67.   print "# '$n' => 1\n";
  68.   my $i = rindex($n,'/');
  69.   my $OK = exists($Expect{$n});
  70.   if ( $OK ) {
  71.       $OK= exists($Expect{substr($n,0,$i)})  if $i >= 0;
  72.   }
  73.   Check($OK);
  74.   delete $Expect{$n};
  75. }
  76.  
  77. sub d_wanted {
  78.   print "# '$_' => 1\n";
  79.   s#\.$## if ($^O eq 'VMS' && $_ ne '.');
  80.   my $i = rindex($_,'/');
  81.   my $OK = exists($Expect{$_});
  82.   if ( $OK ) {
  83.       $OK= exists($Expect{substr($_,0,$i)})  if $i >= 0;
  84.   }
  85.   Check($OK);
  86.   delete $Expect{$_};
  87. }
  88.  
  89. MkDir( 'for_find',0770 );
  90. CheckDie(chdir(for_find));
  91. MkDir( 'fa',0770 );
  92. MkDir( 'fb',0770  );
  93. touch('fb/fb_ord');
  94. MkDir( 'fb/fba',0770  );
  95. touch('fb/fba/fba_ord');
  96. CheckDie( symlink('../fb','fa/fsl') ) if $symlink_exists;
  97. touch('fa/fa_ord');
  98.  
  99. MkDir( 'fa/faa',0770  );
  100. touch('fa/faa/faa_ord');
  101. MkDir( 'fa/fab',0770  );
  102. touch('fa/fab/fab_ord');
  103. MkDir( 'fa/fab/faba',0770  );
  104. touch('fa/fab/faba/faba_ord');
  105.  
  106. %Expect = ('.' => 1, 'fsl' => 1, 'fa_ord' => 1, 'fab' => 1, 'fab_ord' => 1,
  107.        'faba' => 1, 'faa' => 1, 'faa_ord' => 1);
  108. delete $Expect{'fsl'} unless $symlink_exists;
  109. File::Find::find( {wanted => \&wanted, },'fa' );
  110. Check( scalar(keys %Expect) == 0 );
  111.  
  112. %Expect=('fa' => 1, 'fa/fsl' => 1, 'fa/fa_ord' => 1, 'fa/fab' => 1,
  113.      'fa/fab/fab_ord' => 1, 'fa/fab/faba' => 1,
  114.      'fa/fab/faba/faba_ord' => 1, 'fa/faa' => 1, 'fa/faa/faa_ord' => 1);
  115. delete $Expect{'fa/fsl'} unless $symlink_exists;
  116. File::Find::find( {wanted => \&wanted, no_chdir => 1},'fa' );
  117.  
  118. Check( scalar(keys %Expect) == 0 );
  119.  
  120. %Expect=('.' => 1, './fa' => 1, './fa/fsl' => 1, './fa/fa_ord' => 1, './fa/fab' => 1,
  121.          './fa/fab/fab_ord' => 1, './fa/fab/faba' => 1,
  122.          './fa/fab/faba/faba_ord' => 1, './fa/faa' => 1, './fa/faa/faa_ord' => 1,
  123.          './fb' => 1, './fb/fba' => 1, './fb/fba/fba_ord' => 1, './fb/fb_ord' => 1);
  124. delete $Expect{'./fa/fsl'} unless $symlink_exists;
  125. File::Find::finddepth( {wanted => \&dn_wanted },'.' );
  126. Check( scalar(keys %Expect) == 0 );
  127.  
  128. %Expect=('.' => 1, './fa' => 1, './fa/fsl' => 1, './fa/fa_ord' => 1, './fa/fab' => 1,
  129.          './fa/fab/fab_ord' => 1, './fa/fab/faba' => 1,
  130.          './fa/fab/faba/faba_ord' => 1, './fa/faa' => 1, './fa/faa/faa_ord' => 1,
  131.          './fb' => 1, './fb/fba' => 1, './fb/fba/fba_ord' => 1, './fb/fb_ord' => 1);
  132. delete $Expect{'./fa/fsl'} unless $symlink_exists;
  133. File::Find::finddepth( {wanted => \&d_wanted, no_chdir => 1 },'.' );
  134. Check( scalar(keys %Expect) == 0 );
  135.  
  136. if ( $symlink_exists ) {
  137.   %Expect=('.' => 1, 'fa_ord' => 1, 'fsl' => 1, 'fb_ord' => 1, 'fba' => 1,
  138.            'fba_ord' => 1, 'fab' => 1, 'fab_ord' => 1, 'faba' => 1, 'faa' => 1,
  139.            'faa_ord' => 1);
  140.  
  141.   File::Find::find( {wanted => \&wanted, follow_fast => 1},'fa' );
  142.   Check( scalar(keys %Expect) == 0 );
  143.  
  144.   %Expect=('fa' => 1, 'fa/fa_ord' => 1, 'fa/fsl' => 1, 'fa/fsl/fb_ord' => 1,
  145.            'fa/fsl/fba' => 1, 'fa/fsl/fba/fba_ord' => 1, 'fa/fab' => 1,
  146.            'fa/fab/fab_ord' => 1, 'fa/fab/faba' => 1, 'fa/fab/faba/faba_ord' => 1,
  147.            'fa/faa' => 1, 'fa/faa/faa_ord' => 1);
  148.   File::Find::find( {wanted => \&wanted, follow_fast => 1, no_chdir => 1},'fa' );
  149.   Check( scalar(keys %Expect) == 0 );
  150.  
  151.   %Expect=('fa' => 1, 'fa/fa_ord' => 1, 'fa/fsl' => 1, 'fa/fsl/fb_ord' => 1,
  152.            'fa/fsl/fba' => 1, 'fa/fsl/fba/fba_ord' => 1, 'fa/fab' => 1,
  153.            'fa/fab/fab_ord' => 1, 'fa/fab/faba' => 1, 'fa/fab/faba/faba_ord' => 1,
  154.            'fa/faa' => 1, 'fa/faa/faa_ord' => 1);
  155.  
  156.   File::Find::finddepth( {wanted => \&dn_wanted, follow_fast => 1},'fa' );
  157.   Check( scalar(keys %Expect) == 0 );
  158.  
  159.   %Expect=('fa' => 1, 'fa/fa_ord' => 1, 'fa/fsl' => 1, 'fa/fsl/fb_ord' => 1,
  160.            'fa/fsl/fba' => 1, 'fa/fsl/fba/fba_ord' => 1, 'fa/fab' => 1,
  161.            'fa/fab/fab_ord' => 1, 'fa/fab/faba' => 1, 'fa/fab/faba/faba_ord' => 1,
  162.            'fa/faa' => 1, 'fa/faa/faa_ord' => 1);
  163.  
  164.   File::Find::finddepth( {wanted => \&d_wanted, follow_fast => 1, no_chdir => 1},'fa' );
  165.   Check( scalar(keys %Expect) == 0 );
  166. }
  167.  
  168. print "# of cases: $case\n";
  169.