/tests/core/test_feedback.py

https://bitbucket.org/prologic/circuits/ · Python · 105 lines · 65 code · 33 blank · 7 comment · 8 complexity · f77eb85bad0b601e6145a6c983b6218b MD5 · raw file

  1. # Module: test_feedback
  2. # Date: 11th February 2010
  3. # Author: James Mills, prologic at shortcircuit dot net dot au
  4. """Feedback Channels Tests"""
  5. import py
  6. from circuits import handler, Event, Component
  7. class test(Event):
  8. """test Event"""
  9. success = True
  10. failure = True
  11. class App(Component):
  12. def __init__(self):
  13. super(App, self).__init__()
  14. self.e = None
  15. self.error = None
  16. self.value = None
  17. self.success = False
  18. self.failure = False
  19. @handler("*")
  20. def event(self, event, *args, **kwargs):
  21. if kwargs.get("filter", False):
  22. event.stop()
  23. def test(self, error=False):
  24. if error:
  25. raise Exception("Hello World!")
  26. return "Hello World!"
  27. def test_success(self, e, value):
  28. self.e = e
  29. self.value = value
  30. self.success = True
  31. def test_failure(self, e, error):
  32. self.e = e
  33. self.error = error
  34. self.failure = True
  35. def reraise(e):
  36. raise e
  37. def test_success():
  38. app = App()
  39. while app:
  40. app.flush()
  41. e = test()
  42. value = app.fire(e)
  43. while app:
  44. app.flush()
  45. # The Event
  46. s = value.value
  47. assert s == "Hello World!"
  48. while app:
  49. app.flush()
  50. assert app.e == e
  51. assert app.success
  52. assert app.e.value == value
  53. assert app.value == value.value
  54. def test_failure():
  55. app = App()
  56. while app:
  57. app.flush()
  58. e = test(error=True)
  59. x = app.fire(e)
  60. while app:
  61. app.flush()
  62. # The Event
  63. py.test.raises(Exception, lambda x: reraise(x[1]), x.value)
  64. while app:
  65. app.flush()
  66. assert app.e == e
  67. etype, evalue, etraceback = app.error
  68. py.test.raises(Exception, lambda x: reraise(x), evalue)
  69. assert etype == Exception
  70. assert app.failure
  71. assert not app.success
  72. assert app.e.value == x