X-Git-Url: http://git.vpit.fr/?a=blobdiff_plain;f=t%2F30-localize_elem-target.t;h=878670fcba5036a8e1d381b7f14a8d67a282ffec;hb=76f7748a793b1d04798c743cc70b46a1bf657300;hp=273eb0d632df4a6af806fc7cc8a48f33605eab6d;hpb=44bbbdcdafa5707a753abb9de5c5d01cd7388880;p=perl%2Fmodules%2FScope-Upper.git diff --git a/t/30-localize_elem-target.t b/t/30-localize_elem-target.t index 273eb0d..878670f 100644 --- a/t/30-localize_elem-target.t +++ b/t/30-localize_elem-target.t @@ -3,9 +3,9 @@ use strict; use warnings; -use Test::More tests => 25; +use Test::More tests => 25 + 12; -use Scope::Upper qw/localize_elem UP HERE/; +use Scope::Upper qw; # Arrays @@ -127,3 +127,86 @@ our %h; is_deeply eval('*nonexistent{HASH}'), { }, 'localize_elem "%nonexistent", "a", 13 => HERE [end]'; } + +# Invalid + +my $invalid_glob = qr/^Can't infer the element localization type from a glob and the value/; +my $invalid_type = qr/^Can't localize an element of something that isn't an array or a hash/; + +{ + local *x; + + eval { localize_elem '$x', 0, 1 }; + like $@, $invalid_type, 'invalid localize_elem "$x", 0, 1'; +} + +{ + local *x; + + eval { localize_elem '&x', 0, sub { } }; + like $@, $invalid_type, 'invalid localize_elem "&x", 0, sub { }'; +} + +{ + local *x; + + eval { localize_elem '*x', 0, \1 }; + like $@, $invalid_type, 'invalid localize_elem "*x", 0, \1'; +} + +{ + local *x; + + eval { localize_elem *x, 0, \1 }; + like $@, $invalid_glob, 'invalid localize_elem *x, 0, \1'; +} + +{ + local *x; + + eval { localize_elem *x, 0, [ 1 ] }; + like $@, $invalid_glob, 'invalid localize_elem *x, 0, [ 1 ]'; +} + +{ + local *x; + + eval { localize_elem *x, 0, { a => 1 } }; + like $@, $invalid_glob, 'invalid localize_elem *x, 0, { a => 1 }'; +} + +{ + local *x; + + eval { localize_elem *x, 0, sub { } }; + like $@, $invalid_glob, 'invalid localize_elem *x, 0, sub { }'; +} + +{ + local *x; + + eval { localize_elem *x, 0, *x }; + like $@, $invalid_glob, 'invalid localize_elem *x, 0, *x'; +} + +sub invalid_ref { qr/^Invalid \Q$_[0]\E reference as the localization target/ } + +{ + eval { localize_elem \1, 0, 0 => HERE }; + like $@, invalid_ref('SCALAR'), 'invalid localize_elem \1, 0, 0 => HERE'; +} + +{ + eval { localize_elem [ ], 0, 0 => HERE }; + like $@, invalid_ref('ARRAY'), 'invalid localize_elem [ ], 0, 0 => HERE'; +} + +{ + eval { localize_elem { }, 0, 0 => HERE }; + like $@, invalid_ref('HASH'), 'invalid localize_elem { }, 0, 0 => HERE'; +} + +{ + eval { localize_elem sub { }, 0, 0 => HERE }; + like $@, invalid_ref('CODE'), 'invalid localize_elem sub { }, 0, 0 => HERE'; +}