mirror of
https://github.com/python/cpython.git
synced 2025-08-31 14:07:50 +00:00
Make str/str8 comparisons return True/False for !=/==.
Code that has been returning str8 becomes much more apparent thanks to this (e.g., struct module returning str8 for all string-related formats or sqlite3 passing in str8 instances when converting objects that had a __conform__ method). One also has to watch out in C code when making a key from char * using PyString in the C code but a str instance in Python code as that will not longer compare equal. Once str8 gains a constructor like the current bytes type then test_modulefinder needs a cleanup as the fix is a little messy in that file. Thanks goes to Thomas Lee for writing the patch for the change giving an initial run-down of why most of the tests were failing.
This commit is contained in:
parent
6464d47195
commit
4043001f5d
11 changed files with 167 additions and 203 deletions
|
@ -101,7 +101,7 @@ s = struct.pack('ii', 1, 2)
|
|||
simple_err(struct.unpack, 'iii', s)
|
||||
simple_err(struct.unpack, 'i', s)
|
||||
|
||||
c = 'a'
|
||||
c = str8('a')
|
||||
b = 1
|
||||
h = 255
|
||||
i = 65535
|
||||
|
@ -183,6 +183,10 @@ for fmt, arg, big, lil, asy in tests:
|
|||
raise TestFailed("calcsize(%r) -> %d # expected %d" % (
|
||||
xfmt, n, len(res)))
|
||||
rev = struct.unpack(xfmt, res)[0]
|
||||
if isinstance(arg, str):
|
||||
# Strings are returned as str8 since you can't know the encoding of
|
||||
# the string when packed.
|
||||
arg = str8(arg)
|
||||
if rev != arg and not asy:
|
||||
raise TestFailed("unpack(%r, %r) -> (%r,) # expected (%r,)" % (
|
||||
fmt, res, rev, arg))
|
||||
|
@ -424,14 +428,14 @@ for args in [("bB", 1),
|
|||
|
||||
def test_p_code():
|
||||
for code, input, expected, expectedback in [
|
||||
('p','abc', '\x00', ''),
|
||||
('1p', 'abc', '\x00', ''),
|
||||
('2p', 'abc', '\x01a', 'a'),
|
||||
('3p', 'abc', '\x02ab', 'ab'),
|
||||
('4p', 'abc', '\x03abc', 'abc'),
|
||||
('5p', 'abc', '\x03abc\x00', 'abc'),
|
||||
('6p', 'abc', '\x03abc\x00\x00', 'abc'),
|
||||
('1000p', 'x'*1000, '\xff' + 'x'*999, 'x'*255)]:
|
||||
('p','abc', '\x00', str8('')),
|
||||
('1p', 'abc', '\x00', str8('')),
|
||||
('2p', 'abc', '\x01a', str8('a')),
|
||||
('3p', 'abc', '\x02ab', str8('ab')),
|
||||
('4p', 'abc', '\x03abc', str8('abc')),
|
||||
('5p', 'abc', '\x03abc\x00', str8('abc')),
|
||||
('6p', 'abc', '\x03abc\x00\x00', str8('abc')),
|
||||
('1000p', 'x'*1000, '\xff' + 'x'*999, str8('x'*255))]:
|
||||
expected = bytes(expected, "latin-1")
|
||||
got = struct.pack(code, input)
|
||||
if got != expected:
|
||||
|
@ -560,20 +564,20 @@ def test_unpack_from():
|
|||
if verbose:
|
||||
print("test_unpack_from using", cls.__name__)
|
||||
data = cls(test_string)
|
||||
vereq(s.unpack_from(data), ('abcd',))
|
||||
vereq(s.unpack_from(data, 2), ('cd01',))
|
||||
vereq(s.unpack_from(data, 4), ('0123',))
|
||||
vereq(s.unpack_from(data), (str8('abcd'),))
|
||||
vereq(s.unpack_from(data, 2), (str8('cd01'),))
|
||||
vereq(s.unpack_from(data, 4), (str8('0123'),))
|
||||
for i in range(6):
|
||||
vereq(s.unpack_from(data, i), (data[i:i+4],))
|
||||
vereq(s.unpack_from(data, i), (str8(data[i:i+4]),))
|
||||
for i in range(6, len(test_string) + 1):
|
||||
simple_err(s.unpack_from, data, i)
|
||||
for cls in (str, str8, bytes): # XXX + memoryview
|
||||
data = cls(test_string)
|
||||
vereq(struct.unpack_from(fmt, data), ('abcd',))
|
||||
vereq(struct.unpack_from(fmt, data, 2), ('cd01',))
|
||||
vereq(struct.unpack_from(fmt, data, 4), ('0123',))
|
||||
vereq(struct.unpack_from(fmt, data), (str8('abcd'),))
|
||||
vereq(struct.unpack_from(fmt, data, 2), (str8('cd01'),))
|
||||
vereq(struct.unpack_from(fmt, data, 4), (str8('0123'),))
|
||||
for i in range(6):
|
||||
vereq(struct.unpack_from(fmt, data, i), (data[i:i+4],))
|
||||
vereq(struct.unpack_from(fmt, data, i), (str8(data[i:i+4]),))
|
||||
for i in range(6, len(test_string) + 1):
|
||||
simple_err(struct.unpack_from, fmt, data, i)
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue