test_utils.py 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  1. from __future__ import absolute_import
  2. from __future__ import with_statement
  3. from kombu.utils.functional import promise
  4. from mock import patch
  5. from celery import utils
  6. from celery.utils import text
  7. from celery.utils import functional
  8. from celery.utils.functional import mpromise, maybe_list
  9. from celery.utils.threads import bgThread
  10. from celery.tests.utils import Case
  11. def double(x):
  12. return x * 2
  13. class test_bgThread_interface(Case):
  14. def test_body(self):
  15. x = bgThread()
  16. with self.assertRaises(NotImplementedError):
  17. x.body()
  18. class test_chunks(Case):
  19. def test_chunks(self):
  20. # n == 2
  21. x = utils.chunks(iter([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]), 2)
  22. self.assertListEqual(list(x),
  23. [[0, 1], [2, 3], [4, 5], [6, 7], [8, 9], [10]])
  24. # n == 3
  25. x = utils.chunks(iter([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]), 3)
  26. self.assertListEqual(list(x),
  27. [[0, 1, 2], [3, 4, 5], [6, 7, 8], [9, 10]])
  28. # n == 2 (exact)
  29. x = utils.chunks(iter([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]), 2)
  30. self.assertListEqual(list(x),
  31. [[0, 1], [2, 3], [4, 5], [6, 7], [8, 9]])
  32. class test_utils(Case):
  33. def test_is_iterable(self):
  34. for a in 'f', ['f'], ('f', ), {'f': 'f'}:
  35. self.assertTrue(utils.is_iterable(a))
  36. for b in object(), 1:
  37. self.assertFalse(utils.is_iterable(b))
  38. def test_padlist(self):
  39. self.assertListEqual(functional.padlist(
  40. ['George', 'Costanza', 'NYC'], 3),
  41. ['George', 'Costanza', 'NYC'])
  42. self.assertListEqual(functional.padlist(['George', 'Costanza'], 3),
  43. ['George', 'Costanza', None])
  44. self.assertListEqual(functional.padlist(
  45. ['George', 'Costanza', 'NYC'], 4, default='Earth'),
  46. ['George', 'Costanza', 'NYC', 'Earth'])
  47. def test_firstmethod_AttributeError(self):
  48. self.assertIsNone(functional.firstmethod('foo')([object()]))
  49. def test_firstmethod_promises(self):
  50. class A(object):
  51. def __init__(self, value=None):
  52. self.value = value
  53. def m(self):
  54. return self.value
  55. self.assertEqual('four', functional.firstmethod('m')([
  56. A(), A(), A(), A('four'), A('five')]))
  57. self.assertEqual('four', functional.firstmethod('m')([
  58. A(), A(), A(), promise(lambda: A('four')), A('five')]))
  59. def test_first(self):
  60. iterations = [0]
  61. def predicate(value):
  62. iterations[0] += 1
  63. if value == 5:
  64. return True
  65. return False
  66. self.assertEqual(5, functional.first(predicate, xrange(10)))
  67. self.assertEqual(iterations[0], 6)
  68. iterations[0] = 0
  69. self.assertIsNone(functional.first(predicate, xrange(10, 20)))
  70. self.assertEqual(iterations[0], 10)
  71. def test_truncate_text(self):
  72. self.assertEqual(text.truncate('ABCDEFGHI', 3), 'ABC...')
  73. self.assertEqual(text.truncate('ABCDEFGHI', 10), 'ABCDEFGHI')
  74. def test_abbr(self):
  75. self.assertEqual(text.abbr(None, 3), '???')
  76. self.assertEqual(text.abbr('ABCDEFGHI', 6), 'ABC...')
  77. self.assertEqual(text.abbr('ABCDEFGHI', 20), 'ABCDEFGHI')
  78. self.assertEqual(text.abbr('ABCDEFGHI', 6, None), 'ABCDEF')
  79. def test_abbrtask(self):
  80. self.assertEqual(text.abbrtask(None, 3), '???')
  81. self.assertEqual(text.abbrtask('feeds.tasks.refresh', 10),
  82. '[.]refresh')
  83. self.assertEqual(text.abbrtask('feeds.tasks.refresh', 30),
  84. 'feeds.tasks.refresh')
  85. def test_pretty(self):
  86. self.assertTrue(text.pretty(('a', 'b', 'c')))
  87. def test_cached_property(self):
  88. def fun(obj):
  89. return fun.value
  90. x = utils.cached_property(fun)
  91. self.assertIs(x.__get__(None), x)
  92. self.assertIs(x.__set__(None, None), x)
  93. self.assertIs(x.__delete__(None), x)
  94. def test_maybe_list(self):
  95. self.assertEqual(maybe_list(1), [1])
  96. self.assertEqual(maybe_list([1]), [1])
  97. self.assertIsNone(maybe_list(None))
  98. @patch('warnings.warn')
  99. def test_warn_deprecated(self, warn):
  100. utils.warn_deprecated('Foo')
  101. self.assertTrue(warn.called)
  102. class test_mpromise(Case):
  103. def test_is_memoized(self):
  104. it = iter(xrange(20, 30))
  105. p = mpromise(it.next)
  106. self.assertEqual(p(), 20)
  107. self.assertTrue(p.evaluated)
  108. self.assertEqual(p(), 20)
  109. self.assertEqual(repr(p), '20')