[pypy-commit] pypy default: add failing test - cpyext uses a buffered FILE* but W_File uses a non-bufferd int fid
mattip
pypy.commits at gmail.com
Thu Aug 4 16:09:16 EDT 2016
Author: Matti Picus <matti.picus at gmail.com>
Branch:
Changeset: r86021:700c5913e7ea
Date: 2016-08-04 21:35 +0300
http://bitbucket.org/pypy/pypy/changeset/700c5913e7ea/
Log: add failing test - cpyext uses a buffered FILE* but W_File uses a
non-bufferd int fid
diff --git a/pypy/module/cpyext/pyfile.py b/pypy/module/cpyext/pyfile.py
--- a/pypy/module/cpyext/pyfile.py
+++ b/pypy/module/cpyext/pyfile.py
@@ -1,6 +1,6 @@
from rpython.rtyper.lltypesystem import rffi, lltype
from pypy.module.cpyext.api import (
- cpython_api, CANNOT_FAIL, CONST_STRING, FILEP, build_type_checkers, fdopen)
+ cpython_api, CANNOT_FAIL, CONST_STRING, FILEP, build_type_checkers, c_fdopen)
from pypy.module.cpyext.pyobject import PyObject
from pypy.module.cpyext.object import Py_PRINT_RAW
from pypy.interpreter.error import (OperationError, oefmt,
@@ -64,7 +64,7 @@
if (fd < 0 or not mode or mode[0] not in ['r', 'w', 'a', 'U'] or
('U' in mode and ('w' in mode or 'a' in mode))):
raise oefmt(space.w_IOError, 'invalid fileno or mode')
- ret = fdopen(fd, mode)
+ ret = c_fdopen(fd, mode)
if not ret:
raise exception_from_saved_errno(space, space.w_IOError)
return ret
diff --git a/pypy/module/cpyext/test/test_pyfile.py b/pypy/module/cpyext/test/test_pyfile.py
--- a/pypy/module/cpyext/test/test_pyfile.py
+++ b/pypy/module/cpyext/test/test_pyfile.py
@@ -1,5 +1,4 @@
from pypy.conftest import option
-from pypy.module.cpyext.api import fopen, fclose, fwrite
from pypy.module.cpyext.test.test_api import BaseApiTest
from pypy.module.cpyext.test.test_cpyext import AppTestCpythonExtensionBase
from pypy.module.cpyext.object import Py_PRINT_RAW
@@ -133,6 +132,15 @@
return PyLong_FromLong(0);
return PyLong_FromLong(ftell(fp));
"""),
+ ("read_10", "METH_O",
+ """
+ char s[10];
+ FILE * fp = PyFile_AsFile(args);
+ if (fp == NULL)
+ return PyLong_FromLong(0);
+ fread(s, 1, 10, fp);
+ return PyLong_FromLong(ftell(fp));
+ """),
])
filename = self.udir + "/_test_file"
with open(filename, 'w') as fid:
@@ -142,5 +150,12 @@
t_py = fid.tell()
assert t_py == 80
t_c = module.get_c_tell(fid)
- assert t_c == t_py
+ assert t_c == t_py
+ print '-------- tell ',t_c
+ t_c = module.read_10(fid)
+ assert t_c == t_py + 10
+ print '-------- tell ',t_c
+ t_py = fid.tell()
+ assert t_c == t_py, 'after a fread, c level ftell(fp) %d but PyFile.tell() %d' % (t_c, t_py)
+
More information about the pypy-commit
mailing list