1 2 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 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74
|
#!perl -w
use strict;
use Test::More tests => 8;
use Data::Dumper;
require Filter::signatures;
# Mimic parts of the setup of Filter::Simple
my $extractor =
$Filter::Simple::placeholder = $Filter::Simple::placeholder
= qr/\Q$;\E(.{4})\Q$;\E/s;
if( $^V >= 5.20 ) {
require warnings; warnings->unimport('experimental::signatures');
require feature; feature->import( 'signatures');
};
sub identical_to_native {
my( $name, $expected,$decl ) = @_;
local $_ = $decl;
my $org;
if( $^V >= 5.20 ) {
$org = eval $_
or die $@;
};
Filter::signatures::transform_arguments();
no warnings 'redefine';
my $l = eval $_;
die $@ if $@;
my $got = $l->('foo','bar');
my $native = $org ? $org->('foo','bar') : $expected;
is $got, $expected, $name
or do { diag $decl; diag $_ };
is $expected, $native, "Sanity check vs native code";
}
identical_to_native( "Anonymous subroutine", 5, <<'SUB' );
#line 1
sub (
$name
, $value
) {
return __LINE__
};
SUB
identical_to_native( "Anonymous subroutine (traditional)", 2, <<'SUB' );
#line 1
sub ($name, $value) {
return __LINE__
};
SUB
identical_to_native( "Named subroutine", 6, <<'SUB' );
#line 1
sub foo2
(
$name
, $value
) {
return __LINE__
};
\&foo2
SUB
identical_to_native( "Multiline default assignments", 6, <<'SUB' );
#line 1
sub (
$name
, $value
='bar'
) {
return __LINE__
};
SUB
|