[pypy-commit] pypy unicode-utf8: backport relevant parts of 8e00f53ea94c

mattip pypy.commits at gmail.com
Wed Jan 23 12:30:00 EST 2019


Author: Matti Picus <matti.picus at gmail.com>
Branch: unicode-utf8
Changeset: r95705:9853efedd970
Date: 2019-01-23 19:29 +0200
http://bitbucket.org/pypy/pypy/changeset/9853efedd970/

Log:	backport relevant parts of 8e00f53ea94c

diff --git a/pypy/module/_io/interp_stringio.py b/pypy/module/_io/interp_stringio.py
--- a/pypy/module/_io/interp_stringio.py
+++ b/pypy/module/_io/interp_stringio.py
@@ -196,7 +196,8 @@
         if pos < 0:
             raise oefmt(space.w_ValueError,
                         "position value cannot be negative")
-        self.buf = UnicodeIO(initval, pos)
+        self.buf = UnicodeIO(initval)
+        self.buf.seek(pos)
         if not space.is_w(w_dict, space.w_None):
             if not space.isinstance_w(w_dict, space.w_dict):
                 raise oefmt(
diff --git a/pypy/module/_io/test/test_stringio.py b/pypy/module/_io/test/test_stringio.py
--- a/pypy/module/_io/test/test_stringio.py
+++ b/pypy/module/_io/test/test_stringio.py
@@ -307,3 +307,17 @@
         raises(TypeError, sio.__setstate__, 0)
         sio.close()
         raises(ValueError, sio.__setstate__, (u"closed", u"", 0, None))
+
+    def test_roundtrip_state(self):
+        import io
+        s = u'12345678'
+        sio1 = io.StringIO(s)
+        sio1.foo = 42
+        sio1.seek(2)
+        assert sio1.getvalue() == s
+        state = sio1.__getstate__()
+        sio2 = io.StringIO()
+        sio2.__setstate__(state)
+        assert sio2.getvalue() == s
+        assert sio2.foo == 42
+        assert sio2.tell() == 2


More information about the pypy-commit mailing list