[pypy-commit] pypy utf8-unicode2: Copy failing lib-python test
waedt
noreply at buildbot.pypy.org
Tue Aug 12 18:38:50 CEST 2014
Author: Tyler Wade <wayedt at gmail.com>
Branch: utf8-unicode2
Changeset: r72767:90afe25b63d5
Date: 2014-08-12 11:38 -0500
http://bitbucket.org/pypy/pypy/changeset/90afe25b63d5/
Log: Copy failing lib-python test
diff --git a/pypy/module/_io/test/test_textio.py b/pypy/module/_io/test/test_textio.py
--- a/pypy/module/_io/test/test_textio.py
+++ b/pypy/module/_io/test/test_textio.py
@@ -1,5 +1,5 @@
class AppTestTextIO:
- spaceconfig = dict(usemodules=['_io', '_locale'])
+ spaceconfig = dict(usemodules=['_io', '_locale', 'thread', 'time', 'signal'])
def test_constructor(self):
import _io
@@ -281,6 +281,58 @@
t.read() == u'a'
+ def test_interrupted_write(self):
+ import _io
+ import os
+ import threading
+ import sys
+ import signal
+ import errno
+
+ item = u'xy'
+ bytes = 'xy'
+
+ signal.signal(signal.SIGALRM, lambda x, y: 1 // 0)
+
+ read_results = []
+ def _read():
+ s = os.read(r, 1)
+ read_results.append(s)
+ t = threading.Thread(target=_read)
+ t.daemon = True
+ r, w = os.pipe()
+ try:
+ wio = _io.open(w, mode='w', encoding="ascii")
+ t.start()
+ signal.alarm(1)
+ # Fill the pipe enough that the write will be blocking.
+ # It will be interrupted by the timer armed above. Since the
+ # other thread has read one byte, the low-level write will
+ # return with a successful (partial) result rather than an EINTR.
+ # The buffered IO layer must check for pending signal
+ # handlers, which in this case will invoke alarm_interrupt().
+
+ raises(ZeroDivisionError, wio.write, item * (4194305 // len(item) + 1))
+
+ t.join()
+ # We got one byte, get another one and check that it isn't a
+ # repeat of the first one.
+ read_results.append(os.read(r, 1))
+
+ assert read_results == [bytes[0:1], bytes[1:2]]
+ finally:
+ os.close(w)
+ os.close(r)
+ # This is deliberate. If we didn't close the file descriptor
+ # before closing wio, wio would try to flush its internal
+ # buffer, and block again.
+ try:
+ wio.close()
+ except IOError as e:
+ if e.errno != errno.EBADF:
+ raise
+
+
class AppTestIncrementalNewlineDecoder:
def test_newline_decoder(self):
import _io
More information about the pypy-commit
mailing list