diff --git a/lib/Template/Plugin/Assert.pm b/lib/Template/Plugin/Assert.pm index df34dfa3..1e1c3a19 100644 --- a/lib/Template/Plugin/Assert.pm +++ b/lib/Template/Plugin/Assert.pm @@ -84,7 +84,7 @@ sub AUTOLOAD { $item =~ s/.*:://; return if $item eq 'DESTROY'; - my $value = $stash->dotop($stash, $item, \@args); + my $value = $stash->dotop($this, $item, \@args); if (! defined $value) { die $EXCEPTION->new( assert => "undefined value for $item" ); diff --git a/t/assert.t b/t/assert.t index 0aa7c48c..ddd957d6 100644 --- a/t/assert.t +++ b/t/assert.t @@ -40,12 +40,15 @@ sub nil { package main; -my $vars = { +my $vars = { object => Template::Test::Object->new, hash => { foo => 10, bar => undef }, list => [ undef ], subref => sub { return undef }, nothing => undef, + nested => { name => 'hello', deep => { value => 42 } }, + items => [ 10, 20, 30 ], + name => 'world', }; test_expect(\*DATA, undef, $vars); @@ -105,11 +108,56 @@ assert error - undefined value for first -- expect -- assert error - undefined value for nothing --- test -- +-- test -- [% USE assert; TRY; assert.subref; CATCH; error; END; %] -- expect -- assert error - undefined value for subref +#------------------------------------------------------------------------ +# GH #300: assert should pass through defined values without error +#------------------------------------------------------------------------ + +-- test -- +[% USE assert; + hash.assert.foo; +%] +-- expect -- +10 + +-- test -- +[% USE assert; + nested.assert.name; +%] +-- expect -- +hello + +-- test -- +[% USE assert; + nested.assert.deep.value; +%] +-- expect -- +42 + +-- test -- +[% USE assert; + items.assert.size; +%] +-- expect -- +3 + +-- test -- +[% USE assert; + items.assert.first; +%] +-- expect -- +10 + +-- test -- +[% USE assert; + assert.name; +%] +-- expect -- +world