1. import functools
    
  2. 
    
  3. from django.template import Library
    
  4. from django.template.base import Node
    
  5. from django.test import SimpleTestCase
    
  6. 
    
  7. 
    
  8. class FilterRegistrationTests(SimpleTestCase):
    
  9.     def setUp(self):
    
  10.         self.library = Library()
    
  11. 
    
  12.     def test_filter(self):
    
  13.         @self.library.filter
    
  14.         def func():
    
  15.             return ""
    
  16. 
    
  17.         self.assertEqual(self.library.filters["func"], func)
    
  18. 
    
  19.     def test_filter_parens(self):
    
  20.         @self.library.filter()
    
  21.         def func():
    
  22.             return ""
    
  23. 
    
  24.         self.assertEqual(self.library.filters["func"], func)
    
  25. 
    
  26.     def test_filter_name_arg(self):
    
  27.         @self.library.filter("name")
    
  28.         def func():
    
  29.             return ""
    
  30. 
    
  31.         self.assertEqual(self.library.filters["name"], func)
    
  32. 
    
  33.     def test_filter_name_kwarg(self):
    
  34.         @self.library.filter(name="name")
    
  35.         def func():
    
  36.             return ""
    
  37. 
    
  38.         self.assertEqual(self.library.filters["name"], func)
    
  39. 
    
  40.     def test_filter_call(self):
    
  41.         def func():
    
  42.             return ""
    
  43. 
    
  44.         self.library.filter("name", func)
    
  45.         self.assertEqual(self.library.filters["name"], func)
    
  46. 
    
  47.     def test_filter_invalid(self):
    
  48.         msg = "Unsupported arguments to Library.filter: (None, '')"
    
  49.         with self.assertRaisesMessage(ValueError, msg):
    
  50.             self.library.filter(None, "")
    
  51. 
    
  52. 
    
  53. class InclusionTagRegistrationTests(SimpleTestCase):
    
  54.     def setUp(self):
    
  55.         self.library = Library()
    
  56. 
    
  57.     def test_inclusion_tag(self):
    
  58.         @self.library.inclusion_tag("template.html")
    
  59.         def func():
    
  60.             return ""
    
  61. 
    
  62.         self.assertIn("func", self.library.tags)
    
  63. 
    
  64.     def test_inclusion_tag_name(self):
    
  65.         @self.library.inclusion_tag("template.html", name="name")
    
  66.         def func():
    
  67.             return ""
    
  68. 
    
  69.         self.assertIn("name", self.library.tags)
    
  70. 
    
  71.     def test_inclusion_tag_wrapped(self):
    
  72.         @self.library.inclusion_tag("template.html")
    
  73.         @functools.lru_cache(maxsize=32)
    
  74.         def func():
    
  75.             return ""
    
  76. 
    
  77.         func_wrapped = self.library.tags["func"].__wrapped__
    
  78.         self.assertIs(func_wrapped, func)
    
  79.         self.assertTrue(hasattr(func_wrapped, "cache_info"))
    
  80. 
    
  81. 
    
  82. class SimpleTagRegistrationTests(SimpleTestCase):
    
  83.     def setUp(self):
    
  84.         self.library = Library()
    
  85. 
    
  86.     def test_simple_tag(self):
    
  87.         @self.library.simple_tag
    
  88.         def func():
    
  89.             return ""
    
  90. 
    
  91.         self.assertIn("func", self.library.tags)
    
  92. 
    
  93.     def test_simple_tag_parens(self):
    
  94.         @self.library.simple_tag()
    
  95.         def func():
    
  96.             return ""
    
  97. 
    
  98.         self.assertIn("func", self.library.tags)
    
  99. 
    
  100.     def test_simple_tag_name_kwarg(self):
    
  101.         @self.library.simple_tag(name="name")
    
  102.         def func():
    
  103.             return ""
    
  104. 
    
  105.         self.assertIn("name", self.library.tags)
    
  106. 
    
  107.     def test_simple_tag_invalid(self):
    
  108.         msg = "Invalid arguments provided to simple_tag"
    
  109.         with self.assertRaisesMessage(ValueError, msg):
    
  110.             self.library.simple_tag("invalid")
    
  111. 
    
  112.     def test_simple_tag_wrapped(self):
    
  113.         @self.library.simple_tag
    
  114.         @functools.lru_cache(maxsize=32)
    
  115.         def func():
    
  116.             return ""
    
  117. 
    
  118.         func_wrapped = self.library.tags["func"].__wrapped__
    
  119.         self.assertIs(func_wrapped, func)
    
  120.         self.assertTrue(hasattr(func_wrapped, "cache_info"))
    
  121. 
    
  122. 
    
  123. class TagRegistrationTests(SimpleTestCase):
    
  124.     def setUp(self):
    
  125.         self.library = Library()
    
  126. 
    
  127.     def test_tag(self):
    
  128.         @self.library.tag
    
  129.         def func(parser, token):
    
  130.             return Node()
    
  131. 
    
  132.         self.assertEqual(self.library.tags["func"], func)
    
  133. 
    
  134.     def test_tag_parens(self):
    
  135.         @self.library.tag()
    
  136.         def func(parser, token):
    
  137.             return Node()
    
  138. 
    
  139.         self.assertEqual(self.library.tags["func"], func)
    
  140. 
    
  141.     def test_tag_name_arg(self):
    
  142.         @self.library.tag("name")
    
  143.         def func(parser, token):
    
  144.             return Node()
    
  145. 
    
  146.         self.assertEqual(self.library.tags["name"], func)
    
  147. 
    
  148.     def test_tag_name_kwarg(self):
    
  149.         @self.library.tag(name="name")
    
  150.         def func(parser, token):
    
  151.             return Node()
    
  152. 
    
  153.         self.assertEqual(self.library.tags["name"], func)
    
  154. 
    
  155.     def test_tag_call(self):
    
  156.         def func(parser, token):
    
  157.             return Node()
    
  158. 
    
  159.         self.library.tag("name", func)
    
  160.         self.assertEqual(self.library.tags["name"], func)
    
  161. 
    
  162.     def test_tag_invalid(self):
    
  163.         msg = "Unsupported arguments to Library.tag: (None, '')"
    
  164.         with self.assertRaisesMessage(ValueError, msg):
    
  165.             self.library.tag(None, "")