Undefineds give better hints for `None` objects now.
authorArmin Ronacher <armin.ronacher@active-4.com>
Mon, 12 Apr 2010 11:51:33 +0000 (13:51 +0200)
committerArmin Ronacher <armin.ronacher@active-4.com>
Mon, 12 Apr 2010 11:51:33 +0000 (13:51 +0200)
--HG--
branch : trunk

jinja2/runtime.py
jinja2/testsuite/api.py

index fef7b2580986fa3dfef39dd28e90df79893c984b..16389e04e4375e4d699de3eb37aef2311339e1a1 100644 (file)
@@ -422,7 +422,7 @@ class Undefined(object):
     __slots__ = ('_undefined_hint', '_undefined_obj', '_undefined_name',
                  '_undefined_exception')
 
-    def __init__(self, hint=None, obj=None, name=None, exc=UndefinedError):
+    def __init__(self, hint=None, obj=missing, name=None, exc=UndefinedError):
         self._undefined_hint = hint
         self._undefined_obj = obj
         self._undefined_name = name
@@ -434,7 +434,7 @@ class Undefined(object):
         `UndefinedError` on call.
         """
         if self._undefined_hint is None:
-            if self._undefined_obj is None:
+            if self._undefined_obj is missing:
                 hint = '%r is undefined' % self._undefined_name
             elif not isinstance(self._undefined_name, basestring):
                 hint = '%r object has no element %r' % (
@@ -498,7 +498,7 @@ class DebugUndefined(Undefined):
 
     def __unicode__(self):
         if self._undefined_hint is None:
-            if self._undefined_obj is None:
+            if self._undefined_obj is missing:
                 return u'{{ %s }}' % self._undefined_name
             return '{{ no such element: %s[%r] }}' % (
                 self._undefined_obj.__class__.__name__,
index 4b49819be530c223abc7bea29c2f47db7176af5a..4134d26225f2adb3264125193c634ad738dfee93 100644 (file)
@@ -207,6 +207,13 @@ class UndefinedTestCase(JinjaTestCase):
         t = Template("{{ var[42].foo }}")
         assert_raises(UndefinedError, t.render, var=0)
 
+    def test_none_gives_propert_error(self):
+        try:
+            Undefined(None).split()
+        except UndefinedError, e:
+            assert e.message == 'None is not defined'
+        else:
+            assert False, 'expected exception'
 
 
 def suite():