randyk      2004/07/15 08:28:03

  Modified:    t/response/TestAPR finfo.pm
  Added:       t/apr-ext finfo.t
               t/lib/TestAPRlib finfo.pm
  Log:
  Reviewed by:  stas
  put common finfo tests under t/lib/TestAPRlib/, and call
  them from both t/apr/ and t/apr-ext/.
  
  Revision  Changes    Path
  1.1                  modperl-2.0/t/apr-ext/finfo.t
  
  Index: finfo.t
  ===================================================================
  use strict;
  use warnings FATAL => 'all';
  use Apache::Test;
  
  use TestAPRlib::finfo;
  
  plan tests => TestAPRlib::finfo::num_of_tests();
  
  TestAPRlib::finfo::test();
  
  
  
  1.1                  modperl-2.0/t/lib/TestAPRlib/finfo.pm
  
  Index: finfo.pm
  ===================================================================
  package TestAPRlib::finfo;
  
  use strict;
  use warnings FATAL => 'all';
  
  use Apache::Test;
  use Apache::TestUtil;
  use Apache::TestTrace;
  use Apache::TestConfig;
  use constant WIN32 => Apache::TestConfig::WIN32;
  use constant OSX   => Apache::TestConfig::OSX;
  
  use constant APACHE_2_0_49 => have_apache_version('2.0.49');
  
  use File::Spec::Functions qw(catfile);
  use Fcntl qw(:mode);
  
  use APR::Finfo ();
  use APR::Pool ();
  use APR::Const    -compile => qw(SUCCESS FINFO_NORM REG
                                   WREAD WWRITE WEXECUTE);
  
  sub num_of_tests {
      return 15;
  }
  
  sub test {
  
      my $file = __FILE__;
      my $pool = APR::Pool->new();
      # populate the finfo struct first
      my $finfo = APR::Finfo::stat($file, APR::FINFO_NORM, $pool);
  
      ok $finfo->isa('APR::Finfo');
  
      # stat tests (same as perl's stat)
      {
          # now, get information from perl's stat()
          our ($device, $inode, $protection, $nlink, $user, $group,
               undef, $size, $atime, $mtime, $ctime) = stat $file;
  
          # skip certain tests on Win32 and others
          my %skip = ();
  
          if (WIN32) {
              # atime is wrong on NTFS, but OK on FAT32
              %skip = map {$_ => 1} qw(device inode user group atime);
          }
          elsif (OSX) {
              # XXX both apr and perl report incorrect group values.  sometimes.
              # XXX skip until we can really figure out what is going on.
              %skip = (group => 1);
          }
  
          # compare stat fields between perl and apr_stat
          {
              no strict qw(refs);
              foreach my $method (qw(device inode nlink user group
                                     size atime mtime ctime)) {
                  if ($skip{$method}) {
                      skip "different file semantics", 0;
                  }
                  else {
                      ok t_cmp($finfo->$method(),
                               ${$method},
                               "\$finfo->$method()");
                  }
              }
          }
  
          # match world bits
  
          ok t_cmp($finfo->protection & APR::WREAD,
                   $protection & S_IROTH,
                   '$finfo->protection() & APR::WREAD');
  
          ok t_cmp($finfo->protection & APR::WWRITE,
                   $protection & S_IWOTH,
                   '$finfo->protection() & APR::WWRITE');
  
          if (WIN32) {
              skip "different file semantics", 0;
          }
          else {
              ok t_cmp($finfo->protection & APR::WEXECUTE,
                       $protection & S_IXOTH,
                       '$finfo->protection() & APR::WEXECUTE');
          }
      }
  
      # tests for stuff not in perl's stat
      {
          # BACK_COMPAT_MARKER - fixed as of 2.0.49.
          if (WIN32 && !APACHE_2_0_49) {
              skip "finfo.fname requires Apache 2.0.49 or later", 0;
          }
          else {
              ok t_cmp($finfo->fname,
                       $file,
                       '$finfo->fname()');
          }
  
          ok t_cmp($finfo->filetype,
                   APR::REG,
                   '$finfo->filetype()');
      }
  }
  
  1;
  
  
  
  1.13      +4 -89     modperl-2.0/t/response/TestAPR/finfo.pm
  
  Index: finfo.pm
  ===================================================================
  RCS file: /home/cvs/modperl-2.0/t/response/TestAPR/finfo.pm,v
  retrieving revision 1.12
  retrieving revision 1.13
  diff -u -r1.12 -r1.13
  --- finfo.pm  8 Jul 2004 06:06:33 -0000       1.12
  +++ finfo.pm  15 Jul 2004 15:28:03 -0000      1.13
  @@ -5,27 +5,18 @@
   
   use Apache::Test;
   use Apache::TestUtil;
  -use Apache::TestTrace;
  -use Apache::TestConfig;
  -use constant WIN32 => Apache::TestConfig::WIN32;
  -use constant OSX   => Apache::TestConfig::OSX;
   
  -use constant APACHE_2_0_49 => have_apache_version('2.0.49');
  +use TestAPRlib::finfo;
   
  -use Apache::RequestRec ();
   use APR::Finfo ();
   
  -use File::Spec::Functions qw(catfile);
  -use Fcntl qw(:mode);
  -
   use Apache::Const -compile => 'OK';
  -use APR::Const    -compile => qw(SUCCESS FINFO_NORM REG
  -                                 WREAD WWRITE WEXECUTE);
   
   sub handler {
       my $r = shift;
   
  -    plan $r, tests => 17;
  +    my $tests = 2 + TestAPRlib::finfo::num_of_tests();
  +    plan $r, tests => $tests;
   
       {
           my $finfo = $r->finfo;
  @@ -43,83 +34,7 @@
           ok $isa;
       }
   
  -    my $file = $r->server_root_relative(catfile qw(htdocs index.html));
  -    # populate the finfo struct first
  -    my $finfo = APR::Finfo::stat($file, APR::FINFO_NORM, $r->pool);
  -
  -    ok $finfo->isa('APR::Finfo');
  -
  -    # stat tests (same as perl's stat)
  -    {
  -        # now, get information from perl's stat()
  -        our ($device, $inode, $protection, $nlink, $user, $group,
  -             undef, $size, $atime, $mtime, $ctime) = stat $file;
  -
  -        # skip certain tests on Win32 and others
  -        my %skip = ();
  -
  -        if (WIN32) {
  -            # atime is wrong on NTFS, but OK on FAT32
  -            %skip = map {$_ => 1} qw(device inode user group atime);
  -        }
  -        elsif (OSX) {
  -            # XXX both apr and perl report incorrect group values.  sometimes.
  -            # XXX skip until we can really figure out what is going on.
  -            %skip = (group => 1);
  -        }
  -
  -        # compare stat fields between perl and apr_stat
  -        {
  -            no strict qw(refs);
  -            foreach my $method (qw(device inode nlink user group
  -                                   size atime mtime ctime)) {
  -                if ($skip{$method}) {
  -                    skip "different file semantics", 0;
  -                }
  -                else {
  -                    ok t_cmp($finfo->$method(),
  -                             ${$method},
  -                             "\$finfo->$method()");
  -                }
  -            }
  -        }
  -
  -        # match world bits
  -
  -        ok t_cmp($finfo->protection & APR::WREAD,
  -                 $protection & S_IROTH,
  -                 '$finfo->protection() & APR::WREAD');
  -
  -        ok t_cmp($finfo->protection & APR::WWRITE,
  -                 $protection & S_IWOTH,
  -                 '$finfo->protection() & APR::WWRITE');
  -
  -        if (WIN32) {
  -            skip "different file semantics", 0;
  -        }
  -        else {
  -            ok t_cmp($finfo->protection & APR::WEXECUTE,
  -                     $protection & S_IXOTH,
  -                     '$finfo->protection() & APR::WEXECUTE');
  -        }
  -    }
  -
  -    # tests for stuff not in perl's stat
  -    {
  -        # BACK_COMPAT_MARKER - fixed as of 2.0.49.
  -        if (WIN32 && !APACHE_2_0_49) {
  -            skip "finfo.fname requires Apache 2.0.49 or later", 0;
  -        }
  -        else {
  -            ok t_cmp($finfo->fname,
  -                     $file,
  -                     '$finfo->fname()');
  -        }
  -
  -        ok t_cmp($finfo->filetype,
  -                 APR::REG,
  -                 '$finfo->filetype()');
  -    }
  +    TestAPRlib::finfo::test();
   
       Apache::OK;
   }
  
  
  

Reply via email to