[pypy-commit] pypy py3k: hg merge default

Manuel Jacob noreply at buildbot.pypy.org
Mon Mar 4 11:51:57 CET 2013


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


More information about the pypy-commit mailing list