⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ppphtest.t

📁 source of perl for linux application,
💻 T
📖 第 1 页 / 共 2 页
字号:
##################################################################################            !!!!!   Do NOT edit this file directly!   !!!!!##            Edit mktests.PL and/or parts/inc/ppphtest instead.##  This file was automatically generated from the definition files in the#  parts/inc/ subdirectory by mktests.PL. To learn more about how all this#  works, please read the F<HACKERS> file that came with this distribution.#################################################################################BEGIN {  if ($ENV{'PERL_CORE'}) {    chdir 't' if -d 't';    @INC = ('../lib', '../ext/Devel/PPPort/t') if -d '../lib' && -d '../ext';    require Config; import Config;    use vars '%Config';    if (" $Config{'extensions'} " !~ m[ Devel/PPPort ]) {      print "1..0 # Skip -- Perl configured without Devel::PPPort module\n";      exit 0;    }  }  else {    unshift @INC, 't';  }  sub load {    eval "use Test";    require 'testutil.pl' if $@;  }  if (229) {    load();    plan(tests => 229);  }}use Devel::PPPort;use strict;$^W = 1;package Devel::PPPort;use vars '@ISA';require DynaLoader;@ISA = qw(DynaLoader);bootstrap Devel::PPPort;package main;BEGIN {  if ($ENV{'SKIP_SLOW_TESTS'}) {    for (1 .. 229) {      skip("skip: SKIP_SLOW_TESTS", 0);    }    exit 0;  }}use File::Path qw/rmtree mkpath/;use Config;my $tmp = 'ppptmp';my $inc = '';my $isVMS = $^O eq 'VMS';my $isMAC = $^O eq 'MacOS';my $perl = find_perl();rmtree($tmp) if -d $tmp;mkpath($tmp) or die "mkpath $tmp: $!\n";chdir($tmp) or die "chdir $tmp: $!\n";if ($ENV{'PERL_CORE'}) {  if (-d '../../lib') {    if ($isVMS) {      $inc = '"-I../../lib"';    }    elsif ($isMAC) {      $inc = '-I:::lib';    }    else {      $inc = '-I../../lib';    }    unshift @INC, '../../lib';  }}if ($perl =~ m!^\./!) {  $perl = ".$perl";}END {  chdir('..') if !-d $tmp && -d "../$tmp";  rmtree($tmp) if -d $tmp;}ok(&Devel::PPPort::WriteFile("ppport.h"));sub comment{  my $c = shift;  $c =~ s/^/# | /mg;  $c .= "\n" unless $c =~ /[\r\n]$/;  print $c;}sub ppport{  my @args = ('ppport.h', @_);  unshift @args, $inc if $inc;  my $run = $perl =~ m/\s/ ? qq("$perl") : $perl;  $run .= ' -MMac::err=unix' if $isMAC;  for (@args) {    $_ = qq("$_") if $isVMS && /^[^"]/;    $run .= " $_";  }  print "# *** running $run ***\n";  $run .= ' 2>&1' unless $isMAC;  my @out = `$run`;  my $out = join '', @out;  comment($out);  return wantarray ? @out : $out;}sub matches{  my($str, $re, $mod) = @_;  my @n;  eval "\@n = \$str =~ /$re/g$mod;";  if ($@) {    my $err = $@;    $err =~ s/^/# *** /mg;    print "# *** ERROR ***\n$err\n";  }  return $@ ? -42 : scalar @n;}sub eq_files{  my($f1, $f2) = @_;  return 0 unless -e $f1 && -e $f2;  local *F;  for ($f1, $f2) {    print "# File: $_\n";    unless (open F, $_) {      print "# couldn't open $_: $!\n";      return 0;    }    $_ = do { local $/; <F> };    close F;    comment($_);  }  return $f1 eq $f2;}my @tests;for (split /\s*={70,}\s*/, do { local $/; <DATA> }) {  s/^\s+//; s/\s+$//;  my($c, %f);  ($c, @f{m/-{20,}\s+(\S+)\s+-{20,}/g}) = split /\s*-{20,}\s+\S+\s+-{20,}\s*/;  push @tests, { code => $c, files => \%f };}my $t;for $t (@tests) {  print "#\n", ('# ', '-'x70, "\n")x3, "#\n";  my $f;  for $f (keys %{$t->{files}}) {    my @f = split /\//, $f;    if (@f > 1) {      pop @f;      my $path = join '/', @f;      mkpath($path) or die "mkpath('$path'): $!\n";    }    my $txt = $t->{files}{$f};    local *F;    open F, ">$f" or die "open $f: $!\n";    print F "$txt\n";    close F;    $txt =~ s/^/# | /mg;    print "# *** writing $f ***\n$txt\n";  }  my $code = $t->{code};  $code =~ s/^/# | /mg;  print "# *** evaluating test code ***\n$code\n";  eval $t->{code};  if ($@) {    my $err = $@;    $err =~ s/^/# *** /mg;    print "# *** ERROR ***\n$err\n";  }  ok($@, '');  for (keys %{$t->{files}}) {    unlink $_ or die "unlink('$_'): $!\n";  }}sub find_perl{  my $perl = $^X;  return $perl if $isVMS;  my $exe = $Config{'_exe'} || '';  if ($perl =~ /^perl\Q$exe\E$/i) {    $perl = "perl$exe";    eval "require File::Spec";    if ($@) {      $perl = "./$perl";    } else {      $perl = File::Spec->catfile(File::Spec->curdir(), $perl);    }  }  if ($perl !~ /\Q$exe\E$/i) {    $perl .= $exe;  }  warn "find_perl: cannot find $perl from $^X" unless -f $perl;  return $perl;}__DATA__my $o = ppport(qw(--help));ok($o =~ /^Usage:.*ppport\.h/m);ok($o =~ /--help/m);$o = ppport(qw(--version));ok($o =~ /^This is.*ppport.*\d+\.\d+(?:_?\d+)?\.$/);$o = ppport(qw(--nochanges));ok($o =~ /^Scanning.*test\.xs/mi);ok($o =~ /Analyzing.*test\.xs/mi);ok(matches($o, '^Scanning', 'm'), 1);ok(matches($o, 'Analyzing', 'm'), 1);ok($o =~ /Uses Perl_newSViv instead of newSViv/);$o = ppport(qw(--quiet --nochanges));ok($o =~ /^\s*$/);---------------------------- test.xs ------------------------------------------Perl_newSViv();===============================================================================# check if C and C++ comments are filtered correctlymy $o = ppport(qw(--copy=a));ok($o =~ /^Scanning.*MyExt\.xs/mi);ok($o =~ /Analyzing.*MyExt\.xs/mi);ok(matches($o, '^Scanning', 'm'), 1);ok($o =~ /^Needs to include.*ppport\.h/m);ok($o !~ /^Uses grok_bin/m);ok($o !~ /^Uses newSVpv/m);ok($o =~ /Uses 1 C\+\+ style comment/m);ok(eq_files('MyExt.xsa', 'MyExt.ra'));# check if C++ are left untouched with --cplusplus$o = ppport(qw(--copy=b --cplusplus));ok($o =~ /^Scanning.*MyExt\.xs/mi);ok($o =~ /Analyzing.*MyExt\.xs/mi);ok(matches($o, '^Scanning', 'm'), 1);ok($o =~ /^Needs to include.*ppport\.h/m);ok($o !~ /^Uses grok_bin/m);ok($o !~ /^Uses newSVpv/m);ok($o !~ /Uses \d+ C\+\+ style comment/m);ok(eq_files('MyExt.xsb', 'MyExt.rb'));unlink qw(MyExt.xsa MyExt.xsb);---------------------------- MyExt.xs -----------------------------------------newSVuv();    // newSVpv();  XPUSHs(foo);/* grok_bin(); */---------------------------- MyExt.ra -----------------------------------------#include "ppport.h"newSVuv();    /* newSVpv(); */  XPUSHs(foo);/* grok_bin(); */---------------------------- MyExt.rb -----------------------------------------#include "ppport.h"newSVuv();    // newSVpv();  XPUSHs(foo);/* grok_bin(); */===============================================================================my $o = ppport(qw(--nochanges file1.xs));ok($o =~ /^Scanning.*file1\.xs/mi);ok($o =~ /Analyzing.*file1\.xs/mi);ok($o !~ /^Scanning.*file2\.xs/mi);ok($o =~ /^Uses newCONSTSUB/m);ok($o =~ /^Uses SvPV_nolen.*depends.*sv_2pv_flags/m);ok($o =~ /WARNING: PL_expect/m);ok($o =~ /hint for newCONSTSUB/m);ok($o =~ /^Looks good/m);$o = ppport(qw(--nochanges --nohints file1.xs));ok($o =~ /^Scanning.*file1\.xs/mi);ok($o =~ /Analyzing.*file1\.xs/mi);ok($o !~ /^Scanning.*file2\.xs/mi);ok($o =~ /^Uses newCONSTSUB/m);ok($o =~ /^Uses SvPV_nolen.*depends.*sv_2pv_flags/m);ok($o =~ /WARNING: PL_expect/m);ok($o !~ /hint for newCONSTSUB/m);ok($o =~ /^Looks good/m);$o = ppport(qw(--nochanges --nohints --nodiag file1.xs));ok($o =~ /^Scanning.*file1\.xs/mi);ok($o =~ /Analyzing.*file1\.xs/mi);ok($o !~ /^Scanning.*file2\.xs/mi);ok($o !~ /^Uses newCONSTSUB/m);ok($o !~ /^Uses SvPV_nolen/m);ok($o =~ /WARNING: PL_expect/m);ok($o !~ /hint for newCONSTSUB/m);ok($o =~ /^Looks good/m);$o = ppport(qw(--nochanges --quiet file1.xs));ok($o =~ /^\s*$/);$o = ppport(qw(--nochanges file2.xs));ok($o =~ /^Scanning.*file2\.xs/mi);ok($o =~ /Analyzing.*file2\.xs/mi);ok($o !~ /^Scanning.*file1\.xs/mi);ok($o =~ /^Uses mXPUSHp/m);ok($o =~ /^Needs to include.*ppport\.h/m);ok($o !~ /^Looks good/m);ok($o =~ /^1 potentially required change detected/m);$o = ppport(qw(--nochanges --nohints file2.xs));ok($o =~ /^Scanning.*file2\.xs/mi);ok($o =~ /Analyzing.*file2\.xs/mi);ok($o !~ /^Scanning.*file1\.xs/mi);ok($o =~ /^Uses mXPUSHp/m);ok($o =~ /^Needs to include.*ppport\.h/m);ok($o !~ /^Looks good/m);ok($o =~ /^1 potentially required change detected/m);$o = ppport(qw(--nochanges --nohints --nodiag file2.xs));ok($o =~ /^Scanning.*file2\.xs/mi);ok($o =~ /Analyzing.*file2\.xs/mi);ok($o !~ /^Scanning.*file1\.xs/mi);ok($o !~ /^Uses mXPUSHp/m);ok($o !~ /^Needs to include.*ppport\.h/m);ok($o !~ /^Looks good/m);ok($o =~ /^1 potentially required change detected/m);$o = ppport(qw(--nochanges --quiet file2.xs));ok($o =~ /^\s*$/);---------------------------- file1.xs -----------------------------------------#define NEED_newCONSTSUB#define NEED_sv_2pv_flags#include "ppport.h"newCONSTSUB();SvPV_nolen();PL_expect = 0;---------------------------- file2.xs -----------------------------------------mXPUSHp(foo);===============================================================================my $o = ppport(qw(--nochanges));ok($o =~ /^Scanning.*FooBar\.xs/mi);ok($o =~ /Analyzing.*FooBar\.xs/mi);ok(matches($o, '^Scanning', 'm'), 1);ok($o !~ /^Looks good/m);ok($o =~ /^Uses grok_bin/m);---------------------------- FooBar.xs ----------------------------------------newSViv();XPUSHs(foo);grok_bin();===============================================================================my $o = ppport(qw(--nochanges));ok($o =~ /^Scanning.*First\.xs/mi);ok($o =~ /Analyzing.*First\.xs/mi);ok($o =~ /^Scanning.*second\.h/mi);ok($o =~ /Analyzing.*second\.h/mi);ok($o =~ /^Scanning.*sub.*third\.c/mi);ok($o =~ /Analyzing.*sub.*third\.c/mi);ok($o !~ /^Scanning.*foobar/mi);ok(matches($o, '^Scanning', 'm'), 3);---------------------------- First.xs -----------------------------------------one---------------------------- foobar.xyz ---------------------------------------two---------------------------- second.h -----------------------------------------three---------------------------- sub/third.c --------------------------------------four===============================================================================my $o = ppport(qw(--nochanges));ok($o =~ /Possibly wrong #define NEED_foobar in.*test.xs/i);---------------------------- test.xs ------------------------------------------#define NEED_foobar===============================================================================# And now some complex "real-world" examplemy $o = ppport(qw(--copy=f));for (qw(main.xs mod1.c mod2.c mod3.c mod4.c mod5.c)) {  ok($o =~ /^Scanning.*\Q$_\E/mi);  ok($o =~ /Analyzing.*\Q$_\E/i);}ok(matches($o, '^Scanning', 'm'), 6);ok(matches($o, '^Writing copy of', 'm'), 5);ok(!-e "mod5.cf");for (qw(main.xs mod1.c mod2.c mod3.c mod4.c)) {  ok($o =~ /^Writing copy of.*\Q$_\E.*with changes/mi);  ok(-e "${_}f");  ok(eq_files("${_}f", "${_}r"));  unlink "${_}f";}---------------------------- main.xs ------------------------------------------#include "EXTERN.h"#include "perl.h"#include "XSUB.h"#define NEED_newCONSTSUB#define NEED_grok_hex_GLOBAL#include "ppport.h"

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -