Revision: 2090
Author: pekka.klarck
Date: Wed Jul 29 07:43:29 2009
Log: Implemented a possibility to unregister loggers registeref to the global LOGGER, and used this functionality to unregister XmlLogger after it's closed. Issue 333.
http://code.google.com/p/robotframework/source/detail?r=2090

Modified:
 /trunk/src/robot/output/logger.py
 /trunk/src/robot/output/loggerhelper.py
 /trunk/src/robot/output/output.py
 /trunk/utest/output/test_logger.py

=======================================
--- /trunk/src/robot/output/logger.py   Tue Jul 28 04:17:39 2009
+++ /trunk/src/robot/output/logger.py   Wed Jul 29 07:43:29 2009
@@ -56,6 +56,11 @@
                 for msg in self._message_cache:
                     logger.message(msg)

+    def unregister_logger(self, *loggers):
+        for log in loggers:
+            self._loggers = [ proxy for proxy in self._loggers
+                              if proxy.logger is not log ]
+
     def register_console_logger(self, width=78, colors=True):
         self.disable_automatic_console_logger()
         self._register_console_logger(width, colors)
=======================================
--- /trunk/src/robot/output/loggerhelper.py     Sun Apr 19 13:26:54 2009
+++ /trunk/src/robot/output/loggerhelper.py     Wed Jul 29 07:43:29 2009
@@ -103,6 +103,7 @@
     _methods = NotImplemented

     def __init__(self, logger):
+        self.logger = logger
         default = lambda *args: None
         for name in self._methods:
             try:
=======================================
--- /trunk/src/robot/output/output.py   Sun Apr 19 13:26:54 2009
+++ /trunk/src/robot/output/output.py   Wed Jul 29 07:43:29 2009
@@ -55,6 +55,7 @@
                            self._settings['TagStatLink'])
         stats.serialize(self._xmllogger)
         self._xmllogger.close(serialize_errors=True)
+        LOGGER.unregister_logger(self._xmllogger)
         LOGGER.output_file('Output', self._settings['Output'])

     def start_suite(self, suite):
=======================================
--- /trunk/utest/output/test_logger.py  Tue Jul 28 04:17:39 2009
+++ /trunk/utest/output/test_logger.py  Wed Jul 29 07:43:29 2009
@@ -46,7 +46,7 @@
         self.logger.register_logger(logger)
         self.logger.write('Hello, world!', 'INFO')
         assert_true(logger.msg.timestamp.startswith('20'))
-
+
     def test_write_to_one_logger_with_trace_level(self):
         logger = LoggerMock(('expected message', 'TRACE'))
         self.logger.register_logger(logger)
@@ -160,6 +160,20 @@
         assert_equals(len(logger._loggers), 1)
         assert_equals(logger._loggers[0].start_suite.im_self._width, 42)

+    def test_unregister_logger(self):
+ logger1, logger2, logger3 = LoggerMock(), LoggerMock(), LoggerMock()
+        self.logger.register_logger(logger1, logger2, logger3)
+        self.logger.unregister_logger(logger2)
+        assert_equals(len(self.logger._loggers), 2)
+        self.logger.unregister_logger(logger3, logger1)
+        assert_equals(len(self.logger._loggers), 0)
+
+    def test_unregistering_non_registered_logger_is_ok(self):
+        logger1, logger2 = LoggerMock(), LoggerMock()
+        self.logger.register_logger(logger1)
+        self.logger.unregister_logger(logger2)
+        self.logger.unregister_logger(None)
+

 if __name__ == "__main__":
     unittest.main()

Reply via email to