use Test::More tests => 9; use strict; use warnings; use ok "Catalyst::Controller::BindLex"; # fake $c->stash sub Catalyst::Controller::BindLex::stash { $_[0]->{stash} }; { package MyApp; use base qw/Catalyst::Controller::BindLex Catalyst/; sub bar { my ( $self, $c ) = @_; my $x : Stashed; my @dogs : Stashed = ( qw/fido moose/ ); $x = "magic"; } sub gorch { my ( $self, $c ) = @_; my @x : Stashed; my $dogs : Stashed; return $dogs; } } my $c = bless { stash => {} }, "MyApp"; MyApp->bar( $c ); is( $c->{stash}{x}, "magic", 'my $x : Stashed' ); is_deeply( $c->{stash}{dogs}, [qw/fido moose/], 'my @y : Stashed' ); $c->{stash}{x} = "non reference"; # Test::Exception fiddles with something naugty ok( !eval { MyApp->gorch( $c ) }, "error thrown with non ref" ); like( $@, qr/non-reference/, "the right error, too" ); $c->{stash}{x} = \undef; ok( !eval { MyApp->gorch( $c ) }, "error thrown with wrong reftype" ); like( $@, qr/reference of type SCALAR/, "the right error, too" ); $c->{stash}{x} = []; ok( my $dogs_ref = eval { MyApp->gorch( $c ) }, "no error thrown with scalar ref -> array coercion" ); is( ref($dogs_ref), "ARRAY", "array -> scalar conversion");