test_memory.py 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. # Copyright (c) Twisted Matrix Laboratories.
  2. # See LICENSE for details.
  3. """
  4. Tests for L{twisted._threads._memory}.
  5. """
  6. from __future__ import absolute_import, division, print_function
  7. from zope.interface.verify import verifyObject
  8. from twisted.trial.unittest import SynchronousTestCase
  9. from .. import AlreadyQuit, IWorker, createMemoryWorker
  10. class MemoryWorkerTests(SynchronousTestCase):
  11. """
  12. Tests for L{MemoryWorker}.
  13. """
  14. def test_createWorkerAndPerform(self):
  15. """
  16. L{createMemoryWorker} creates an L{IWorker} and a callable that can
  17. perform work on it. The performer returns C{True} if it accomplished
  18. useful work.
  19. """
  20. worker, performer = createMemoryWorker()
  21. verifyObject(IWorker, worker)
  22. done = []
  23. worker.do(lambda: done.append(3))
  24. worker.do(lambda: done.append(4))
  25. self.assertEqual(done, [])
  26. self.assertEqual(performer(), True)
  27. self.assertEqual(done, [3])
  28. self.assertEqual(performer(), True)
  29. self.assertEqual(done, [3, 4])
  30. def test_quitQuits(self):
  31. """
  32. Calling C{quit} on the worker returned by L{createMemoryWorker} causes
  33. its C{do} and C{quit} methods to raise L{AlreadyQuit}; its C{perform}
  34. callable will start raising L{AlreadyQuit} when the work already
  35. provided to C{do} has been exhausted.
  36. """
  37. worker, performer = createMemoryWorker()
  38. done = []
  39. def moreWork():
  40. done.append(7)
  41. worker.do(moreWork)
  42. worker.quit()
  43. self.assertRaises(AlreadyQuit, worker.do, moreWork)
  44. self.assertRaises(AlreadyQuit, worker.quit)
  45. performer()
  46. self.assertEqual(done, [7])
  47. self.assertEqual(performer(), False)
  48. def test_performWhenNothingToDoYet(self):
  49. """
  50. The C{perform} callable returned by L{createMemoryWorker} will return
  51. no result when there's no work to do yet. Since there is no work to
  52. do, the performer returns C{False}.
  53. """
  54. worker, performer = createMemoryWorker()
  55. self.assertEqual(performer(), False)