Author: Manuel Jacob Branch: py3k Changeset: r62005:ed5327d22e7c Date: 2013-03-04 11:51 +0100 http://bitbucket.org/pypy/pypy/changeset/ed5327d22e7c/
Log: hg merge default diff --git a/dotviewer/msgstruct.py b/dotviewer/msgstruct.py --- a/dotviewer/msgstruct.py +++ b/dotviewer/msgstruct.py @@ -1,5 +1,6 @@ import sys, os from struct import pack, unpack, calcsize +from strunicode import tryencode MAGIC = -0x3b83728b @@ -24,15 +25,10 @@ long_max = 2147483647 -def _encodeme(x): - if type(x) is unicode: - x = x.encode('utf-8') - return x - def message(tp, *values): #print >> sys.stderr, tp, values typecodes = [''] - values = map(_encodeme, values) + values = map(tryencode, values) for v in values: if type(v) is str: typecodes.append('%ds' % len(v)) diff --git a/dotviewer/strunicode.py b/dotviewer/strunicode.py --- a/dotviewer/strunicode.py +++ b/dotviewer/strunicode.py @@ -1,9 +1,17 @@ RAW_ENCODING = "utf-8" +ENCODING_ERROR_HANDLING = "replace" def forceunicode(name): - return name if isinstance(name, unicode) else name.decode(RAW_ENCODING) + """ returns `name` as unicode, even if it wasn't before """ + return name if isinstance(name, unicode) else name.decode(RAW_ENCODING, ENCODING_ERROR_HANDLING) def forcestr(name): - return name if isinstance(name, str) else name.encode(RAW_ENCODING) + """ returns `name` as string, even if it wasn't before """ + return name if isinstance(name, str) else name.encode(RAW_ENCODING, ENCODING_ERROR_HANDLING) + + +def tryencode(name): + """ returns `name` as encoded string if it was unicode before """ + return name.encode(RAW_ENCODING, ENCODING_ERROR_HANDLING) if isinstance(name, unicode) else name diff --git a/dotviewer/test/test_interactive_unicode.py b/dotviewer/test/test_interactive_unicode.py --- a/dotviewer/test/test_interactive_unicode.py +++ b/dotviewer/test/test_interactive_unicode.py @@ -4,7 +4,7 @@ import py import sys, os, signal, thread, time, codecs from dotviewer.conftest import option -from dotviewer.drawgraph import RAW_ENCODING +from dotviewer.strunicode import RAW_ENCODING SOURCE1 = u"""digraph G{ λ -> b diff --git a/dotviewer/test/test_unicode_util.py b/dotviewer/test/test_unicode_util.py --- a/dotviewer/test/test_unicode_util.py +++ b/dotviewer/test/test_unicode_util.py @@ -3,7 +3,7 @@ # import py import codecs -from dotviewer.drawgraph import RAW_ENCODING, forcestr, forceunicode +from dotviewer.strunicode import RAW_ENCODING, forcestr, forceunicode, tryencode SOURCE1 = u"""digraph G{ λ -> b @@ -18,7 +18,7 @@ def test_idempotent(self): x = u"a" assert forceunicode(forcestr(x)) == x - + x = u"λ" assert forceunicode(forcestr(x)) == x @@ -40,7 +40,7 @@ x_u = forceunicode(x_e) assert forceunicode(x_u) == x_u - def test_file(self): + def test_file(self): udir = py.path.local.make_numbered_dir(prefix='usession-dot-', keep=3) full_filename = str(udir.join(FILENAME)) f = codecs.open(full_filename, 'wb', RAW_ENCODING) @@ -55,3 +55,19 @@ f3.close() result = (c == SOURCE1) assert result + + def test_only_unicode_encode(self): + sut = [1, u"a", "miau", u"λ"] + expected = [int, str, str, str ] + + results = map(tryencode, sut) + for result, expected_type in zip(results, expected): + assert isinstance(result, expected_type) + + def test_forceunicode_should_not_fail(self): + garbage = "\xef\xff\xbb\xbf\xce\xbb\xff\xff" # garbage with a lambda + result = forceunicode(garbage) # should not raise + + def test_forcestr_should_not_fail(self): + garbage = u"\xef\xff\xbb\xbf\xce\xbb\xff\xff" # garbage + result = forcestr(garbage) # should not raise diff --git a/pypy/module/select/test/test_kqueue.py b/pypy/module/select/test/test_kqueue.py --- a/pypy/module/select/test/test_kqueue.py +++ b/pypy/module/select/test/test_kqueue.py @@ -101,10 +101,9 @@ try: client.connect(("127.0.0.1", server_socket.getsockname()[1])) except socket.error as e: - if 'bsd' in sys.platform: - assert e.args[0] == errno.ENOENT - else: - assert e.args[0] == errno.EINPROGRESS + assert e.args[0] == errno.EINPROGRESS + else: + assert False, "EINPROGRESS not raised" server, addr = server_socket.accept() if sys.platform.startswith("darwin"): diff --git a/pypy/module/select/test/test_select.py b/pypy/module/select/test/test_select.py --- a/pypy/module/select/test/test_select.py +++ b/pypy/module/select/test/test_select.py @@ -193,29 +193,12 @@ readend, writeend = self.getpair() readend.close() try: - iwtd, owtd, ewtd = select.select([], [writeend], []) - assert owtd == [writeend] - assert iwtd == ewtd == [] + iwtd, owtd, ewtd = select.select([writeend], [writeend], [writeend]) + assert iwtd == owtd == [writeend] + assert ewtd == [] finally: writeend.close() - def test_select_bug(self): - import select, os - if not hasattr(os, 'fork'): - skip("no fork() on this platform") - read, write = os.pipe() - pid = os.fork() - if pid == 0: - os._exit(0) - else: - os.close(read) - os.waitpid(pid, 0) - res = select.select([write], [write], [write]) - assert len(res[0]) == 1 - assert len(res[1]) == 1 - assert len(res[2]) == 0 - assert res[0][0] == res[1][0] - def test_poll(self): import select if not hasattr(select, 'poll'): diff --git a/pypy/module/test_lib_pypy/test_os_wait.py b/pypy/module/test_lib_pypy/test_os_wait.py --- a/pypy/module/test_lib_pypy/test_os_wait.py +++ b/pypy/module/test_lib_pypy/test_os_wait.py @@ -4,9 +4,8 @@ import os -from lib_pypy._pypy_wait import wait3, wait4 - if hasattr(os, 'wait3'): + from lib_pypy._pypy_wait import wait3 def test_os_wait3(): exit_status = 0x33 @@ -25,6 +24,7 @@ assert isinstance(rusage.ru_maxrss, int) if hasattr(os, 'wait4'): + from lib_pypy._pypy_wait import wait4 def test_os_wait4(): exit_status = 0x33 diff --git a/rpython/rlib/rweakref.py b/rpython/rlib/rweakref.py --- a/rpython/rlib/rweakref.py +++ b/rpython/rlib/rweakref.py @@ -95,7 +95,7 @@ def rtyper_makerepr(self, rtyper): from rpython.rlib import _rweakvaldict return _rweakvaldict.WeakValueDictRepr(rtyper, - rtyper.makerepr(self.s_key)) + rtyper.getrepr(self.s_key)) def rtyper_makekey_ex(self, rtyper): return self.__class__, diff --git a/rpython/rlib/test/test_rsocket.py b/rpython/rlib/test/test_rsocket.py --- a/rpython/rlib/test/test_rsocket.py +++ b/rpython/rlib/test/test_rsocket.py @@ -367,7 +367,6 @@ if sys.platform == "win32": skip("dup does not work on Windows") s = RSocket(AF_INET, SOCK_STREAM) - s.setsockopt_int(SOL_SOCKET, SO_REUSEADDR, 1) s.bind(INETAddress('localhost', 50007)) s2 = s.dup() assert s.fd != s2.fd @@ -377,10 +376,10 @@ # rsocket.dup() duplicates fd, it also works on Windows # (but only on socket handles!) s = RSocket(AF_INET, SOCK_STREAM) - s.setsockopt_int(SOL_SOCKET, SO_REUSEADDR, 1) s.bind(INETAddress('localhost', 50007)) - fd2 = dup(s.fd) - assert s.fd != fd2 + s2 = RSocket(fd=dup(s.fd)) + assert s.fd != s2.fd + assert s.getsockname().eq(s2.getsockname()) def test_inet_aton(): assert inet_aton('1.2.3.4') == '\x01\x02\x03\x04' @@ -444,7 +443,6 @@ def setup_method(self, method): self.serv = RSocket(AF_INET, SOCK_STREAM) - self.serv.setsockopt_int(SOL_SOCKET, SO_REUSEADDR, 1) self.serv.bind(INETAddress(self.HOST, self.PORT)) self.serv.listen(1) diff --git a/rpython/rtyper/rint.py b/rpython/rtyper/rint.py --- a/rpython/rtyper/rint.py +++ b/rpython/rtyper/rint.py @@ -232,7 +232,7 @@ if not s_int1.nonneg or not s_int2.nonneg: raise TyperError("comparing a signed and an unsigned number") - repr = hop.rtyper.makerepr(annmodel.unionof(s_int1, s_int2)).as_int + repr = hop.rtyper.getrepr(annmodel.unionof(s_int1, s_int2)).as_int vlist = hop.inputargs(repr, repr) hop.exception_is_here() return hop.genop(repr.opprefix+func, vlist, resulttype=Bool) diff --git a/rpython/rtyper/rtyper.py b/rpython/rtyper/rtyper.py --- a/rpython/rtyper/rtyper.py +++ b/rpython/rtyper/rtyper.py @@ -162,7 +162,7 @@ def makekey(self, s_obj): return pair(self.type_system, s_obj).rtyper_makekey(self) - def makerepr(self, s_obj): + def _makerepr(self, s_obj): return pair(self.type_system, s_obj).rtyper_makerepr(self) def getrepr(self, s_obj): @@ -173,7 +173,7 @@ result = self.reprs[key] except KeyError: self.reprs[key] = None - result = self.makerepr(s_obj) + result = self._makerepr(s_obj) assert not isinstance(result.lowleveltype, ContainerType), ( "missing a Ptr in the type specification " "of %s:\n%r" % (s_obj, result.lowleveltype)) _______________________________________________ pypy-commit mailing list pypy-commit@python.org http://mail.python.org/mailman/listinfo/pypy-commit