tests.py 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151
  1. import os
  2. import tempfile
  3. from django.conf import settings
  4. from django.template import TemplateDoesNotExist, TemplateSyntaxError
  5. from django.test import TestCase, RequestFactory
  6. from mako.exceptions import SyntaxException
  7. from mako.template import Template as MakoTemplate
  8. from djangomako.backends import MakoEngine, Template, MakoBackend
  9. class MakoEngineTests(TestCase):
  10. def setUp(self):
  11. tmp_dir = tempfile.gettempdir()
  12. self.template_name = 'good_template.html'
  13. template_string = '<% name="Jazzar" %> My name is ${name}.'
  14. tmp_template = os.path.join(tmp_dir, self.template_name)
  15. with open(tmp_template, 'w') as f:
  16. f.write(template_string)
  17. options = {'directories': [tmp_dir]}
  18. self.engine = MakoEngine(**options)
  19. def test_get_template(self):
  20. template = self.engine.get_template(self.template_name)
  21. self.assertIsNotNone(template)
  22. self.assertIsInstance(template, MakoTemplate)
  23. def test_from_string(self):
  24. template_code = '1+1 = ${ value }'
  25. template = self.engine.from_string(template_code)
  26. self.assertIsNotNone(template)
  27. self.assertIsInstance(template, MakoTemplate)
  28. class TemplateStaticTests(TestCase):
  29. def setUp(self):
  30. tmp_dir = tempfile.gettempdir()
  31. template_name = 'good_template.html'
  32. self.template_string = 'My name is ${name}, and my static ' \
  33. 'url is ${ static(\'image.png\') }'
  34. tmp_template = os.path.join(tmp_dir, template_name)
  35. with open(tmp_template, 'w') as f:
  36. f.write(self.template_string)
  37. options = {'directories': [tmp_dir]}
  38. self.engine = MakoEngine(**options)
  39. template = self.engine.get_template(template_name)
  40. self.template = Template(template)
  41. def test_render(self):
  42. request_factory = RequestFactory()
  43. request = request_factory.get('/mako')
  44. context = {'name': 'Jazzar'}
  45. result = self.template.render(context=context, request=request)
  46. self.assertIn('My name is Jazzar', result)
  47. self.assertIn('image.png', result)
  48. self.assertIn(settings.STATIC_URL, result)
  49. class TemplateTests(TestCase):
  50. def setUp(self):
  51. tmp_dir = tempfile.gettempdir()
  52. template_name = 'good_template.html'
  53. self.template_string = 'My name is ${name}.'
  54. tmp_template = os.path.join(tmp_dir, template_name)
  55. with open(tmp_template, 'w') as f:
  56. f.write(self.template_string)
  57. options = {'directories': [tmp_dir]}
  58. self.engine = MakoEngine(**options)
  59. template = self.engine.get_template(template_name)
  60. self.template = Template(template)
  61. def test_render(self):
  62. request_factory = RequestFactory()
  63. request = request_factory.get('/mako')
  64. context = {'name': 'Jazzar'}
  65. result = self.template.render(context=context, request=request)
  66. self.assertEqual(result, 'My name is Jazzar.')
  67. def test_render_request_only(self):
  68. template_string = '<% name = "Jazzar" %>My name is ${ name }.'
  69. template = self.engine.from_string(template_string)
  70. template = Template(template)
  71. self.assertEqual(template.render(), 'My name is Jazzar.')
  72. def test_render_error(self):
  73. with self.assertRaises(NameError):
  74. # This should fail because the variables defined in the
  75. # template aren't passed in the context.
  76. self.template.render()
  77. class MakoBackendTests(TestCase):
  78. def setUp(self):
  79. self.tmp_dir = tempfile.gettempdir()
  80. self.template_name = 'good_template.html'
  81. self.bad_string = '<% name="Jazzar" My name is ${name}.'
  82. self.template_string = '<% name="Jazzar" %> My name is ${name}.'
  83. tmp_template = os.path.join(self.tmp_dir, self.template_name)
  84. with open(tmp_template, 'w') as f:
  85. f.write(self.template_string)
  86. parameters = {
  87. 'NAME': 'mako',
  88. 'DIRS': [self.tmp_dir],
  89. 'APP_DIRS': False,
  90. 'OPTIONS': {}
  91. }
  92. self.mako_backend = MakoBackend(parameters)
  93. def test_from_string(self):
  94. template = self.mako_backend.from_string(self.template_string)
  95. self.assertIsNotNone(template)
  96. self.assertIsInstance(template, Template)
  97. def test_get_template(self):
  98. template = self.mako_backend.get_template(self.template_name)
  99. self.assertIsNotNone(self.template_name)
  100. self.assertIsInstance(template, Template)
  101. def test_from_string_error(self):
  102. with self.assertRaises(TemplateSyntaxError):
  103. self.mako_backend.from_string(self.bad_string)
  104. def test_get_template_error(self):
  105. with self.assertRaises(TemplateDoesNotExist):
  106. self.mako_backend.get_template('wow.html')
  107. # Mocj a new bad template
  108. template_name = 'bad.html'
  109. bad_template = os.path.join(self.tmp_dir, template_name)
  110. with open(bad_template, 'w') as f:
  111. f.write(self.bad_string)
  112. with self.assertRaises(SyntaxException):
  113. self.mako_backend.get_template(template_name)