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

📄 optree_check.t

📁 source of perl for linux application,
💻 T
字号:
#!perlBEGIN {    if ($ENV{PERL_CORE}){	chdir('t') if -d 't';	@INC = ('.', '../lib', '../ext/B/t');    } else {	unshift @INC, 't';	push @INC, "../../t";    }    require Config;    if (($Config::Config{'extensions'} !~ /\bB\b/) ){        print "1..0 # Skip -- Perl configured without B module\n";        exit 0;    }    # require 'test.pl'; # now done by OptreeCheck}use OptreeCheck;=head1 OptreeCheck selftest harnessThis file is primarily to test services of OptreeCheck itself, iecheckOptree().  %gOpts provides test-state info, it is 'exported' intomain::  doing use OptreeCheck runs import(), which processes @ARGV to processcmdline args in 'standard' way across all clients of OptreeCheck.=cutmy $tests = 5 + 15 + 16 * $gOpts{selftest};	# pass()s + $#testsplan tests => $tests;SKIP: {    skip "no perlio in this build", $tests    unless $Config::Config{useperlio};pass("REGEX TEST HARNESS SELFTEST");checkOptree ( name	=> "bare minimum opcode search",	      bcopts	=> '-exec',	      code	=> sub {my $a},	      noanchors	=> 1, # unanchored match	      expect	=> 'leavesub',	      expect_nt	=> 'leavesub');checkOptree ( name	=> "found print opcode",	      bcopts	=> '-exec',	      code	=> sub {print 1},	      noanchors	=> 1, # unanchored match	      expect	=> 'print',	      expect_nt	=> 'leavesub');checkOptree ( name	=> 'test skip itself',	      skip	=> 'this is skip-reason',	      bcopts	=> '-exec',	      code	=> sub {print 1},	      expect	=> 'dont-care, skipping',	      expect_nt	=> 'this insures failure');# This test 'unexpectedly succeeds', but that is "expected".  Theres# no good way to expect a successful todo, and inducing a failure# causes the harness to print verbose errors, which is NOT helpful.checkOptree ( name	=> 'test todo itself',	      todo	=> "your excuse here ;-)",	      bcopts	=> '-exec',	      code	=> sub {print 1},	      noanchors	=> 1, # unanchored match	      expect	=> 'print',	      expect_nt	=> 'print') if 0;checkOptree ( name	=> 'impossible match, remove skip to see failure',	      todo	=> "see! it breaks!",	      skip	=> 'skip the failure',	      code	=> sub {print 1},	      expect	=> 'look out ! Boy Wonder',	      expect_nt	=> 'holy near earth asteroid Batman !');pass ("TEST FATAL ERRS");if (1) {    # test for fatal errors. Im unsettled on fail vs die.    # calling fail isnt good enough by itself.    $@='';    eval {	checkOptree ( name	=> 'test against empty expectations',		      bcopts	=> '-exec',		      code	=> sub {print 1},		      expect	=> '',		      expect_nt	=> '');    };    like($@, /no '\w+' golden-sample found/, "empty expectations prevented");        $@='';    eval {	checkOptree ( name	=> 'prevent whitespace only expectations',		      bcopts	=> '-exec',		      code	=> sub {my $a},		      #skip	=> 1,		      expect_nt	=> "\n",		      expect	=> "\n");    };    like($@, /no '\w+' golden-sample found/,	 "just whitespace expectations prevented");}    pass ("TEST -e \$srcCode");checkOptree ( name	=> 'empty code or prog',	      skip	=> 'or fails',	      todo	=> "your excuse here ;-)",	      code	=> '',	      prog	=> '',	      );    checkOptree    (  name	=> "self strict, catch err",       prog	=> 'use strict; bogus',       errs	=> 'Bareword "bogus" not allowed while "strict subs" in use at -e line 1.',       expect	=> "nextstate",	# simple expectations       expect_nt => "nextstate",       noanchors => 1,		# allow them to work       );    checkOptree ( name	=> "sort lK - flag specific search",	      prog	=> 'our (@a,@b); @b = sort @a',	      noanchors	=> 1,	      expect	=> '<@> sort lK ',	      expect_nt	=> '<@> sort lK ');checkOptree ( name	=> "sort vK - flag specific search",	      prog	=> 'sort our @a',	      errs	=> 'Useless use of sort in void context at -e line 1.',	      noanchors	=> 1,	      expect	=> '<@> sort vK',	      expect_nt	=> '<@> sort vK');checkOptree ( name	=> "'code' => 'sort our \@a'",	      code	=> 'sort our @a',	      noanchors	=> 1,	      expect	=> '<@> sort K',	      expect_nt	=> '<@> sort K');pass ("REFTEXT FIXUP TESTS");checkOptree ( name	=> 'fixup nextstate (in reftext)',	      bcopts	=> '-exec',	      code	=> sub {my $a},	      strip_open_hints => 1,	      expect	=> <<'EOT_EOT', expect_nt => <<'EONT_EONT');# 1  <;> nextstate( NOTE THAT THIS CAN BE ANYTHING ) v:>,<,%# 2  <0> padsv[$a:54,55] M/LVINTRO# 3  <1> leavesub[1 ref] K/REFC,1EOT_EOT# 1  <;> nextstate(main 54 optree_concise.t:84) v:>,<,%# 2  <0> padsv[$a:54,55] M/LVINTRO# 3  <1> leavesub[1 ref] K/REFC,1EONT_EONTcheckOptree ( name	=> 'fixup opcode args',	      bcopts	=> '-exec',	      #fail	=> 1, # uncomment to see real padsv args: [$a:491,492] 	      code	=> sub {my $a},	      strip_open_hints => 1,	      expect	=> <<'EOT_EOT', expect_nt => <<'EONT_EONT');# 1  <;> nextstate(main 56 optree_concise.t:96) v:>,<,%# 2  <0> padsv[$a:56,57] M/LVINTRO# 3  <1> leavesub[1 ref] K/REFC,1EOT_EOT# 1  <;> nextstate(main 56 optree_concise.t:96) v:>,<,%# 2  <0> padsv[$a:56,57] M/LVINTRO# 3  <1> leavesub[1 ref] K/REFC,1EONT_EONT#################################pass("CANONICAL B::Concise EXAMPLE");checkOptree ( name	=> 'canonical example w -basic',	      bcopts	=> '-basic',	      code	=>  sub{$a=$b+42},	      crossfail => 1,	      debug	=> 1,	      strip_open_hints => 1,	      expect	=> <<'EOT_EOT', expect_nt => <<'EONT_EONT');# 7  <1> leavesub[1 ref] K/REFC,1 ->(end)# -     <@> lineseq KP ->7# 1        <;> nextstate(main 380 optree_selftest.t:139) v:>,<,%,{ ->2# 6        <2> sassign sKS/2 ->7# 4           <2> add[t3] sK/2 ->5# -              <1> ex-rv2sv sK/1 ->3# 2                 <#> gvsv[*b] s ->3# 3              <$> const[IV 42] s ->4# -           <1> ex-rv2sv sKRM*/1 ->6# 5              <#> gvsv[*a] s ->6EOT_EOT# 7  <1> leavesub[1 ref] K/REFC,1 ->(end)# -     <@> lineseq KP ->7# 1        <;> nextstate(main 60 optree_concise.t:122) v:>,<,%,{ ->2# 6        <2> sassign sKS/2 ->7# 4           <2> add[t1] sK/2 ->5# -              <1> ex-rv2sv sK/1 ->3# 2                 <$> gvsv(*b) s ->3# 3              <$> const(IV 42) s ->4# -           <1> ex-rv2sv sKRM*/1 ->6# 5              <$> gvsv(*a) s ->6EONT_EONTcheckOptree ( code	=> '$a=$b+42',	      bcopts	=> '-exec',	      expect	=> <<'EOT_EOT', expect_nt => <<'EONT_EONT');# 1  <;> nextstate(main 837 (eval 24):1) v:{# 2  <#> gvsv[*b] s# 3  <$> const[IV 42] s# 4  <2> add[t3] sK/2# 5  <#> gvsv[*a] s# 6  <2> sassign sKS/2# 7  <1> leavesub[1 ref] K/REFC,1EOT_EOT# 1  <;> nextstate(main 837 (eval 24):1) v:{# 2  <$> gvsv(*b) s# 3  <$> const(IV 42) s# 4  <2> add[t1] sK/2# 5  <$> gvsv(*a) s# 6  <2> sassign sKS/2# 7  <1> leavesub[1 ref] K/REFC,1EONT_EONT} # skip__END__

⌨️ 快捷键说明

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