|
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.
|