Ejemplo n.º 1
0
 def __init__(self, log_level='INFO'):
     AbstractLogger.__init__(self, level=log_level)
     self.logging_handler = LoggingHandler()
     if LibraryListeners is not None:
         # Robot 3.0
         self.library_listeners = LibraryListeners(log_level)
     # streams to be used internally for writing messages
     # - see self.__enter__() and self.message()
     self._out = self._err = None
 def test_some_methods_implemented(self):
     class MyListener(object):
         ROBOT_LISTENER_API_VERSION = 2
         def end_suite(self, suite):
             pass
     libs = LibraryListeners()
     libs.new_suite_scope()
     libs.register([MyListener()], None)
     for listeners in [Listeners([MyListener()]), libs]:
         listeners.start_suite(None)
         assert_raises(AttributeError, listeners.end_suite, None)
Ejemplo n.º 3
0
    def test_message_methods(self):
        class Message(object):
            level = 'INFO'

        for listeners in [Listeners([]), LibraryListeners()]:
            listeners.log_message(Message)
            listeners.message(Message)
Ejemplo n.º 4
0
 def __init__(self, log_level='INFO'):
     AbstractLogger.__init__(self, level=log_level)
     self.logging_handler = LoggingHandler()
     if LibraryListeners is not None:
         # Robot 3.0
         self.library_listeners = LibraryListeners(log_level)
     # streams to be used internally for writing messages
     # - see self.__enter__() and self.message()
     self._out = self._err = None
Ejemplo n.º 5
0
 def test_start_and_end_methods(self):
     class ModelStub:
         IF_ELSE_ROOT = 'IF/ELSE ROOT'
         type = 'xxx'
     for listeners in [Listeners([]), LibraryListeners()]:
         for name in dir(listeners):
             if name.startswith(('start_', 'end_')):
                 model = ModelStub() if name.endswith('keyword') else None
                 method = getattr(listeners, name)
                 method(model)
Ejemplo n.º 6
0
 def test_some_methods_implemented(self):
     class MyListener(object):
         ROBOT_LISTENER_API_VERSION = 2
         def end_suite(self, suite):
             pass
     libs = LibraryListeners()
     libs.new_suite_scope()
     libs.register([MyListener()], None)
     for listeners in [Listeners([MyListener()]), libs]:
         listeners.start_suite(None)
         assert_raises(AttributeError, listeners.end_suite, None)
Ejemplo n.º 7
0
 def test_start_and_end_methods(self):
     for listeners in [Listeners([]), LibraryListeners()]:
         for name in dir(listeners):
             if name.startswith(('start_', 'end_')):
                 method = getattr(listeners, name)
                 method(None)
