From 41d6f71c69e0d5b5c24d98419e15e636b88d896d Mon Sep 17 00:00:00 2001 From: Armin Ronacher Date: Tue, 9 Feb 2010 16:43:12 +0100 Subject: [PATCH] Added tests for the test functions (the jinja ones ^^) --HG-- branch : trunk --- jinja2/testsuite/__init__.py | 3 +- jinja2/testsuite/filters.py | 61 ------------------------- jinja2/testsuite/tests.py | 87 ++++++++++++++++++++++++++++++++++++ 3 files changed, 89 insertions(+), 62 deletions(-) create mode 100644 jinja2/testsuite/tests.py diff --git a/jinja2/testsuite/__init__.py b/jinja2/testsuite/__init__.py index 6a4b5ff..dce9629 100644 --- a/jinja2/testsuite/__init__.py +++ b/jinja2/testsuite/__init__.py @@ -44,10 +44,11 @@ class JinjaTestCase(unittest.TestCase): def suite(): - from jinja2.testsuite import ext, filters, core_tags, loader + from jinja2.testsuite import ext, filters, tests, core_tags, loader suite = unittest.TestSuite() suite.addTest(ext.suite()) suite.addTest(filters.suite()) + suite.addTest(tests.suite()) suite.addTest(core_tags.suite()) suite.addTest(loader.suite()) return suite diff --git a/jinja2/testsuite/filters.py b/jinja2/testsuite/filters.py index e3bca02..e5274c6 100644 --- a/jinja2/testsuite/filters.py +++ b/jinja2/testsuite/filters.py @@ -16,67 +16,6 @@ from jinja2 import Markup, Environment env = Environment() -CAPITALIZE = '''{{ "foo bar"|capitalize }}''' -CENTER = '''{{ "foo"|center(9) }}''' -DEFAULT = '''{{ missing|default("no") }}|{{ false|default('no') }}|\ -{{ false|default('no', true) }}|{{ given|default("no") }}''' -DICTSORT = '''{{ foo|dictsort }}|\ -{{ foo|dictsort(true) }}|\ -{{ foo|dictsort(false, 'value') }}''' -BATCH = '''{{ foo|batch(3)|list }}|{{ foo|batch(3, 'X')|list }}''' -SLICE = '''{{ foo|slice(3)|list }}|{{ foo|slice(3, 'X')|list }}''' -ESCAPE = '''{{ '<">&'|escape }}''' -STRIPTAGS = '''{{ foo|striptags }}''' -FILESIZEFORMAT = '{{ 100|filesizeformat }}|\ -{{ 1000|filesizeformat }}|\ -{{ 1000000|filesizeformat }}|\ -{{ 1000000000|filesizeformat }}|\ -{{ 1000000000000|filesizeformat }}|\ -{{ 100|filesizeformat(true) }}|\ -{{ 1000|filesizeformat(true) }}|\ -{{ 1000000|filesizeformat(true) }}|\ -{{ 1000000000|filesizeformat(true) }}|\ -{{ 1000000000000|filesizeformat(true) }}' -FIRST = '''{{ foo|first }}''' -FLOAT = '''{{ "42"|float }}|{{ "ajsghasjgd"|float }}|{{ "32.32"|float }}''' -FORMAT = '''{{ "%s|%s"|format("a", "b") }}''' -INDENT = '''{{ foo|indent(2) }}|{{ foo|indent(2, true) }}''' -INT = '''{{ "42"|int }}|{{ "ajsghasjgd"|int }}|{{ "32.32"|int }}''' -JOIN = '''{{ [1, 2, 3]|join("|") }}''' -LAST = '''{{ foo|last }}''' -LENGTH = '''{{ "hello world"|length }}''' -LOWER = '''{{ "FOO"|lower }}''' -PPRINT = '''{{ data|pprint }}''' -RANDOM = '''{{ seq|random }}''' -REVERSE = '''{{ "foobar"|reverse|join }}|{{ [1, 2, 3]|reverse|list }}''' -STRING = '''{{ range(10)|string }}''' -TITLE = '''{{ "foo bar"|title }}''' -TRIM = '''{{ " foo "|trim }}''' -TRUNCATE = '''{{ data|truncate(15, true, ">>>") }}|\ -{{ data|truncate(15, false, ">>>") }}|\ -{{ smalldata|truncate(15) }}''' -UPPER = '''{{ "foo"|upper }}''' -URLIZE = '''{{ "foo http://www.example.com/ bar"|urlize }}''' -WORDCOUNT = '''{{ "foo bar baz"|wordcount }}''' -BLOCK = '''{% filter lower|escape %}{% endfilter %}''' -CHAINING = '''{{ ['', '']|first|upper|escape }}''' -SUM = '''{{ [1, 2, 3, 4, 5, 6]|sum }}''' -ABS = '''{{ -1|abs }}|{{ 1|abs }}''' -ROUND = '''{{ 2.7|round }}|{{ 2.1|round }}|\ -{{ 2.1234|round(2, 'floor') }}|{{ 2.1|round(0, 'ceil') }}''' -XMLATTR = '''{{ {'foo': 42, 'bar': 23, 'fish': none, -'spam': missing, 'blub:blub': ''}|xmlattr }}''' -SORT1 = '''{{ [2, 3, 1]|sort }}|{{ [2, 3, 1]|sort(true) }}''' -GROUPBY = '''{% for grouper, list in [{'foo': 1, 'bar': 2}, - {'foo': 2, 'bar': 3}, - {'foo': 1, 'bar': 1}, - {'foo': 3, 'bar': 4}]|groupby('foo') -%} -{{ grouper }}: {{ list|join(', ') }} -{% endfor %}''' -FILTERTAG = '''{% filter upper|replace('FOO', 'foo') %}foobar{% endfilter %}''' -SORT2 = '''{{ ['foo', 'Bar', 'blah']|sort }}''' - - class FilterTestCase(JinjaTestCase): def test_capitalize(self): diff --git a/jinja2/testsuite/tests.py b/jinja2/testsuite/tests.py new file mode 100644 index 0000000..cd5006f --- /dev/null +++ b/jinja2/testsuite/tests.py @@ -0,0 +1,87 @@ +# -*- coding: utf-8 -*- +""" + jinja2.testsuite.tests + ~~~~~~~~~~~~~~~~~~~~~~ + + Who tests the tests? + + :copyright: (c) 2010 by the Jinja Team. + :license: BSD, see LICENSE for more details. +""" +import unittest +from jinja2.testsuite import JinjaTestCase + +from jinja2 import Markup, Environment + +env = Environment() + + +class TestsTestCase(JinjaTestCase): + + def test_defined(self): + tmpl = env.from_string('{{ missing is defined }}|{{ true is defined }}') + assert tmpl.render() == 'False|True' + + def test_even(self): + tmpl = env.from_string('''{{ 1 is even }}|{{ 2 is even }}''') + assert tmpl.render() == 'False|True' + + def test_odd(self): + tmpl = env.from_string('''{{ 1 is odd }}|{{ 2 is odd }}''') + assert tmpl.render() == 'True|False' + + def test_lower(self): + tmpl = env.from_string('''{{ "foo" is lower }}|{{ "FOO" is lower }}''') + assert tmpl.render() == 'True|False' + + def test_typechecks(self): + tmpl = env.from_string(''' + {{ 42 is undefined }} + {{ 42 is defined }} + {{ 42 is none }} + {{ none is none }} + {{ 42 is number }} + {{ 42 is string }} + {{ "foo" is string }} + {{ "foo" is sequence }} + {{ [1] is sequence }} + {{ range is callable }} + {{ 42 is callable }} + {{ range(5) is iterable }} + ''') + assert tmpl.render().split() == [ + 'False', 'True', 'False', 'True', 'True', 'False', + 'True', 'True', 'True', 'True', 'False', 'True' + ] + + def test_sequence(self): + tmpl = env.from_string( + '{{ [1, 2, 3] is sequence }}|' + '{{ "foo" is sequence }}|' + '{{ 42 is sequence }}' + ) + assert tmpl.render() == 'True|True|False' + + def test_upper(self): + tmpl = env.from_string('{{ "FOO" is upper }}|{{ "foo" is upper }}') + assert tmpl.render() == 'True|False' + + def test_sameas(self): + tmpl = env.from_string('{{ foo is sameas false }}|' + '{{ 0 is sameas false }}') + assert tmpl.render(foo=False) == 'True|False' + + def test_no_paren_for_arg1(self): + tmpl = env.from_string('{{ foo is sameas none }}') + assert tmpl.render(foo=None) == 'True' + + def test_escaped(self): + env = Environment(autoescape=True) + tmpl = env.from_string('{{ x is escaped }}|{{ y is escaped }}') + assert tmpl.render(x='foo', y=Markup('foo')) == 'False|True' + + +def suite(): + suite = unittest.TestSuite() + suite.addTest(unittest.makeSuite(TestsTestCase)) + return suite -- 2.26.2