TestEvent.py 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. import util
  2. class ExampleClass(object):
  3. def __init__(self):
  4. self.called = []
  5. self.onChanged = util.Event()
  6. def increment(self, title):
  7. self.called.append(title)
  8. class TestEvent:
  9. def testEvent(self):
  10. test_obj = ExampleClass()
  11. test_obj.onChanged.append(lambda: test_obj.increment("Called #1"))
  12. test_obj.onChanged.append(lambda: test_obj.increment("Called #2"))
  13. test_obj.onChanged.once(lambda: test_obj.increment("Once"))
  14. assert test_obj.called == []
  15. test_obj.onChanged()
  16. assert test_obj.called == ["Called #1", "Called #2", "Once"]
  17. test_obj.onChanged()
  18. test_obj.onChanged()
  19. assert test_obj.called == ["Called #1", "Called #2", "Once", "Called #1", "Called #2", "Called #1", "Called #2"]
  20. def testOnce(self):
  21. test_obj = ExampleClass()
  22. test_obj.onChanged.once(lambda: test_obj.increment("Once test #1"))
  23. # It should be called only once
  24. assert test_obj.called == []
  25. test_obj.onChanged()
  26. assert test_obj.called == ["Once test #1"]
  27. test_obj.onChanged()
  28. test_obj.onChanged()
  29. assert test_obj.called == ["Once test #1"]
  30. def testOnceMultiple(self):
  31. test_obj = ExampleClass()
  32. # Allow queue more than once
  33. test_obj.onChanged.once(lambda: test_obj.increment("Once test #1"))
  34. test_obj.onChanged.once(lambda: test_obj.increment("Once test #2"))
  35. test_obj.onChanged.once(lambda: test_obj.increment("Once test #3"))
  36. assert test_obj.called == []
  37. test_obj.onChanged()
  38. assert test_obj.called == ["Once test #1", "Once test #2", "Once test #3"]
  39. test_obj.onChanged()
  40. test_obj.onChanged()
  41. assert test_obj.called == ["Once test #1", "Once test #2", "Once test #3"]
  42. def testOnceNamed(self):
  43. test_obj = ExampleClass()
  44. # Dont store more that one from same type
  45. test_obj.onChanged.once(lambda: test_obj.increment("Once test #1/1"), "type 1")
  46. test_obj.onChanged.once(lambda: test_obj.increment("Once test #1/2"), "type 1")
  47. test_obj.onChanged.once(lambda: test_obj.increment("Once test #2"), "type 2")
  48. assert test_obj.called == []
  49. test_obj.onChanged()
  50. assert test_obj.called == ["Once test #1/1", "Once test #2"]
  51. test_obj.onChanged()
  52. test_obj.onChanged()
  53. assert test_obj.called == ["Once test #1/1", "Once test #2"]