Author: janne.t.harkonen
Date: Tue Mar 24 05:59:07 2009
New Revision: 1499

Modified:
   trunk/src/robot/output/systemlogger.py
   trunk/utest/output/test_systemlogger.py

Log:
Loggers don't need to have all syslog methods.

Modified: trunk/src/robot/output/systemlogger.py
==============================================================================
--- trunk/src/robot/output/systemlogger.py      (original)
+++ trunk/src/robot/output/systemlogger.py      Tue Mar 24 05:59:07 2009
@@ -24,15 +24,18 @@
 class SystemLogger2(AbstractLogger):

     def __init__(self):
-        self._loggers = []
-
-    def write(self, message, level='INFO'):
-        msg = Message(message, level)
-        for logger in self._loggers:
-            logger.write(msg, level)
+        self._writers = []
+        self._output_filers = []
+        self._closers = []

     def register_logger(self, *loggers):
-        self._loggers.extend(loggers)
+        for logger in loggers:
+            if hasattr(logger, 'write'):
+                self._writers.append(logger.write)
+            if hasattr(logger, 'output_file'):
+                self._output_filers.append(logger.output_file)
+            if hasattr(logger, 'close'):
+                self._closers.append(logger.close)

     def register_file_logger(self, path=None, level='INFO'):
         if not path:
@@ -41,13 +44,18 @@
         if path:
             self.register_logger(_FileLogger(path, level))

-    def close(self):
-        for logger in self._loggers:
-            logger.close()
+    def write(self, message, level='INFO'):
+        msg = Message(message, level)
+        for write in self._writers:
+            write(msg, level)

     def output_file(self, name, path):
-        for logger in self._loggers:
-            logger.output_file(name, path)
+        for output_file in self._output_filers:
+            output_file(name, path)
+
+    def close(self):
+        for close in self._closers:
+            close()


 class SystemLogger(AbstractLogger):

Modified: trunk/utest/output/test_systemlogger.py
==============================================================================
--- trunk/utest/output/test_systemlogger.py     (original)
+++ trunk/utest/output/test_systemlogger.py     Tue Mar 24 05:59:07 2009
@@ -32,6 +32,14 @@
         return LoggerMock(*self.expected)


+class LoggerMock2(LoggerMock):
+
+    def output_file(self, name, path):
+        self.output_file = (name, path)
+
+    def close(self):
+        self.closed = True
+
 class TestSystemFileLogger(unittest.TestCase):

     def setUp(self):
@@ -101,6 +109,21 @@
             assert_equals(logger.msg.message, msg)
             assert_equals(logger.msg.level, level)

+    def test_all_methods(self):
+        logger = LoggerMock2(('Hello, world!', 'INFO'))
+        self.syslog.register_logger(logger)
+        self.syslog.output_file('name', 'path')
+        self.syslog.close()
+        assert_equals(logger.output_file, ('name', 'path'))
+        assert_true(logger.closed)
+
+    def test_registered_logger_does_not_need_all_methods(self):
+        logger = LoggerMock(('Hello, world!', 'INFO'))
+        self.syslog.register_logger(logger)
+        self.syslog.output_file('name', 'path')
+        self.syslog.close()
+

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

Reply via email to