Ejemplo n.º 8
0
class Output(AbstractLogger):
    def __init__(self, log_level='INFO'):
        AbstractLogger.__init__(self, level=log_level)
        self.logging_handler = LoggingHandler()
        if LibraryListeners is not None:
            # Robot 3.0
            self.library_listeners = LibraryListeners(log_level)
        # streams to be used internally for writing messages
        # - see self.__enter__() and self.message()
        self._out = self._err = None

    def set_log_level(self, level):
        if LibraryListeners is not None:
            # Robot 3.0
            self.library_listeners.set_log_level(level)
        return self.set_level(level)

    def __enter__(self):
        # save sys.stdout and sys.stderr for writing
        self._out = sys.stdout
        self._err = sys.stderr
        #HACK: Dynamically (un)register Output:
        LOGGER.disable_message_cache()
        LOGGER.unregister_console_logger()
        LOGGER.register_logger(self)
        # Catch global logging:
        self.logging_handler.__enter__()

    def __exit__(self, *exc):
        #HACK:
        self.logging_handler.__exit__(*exc)
        LOGGER.unregister_logger(self)
        # unset internal streams
        self._out = self._err = None

    _re_log_level = re.compile('|'.join(r % '|'.join(LOG_LEVELS)
      for r in [r'^\[ ?(%s) ?\] *', r'^\* ?(%s) ?\* *']))

    def message(self, message):
        msg = message.message
        try:
            _, brackets, stars, msg = self._re_log_level.split(msg)
        except ValueError:
            level = message.level
        else:
            level = brackets or stars
        if not self._is_logged(level):
            return

        # select streams to use
        if level == 'INFO':
            stream = self._out or sys.__stdout__
        else:
            stream = self._err or sys.__stderr__
        #... and finally write the message
        stream.write("[ ")
        try:
            color = LOG_LEVEL_COLORS[level]
        except KeyError:
            stream.write(level)
        else:
            with Highlighter(color, stream) as hl:
                hl.write(level)
        stream.write(" ]%s %s\n" % (
          ' ' * (LOG_LEVELS_MAX_WIDTH - len(level)), msg))

    def fail(self, message, *args):
        self._last_fail_exc = sys.exc_info()
        AbstractLogger.fail(self, message, *args)

    def register_error_listener(self, listener):
        pass

    def start_suite(self, suite):
        pass

    def end_suite(self, suite):
        pass

    def start_test(self, test):
        pass

    def end_test(self, test):
        pass

    def start_keyword(self, kw):
        pass

    def end_keyword(self, kw):
        pass
Ejemplo n.º 9
0
class Output(AbstractLogger):
    def __init__(self, log_level='INFO'):
        AbstractLogger.__init__(self, level=log_level)
        self.logging_handler = LoggingHandler()
        if LibraryListeners is not None:
            # Robot 3.0
            self.library_listeners = LibraryListeners(log_level)
        # streams to be used internally for writing messages
        # - see self.__enter__() and self.message()
        self._out = self._err = None

    def set_log_level(self, level):
        if LibraryListeners is not None:
            # Robot 3.0
            self.library_listeners.set_log_level(level)
        return self.set_level(level)

    def __enter__(self):
        # save sys.stdout and sys.stderr for writing
        self._out = sys.stdout
        self._err = sys.stderr
        #HACK: Dynamically (un)register Output:
        LOGGER.disable_message_cache()
        LOGGER.unregister_console_logger()
        LOGGER.register_logger(self)
        # Catch global logging:
        self.logging_handler.__enter__()

    def __exit__(self, *exc):
        #HACK:
        self.logging_handler.__exit__(*exc)
        LOGGER.unregister_logger(self)
        # unset internal streams
        self._out = self._err = None

    _re_log_level = re.compile('|'.join(
        r % '|'.join(LOG_LEVELS)
        for r in [r'^\[ ?(%s) ?\] *', r'^\* ?(%s) ?\* *']))

    def message(self, message):
        msg = message.message
        try:
            _, brackets, stars, msg = self._re_log_level.split(msg)
        except ValueError:
            level = message.level
        else:
            level = brackets or stars
        if not self._is_logged(level):
            return

        # select streams to use
        if level == 'INFO':
            stream = self._out or sys.__stdout__
        else:
            stream = self._err or sys.__stderr__
        #... and finally write the message
        stream.write("[ ")
        try:
            color = LOG_LEVEL_COLORS[level]
        except KeyError:
            stream.write(level)
        else:
            with Highlighter(color, stream) as hl:
                hl.write(level)
        stream.write(" ]%s %s\n" % (' ' *
                                    (LOG_LEVELS_MAX_WIDTH - len(level)), msg))

    def fail(self, message, *args):
        self._last_fail_exc = sys.exc_info()
        AbstractLogger.fail(self, message, *args)

    def register_error_listener(self, listener):
        pass

    def start_suite(self, suite):
        pass

    def end_suite(self, suite):
        pass

    def start_test(self, test):
        pass

    def end_test(self, test):
        pass

    def start_keyword(self, kw):
        pass

    def end_keyword(self, kw):
        pass