import tempfile

from pecan.templating import RendererFactory, format_line_context
from pecan.tests import PecanTestCase


class TestTemplate(PecanTestCase):
    def setUp(self):
        super(TestTemplate, self).setUp()
        self.rf = RendererFactory()

    def test_available(self):
        self.assertTrue(self.rf.available('json'))
        self.assertFalse(self.rf.available('badrenderer'))

    def test_create_bad(self):
        self.assertEqual(self.rf.get('doesnotexist', '/'), None)

    def test_extra_vars(self):
        extra_vars = self.rf.extra_vars
        self.assertEqual(extra_vars.make_ns({}), {})

        extra_vars.update({'foo': 1})
        self.assertEqual(extra_vars.make_ns({}), {'foo': 1})

    def test_update_extra_vars(self):
        extra_vars = self.rf.extra_vars
        extra_vars.update({'foo': 1})

        self.assertEqual(extra_vars.make_ns({'bar': 2}), {'foo': 1, 'bar': 2})
        self.assertEqual(extra_vars.make_ns({'foo': 2}), {'foo': 2})


class TestTemplateLineFormat(PecanTestCase):

    def setUp(self):
        super(TestTemplateLineFormat, self).setUp()
        self.f = tempfile.NamedTemporaryFile()

    def tearDown(self):
        del self.f

    def test_format_line_context(self):
        for i in range(11):
            self.f.write(b'Testing Line %d\n' % i)
        self.f.flush()

        assert format_line_context(self.f.name, 0).count('Testing Line') == 10
