| # Copyright (C) 2004 Python Software Foundation |
| # Author: barry@python.org (Barry Warsaw) |
| # License: http://www.opensource.org/licenses/PythonSoftFoundation.php |
| |
| import unittest |
| from string import Template, SafeTemplate |
| |
| class TestTemplate(unittest.TestCase): |
| |
| def test_regular_templates(self): |
| s = Template('$who likes to eat a bag of $what worth $$100') |
| self.assertEqual(s % dict(who='tim', what='ham'), |
| 'tim likes to eat a bag of ham worth $100') |
| self.assertRaises(KeyError, lambda s, d: s % d, s, dict(who='tim')) |
| |
| def test_regular_templates_with_braces(self): |
| s = Template('$who likes ${what} for ${meal}') |
| self.assertEqual(s % dict(who='tim', what='ham', meal='dinner'), |
| 'tim likes ham for dinner') |
| self.assertRaises(KeyError, lambda s, d: s % d, |
| s, dict(who='tim', what='ham')) |
| |
| def test_escapes(self): |
| eq = self.assertEqual |
| s = Template('$who likes to eat a bag of $$what worth $$100') |
| eq(s % dict(who='tim', what='ham'), |
| 'tim likes to eat a bag of $what worth $100') |
| s = Template('$who likes $$') |
| eq(s % dict(who='tim', what='ham'), 'tim likes $') |
| |
| def test_percents(self): |
| s = Template('%(foo)s $foo ${foo}') |
| self.assertEqual(s % dict(foo='baz'), '%(foo)s baz baz') |
| s = SafeTemplate('%(foo)s $foo ${foo}') |
| self.assertEqual(s % dict(foo='baz'), '%(foo)s baz baz') |
| |
| def test_stringification(self): |
| s = Template('tim has eaten $count bags of ham today') |
| self.assertEqual(s % dict(count=7), |
| 'tim has eaten 7 bags of ham today') |
| s = SafeTemplate('tim has eaten $count bags of ham today') |
| self.assertEqual(s % dict(count=7), |
| 'tim has eaten 7 bags of ham today') |
| s = SafeTemplate('tim has eaten ${count} bags of ham today') |
| self.assertEqual(s % dict(count=7), |
| 'tim has eaten 7 bags of ham today') |
| |
| def test_SafeTemplate(self): |
| eq = self.assertEqual |
| s = SafeTemplate('$who likes ${what} for ${meal}') |
| eq(s % dict(who='tim'), |
| 'tim likes ${what} for ${meal}') |
| eq(s % dict(what='ham'), |
| '$who likes ham for ${meal}') |
| eq(s % dict(what='ham', meal='dinner'), |
| '$who likes ham for dinner') |
| eq(s % dict(who='tim', what='ham'), |
| 'tim likes ham for ${meal}') |
| eq(s % dict(who='tim', what='ham', meal='dinner'), |
| 'tim likes ham for dinner') |
| |
| def test_invalid_placeholders(self): |
| raises = self.assertRaises |
| s = Template('$who likes $') |
| raises(ValueError, lambda s, d: s % d, s, dict(who='tim')) |
| s = Template('$who likes ${what)') |
| raises(ValueError, lambda s, d: s % d, s, dict(who='tim')) |
| s = Template('$who likes $100') |
| raises(ValueError, lambda s, d: s % d, s, dict(who='tim')) |
| |
| |
| def suite(): |
| suite = unittest.TestSuite() |
| suite.addTest(unittest.makeSuite(TestTemplate)) |
| return suite |
| |
| |
| def test_main(): |
| from test import test_support |
| test_support.run_suite(suite()) |
| |
| |
| if __name__ == '__main__': |
| unittest.main() |