Use a type strict null check for GetAttr defined tests. Fixes #305
authornikic <+@ni-po.com>
Thu, 28 Apr 2011 11:17:49 +0000 (13:17 +0200)
committernikic <+@ni-po.com>
Thu, 28 Apr 2011 11:17:49 +0000 (13:17 +0200)
lib/Twig/Node/Expression/Test.php
test/Twig/Tests/Fixtures/tests/defined.test

index 4995bc7..2a69e8c 100644 (file)
@@ -32,7 +32,10 @@ class Twig_Node_Expression_Test extends Twig_Node_Expression
                 ;
             } elseif ($this->getNode('node') instanceof Twig_Node_Expression_GetAttr) {
                 $this->getNode('node')->setAttribute('is_defined_test', true);
-                $compiler->subcompile($this->getNode('node'));
+                $compiler
+                    ->raw('null !== ')
+                    ->subcompile($this->getNode('node'))
+                ;
             } else {
                 throw new Twig_Error_Syntax('The "defined" test only works with simple variables', $this->getLine());
             }
index a401b5e..e4159fd 100644 (file)
@@ -6,11 +6,13 @@
 {{ foobar is not defined ? 'ok' : 'ko' }}
 {{ nested.foo is defined ? 'ok' : 'ko' }}
 {{ nested.bar is not defined ? 'ok' : 'ko' }}
+{{ nested.zero is defined ? 'ok' : 'ko' }}
 --DATA--
-return array('foo' => 'bar', 'bar' => null, 'nested' => array('foo' => 'foo'));
+return array('foo' => 'bar', 'bar' => null, 'nested' => array('foo' => 'foo', 'zero' => 0));
 --EXPECT--
 ok
 ok
 ok
 ok
 ok
+ok