cmlenz@1: # -*- coding: utf-8 -*- cmlenz@1: # cmlenz@27: # Copyright (C) 2006 Christopher Lenz cmlenz@1: # All rights reserved. cmlenz@1: # cmlenz@1: # This software is licensed as described in the file COPYING, which cmlenz@1: # you should have received as part of this distribution. The terms cmlenz@27: # are also available at http://markup.cmlenz.net/wiki/License. cmlenz@1: # cmlenz@1: # This software consists of voluntary contributions made by many cmlenz@1: # individuals. For the exact contribution history, see the revision cmlenz@27: # history and logs, available at http://markup.cmlenz.net/log/. cmlenz@1: cmlenz@1: import doctest cmlenz@1: import unittest cmlenz@1: import sys cmlenz@1: cmlenz@1: from markup.core import Stream cmlenz@1: from markup.template import BadDirectiveError, Context, Template, \ cmlenz@1: TemplateSyntaxError cmlenz@1: cmlenz@1: cmlenz@1: class TemplateTestCase(unittest.TestCase): cmlenz@1: cmlenz@1: def test_interpolate_string(self): cmlenz@1: parts = list(Template._interpolate('bla')) cmlenz@1: self.assertEqual(1, len(parts)) cmlenz@1: self.assertEqual(Stream.TEXT, parts[0][0]) cmlenz@1: self.assertEqual('bla', parts[0][1]) cmlenz@1: cmlenz@1: def test_interpolate_simple(self): cmlenz@1: parts = list(Template._interpolate('${bla}')) cmlenz@1: self.assertEqual(1, len(parts)) cmlenz@10: self.assertEqual(Template.EXPR, parts[0][0]) cmlenz@1: self.assertEqual('bla', parts[0][1].source) cmlenz@1: cmlenz@1: def test_interpolate_escaped(self): cmlenz@1: parts = list(Template._interpolate('$${bla}')) cmlenz@1: self.assertEqual(1, len(parts)) cmlenz@1: self.assertEqual(Stream.TEXT, parts[0][0]) cmlenz@1: self.assertEqual('${bla}', parts[0][1]) cmlenz@1: cmlenz@1: def test_interpolate_short(self): cmlenz@1: parts = list(Template._interpolate('$bla')) cmlenz@1: self.assertEqual(1, len(parts)) cmlenz@10: self.assertEqual(Template.EXPR, parts[0][0]) cmlenz@1: self.assertEqual('bla', parts[0][1].source) cmlenz@1: cmlenz@1: def test_interpolate_mixed1(self): cmlenz@1: parts = list(Template._interpolate('$foo bar $baz')) cmlenz@1: self.assertEqual(3, len(parts)) cmlenz@10: self.assertEqual(Template.EXPR, parts[0][0]) cmlenz@1: self.assertEqual('foo', parts[0][1].source) cmlenz@1: self.assertEqual(Stream.TEXT, parts[1][0]) cmlenz@1: self.assertEqual(' bar ', parts[1][1]) cmlenz@10: self.assertEqual(Template.EXPR, parts[2][0]) cmlenz@1: self.assertEqual('baz', parts[2][1].source) cmlenz@1: cmlenz@1: def test_interpolate_mixed2(self): cmlenz@1: parts = list(Template._interpolate('foo $bar baz')) cmlenz@1: self.assertEqual(3, len(parts)) cmlenz@1: self.assertEqual(Stream.TEXT, parts[0][0]) cmlenz@1: self.assertEqual('foo ', parts[0][1]) cmlenz@10: self.assertEqual(Template.EXPR, parts[1][0]) cmlenz@1: self.assertEqual('bar', parts[1][1].source) cmlenz@1: self.assertEqual(Stream.TEXT, parts[2][0]) cmlenz@1: self.assertEqual(' baz', parts[2][1]) cmlenz@1: cmlenz@1: def test_bad_directive_error(self): cmlenz@1: xml = '
' cmlenz@1: try: cmlenz@21: tmpl = Template(xml, filename='test.html') cmlenz@1: except BadDirectiveError, e: cmlenz@1: self.assertEqual('test.html', e.filename) cmlenz@1: if sys.version_info[:2] >= (2, 4): cmlenz@1: self.assertEqual(1, e.lineno) cmlenz@1: cmlenz@1: def test_directive_value_syntax_error(self): cmlenz@1: xml = '' cmlenz@21: tmpl = Template(xml, filename='test.html') cmlenz@1: try: cmlenz@1: list(tmpl.generate(Context())) cmlenz@1: self.fail('Expected SyntaxError') cmlenz@1: except TemplateSyntaxError, e: cmlenz@1: self.assertEqual('test.html', e.filename) cmlenz@1: if sys.version_info[:2] >= (2, 4): cmlenz@1: self.assertEqual(1, e.lineno) cmlenz@1: # We don't really care about the offset here, do we? cmlenz@1: cmlenz@1: def test_expression_syntax_error(self): cmlenz@1: xml = '\n Foo ${bar"}\n
' cmlenz@1: tmpl = Template(xml, filename='test.html') cmlenz@1: ctxt = Context(bar='baz') cmlenz@1: try: cmlenz@1: list(tmpl.generate(ctxt)) cmlenz@1: self.fail('Expected SyntaxError') cmlenz@1: except TemplateSyntaxError, e: cmlenz@1: self.assertEqual('test.html', e.filename) cmlenz@1: if sys.version_info[:2] >= (2, 4): cmlenz@1: self.assertEqual(2, e.lineno) cmlenz@1: self.assertEqual(10, e.offset) cmlenz@1: cmlenz@1: cmlenz@1: def suite(): cmlenz@1: suite = unittest.TestSuite() cmlenz@1: suite.addTest(doctest.DocTestSuite(Template.__module__)) cmlenz@1: suite.addTest(unittest.makeSuite(TemplateTestCase, 'test')) cmlenz@1: return suite cmlenz@1: cmlenz@1: if __name__ == '__main__': cmlenz@1: unittest.main(defaultTest='suite')