# 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')

    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_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_suite():
    suite = unittest.TestSuite()
    suite.addTest(unittest.makeSuite(TestTemplate))
    return suite


if __name__ == '__main__':
    unittest.main()
