diff options
Diffstat (limited to 'Lib')
-rw-r--r-- | Lib/pickle.py | 6 | ||||
-rw-r--r-- | Lib/test/test_exceptions.py | 33 |
2 files changed, 21 insertions, 18 deletions
diff --git a/Lib/pickle.py b/Lib/pickle.py index 675fa1f..f976ffb 100644 --- a/Lib/pickle.py +++ b/Lib/pickle.py @@ -929,12 +929,12 @@ class Unpickler: break else: raise ValueError, "insecure string pickle" - self.append(rep.decode("string-escape")) + self.append(str8(rep.decode("string-escape"))) dispatch[STRING[0]] = load_string def load_binstring(self): len = mloads(b'i' + self.read(4)) - self.append(self.read(len)) + self.append(str8(self.read(len))) dispatch[BINSTRING[0]] = load_binstring def load_unicode(self): @@ -948,7 +948,7 @@ class Unpickler: def load_short_binstring(self): len = ord(self.read(1)) - self.append(self.read(len)) + self.append(str8(self.read(len))) dispatch[SHORT_BINSTRING[0]] = load_short_binstring def load_tuple(self): diff --git a/Lib/test/test_exceptions.py b/Lib/test/test_exceptions.py index 934d50e..dbaf01c 100644 --- a/Lib/test/test_exceptions.py +++ b/Lib/test/test_exceptions.py @@ -251,17 +251,19 @@ class ExceptionTests(unittest.TestCase): 'print_file_and_line' : None, 'msg' : 'msgStr', 'filename' : None, 'lineno' : None, 'offset' : None}), (UnicodeError, (), {'message' : '', 'args' : (),}), - (UnicodeEncodeError, (str8('ascii'), 'a', 0, 1, str8('ordinal not in range')), + (UnicodeEncodeError, (str8('ascii'), 'a', 0, 1, + str8('ordinal not in range')), {'message' : '', 'args' : ('ascii', 'a', 0, 1, 'ordinal not in range'), 'encoding' : 'ascii', 'object' : 'a', 'start' : 0, 'reason' : 'ordinal not in range'}), - (UnicodeDecodeError, (str8('ascii'), b'\xff', 0, 1, str8('ordinal not in range')), - {'message' : '', 'args' : ('ascii', '\xff', 0, 1, + (UnicodeDecodeError, (str8('ascii'), b'\xff', 0, 1, + str8('ordinal not in range')), + {'message' : '', 'args' : ('ascii', b'\xff', 0, 1, 'ordinal not in range'), - 'encoding' : 'ascii', 'object' : '\xff', + 'encoding' : 'ascii', 'object' : b'\xff', 'start' : 0, 'reason' : 'ordinal not in range'}), - (UnicodeTranslateError, ("\u3042", 0, 1, "ouch"), + (UnicodeTranslateError, ("\u3042", 0, 1, str8("ouch")), {'message' : '', 'args' : ('\u3042', 0, 1, 'ouch'), 'object' : '\u3042', 'reason' : 'ouch', 'start' : 0, 'end' : 1}), @@ -278,27 +280,28 @@ class ExceptionTests(unittest.TestCase): for exc, args, expected in exceptionList: try: - print("exc=%r, args=%r" % (exc, args)) - raise exc(*args) - except BaseException as e: - if type(e) is not exc: - raise + e = exc(*args) + except: + print("\nexc=%r, args=%r" % (exc, args)) + raise + else: # Verify module name self.assertEquals(type(e).__module__, '__builtin__') # Verify no ref leaks in Exc_str() s = str(e) for checkArgName in expected: - self.assertEquals(repr(getattr(e, checkArgName)), + value = getattr(e, checkArgName) + self.assertEquals(repr(value), repr(expected[checkArgName]), - 'exception "%s", attribute "%s"' % - (repr(e), checkArgName)) + '%r.%s == %r, expected %r' % ( + e, checkArgName, + value, expected[checkArgName])) # test for pickling support for p in pickle, cPickle: if p is None: continue # cPickle not found -- skip it for protocol in range(p.HIGHEST_PROTOCOL + 1): - ##print("p=%s, protocol=%s, e=%r" % (p.__name__, protocol, e)) s = p.dumps(e, protocol) new = p.loads(s) for checkArgName in expected: @@ -356,4 +359,4 @@ def test_main(): run_unittest(ExceptionTests) if __name__ == '__main__': - test_main() + unittest.main() |