예제 #1
0
    def test_internal_error(self):
        handler = log.StackfulStreamHandler()
        try:
            lineno = current_lineno() + 1
            iterutils.first(None)
        except LookupError:
            record = logging.LogRecord('name', 'level', 'pathname', 1, 'msg',
                                       [], sys.exc_info())
        with mock.patch.object(logging.StreamHandler, 'emit'):
            handler.emit(record)

        iterutils_file = iterutils.__file__.rstrip('c')
        self.assertEqual(record.full_stack, [
            (this_file, lineno, 'test_internal_error',
             "iterutils.first(None)"),
            (iterutils_file, 47, 'first', 'raise LookupError()'),
        ])
        self.assertEqual(record.stack_pre, '')
        self.assertEqual(
            record.stack,
            ('\n' + '  File "{}", line {}, in test_internal_error\n' +
             "    iterutils.first(None)").format(this_file, lineno))
        self.assertEqual(record.stack_post,
                         ('\n' + '  File "{}", line 47, in first\n' +
                          "    raise LookupError()").format(iterutils_file))
        self.assertEqual(record.user_pathname, this_file)
        self.assertEqual(record.user_lineno, lineno)
예제 #2
0
    def test_runtime_error(self):
        handler = log.StackfulStreamHandler()
        try:
            lineno = current_lineno() + 1
            raise RuntimeError('runtime error')
        except RuntimeError:
            record = logging.LogRecord(
                'name', 'level', 'pathname', 1, 'msg', [], sys.exc_info()
            )
        with mock.patch.object(logging.StreamHandler, 'emit'):
            handler.emit(record)

        self.assertEqual(record.full_stack, [
            (this_file, lineno, 'test_runtime_error',
             "raise RuntimeError('runtime error')"),
        ])
        self.assertEqual(record.stack_pre, '')
        self.assertEqual(record.stack, (
            '\n' +
            '  File "{}", line {}, in test_runtime_error\n' +
            "    raise RuntimeError('runtime error')"
        ).format(this_file, lineno))
        self.assertEqual(record.stack_post, '')
        self.assertEqual(record.user_pathname, this_file)
        self.assertEqual(record.user_lineno, lineno)
예제 #3
0
    def test_different_drives(self):
        handler = log.StackfulStreamHandler()
        try:
            lineno = current_lineno() + 1
            raise RuntimeError('runtime error')
        except RuntimeError:
            record = logging.LogRecord('name', 'level', 'pathname', 1, 'msg',
                                       [], sys.exc_info())

        # Test with `os.path.relpath` raising a `ValueError` to match what
        # happens when the two paths passed to it are on different drives.
        with mock.patch.object(logging.StreamHandler, 'emit'), \
             mock.patch('os.path.relpath', side_effect=ValueError()):  # noqa
            handler.emit(record)

        self.assertEqual(record.full_stack, [
            (this_file, lineno, 'test_different_drives',
             "raise RuntimeError('runtime error')"),
        ])
        self.assertEqual(record.stack_pre, '')
        self.assertEqual(record.stack,
                         ('\n' +
                          '  File "{}", line {}, in test_different_drives\n' +
                          "    raise RuntimeError('runtime error')").format(
                              this_file, lineno))
        self.assertEqual(record.stack_post, '')
        self.assertEqual(record.user_pathname, this_file)
        self.assertEqual(record.user_lineno, lineno)
예제 #4
0
    def test_no_user_stack(self):
        handler = log.StackfulStreamHandler()
        try:
            iterutils.first(None)
        except LookupError:
            exc = sys.exc_info()
            record = logging.LogRecord(
                'name', 'level', 'pathname', 1, 'msg', [],
                exc[0:2] + (exc[2].tb_next,)
            )
        with mock.patch.object(logging.StreamHandler, 'emit'), \
             mock.patch('logging.root.handle'):  # noqa
            handler.emit(record)

        iterutils_file = iterutils.__file__.rstrip('c')
        self.assertEqual(record.full_stack, [
            (iterutils_file, 74, 'first', 'raise LookupError()'),
        ])

        self.assertEqual(record.show_stack, False)
        self.assertEqual(record.stack_pre, (
            '\n' +
            '  File "{}", line 74, in first\n' +
            "    raise LookupError()"
        ).format(iterutils_file))
        self.assertEqual(record.stack, '')
        self.assertEqual(record.stack_post, '')
        self.assertEqual(record.user_pathname, record.pathname)
        self.assertEqual(record.user_lineno, record.lineno)
예제 #5
0
    def test_syntax_error(self):
        handler = log.StackfulStreamHandler()
        try:
            raise SyntaxError('syntax error', ('file.py', 1, 4, 'line\n'))
        except SyntaxError:
            record = logging.LogRecord('name', 'level', 'pathname', 1, 'msg',
                                       [], sys.exc_info())
        with mock.patch.object(logging.StreamHandler, 'emit'):
            handler.emit(record)

        self.assertEqual(record.full_stack, [
            ('file.py', 1, '<module>', 'line\n       ^'),
        ])
        self.assertEqual(record.stack_pre, '')
        self.assertEqual(
            record.stack, '\n' + '  File "file.py", line 1, in <module>\n' +
            '    line\n' + '       ^')
        self.assertEqual(record.stack_post, '')
        self.assertEqual(record.user_pathname, 'file.py')
        self.assertEqual(record.user_lineno, 1)