Fixed warnings.
[libfirm] / scripts / jinja2 / tests.py
1 # -*- coding: utf-8 -*-
2 """
3     jinja2.tests
4     ~~~~~~~~~~~~
5
6     Jinja test functions. Used with the "is" operator.
7
8     :copyright: (c) 2010 by the Jinja Team.
9     :license: BSD, see LICENSE for more details.
10 """
11 import re
12 from jinja2.runtime import Undefined
13
14 try:
15     from collections import Mapping as MappingType
16 except ImportError:
17     import UserDict
18     MappingType = (UserDict.UserDict, UserDict.DictMixin, dict)
19
20 # nose, nothing here to test
21 __test__ = False
22
23
24 number_re = re.compile(r'^-?\d+(\.\d+)?$')
25 regex_type = type(number_re)
26
27
28 try:
29     test_callable = callable
30 except NameError:
31     def test_callable(x):
32         return hasattr(x, '__call__')
33
34
35 def test_odd(value):
36     """Return true if the variable is odd."""
37     return value % 2 == 1
38
39
40 def test_even(value):
41     """Return true if the variable is even."""
42     return value % 2 == 0
43
44
45 def test_divisibleby(value, num):
46     """Check if a variable is divisible by a number."""
47     return value % num == 0
48
49
50 def test_defined(value):
51     """Return true if the variable is defined:
52
53     .. sourcecode:: jinja
54
55         {% if variable is defined %}
56             value of variable: {{ variable }}
57         {% else %}
58             variable is not defined
59         {% endif %}
60
61     See the :func:`default` filter for a simple way to set undefined
62     variables.
63     """
64     return not isinstance(value, Undefined)
65
66
67 def test_undefined(value):
68     """Like :func:`defined` but the other way round."""
69     return isinstance(value, Undefined)
70
71
72 def test_none(value):
73     """Return true if the variable is none."""
74     return value is None
75
76
77 def test_lower(value):
78     """Return true if the variable is lowercased."""
79     return unicode(value).islower()
80
81
82 def test_upper(value):
83     """Return true if the variable is uppercased."""
84     return unicode(value).isupper()
85
86
87 def test_string(value):
88     """Return true if the object is a string."""
89     return isinstance(value, basestring)
90
91
92 def test_mapping(value):
93     """Return true if the object is a mapping (dict etc.).
94
95     .. versionadded:: 2.6
96     """
97     return isinstance(value, MappingType)
98
99
100 def test_number(value):
101     """Return true if the variable is a number."""
102     return isinstance(value, (int, long, float, complex))
103
104
105 def test_sequence(value):
106     """Return true if the variable is a sequence. Sequences are variables
107     that are iterable.
108     """
109     try:
110         len(value)
111         value.__getitem__
112     except:
113         return False
114     return True
115
116
117 def test_sameas(value, other):
118     """Check if an object points to the same memory address than another
119     object:
120
121     .. sourcecode:: jinja
122
123         {% if foo.attribute is sameas false %}
124             the foo attribute really is the `False` singleton
125         {% endif %}
126     """
127     return value is other
128
129
130 def test_iterable(value):
131     """Check if it's possible to iterate over an object."""
132     try:
133         iter(value)
134     except TypeError:
135         return False
136     return True
137
138
139 def test_escaped(value):
140     """Check if the value is escaped."""
141     return hasattr(value, '__html__')
142
143
144 TESTS = {
145     'odd':              test_odd,
146     'even':             test_even,
147     'divisibleby':      test_divisibleby,
148     'defined':          test_defined,
149     'undefined':        test_undefined,
150     'none':             test_none,
151     'lower':            test_lower,
152     'upper':            test_upper,
153     'string':           test_string,
154     'mapping':          test_mapping,
155     'number':           test_number,
156     'sequence':         test_sequence,
157     'iterable':         test_iterable,
158     'callable':         test_callable,
159     'sameas':           test_sameas,
160     'escaped':          test_escaped
161 }