Esempio n. 1
0
 def test_format_bad_filename(self):
     # Filenames in Python2 may be bytestrings that will fail to implicit
     # decode.
     # This won't decode via the implicit(ascii) codec or the default
     # fs encoding (unless the encoding is a wildcard encoding).
     fname = b('\x8b')
     lines = u("1\n2\n3\n")
     fake_module = dict(__name__='fred', __loader__=FakeLoader(lines))
     linecache.updatecache(fname, fake_module)
     e = SyntaxError("uh oh")
     e.filename = fname
     e.lineno = 2
     e.text = b('something wrong')
     e.offset = 1
     c = test_code(fname, 'method')
     f = test_frame(c, fake_module, {'something': 1})
     tb = test_tb(f, 2, None)
     exc = traceback.TracebackException(SyntaxError, e, tb)
     list(exc.format_exception_only())
     self.assertEqual([
         u('Traceback (most recent call last):\n'),
         b('  File "b\'\\x8b\'", line 2, in method\n    2\n').decode(),
         b('  File "b\'\\x8b\'", line 2\n').decode(),
         u('    something wrong\n'),
         u('    ^\n'),
         u('SyntaxError: uh oh\n')
     ], list(exc.format()))
Esempio n. 2
0
 def test_syntax_undecoded_lines(self):
     # If the interpreter returns bytestrings, we have to decode ourselves.
     lines = u("1\n\u5341\n3\n")
     fake_module = dict(
         __name__='fred',
         __loader__=FakeLoader(lines)
         )
     linecache.updatecache('/foo.py', fake_module)
     e = SyntaxError("uh oh")
     e.filename = '/foo.py'
     e.lineno = 2
     e.text = b('something wrong')
     e.offset = 1
     c = test_code('/foo.py', 'method')
     f = test_frame(c, fake_module, {'something': 1})
     tb = test_tb(f, 2, None)
     exc = traceback.TracebackException(SyntaxError, e, tb)
     list(exc.format_exception_only())
     self.assertEqual([
         u('Traceback (most recent call last):\n'),
         u('  File "/foo.py", line 2, in method\n    \u5341\n'),
         u('  File "/foo.py", line 2\n'),
         u('    \u5341\n'),
         u('    ^\n'),
         u('SyntaxError: uh oh\n')],
         list(exc.format()))
Esempio n. 3
0
 def test_format_unicode_filename(self):
     # Filenames in Python2 may be bytestrings that will fail to implicit
     # decode.
     fname = u('\u5341').encode(sys.getfilesystemencoding())
     lines = u("1\n2\n3\n")
     fake_module = dict(__name__='fred', __loader__=FakeLoader(lines))
     linecache.updatecache(fname, fake_module)
     e = SyntaxError("uh oh")
     e.filename = fname
     e.lineno = 2
     e.text = b('something wrong')
     e.offset = 1
     c = test_code(fname, 'method')
     f = test_frame(c, fake_module, {'something': 1})
     tb = test_tb(f, 2, None)
     exc = traceback.TracebackException(SyntaxError, e, tb)
     list(exc.format_exception_only())
     self.assertEqual([
         u('Traceback (most recent call last):\n'),
         u('  File "\u5341", line 2, in method\n    2\n'),
         u('  File "\u5341", line 2\n'),
         u('    something wrong\n'),
         u('    ^\n'),
         u('SyntaxError: uh oh\n')
     ], list(exc.format()))
Esempio n. 4
0
    def _exc_info_to_string(self, err, test):
        """Converts a sys.exc_info()-style tuple of values into a string."""
        exctype, value, tb = err
        # Skip test runner traceback levels
        while tb and self._is_relevant_tb_level(tb):
            tb = tb.tb_next
        if exctype is test.failureException:
            # Skip assert*() traceback levels
            length = self._count_relevant_tb_levels(tb)
        else:
            length = None
        tb_e = traceback.TracebackException(exctype,
                                            value,
                                            tb,
                                            limit=length,
                                            capture_locals=self.tb_locals)
        msgLines = list(tb_e.format())

        if self.buffer:
            output = sys.stdout.getvalue()
            error = sys.stderr.getvalue()
            if output:
                if not output.endswith('\n'):
                    output += '\n'
                msgLines.append(STDOUT_LINE % output)
            if error:
                if not error.endswith('\n'):
                    error += '\n'
                msgLines.append(STDERR_LINE % error)
        return ''.join(msgLines)
