testmm.pm
来自「视频监控网络部分的协议ddns,的模块的实现代码,请大家大胆指正.」· PM 代码 · 共 251 行
PM
251 行
# Copyright 2001-2005 The Apache Software Foundation or its licensors, as# applicable.## Licensed under the Apache License, Version 2.0 (the "License");# you may not use this file except in compliance with the License.# You may obtain a copy of the License at## http://www.apache.org/licenses/LICENSE-2.0## Unless required by applicable law or agreed to in writing, software# distributed under the License is distributed on an "AS IS" BASIS,# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.# See the License for the specific language governing permissions and# limitations under the License.#package Apache::TestMM;use strict;use warnings FATAL => 'all';use Config;use Apache::TestConfig ();use Apache::TestTrace;sub import { my $class = shift; for my $section (@_) { unless (defined &$section) { die "unknown Apache::TestMM section: $section"; } no strict 'refs'; my $sub = "MY::$section"; # Force aliasing, since previous WriteMakefile might have # moved it undef &$sub if defined &$sub; *$sub = \&{$section}; }}sub add_dep { my($string, $targ, $add) = @_; $$string =~ s/($targ\s+::)/$1 $add /;}sub clean { my $self = shift; my $string = $self->MM::clean(@_); add_dep(\$string, clean => 'test_clean'); $string;}sub test { my $self = shift; my $env = Apache::TestConfig->passenv_makestr(); my $tests = 'TEST_FILES = ' . (exists $self->{'test'} ? $self->{'test'}->{'TESTS'} : '') . "\n"; my $preamble = Apache::TestConfig::WIN32 ? "" : <<EOF;PASSENV = $envEOF my $cover; if (eval { require Devel::Cover }) { my $atdir = File::Spec->catfile($ENV{HOME}, '.apache-test'); $cover = <<"EOF"testcover : -\@cover -delete -HARNESS_PERL_SWITCHES=-MDevel::Cover=+inc,$atdir \\ APACHE_TEST_EXTRA_ARGS=-one-process \$(MAKE) test -\@coverEOF } else { $cover = <<'EOF';testcover : @echo "Cannot run testcover action unless Devel::Cover is installed"EOF } return $preamble . $tests . <<'EOF' . $cover;TEST_VERBOSE = 0test_clean : $(FULLPERL) -I$(INST_ARCHLIB) -I$(INST_LIB) \ t/TEST $(APACHE_TEST_EXTRA_ARGS) -cleanrun_tests : $(PASSENV) \ $(FULLPERL) -I$(INST_ARCHLIB) -I$(INST_LIB) \ t/TEST $(APACHE_TEST_EXTRA_ARGS) -bugreport -verbose=$(TEST_VERBOSE) $(TEST_FILES)test :: pure_all test_clean run_teststest_config : $(PASSENV) \ $(FULLPERL) -I$(INST_ARCHLIB) -I$(INST_LIB) \ t/TEST $(APACHE_TEST_EXTRA_ARGS) -confcmodules: test_config cd c-modules && $(MAKE) allcmodules_clean: test_config cd c-modules && $(MAKE) cleanEOF}sub generate_script { my $file = shift; unlink $file if -e $file; my $body = "BEGIN { eval { require blib && blib->import; } }\n"; my %args = @Apache::TestMM::Argv; while (my($k, $v) = each %args) { $v =~ s/\|/\\|/g; $body .= "\n\$Apache::TestConfig::Argv{'$k'} = q|$v|;\n"; } my $in = Symbol::gensym(); open $in, "$file.PL" or die "Couldn't open $file.PL: $!"; { local $/; $body .= <$in>; } close $in; info "generating script $file"; Apache::Test::basic_config()->write_perlscript($file, $body);}sub filter_args { my($argv, $vars) = Apache::TestConfig::filter_args(\@ARGV, \%Apache::TestConfig::Usage); @ARGV = @$argv; @Apache::TestMM::Argv = %$vars;}1;=head1 NAMEApache::TestMM - Provide MakeMaker Wrapper Methods=head1 SYNOPSIS require Apache::TestMM; # import MY::test and MY::clean overrides for MM Apache::TestMM->import(qw(test clean)); # parse command line args Apache::TestMM::filter_args(); # autogenerate the script Apache::TestMM::generate_script('t/TEST');=head1 DESCRIPTIONC<Apache::TestMM> provides wrappers for the C<ExtUtils::MakeMaker>craft, making it easier to extend the autogenerated F<Makefile> withC<Apache::Test>.=head1 FUNCTIONS=head2 C<import> use Apache::TestMM qw(test clean);or: Apache::TestMM->import(qw(test clean));Imports C<MY::> overrides for the default C<ExtUtils::MakeMaker>I<test> and I<clean> targets, as if you have defined: sub MY::test {...} sub MY::clean {...}in F<Makefile.PL>. C<Apache::TestMM> does this for you so that these Makefiletargets will run the Apache server and the tests for it, and clean up afterits mess.=head2 C<filter_args> push @ARGV, '-apxs', $apxs_path; Apache::TestMM::filter_args(); WriteMakefile(...);When C<WriteMakefile()> is called it parses C<@ARGV>, hoping to findspecial options like C<PREFIX=/home/stas/perl>. C<Apache::Test>accepts a lot of configuration options of its own. WhenC<Apache::TestMM::filter_args()> is called, it removes anyC<Apache::Test>-specific options from C<@ARGV> and stores theminternally, so when C<WriteMakefile()> is called they aren't inC<@ARGV> and thus won't be processed by C<WriteMakefile()>.The options can be set when F<Makefile.PL> is called: % perl Makefile.PL -apxs /path/to/apxsOr you can push them manually to C<@ARGV> from the code: push @ARGV, '-apxs', $apxs_path;When: Apache::TestMM::generate_script('t/TEST');is called, C<Apache::Test>-specific options extracted byC<Apache::TestMM::filter_args()> are written to the autogeneratedfile. In our example, the autogenerated F<t/TEST> will include: %Apache::TestConfig::Argv = qw(apxs /path/to/apxs);which is going to be used by the C<Apache::Test> runtime.The other frequently used options are: C<-httpd>, telling where tofind the httpd (usually when the C<-apxs> option is not used),C<-libmodperl> to use a specific mod_perl shared object (if yourmod_perl is built as DSO), C<-maxclients> to change the default numberof the configured C<MaxClients> directive, C<-port> to start theserver on a specific port, etc. To get the complete list of availableconfiguration options and their purpose and syntax, run: % perl -MApache::TestConfig -le 'Apache::TestConfig::usage()'You may wish to document some of these in your application's F<README>file, especially the C<-apxs> and C<-httpd> options.=head2 C<generate_script> Apache::TestMM::generate_script('t/TEST');C<generate_script()> accepts the name of the script to generate andwill look for a template with the same name and suffix I<.PL>. So inour example it'll look for F<t/TEST.PL>. The autogenerated scriptF<t/TEST> will include the contents of F<t/TEST.PL>, and specialdirectives, including any configuration options passed viaC<L<filter_args()|/C_filter_args_>> called from F<Makefile.PL>, specialfixup code, etc.=cut
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?