diff options
Diffstat (limited to 'tests/test_templite.py')
-rw-r--r-- | tests/test_templite.py | 49 |
1 files changed, 31 insertions, 18 deletions
diff --git a/tests/test_templite.py b/tests/test_templite.py index c861c2ff..4b1f6e45 100644 --- a/tests/test_templite.py +++ b/tests/test_templite.py @@ -1,6 +1,7 @@ """Tests for coverage.templite.""" -from coverage.templite import Templite +import re +from coverage.templite import Templite, TempliteSyntaxError from tests.coveragetest import CoverageTest # pylint: disable=W0612,E1101 @@ -33,6 +34,10 @@ class TempliteTest(CoverageTest): if result: self.assertEqual(actual, result) + def assertSynErr(self, msg): + pat = "^" + re.escape(msg) + "$" + return self.assertRaisesRegexp(TempliteSyntaxError, pat) + def test_passthrough(self): # Strings without variables are passed through unchanged. self.assertEqual(Templite("Hello").render(), "Hello") @@ -231,34 +236,42 @@ class TempliteTest(CoverageTest): "Hey {{foo.bar.baz}} there", {'foo': None}, "Hey ??? there" ) + def test_bad_names(self): + with self.assertSynErr("Not a valid name: 'var%&!@'"): + self.try_render("Wat: {{ var%&!@ }}") + with self.assertSynErr("Not a valid name: 'filter%&!@'"): + self.try_render("Wat: {{ foo|filter%&!@ }}") + with self.assertSynErr("Not a valid name: '@'"): + self.try_render("Wat: {% for @ in x %}{% endfor %}") + def test_bogus_tag_syntax(self): - msg = "Don't understand tag: 'bogus'" - with self.assertRaisesRegexp(SyntaxError, msg): + with self.assertSynErr("Don't understand tag: 'bogus'"): self.try_render("Huh: {% bogus %}!!{% endbogus %}??") def test_malformed_if(self): - msg = "Don't understand if: '{% if %}'" - with self.assertRaisesRegexp(SyntaxError, msg): + with self.assertSynErr("Don't understand if: '{% if %}'"): self.try_render("Buh? {% if %}hi!{% endif %}") - msg = "Don't understand if: '{% if this or that %}'" - with self.assertRaisesRegexp(SyntaxError, msg): + with self.assertSynErr("Don't understand if: '{% if this or that %}'"): self.try_render("Buh? {% if this or that %}hi!{% endif %}") - def test_malformed_for_(self): - msg = "Don't understand for: '{% for %}'" - with self.assertRaisesRegexp(SyntaxError, msg): + def test_malformed_for(self): + with self.assertSynErr("Don't understand for: '{% for %}'"): self.try_render("Weird: {% for %}loop{% endfor %}") - msg = "Don't understand for: '{% for x from y %}'" - with self.assertRaisesRegexp(SyntaxError, msg): + with self.assertSynErr("Don't understand for: '{% for x from y %}'"): self.try_render("Weird: {% for x from y %}loop{% endfor %}") - msg = "Don't understand for: '{% for x, y in z %}'" - with self.assertRaisesRegexp(SyntaxError, msg): + with self.assertSynErr("Don't understand for: '{% for x, y in z %}'"): self.try_render("Weird: {% for x, y in z %}loop{% endfor %}") def test_bad_nesting(self): - msg = "Unmatched action tag: 'if'" - with self.assertRaisesRegexp(SyntaxError, msg): + with self.assertSynErr("Unmatched action tag: 'if'"): self.try_render("{% if x %}X") - msg = "Mismatched end tag: 'for'" - with self.assertRaisesRegexp(SyntaxError, msg): + with self.assertSynErr("Mismatched end tag: 'for'"): self.try_render("{% if x %}X{% endfor %}") + with self.assertSynErr("Too many ends: '{% endif %}'"): + self.try_render("{% if x %}{% endif %}{% endif %}") + + def test_malformed_end(self): + with self.assertSynErr("Don't understand end: '{% end if %}'"): + self.try_render("{% if x %}X{% end if %}") + with self.assertSynErr("Don't understand end: '{% endif now %}'"): + self.try_render("{% if x %}X{% endif now %}") |