Esempio n. 5
0
 def test_no_locals(self):
     linecache.updatecache('/foo.py', fake_module)
     e = Exception("uh oh")
     c = test_code('/foo.py', 'method')
     f = test_frame(c, fake_module, {'something': 1})
     tb = test_tb(f, 6, None)
     exc = traceback.TracebackException(Exception, e, tb)
     self.assertEqual(exc.stack[0].locals, None)
Esempio n. 6
0
 def test_context(self):
     try:
         try:
             1 / 0
         finally:
             exc_info_context = sys.exc_info()
             exc_context = traceback.TracebackException(*exc_info_context)
             raise Exception("uh oh")
     except Exception:
         exc_info = sys.exc_info()
         exc = traceback.TracebackException(*exc_info)
         expected_stack = traceback.StackSummary.extract(
             traceback.walk_tb(exc_info[2]))
     self.assertEqual(None, exc.__cause__)
     self.assertEqual(exc_context, exc.__context__)
     self.assertEqual(False, exc.__suppress_context__)
     self.assertEqual(expected_stack, exc.stack)
     self.assertEqual(exc_info[0], exc.exc_type)
     self.assertEqual(str(exc_info[1]), str(exc))
Esempio n. 7
0
 def test_locals(self):
     linecache.updatecache('/foo.py', fake_module)
     e = Exception("uh oh")
     c = test_code('/foo.py', 'method')
     f = test_frame(c, globals(), {'something': 1, 'other': 'string'})
     tb = test_tb(f, 6, None)
     exc = traceback.TracebackException(
         Exception, e, tb, capture_locals=True)
     self.assertEqual(
         exc.stack[0].locals, {'something': '1', 'other': "'string'"})
Esempio n. 8
0
 def test_lookup_lines(self):
     linecache.clearcache()
     e = Exception("uh oh")
     c = test_code('/foo.py', 'method')
     f = test_frame(c, None, None)
     tb = test_tb(f, 8, None)
     exc = traceback.TracebackException(Exception, e, tb, lookup_lines=False)
     self.assertEqual({}, linecache.cache)
     linecache.updatecache('/foo.py', fake_module)
     self.assertEqual(exc.stack[0].line, "import sys")
Esempio n. 9
0
 def test_cause(self):
     try:
         try:
             1 / 0
         finally:
             exc_info_context = sys.exc_info()
             exc_context = traceback.TracebackException(*exc_info_context)
             cause = Exception("cause")
             raise_from(Exception("uh ok"), cause)
     except Exception:
         exc_info = sys.exc_info()
         exc = traceback.TracebackException(*exc_info)
         expected_stack = traceback.StackSummary.extract(
             traceback.walk_tb(exc_info[2]))
     exc_cause = traceback.TracebackException(Exception, cause, None)
     self.assertEqual(exc_cause, exc.__cause__)
     self.assertEqual(exc_context, exc.__context__)
     if hasattr(exc_info[1], '__suppress_context__'):
         self.assertEqual(True, exc.__suppress_context__)
     self.assertEqual(expected_stack, exc.stack)
     self.assertEqual(exc_info[0], exc.exc_type)
     self.assertEqual(str(exc_info[1]), str(exc))
Esempio n. 10
0
 def test_syntax_no_extras(self):
     linecache.updatecache('/foo.py', fake_module)
     e = SyntaxError("uh oh")
     c = test_code('/foo.py', 'method')
     f = test_frame(c, fake_module, {'something': 1})
     tb = test_tb(f, 6, None)
     exc = traceback.TracebackException(SyntaxError, e, tb)
     self.assertEqual([
         u('Traceback (most recent call last):\n'),
         u('  File "/foo.py", line 6, in method\n    from io import StringIO\n'),
         u('  File "<string>", line None\n'),
         u('SyntaxError: uh oh\n')],
         list(exc.format()))
Esempio n. 11
0
 def test_limit(self):
     def recurse(n):
         if n:
             recurse(n-1)
         else:
             1/0
     try:
         recurse(10)
     except Exception:
         exc_info = sys.exc_info()
         exc = traceback.TracebackException(*exc_info, limit=5)
         expected_stack = traceback.StackSummary.extract(
             traceback.walk_tb(exc_info[2]), limit=5)
     self.assertEqual(expected_stack, exc.stack)
Esempio n. 12
0
 def test_traceback_header(self):
     # do not print a traceback header if exc_traceback is None
     # see issue #24695
     exc = traceback.TracebackException(Exception, Exception("haven"), None)
     self.assertEqual(list(exc.format()), [u("Exception: haven\n")])