summaryrefslogtreecommitdiff
path: root/test/test_templite.py
diff options
context:
space:
mode:
authorNed Batchelder <ned@nedbatchelder.com>2009-04-19 18:43:37 -0400
committerNed Batchelder <ned@nedbatchelder.com>2009-04-19 18:43:37 -0400
commit7089554c7d18bddd638138856fb96c012e4120c8 (patch)
tree5dad5eb1b3f8dece8c2b01de35128eb28475df92 /test/test_templite.py
parent28d93fedc34059dfc09db9912841ae7b13f508a9 (diff)
downloadpython-coveragepy-git-7089554c7d18bddd638138856fb96c012e4120c8.tar.gz
Templite: a lightweight template class to use when making HTML reports.
Diffstat (limited to 'test/test_templite.py')
-rw-r--r--test/test_templite.py95
1 files changed, 95 insertions, 0 deletions
diff --git a/test/test_templite.py b/test/test_templite.py
new file mode 100644
index 00000000..a270bf8e
--- /dev/null
+++ b/test/test_templite.py
@@ -0,0 +1,95 @@
+"""Tests for coverage.template."""
+
+from coverage.templite import Templite
+import unittest
+
+class AnyOldObject:
+ pass
+
+class TemplateTest(unittest.TestCase):
+
+ def test_passthrough(self):
+ # Strings without variables are passed through unchanged.
+ self.assertEqual(Templite("Hello").render(), "Hello")
+ self.assertEqual(
+ Templite("Hello, 20% fun time!").render(),
+ "Hello, 20% fun time!"
+ )
+
+ def test_variables(self):
+ # Variables use {{var}} syntax.
+ self.assertEqual(
+ Templite("Hello, {{name}}!").render({'name':'Ned'}),
+ "Hello, Ned!"
+ )
+
+ def test_pipes(self):
+ # Variables can be filtered with pipes.
+ data = {
+ 'name': 'Ned',
+ 'upper': lambda x: x.upper(),
+ 'second': lambda x: x[1],
+ }
+ self.assertEqual(
+ Templite("Hello, {{name|upper}}!").render(data),
+ "Hello, NED!"
+ )
+ # Pipes can be concatenated.
+ self.assertEqual(
+ Templite("Hello, {{name|upper|second}}!").render(data),
+ "Hello, E!"
+ )
+
+ def test_reusability(self):
+ # A single Templite can be used more than once with different data.
+ globs = {
+ 'upper': lambda x: x.upper(),
+ 'punct': '!',
+ }
+
+ template = Templite("This is {{name|upper}}{{punct}}", globs)
+ self.assertEqual(template.render({'name':'Ned'}), "This is NED!")
+ self.assertEqual(template.render({'name':'Ben'}), "This is BEN!")
+
+ def test_attribute(self):
+ # Variables' attributes can be accessed with dots.
+ obj = AnyOldObject()
+ obj.a = "Ay"
+ self.assertEqual(
+ Templite("{{obj.a}}").render(locals()), "Ay"
+ )
+
+ obj2 = AnyOldObject()
+ obj2.obj = obj
+ obj2.b = "Bee"
+ self.assertEqual(
+ Templite("{{obj2.obj.a}} {{obj2.b}}").render(locals()), "Ay Bee"
+ )
+
+ def test_member_function(self):
+ # Variables' member functions can be used, as long as they are nullary.
+ class WithMemberFns:
+ def ditto(self):
+ return self.txt + self.txt
+ obj = WithMemberFns()
+ obj.txt = "Once"
+ self.assertEqual(
+ Templite("{{obj.ditto}}").render(locals()), "OnceOnce"
+ )
+
+ def test_loops(self):
+ # Loops work like in Django.
+ nums = [1,2,3,4]
+ self.assertEqual(
+ Templite("Look: {% for n in nums %}{{n}}, {% endfor %}done.").
+ render(locals()), "Look: 1, 2, 3, 4, done."
+ )
+ rev = reversed
+ self.assertEqual(
+ Templite("Look: {% for n in nums|rev %}{{n}}, {% endfor %}done.").
+ render(locals()), "Look: 4, 3, 2, 1, done."
+ )
+
+
+if __name__ == '__main__':
+ unittest.main()