| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 
 | use strict;
use warnings;
use Test::More;
my $want = 0;
my $got  = 0;
cmp_ok($got, 'eq', $want, "Passes on correct comparison");
my ($res, @ok, @diag, @warn);
{
    no warnings 'redefine';
    local *Test::Builder::ok = sub {
        my ($tb, $ok, $name) = @_;
        push @ok => $ok;
        return $ok;
    };
    local *Test::Builder::diag = sub {
        my ($tb, @d) = @_;
        push @diag => @d;
    };
    local $SIG{__WARN__} = sub {
        push @warn => @_;
    };
    $res = cmp_ok($got, '#eq', $want, "You shall not pass!");
}
ok(!$res, "Did not pass");
is(@ok, 1, "1 result");
ok(!$ok[0], "result is false");
# We only care that it mentions a syntax error.
like(join("\n" => @diag), qr/syntax error at \(eval in cmp_ok\)/, "Syntax error");
# We are not going to inspect the warning because it is not super predictable,
# and changes with eval specifics.
ok(@warn, "We got warnings");
done_testing;
 |