# -*- coding: utf-8 -*-
import os

import webapp2
from webapp2_extras import jinja2

import test_base

current_dir = os.path.abspath(os.path.dirname(__file__))
template_path = os.path.join(current_dir, 'resources', 'jinja2_templates')
compiled_path = os.path.join(current_dir, 'resources',
                             'jinja2_templates_compiled')

class TestJinja2(test_base.BaseTestCase):
    def test_render_template_with_i18n(self):
        app = webapp2.WSGIApplication(config={
            'webapp2_extras.jinja2': {
                'template_path': template_path,
                'environment_args': {
                    'autoescape': True,
                    'extensions': [
                        'jinja2.ext.autoescape',
                        'jinja2.ext.with_',
                        'jinja2.ext.i18n',
                    ],
                },
            },
        })
        req = webapp2.Request.blank('/')
        app.set_globals(app=app, request=req)
        j = jinja2.Jinja2(app)

        message = 'Hello, i18n World!'
        res = j.render_template('template2.html', message=message)
        self.assertEqual(res, message)

    def test_render_template_globals_filters(self):
        app = webapp2.WSGIApplication(config={
            'webapp2_extras.jinja2': {
                'template_path': template_path,
                'globals': dict(foo='fooglobal'),
                'filters': dict(foo=lambda x: x + '-foofilter'),
            },
        })
        req = webapp2.Request.blank('/')
        app.set_globals(app=app, request=req)
        j = jinja2.Jinja2(app)

        message = 'fooglobal-foofilter'
        res = j.render_template('template3.html', message=message)
        self.assertEqual(res, message)

    def test_render_template_force_compiled(self):
        app = webapp2.WSGIApplication(config={
            'webapp2_extras.jinja2': {
                'template_path': template_path,
                'compiled_path': compiled_path,
                'force_compiled': True,
            }
        })
        req = webapp2.Request.blank('/')
        app.set_globals(app=app, request=req)
        j = jinja2.Jinja2(app)

        message = 'Hello, World!'
        res = j.render_template('template1.html', message=message)
        self.assertEqual(res, message)

    def test_get_template_attribute(self):
        app = webapp2.WSGIApplication(config={
            'webapp2_extras.jinja2': {
                'template_path': template_path,
            }
        })
        j = jinja2.Jinja2(app)
        hello = j.get_template_attribute('hello.html', 'hello')
        self.assertEqual(hello('World'), 'Hello, World!')

    def test_set_jinja2(self):
        app = webapp2.WSGIApplication()
        self.assertEqual(len(app.registry), 0)
        jinja2.set_jinja2(jinja2.Jinja2(app), app=app)
        self.assertEqual(len(app.registry), 1)
        j = jinja2.get_jinja2(app=app)
        self.assertTrue(isinstance(j, jinja2.Jinja2))

    def test_get_jinja2(self):
        app = webapp2.WSGIApplication()
        self.assertEqual(len(app.registry), 0)
        j = jinja2.get_jinja2(app=app)
        self.assertEqual(len(app.registry), 1)
        self.assertTrue(isinstance(j, jinja2.Jinja2))


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