/tests/core/test_debugger.py

https://bitbucket.org/prologic/circuits/ · Python · 303 lines · 223 code · 75 blank · 5 comment · 13 complexity · ae71736a3bba66e548c90152d41a1c97 MD5 · raw file

  1. # Module: debugger
  2. # Date: 5th November 2008
  3. # Author: James Mills, prologic at shortcircuit dot net dot au
  4. """Debugger Tests"""
  5. import sys
  6. import pytest
  7. try:
  8. from StringIO import StringIO
  9. except ImportError:
  10. from io import StringIO # NOQA
  11. from circuits import Debugger
  12. from circuits.core import Event, Component
  13. class test(Event):
  14. """test Event"""
  15. class App(Component):
  16. def test(self, raiseException=False):
  17. if raiseException:
  18. raise Exception()
  19. class Logger(object):
  20. error_msg = None
  21. debug_msg = None
  22. def error(self, msg):
  23. self.error_msg = msg
  24. def debug(self, msg):
  25. self.debug_msg = msg
  26. def test_main():
  27. app = App()
  28. stderr = StringIO()
  29. debugger = Debugger(file=stderr)
  30. debugger.register(app)
  31. while app:
  32. app.flush()
  33. stderr.seek(0)
  34. stderr.truncate()
  35. assert debugger._events
  36. e = Event()
  37. app.fire(e)
  38. app.flush()
  39. stderr.seek(0)
  40. s = stderr.read().strip()
  41. assert s == str(e)
  42. stderr.seek(0)
  43. stderr.truncate()
  44. debugger._events = False
  45. assert not debugger._events
  46. e = Event()
  47. app.fire(e)
  48. stderr.seek(0)
  49. s = stderr.read().strip()
  50. assert s == ""
  51. stderr.seek(0)
  52. stderr.truncate()
  53. def test_file(tmpdir):
  54. logfile = str(tmpdir.ensure("debug.log"))
  55. stderr = open(logfile, "w+")
  56. app = App()
  57. debugger = Debugger(file=stderr)
  58. debugger.register(app)
  59. while app:
  60. app.flush()
  61. stderr.seek(0)
  62. stderr.truncate()
  63. assert debugger._events
  64. e = Event()
  65. app.fire(e)
  66. app.flush()
  67. stderr.seek(0)
  68. s = stderr.read().strip()
  69. assert s == str(e)
  70. stderr.seek(0)
  71. stderr.truncate()
  72. debugger._events = False
  73. assert not debugger._events
  74. e = Event()
  75. app.fire(e)
  76. stderr.seek(0)
  77. s = stderr.read().strip()
  78. assert s == ""
  79. stderr.seek(0)
  80. stderr.truncate()
  81. def test_filename(tmpdir):
  82. if "__pypy__" in sys.modules:
  83. pytest.skip("Broken on pypy")
  84. logfile = str(tmpdir.ensure("debug.log"))
  85. stderr = open(logfile, "r+")
  86. app = App()
  87. debugger = Debugger(file=logfile)
  88. debugger.register(app)
  89. while app:
  90. app.flush()
  91. stderr.seek(0)
  92. stderr.truncate()
  93. assert debugger._events
  94. e = Event()
  95. app.fire(e)
  96. app.flush()
  97. stderr.seek(0)
  98. s = stderr.read().strip()
  99. assert s == str(e)
  100. stderr.seek(0)
  101. stderr.truncate()
  102. debugger._events = False
  103. assert not debugger._events
  104. e = Event()
  105. app.fire(e)
  106. stderr.seek(0)
  107. s = stderr.read().strip()
  108. assert s == ""
  109. stderr.seek(0)
  110. stderr.truncate()
  111. def test_exceptions():
  112. app = App()
  113. stderr = StringIO()
  114. debugger = Debugger(file=stderr)
  115. debugger.register(app)
  116. while app:
  117. app.flush()
  118. stderr.seek(0)
  119. stderr.truncate()
  120. assert debugger._events
  121. assert debugger._errors
  122. e = test(raiseException=True)
  123. app.fire(e)
  124. app.flush()
  125. stderr.seek(0)
  126. s = stderr.read().strip()
  127. assert s == str(e)
  128. stderr.seek(0)
  129. stderr.truncate()
  130. app.flush()
  131. stderr.seek(0)
  132. s = stderr.read().strip()
  133. assert s.startswith("<exception[*]")
  134. stderr.seek(0)
  135. stderr.truncate()
  136. debugger._events = False
  137. debugger._errors = False
  138. assert not debugger._events
  139. assert not debugger._errors
  140. e = test(raiseException=True)
  141. app.fire(e)
  142. app.flush()
  143. stderr.seek(0)
  144. s = stderr.read().strip()
  145. assert s == ""
  146. stderr.seek(0)
  147. stderr.truncate()
  148. app.flush()
  149. stderr.seek(0)
  150. s = stderr.read().strip()
  151. assert s == ""
  152. def test_IgnoreEvents():
  153. app = App()
  154. stderr = StringIO()
  155. debugger = Debugger(file=stderr)
  156. debugger.register(app)
  157. while app:
  158. app.flush()
  159. stderr.seek(0)
  160. stderr.truncate()
  161. assert debugger._events
  162. debugger.IgnoreEvents.extend(["test"])
  163. e = Event()
  164. app.fire(e)
  165. app.flush()
  166. stderr.seek(0)
  167. s = stderr.read().strip()
  168. assert s == str(e)
  169. stderr.seek(0)
  170. stderr.truncate()
  171. e = test()
  172. app.fire(e)
  173. app.flush()
  174. stderr.seek(0)
  175. s = stderr.read().strip()
  176. assert s == ""
  177. stderr.seek(0)
  178. stderr.truncate()
  179. def test_IgnoreChannels():
  180. app = App()
  181. stderr = StringIO()
  182. debugger = Debugger(file=stderr)
  183. debugger.register(app)
  184. while app:
  185. app.flush()
  186. stderr.seek(0)
  187. stderr.truncate()
  188. assert debugger._events
  189. debugger.IgnoreChannels.extend([("*", "test")])
  190. e = Event()
  191. app.fire(e)
  192. app.flush()
  193. stderr.seek(0)
  194. s = stderr.read().strip()
  195. assert s == str(e)
  196. stderr.seek(0)
  197. stderr.truncate()
  198. e = test()
  199. app.fire(e)
  200. app.flush()
  201. stderr.seek(0)
  202. s = stderr.read().strip()
  203. assert s == ""
  204. stderr.seek(0)
  205. stderr.truncate()
  206. def test_Logger_debug():
  207. app = App()
  208. logger = Logger()
  209. debugger = Debugger(logger=logger)
  210. debugger.register(app)
  211. while app:
  212. app.flush()
  213. e = Event()
  214. app.fire(e)
  215. app.flush()
  216. assert logger.debug_msg == repr(e)
  217. def test_Logger_error():
  218. app = App()
  219. logger = Logger()
  220. debugger = Debugger(logger=logger)
  221. debugger.register(app)
  222. while app:
  223. app.flush()
  224. e = test(raiseException=True)
  225. app.fire(e)
  226. while app:
  227. app.flush()
  228. assert logger.error_msg.startswith("ERROR <handler[*.test] (App.test)> (")