Beispiel #1
0
class TestJinjaTemplateBuilder(unittest.TestCase):

    def setUp(self):
        self.templates = tempfile.mkdtemp()
        self.builder = JinjaTemplateBuilder(self.templates)
        self.base_file = os.path.join(self.templates, 'base.j2')
        open(self.base_file, 'w').close()

    def test_builds_template(self):
        template = self.builder.build(self.base_file)
        self.assertTrue(isinstance(template, jinja2.Template))

    def test_aborts_with_bad_template(self):
        with open(self.base_file, 'w') as f:
            f.write('{%')  # No closing template marker
        with self.assertRaises(AbortError):
            self.builder.build(self.base_file)

    def test_last_modified_with_newer_parent(self):
        template_file = os.path.join(self.templates, 'derived.j2')
        with open(template_file, 'w') as f:
            f.write('{% extends "base.j2" %}')
        # Fast file systems make mtime equal for both files. Set to the future.
        template_mtime = os.path.getmtime(template_file)
        future = template_mtime + 1
        os.utime(self.base_file, (future, future))

        template = self.builder.build(template_file)
        self.assertEqual(
            os.path.getmtime(self.base_file), template.last_modified)

    def test_skips_nonetype_parent(self):
        with open(self.base_file, 'w') as f:
            f.write('{% include helper %}')  # Non-existent "parent"
        template = self.builder.build(self.base_file)
        self.assertTrue(isinstance(template, jinja2.Template))

    def test_gets_cached_modified_time(self):
        template = self.builder.build(self.base_file)
        template = self.builder.build(self.base_file)
        self.assertTrue(isinstance(template, jinja2.Template))