__init__.py 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171
  1. from __future__ import absolute_import
  2. import pickle
  3. from celery import utils
  4. from celery.utils import promise, mpromise, maybe_promise
  5. from celery.tests.utils import unittest
  6. def double(x):
  7. return x * 2
  8. class test_chunks(unittest.TestCase):
  9. def test_chunks(self):
  10. # n == 2
  11. x = utils.chunks(iter([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]), 2)
  12. self.assertListEqual(list(x),
  13. [[0, 1], [2, 3], [4, 5], [6, 7], [8, 9], [10]])
  14. # n == 3
  15. x = utils.chunks(iter([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]), 3)
  16. self.assertListEqual(list(x),
  17. [[0, 1, 2], [3, 4, 5], [6, 7, 8], [9, 10]])
  18. # n == 2 (exact)
  19. x = utils.chunks(iter([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]), 2)
  20. self.assertListEqual(list(x),
  21. [[0, 1], [2, 3], [4, 5], [6, 7], [8, 9]])
  22. class test_utils(unittest.TestCase):
  23. def test_qualname(self):
  24. Class = type("Fox", (object, ), {"__module__": "quick.brown"})
  25. self.assertEqual(utils.qualname(Class), "quick.brown.Fox")
  26. self.assertEqual(utils.qualname(Class()), "quick.brown.Fox")
  27. def test_is_iterable(self):
  28. for a in "f", ["f"], ("f", ), {"f": "f"}:
  29. self.assertTrue(utils.is_iterable(a))
  30. for b in object(), 1:
  31. self.assertFalse(utils.is_iterable(b))
  32. def test_padlist(self):
  33. self.assertListEqual(utils.padlist(["George", "Costanza", "NYC"], 3),
  34. ["George", "Costanza", "NYC"])
  35. self.assertListEqual(utils.padlist(["George", "Costanza"], 3),
  36. ["George", "Costanza", None])
  37. self.assertListEqual(utils.padlist(["George", "Costanza", "NYC"], 4,
  38. default="Earth"),
  39. ["George", "Costanza", "NYC", "Earth"])
  40. def test_firstmethod_AttributeError(self):
  41. self.assertIsNone(utils.firstmethod("foo")([object()]))
  42. def test_firstmethod_promises(self):
  43. class A(object):
  44. def __init__(self, value=None):
  45. self.value = value
  46. def m(self):
  47. return self.value
  48. self.assertEqual("four", utils.firstmethod("m")([
  49. A(), A(), A(), A("four"), A("five")]))
  50. self.assertEqual("four", utils.firstmethod("m")([
  51. A(), A(), A(), promise(lambda: A("four")), A("five")]))
  52. def test_first(self):
  53. iterations = [0]
  54. def predicate(value):
  55. iterations[0] += 1
  56. if value == 5:
  57. return True
  58. return False
  59. self.assertEqual(5, utils.first(predicate, xrange(10)))
  60. self.assertEqual(iterations[0], 6)
  61. iterations[0] = 0
  62. self.assertIsNone(utils.first(predicate, xrange(10, 20)))
  63. self.assertEqual(iterations[0], 10)
  64. def test_get_cls_by_name__instance_returns_instance(self):
  65. instance = object()
  66. self.assertIs(utils.get_cls_by_name(instance), instance)
  67. def test_truncate_text(self):
  68. self.assertEqual(utils.truncate_text("ABCDEFGHI", 3), "ABC...")
  69. self.assertEqual(utils.truncate_text("ABCDEFGHI", 10), "ABCDEFGHI")
  70. def test_abbr(self):
  71. self.assertEqual(utils.abbr(None, 3), "???")
  72. self.assertEqual(utils.abbr("ABCDEFGHI", 6), "ABC...")
  73. self.assertEqual(utils.abbr("ABCDEFGHI", 20), "ABCDEFGHI")
  74. self.assertEqual(utils.abbr("ABCDEFGHI", 6, None), "ABCDEF")
  75. def test_abbrtask(self):
  76. self.assertEqual(utils.abbrtask(None, 3), "???")
  77. self.assertEqual(utils.abbrtask("feeds.tasks.refresh", 10),
  78. "[.]refresh")
  79. self.assertEqual(utils.abbrtask("feeds.tasks.refresh", 30),
  80. "feeds.tasks.refresh")
  81. def test_cached_property(self):
  82. def fun(obj):
  83. return fun.value
  84. x = utils.cached_property(fun)
  85. self.assertIs(x.__get__(None), x)
  86. self.assertIs(x.__set__(None, None), x)
  87. self.assertIs(x.__delete__(None), x)
  88. class test_promise(unittest.TestCase):
  89. def test__str__(self):
  90. self.assertEqual(str(promise(lambda: "the quick brown fox")),
  91. "the quick brown fox")
  92. def test__repr__(self):
  93. self.assertEqual(repr(promise(lambda: "fi fa fo")),
  94. "'fi fa fo'")
  95. def test_evaluate(self):
  96. self.assertEqual(promise(lambda: 2 + 2)(), 4)
  97. self.assertEqual(promise(lambda x: x * 4, 2), 8)
  98. self.assertEqual(promise(lambda x: x * 8, 2)(), 16)
  99. def test_cmp(self):
  100. self.assertEqual(promise(lambda: 10), promise(lambda: 10))
  101. self.assertNotEqual(promise(lambda: 10), promise(lambda: 20))
  102. def test__reduce__(self):
  103. x = promise(double, 4)
  104. y = pickle.loads(pickle.dumps(x))
  105. self.assertEqual(x(), y())
  106. def test__deepcopy__(self):
  107. from copy import deepcopy
  108. x = promise(double, 4)
  109. y = deepcopy(x)
  110. self.assertEqual(x._fun, y._fun)
  111. self.assertEqual(x._args, y._args)
  112. self.assertEqual(x(), y())
  113. class test_mpromise(unittest.TestCase):
  114. def test_is_memoized(self):
  115. it = iter(xrange(20, 30))
  116. p = mpromise(it.next)
  117. self.assertEqual(p(), 20)
  118. self.assertTrue(p.evaluated)
  119. self.assertEqual(p(), 20)
  120. self.assertEqual(repr(p), "20")
  121. class test_maybe_promise(unittest.TestCase):
  122. def test_evaluates(self):
  123. self.assertEqual(maybe_promise(promise(lambda: 10)), 10)
  124. self.assertEqual(maybe_promise(20), 20)