You are viewing a plain text version of this content. The canonical link for it is here.
Posted to modperl-cvs@perl.apache.org by st...@apache.org on 2004/03/09 07:35:34 UTC

cvs commit: modperl-2.0/ModPerl-Registry/t/cgi-bin perlrun_decl.pm perlrun_extload.pl perlrun_nondecl.pl lib.pl perlrun_require.pl

stas        2004/03/08 22:35:34

  Added:       ModPerl-Registry/t perlrun_extload.t
               ModPerl-Registry/t/cgi-bin perlrun_decl.pm
                        perlrun_extload.pl perlrun_nondecl.pl
  Removed:     ModPerl-Registry/t perlrun_require.t
               ModPerl-Registry/t/cgi-bin lib.pl perlrun_require.pl
  Log:
  expand the perlrun require/use test to include various function prototypes
  and a lack of in modules that declare and don't declare their own
  package. also add 'warning expected' banners.
  
  Revision  Changes    Path
  1.1                  modperl-2.0/ModPerl-Registry/t/perlrun_extload.t
  
  Index: perlrun_extload.t
  ===================================================================
  use strict;
  use warnings FATAL => 'all';
  
  use Apache::Test;
  use Apache::TestUtil;
  use Apache::TestRequest qw(GET);
  
  plan tests => 2;
  
  my $url = "/same_interp/perlrun/perlrun_extload.pl";
  my $same_interp = Apache::TestRequest::same_interp_tie($url);
  
  for (1..2) {
      # should not fail on the second request
      my $res = get_body($same_interp, $url);
      skip_not_same_interp(
          !defined($res),
          "01234",
          $res,
          "PerlRun requiring an external lib with subs",
      );
  }
  
  # if we fail to find the same interpreter, return undef (this is not
  # an error)
  sub get_body {
      my($same_interp, $url) = @_;
      my $res = eval {
          Apache::TestRequest::same_interp_do($same_interp, \&GET, $url);
      };
      return undef if $@ =~ /unable to find interp/;
      return $res->content if $res;
      die $@ if $@;
  }
  
  # make the tests resistant to a failure of finding the same perl
  # interpreter, which happens randomly and not an error.
  # the first argument is used to decide whether to skip the sub-test,
  # the rest of the arguments are passed to 'ok t_cmp';
  sub skip_not_same_interp {
      my $skip_cond = shift;
      if ($skip_cond) {
          skip "Skip couldn't find the same interpreter", 0;
      }
      else {
          my($package, $filename, $line) = caller;
          # trick ok() into reporting the caller filename/line when a
          # sub-test fails in sok()
          return eval <<EOE;
  #line $line $filename
      ok &t_cmp;
  EOE
      }
  }
  
  
  
  1.1                  modperl-2.0/ModPerl-Registry/t/cgi-bin/perlrun_decl.pm
  
  Index: perlrun_decl.pm
  ===================================================================
  package perlrun_decl;
  
  use warnings;
  use strict;
  
  use base qw(Exporter);
  our @EXPORT = qw(decl_proto);
  
  sub decl_proto ($;$) { my $x = shift; $x*"0"; }
  
  1;
  
  
  
  1.1                  modperl-2.0/ModPerl-Registry/t/cgi-bin/perlrun_extload.pl
  
  Index: perlrun_extload.pl
  ===================================================================
  use warnings;
  use strict;
  
  # XXX: add the warning/error expected prints
  
  use Apache::Test ();
  use Apache::TestUtil;
  use File::Spec::Functions qw(catfile catdir);
  
  #my $dir;# = catdir Apache::Test::vars('serverroot'), 'cgi-bin';
  #BEGIN { $dir = catdir Apache::Test::vars('serverroot'), 'cgi-bin' }
  #use lib $dir;
  #my $require = catfile $dir, 'perlrun_nondecl.pl';
  
  use lib catdir Apache::Test::vars('serverroot'), 'cgi-bin';
  my $require = catfile Apache::Test::vars('serverroot'), 'cgi-bin', 'perlrun_nondecl.pl';
  
  # require a module w/ package declaration (it doesn't get reloaded
  # because it declares the package). But we still have a problem with
  # subs declaring prototypes. When perlrun_decl->import is called, the
  # original function's prototype doesn't match the aliases prototype.
  # see decl_proto()
  BEGIN { t_server_log_warn_is_expected() if perlrun_decl->can("decl_proto"); }
  use perlrun_decl;
  
  # require a lib w/o package declaration. Functions in that lib get
  # automatically aliased to the functions in the current package.
  require "$require";
  
  print "Content-type: text/plain\n\n";
  
  ### declared package module
  print decl_proto(0);
  
  ### non-declared package module
  # they all get redefined warning inside perlrun_nondecl.pl, since that
  # lib loads it into main::, vs. PerlRun undefs the current __PACKAGE__
  print nondecl_no_proto();
  print nondecl_proto(2);
  print nondecl_proto_empty("whatever");
  print nondecl_const();
  
  
  
  
  
  
  1.1                  modperl-2.0/ModPerl-Registry/t/cgi-bin/perlrun_nondecl.pl
  
  Index: perlrun_nondecl.pl
  ===================================================================
  # we use this file to test how the files w/o package declaration,
  # required from perlrun, work
  
  use Apache::TestUtil;
  
  my $num;
  
  use subs qw(warn_exp);
  
  # all subs in tis file get 'redefined' warning because they are
  # reloaded in the main:: package, which is not under PerlRun's
  # control.
  
  BEGIN {
      t_server_log_warn_is_expected()
          if defined *{"nondecl_no_proto"}{CODE};
  }
  # normal sub, no prototype
  sub nondecl_no_proto        { 1 }
  
  BEGIN {
      t_server_log_warn_is_expected()
          if defined *{"nondecl_proto"}{CODE};
  }
  # sub with a scalar proto
  sub nondecl_proto       ($) { $num = shift }
  
  BEGIN {
      t_server_log_warn_is_expected()
          if defined *{"nondecl_proto_empty"}{CODE};
  }
  # sub with an empty proto, but not a constant
  sub nondecl_proto_empty ()  { $num + 1 }
  
  # besides the the constant sub will generate two warnings for nondecl_const:
  # - one for main::
  # - another for perlrun's virtual package
  BEGIN {
      t_server_log_warn_is_expected(2);
  }
  # a constant.
  sub nondecl_const       ()  { 4 }
  
  
  
  1;