diff --git a/django/utils/functional.py b/django/utils/functional.py
index 43b7ab1..e52ab76 100644
a
|
b
|
def lazy(func, *resultclasses):
|
167 | 167 | for resultclass in resultclasses: |
168 | 168 | cls.__dispatch[resultclass] = {} |
169 | 169 | for (k, v) in resultclass.__dict__.items(): |
| 170 | # All __promise__ return the same wrapper method, but they |
| 171 | # also do setup, inserting the method into the dispatch |
| 172 | # dict. |
| 173 | meth = cls.__promise__(resultclass, k, v) |
170 | 174 | if hasattr(cls, k): |
171 | 175 | continue |
172 | | setattr(cls, k, cls.__promise__(resultclass, k, v)) |
| 176 | setattr(cls, k, meth) |
173 | 177 | cls._delegate_str = str in resultclasses |
174 | 178 | cls._delegate_unicode = unicode in resultclasses |
175 | 179 | assert not (cls._delegate_str and cls._delegate_unicode), "Cannot call lazy() with both str and unicode return types." |
diff --git a/tests/regressiontests/utils/functional.py b/tests/regressiontests/utils/functional.py
new file mode 100644
index 0000000..7261015
-
|
+
|
|
| 1 | from unittest import TestCase |
| 2 | |
| 3 | from django.utils.functional import lazy |
| 4 | |
| 5 | |
| 6 | class FunctionalTestCase(TestCase): |
| 7 | def test_lazy(self): |
| 8 | t = lazy(lambda: tuple(range(3)), list, tuple) |
| 9 | for a, b in zip(t(), range(3)): |
| 10 | self.assertEqual(a, b) |
diff --git a/tests/regressiontests/utils/tests.py b/tests/regressiontests/utils/tests.py
index fe5f463..cd93fb9 100644
a
|
b
|
import datastructures
|
12 | 12 | import itercompat |
13 | 13 | |
14 | 14 | from decorators import DecoratorFromMiddlewareTests |
| 15 | from functional import FunctionalTestCase |
15 | 16 | |
16 | 17 | # We need this because "datastructures" uses sorted() and the tests are run in |
17 | 18 | # the scope of this module. |