1#!perl 2 3use Config; 4use Cwd; 5use strict; 6 7$| = 1; 8 9my $cwdb = my $cwd = cwd(); 10$cwd =~ s,\\,/,g; 11$cwdb =~ s,/,\\,g; 12 13my $testdir = "t e s t"; 14my $exename = "showav"; 15my $plxname = "showargv"; 16 17my $exe = "$testdir/$exename"; 18my $exex = $exe . ".exe"; 19(my $exeb = $exe) =~ s,/,\\,g; 20my $exebx = $exeb . ".exe"; 21 22my $bat = "$testdir/$plxname"; 23my $batx = $bat . ".bat"; 24(my $batb = $bat) =~ s,/,\\,g; 25my $batbx = $batb . ".bat"; 26 27my $cmdx = $bat . ".cmd"; 28my $cmdb = $batb; 29my $cmdbx = $cmdb . ".cmd"; 30 31my @commands = ( 32 $exe, 33 $exex, 34 $exeb, 35 $exebx, 36 "./$exe", 37 "./$exex", 38 ".\\$exeb", 39 ".\\$exebx", 40 "$cwd/$exe", 41 "$cwd/$exex", 42 "$cwdb\\$exeb", 43 "$cwdb\\$exebx", 44 $bat, 45 $batx, 46 $batb, 47 $batbx, 48 "./$bat", 49 "./$batx", 50 ".\\$batb", 51 ".\\$batbx", 52 "$cwd/$bat", 53 "$cwd/$batx", 54 "$cwdb\\$batb", 55 "$cwdb\\$batbx", 56 $cmdx, 57 $cmdbx, 58 "./$cmdx", 59 ".\\$cmdbx", 60 "$cwd/$cmdx", 61 "$cwdb\\$cmdbx", 62 [$^X, $batx], 63 [$^X, $batbx], 64 [$^X, "./$batx"], 65 [$^X, ".\\$batbx"], 66 [$^X, "$cwd/$batx"], 67 [$^X, "$cwdb\\$batbx"], 68); 69 70my @av = ( 71 undef, 72 "", 73 " ", 74 "abc", 75 "a b\tc", 76 "\tabc", 77 "abc\t", 78 " abc\t", 79 "\ta b c ", 80 ["\ta b c ", ""], 81 ["\ta b c ", " "], 82 ["", "\ta b c ", "abc"], 83 [" ", "\ta b c ", "abc"], 84 ['" "', 'a" "b" "c', "abc"], 85); 86 87print "1.." . (@commands * @av * 2) . "\n"; 88for my $cmds (@commands) { 89 for my $args (@av) { 90 my @all_args; 91 my @cmds = defined($cmds) ? (ref($cmds) ? @$cmds : $cmds) : (); 92 my @args = defined($args) ? (ref($args) ? @$args : $args) : (); 93 print "######## [@cmds]\n"; 94 print "<", join('><', 95 $cmds[$#cmds], 96 map { my $x = $_; $x =~ s/"//g; $x } @args), 97 ">\n"; 98 if (system(@cmds,@args) != 0) { 99 print "Failed, status($?)\n"; 100 if ($Config{ccflags} =~ /\bDDEBUGGING\b/) { 101 print "Running again in debug mode\n"; 102 $^D = 1; # -Dp 103 system(@cmds,@args); 104 } 105 } 106 $^D = 0; 107 my $cmdstr = join " ", map { /\s|^$/ && !/\"/ 108 ? qq["$_"] : $_ } @cmds, @args; 109 print "######## '$cmdstr'\n"; 110 if (system($cmdstr) != 0) { 111 print "Failed, status($?)\n"; 112 if ($Config{ccflags} =~ /\bDDEBUGGING\b/) { 113 print "Running again in debug mode\n"; 114 $^D = 1; # -Dp 115 system($cmdstr); 116 } 117 } 118 $^D = 0; 119 } 120} 121