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()