diff options
Diffstat (limited to 't')
-rw-r--r-- | t/op/switch.t | 3 | ||||
-rw-r--r-- | t/op/taint.t | 26 |
2 files changed, 27 insertions, 2 deletions
diff --git a/t/op/switch.t b/t/op/switch.t index bdf087dd38..a28655920c 100644 --- a/t/op/switch.t +++ b/t/op/switch.t @@ -1362,5 +1362,6 @@ unreified_check(undef,""); } # Okay, that'll do for now. The intricacies of the smartmatch -# semantics are tested in t/op/smartmatch.t +# semantics are tested in t/op/smartmatch.t. Taintedness of +# returned values is checked in t/op/taint.t. __END__ diff --git a/t/op/taint.t b/t/op/taint.t index 9df6fee35c..0c9c2d07b7 100644 --- a/t/op/taint.t +++ b/t/op/taint.t @@ -17,7 +17,7 @@ BEGIN { use strict; use Config; -plan tests => 774; +plan tests => 780; $| = 1; @@ -2144,6 +2144,30 @@ end is_tainted $dest, "ucfirst(tainted) taints its return value"; } +{ + # Taintedness of values returned from given() + use feature 'switch'; + + my @descriptions = ('when', 'given end', 'default'); + + for (qw<x y z>) { + my $letter = "$_$TAINT"; + + my $desc = "tainted value returned from " . shift(@descriptions); + + my $res = do { + given ($_) { + when ('x') { $letter } + when ('y') { goto leavegiven } + default { $letter } + leavegiven: $letter + } + }; + is $res, $letter, "$desc is correct"; + is_tainted $res, "$desc stays tainted"; + } +} + # This may bomb out with the alarm signal so keep it last SKIP: { skip "No alarm()" unless $Config{d_alarm}; |