B-Lint
view release on metacpan or search on metacpan
"# Looks like you planned $planned tests but ran $ran.\n";
} elsif ($noplan) {
print "1..$ran\n";
}
}
}
# Use this instead of "print STDERR" when outputing failure diagnostic
# messages
sub _diag {
return unless @_;
my @mess = map { /^#/ ? "$_\n" : "# $_\n" }
map { split /\n/ } @_;
my $fh = $TODO ? *STDOUT : *STDERR;
print $fh @mess;
}
sub diag {
_diag(@_);
}
sub skip_all {
if (@_) {
print STDOUT "1..0 # Skipped: @_\n";
} else {
print STDOUT "1..0\n";
}
exit(0);
}
sub _ok {
my ($pass, $where, $name, @mess) = @_;
# Do not try to microoptimize by factoring out the "not ".
# VMS will avenge.
my $out;
if ($name) {
# escape out '#' or it will interfere with '# skip' and such
$name =~ s/#/\\#/g;
$out = $pass ? "ok $test - $name" : "not ok $test - $name";
} else {
$out = $pass ? "ok $test" : "not ok $test";
}
$out .= " # TODO $TODO" if $TODO;
print STDOUT "$out\n";
unless ($pass) {
_diag "# Failed $where\n";
}
# Ensure that the message is properly escaped.
_diag @mess;
$test = $test + 1; # don't use ++
return $pass;
}
sub _where {
my @caller = caller($Level);
return "at $caller[1] line $caller[2]";
}
# DON'T use this for matches. Use like() instead.
sub ok ($@) {
my ($pass, $name, @mess) = @_;
_ok($pass, _where(), $name, @mess);
}
sub _q {
my $x = shift;
return 'undef' unless defined $x;
my $q = $x;
$q =~ s/\\/\\\\/g;
$q =~ s/'/\\'/g;
return "'$q'";
}
sub _qq {
my $x = shift;
return defined $x ? '"' . display ($x) . '"' : 'undef';
};
# keys are the codes \n etc map to, values are 2 char strings such as \n
my %backslash_escape;
foreach my $x (split //, 'nrtfa\\\'"') {
$backslash_escape{ord eval "\"\\$x\""} = "\\$x";
}
# A way to display scalars containing control characters and Unicode.
# Trying to avoid setting $_, or relying on local $_ to work.
sub display {
my @result;
foreach my $x (@_) {
if (defined $x and not ref $x) {
my $y = '';
foreach my $c (unpack("U*", $x)) {
if ($c > 255) {
$y .= sprintf "\\x{%x}", $c;
} elsif ($backslash_escape{$c}) {
$y .= $backslash_escape{$c};
} else {
my $z = chr $c; # Maybe we can get away with a literal...
$z = sprintf "\\%03o", $c if $z =~ /[[:^print:]]/;
$y .= $z;
}
}
$x = $y;
}
return $x unless wantarray;
push @result, $x;
}
return @result;
}
sub is ($$@) {
my ($got, $expected, $name, @mess) = @_;
my $pass;
if( !defined $got || !defined $expected ) {
# undef only matches undef
( run in 2.352 seconds using v1.01-cache-2.11-cpan-97f6503c9c8 )