Blame t/internal-backcompat.t

Packit 6427f8
#!/usr/bin/perl -w
Packit 6427f8
use strict;
Packit 6427f8
use warnings;
Packit 6427f8
use Fatal;
Packit 6427f8
use Test::More 'no_plan';
Packit 6427f8
Packit 6427f8
# Tests to determine if Fatal's internal interfaces remain backwards
Packit 6427f8
# compatible.
Packit 6427f8
#
Packit 6427f8
# WARNING: This file contains a lot of very ugly code, hard-coded
Packit 6427f8
# strings, and nasty API calls.  It may frighten small children.
Packit 6427f8
# Viewer discretion is advised.
Packit 6427f8
Packit 6427f8
# fill_protos.  This hasn't been changed since the original Fatal,
Packit 6427f8
# and so should always be the same.
Packit 6427f8
Packit 6427f8
my %protos = (
Packit 6427f8
    '$'     => [ [ 1, '$_[0]' ] ],
Packit 6427f8
    '$$'    => [ [ 2, '$_[0]', '$_[1]' ] ],
Packit 6427f8
    '$$@'   => [ [ 3, '$_[0]', '$_[1]', '@_[2..$#_]' ] ],
Packit 6427f8
    '\$'    => [ [ 1, '${$_[0]}' ] ],
Packit 6427f8
    '\%'    => [ [ 1, '%{$_[0]}' ] ],
Packit 6427f8
    '\%;$*' => [ [ 1, '%{$_[0]}' ], [ 2, '%{$_[0]}', '$_[1]' ],
Packit 6427f8
                 [ 3, '%{$_[0]}', '$_[1]', '$_[2]' ] ],
Packit 6427f8
);
Packit 6427f8
Packit 6427f8
while (my ($proto, $code) = each %protos) {
Packit 6427f8
    is_deeply( [ Fatal::fill_protos($proto) ], $code, $proto);
Packit 6427f8
}
Packit 6427f8
Packit 6427f8
# write_invocation tests
Packit 6427f8
no warnings 'qw';
Packit 6427f8
Packit 6427f8
# Technically the outputted code varies from the classical Fatal.
Packit 6427f8
# However the changes are mostly whitespace.  Those that aren't are
Packit 6427f8
# improvements to error messages or bug fixes.
Packit 6427f8
Packit 6427f8
my @write_invocation_calls = (
Packit 6427f8
    [
Packit 6427f8
        # Core  # Call          # Name  # Void  # Args
Packit 6427f8
        [ 1,    'CORE::open',   'open', 0,      [ 1, qw($_[0]) ],
Packit 6427f8
                                                [ 2, qw($_[0] $_[1]) ],
Packit 6427f8
                                                [ 3, qw($_[0] $_[1] @_[2..$#_])]
Packit 6427f8
        ],
Packit 6427f8
        q{	if (@_ == 1) {
Packit 6427f8
return CORE::open($_[0]) || Carp::croak("Can't open(@_): $!")	} elsif (@_ == 2) {
Packit 6427f8
return CORE::open($_[0], $_[1]) || Carp::croak("Can't open(@_): $!")	} elsif (@_ >= 3) {
Packit 6427f8
return CORE::open($_[0], $_[1], @_[2..$#_]) || Carp::croak("Can't open(@_): $!")
Packit 6427f8
            }
Packit 6427f8
            die "Internal error: open(@_): Do not expect to get ", scalar(@_), " arguments";
Packit 6427f8
    }
Packit 6427f8
    ]
Packit 6427f8
);
Packit 6427f8
Packit 6427f8
foreach my $test (@write_invocation_calls) {
Packit 6427f8
    is(Fatal::write_invocation( @{ $test->[0] } ), $test->[1], 'write_inovcation');
Packit 6427f8
}
Packit 6427f8
Packit 6427f8
# one_invocation tests.
Packit 6427f8
Packit 6427f8
my @one_invocation_calls = (
Packit 6427f8
        # Core  # Call          # Name  # Void   # Args
Packit 6427f8
    [
Packit 6427f8
        [ 1,    'CORE::open',   'open', 0,      qw($_[0] $_[1] @_[2..$#_]) ],
Packit 6427f8
        q{return CORE::open($_[0], $_[1], @_[2..$#_]) || Carp::croak("Can't open(@_): $!")},
Packit 6427f8
    ],
Packit 6427f8
    [
Packit 6427f8
        [ 1,    'CORE::open',   'open', 1,      qw($_[0] $_[1] @_[2..$#_]) ],
Packit 6427f8
        q{return (defined wantarray)?CORE::open($_[0], $_[1], @_[2..$#_]):
Packit 6427f8
                   CORE::open($_[0], $_[1], @_[2..$#_]) || Carp::croak("Can't open(@_): $!")},
Packit 6427f8
    ],
Packit 6427f8
);
Packit 6427f8
Packit 6427f8
foreach my $test (@one_invocation_calls) {
Packit 6427f8
    is(Fatal::one_invocation( @{ $test->[0] } ), $test->[1], 'one_inovcation');
Packit 6427f8
}
Packit 6427f8
Packit 6427f8
# TODO: _make_fatal
Packit 6427f8
# Since this subroutine has always started with an underscore,
Packit 6427f8
# I think it's pretty clear that it's internal-only.  I'm not
Packit 6427f8
# testing it here, and it doesn't yet have backcompat.