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