Mercurial > genshi > genshi-test
diff genshi/template/tests/eval.py @ 442:ff7c72b52fb2
Back out [510] and instead implement configurable error handling modes. The default is the old 0.3.x behaviour, but more strict error handling is available as an option.
author | cmlenz |
---|---|
date | Thu, 12 Apr 2007 22:40:49 +0000 |
parents | 540dd825d072 |
children | 5870bdf03fca |
line wrap: on
line diff
--- a/genshi/template/tests/eval.py +++ b/genshi/template/tests/eval.py @@ -16,7 +16,8 @@ import unittest from genshi.core import Markup -from genshi.template.eval import Expression, Suite, UndefinedError +from genshi.template.eval import Expression, Suite, Undefined, UndefinedError, \ + UNDEFINED class ExpressionTestCase(unittest.TestCase): @@ -319,8 +320,38 @@ expr = Expression("numbers[:-1]") self.assertEqual([0, 1, 2, 3], expr.evaluate({'numbers': range(5)})) + def test_access_undefined(self): + expr = Expression("nothing", filename='index.html', lineno=50) + retval = expr.evaluate({}) + assert isinstance(retval, Undefined) + self.assertEqual('nothing', retval._name) + assert retval._owner is UNDEFINED + + def test_getattr_undefined(self): + class Something(object): + def __repr__(self): + return '<Something>' + something = Something() + expr = Expression('something.nil', filename='index.html', lineno=50) + retval = expr.evaluate({'something': something}) + assert isinstance(retval, Undefined) + self.assertEqual('nil', retval._name) + assert retval._owner is something + + def test_getitem_undefined_string(self): + class Something(object): + def __repr__(self): + return '<Something>' + something = Something() + expr = Expression('something["nil"]', filename='index.html', lineno=50) + retval = expr.evaluate({'something': something}) + assert isinstance(retval, Undefined) + self.assertEqual('nil', retval._name) + assert retval._owner is something + def test_error_access_undefined(self): - expr = Expression("nothing", filename='index.html', lineno=50) + expr = Expression("nothing", filename='index.html', lineno=50, + lookup='strict') try: expr.evaluate({}) self.fail('Expected UndefinedError') @@ -333,16 +364,17 @@ frames.append(frame) self.assertEqual('"nothing" not defined', str(e)) self.assertEqual("<Expression 'nothing'>", - frames[-2].tb_frame.f_code.co_name) + frames[-3].tb_frame.f_code.co_name) self.assertEqual('index.html', - frames[-2].tb_frame.f_code.co_filename) - self.assertEqual(50, frames[-2].tb_lineno) + frames[-3].tb_frame.f_code.co_filename) + self.assertEqual(50, frames[-3].tb_lineno) def test_error_getattr_undefined(self): class Something(object): def __repr__(self): return '<Something>' - expr = Expression('something.nil', filename='index.html', lineno=50) + expr = Expression('something.nil', filename='index.html', lineno=50, + lookup='strict') try: expr.evaluate({'something': Something()}) self.fail('Expected UndefinedError') @@ -355,16 +387,17 @@ frames.append(frame) self.assertEqual('<Something> has no member named "nil"', str(e)) self.assertEqual("<Expression 'something.nil'>", - frames[-2].tb_frame.f_code.co_name) + frames[-3].tb_frame.f_code.co_name) self.assertEqual('index.html', - frames[-2].tb_frame.f_code.co_filename) - self.assertEqual(50, frames[-2].tb_lineno) + frames[-3].tb_frame.f_code.co_filename) + self.assertEqual(50, frames[-3].tb_lineno) def test_error_getitem_undefined_string(self): class Something(object): def __repr__(self): return '<Something>' - expr = Expression('something["nil"]', filename='index.html', lineno=50) + expr = Expression('something["nil"]', filename='index.html', lineno=50, + lookup='strict') try: expr.evaluate({'something': Something()}) self.fail('Expected UndefinedError') @@ -377,10 +410,10 @@ frames.append(frame) self.assertEqual('<Something> has no member named "nil"', str(e)) self.assertEqual('''<Expression 'something["nil"]'>''', - frames[-2].tb_frame.f_code.co_name) + frames[-3].tb_frame.f_code.co_name) self.assertEqual('index.html', - frames[-2].tb_frame.f_code.co_filename) - self.assertEqual(50, frames[-2].tb_lineno) + frames[-3].tb_frame.f_code.co_filename) + self.assertEqual(50, frames[-3].tb_lineno) class SuiteTestCase(unittest.TestCase):