[pypy-svn] r15426 - in pypy/dist/pypy/module/posix: . test
hpk at codespeak.net
hpk at codespeak.net
Sat Jul 30 19:48:53 CEST 2005
Author: hpk
Date: Sat Jul 30 19:48:52 2005
New Revision: 15426
Modified:
pypy/dist/pypy/module/posix/interp_posix.py
pypy/dist/pypy/module/posix/test/test_posix2.py
Log:
check exception handling (which was completely broken
or non-existent for the posix module)
Modified: pypy/dist/pypy/module/posix/interp_posix.py
==============================================================================
--- pypy/dist/pypy/module/posix/interp_posix.py (original)
+++ pypy/dist/pypy/module/posix/interp_posix.py Sat Jul 30 19:48:52 2005
@@ -1,36 +1,75 @@
from pypy.interpreter.baseobjspace import ObjSpace
from pypy.rpython.rarithmetic import intmask
+from pypy.interpreter.error import OperationError
import os
from os import *
+def wrap_oserror(space, e):
+ assert isinstance(e, OSError)
+ errno = e.errno
+ msg = os.strerror(errno)
+ w_error = space.call_function(space.w_OSError,
+ space.wrap(errno),
+ space.wrap(msg))
+ return OperationError(space.w_OSError, w_error)
+
def open(space, fname, flag, mode=0777):
- fd = os.open(fname, flag, mode)
+ try:
+ fd = os.open(fname, flag, mode)
+ except OSError, e:
+ raise wrap_oserror(space, e)
return space.wrap(fd)
open.unwrap_spec = [ObjSpace, str, int, int]
def lseek(space, fd, pos, how):
- return space.wrap(os.lseek(fd, pos, how))
+ try:
+ pos = os.lseek(fd, pos, how)
+ except OSError, e:
+ raise wrap_oserror(space, e)
+ else:
+ return space.wrap(pos)
lseek.unwrap_spec = [ObjSpace, int, int, int]
def isatty(space, fd):
- return space.wrap(os.isatty(fd))
+ try:
+ res = os.isatty(fd)
+ except OSError, e:
+ raise wrap_oserror(space, e)
+ else:
+ return space.wrap(res)
isatty.unwrap_spec = [ObjSpace, int]
def read(space, fd, buffersize):
- return space.wrap(os.read(fd, buffersize))
+ try:
+ s = os.read(fd, buffersize)
+ except OSError, e:
+ raise wrap_oserror(space, e)
+ else:
+ return space.wrap(s)
read.unwrap_spec = [ObjSpace, int, int]
def write(space, fd, data):
- return space.wrap(os.write(fd, data))
+ try:
+ res = os.write(fd, data)
+ except OSError, e:
+ raise wrap_oserror(space, e)
+ else:
+ return space.wrap(res)
write.unwrap_spec = [ObjSpace, int, str]
def close(space, fd):
- os.close(fd)
+ try:
+ os.close(fd)
+ except OSError, e:
+ raise wrap_oserror(space, e)
close.unwrap_spec = [ObjSpace, int]
def ftruncate(space, fd, length):
- os.ftruncate(fd, length)
+ try:
+ os.ftruncate(fd, length)
+ except OSError, e:
+ raise wrap_oserror(space, e)
ftruncate.unwrap_spec = [ObjSpace, int, int]
def build_stat_result(space, st):
@@ -43,17 +82,37 @@
return space.call_function(w_stat_result, w_tuple)
def fstat(space, fd):
- return build_stat_result(space, os.fstat(fd))
+ try:
+ st = os.fstat(fd)
+ except OSError, e:
+ raise wrap_oserror(space, e)
+ else:
+ return build_stat_result(space, st)
fstat.unwrap_spec = [ObjSpace, int]
def stat(space, path):
- return build_stat_result(space, os.stat(path))
+ try:
+ st = os.stat(path)
+ except OSError, e:
+ raise wrap_oserror(space, e)
+ else:
+ return build_stat_result(space, st)
stat.unwrap_spec = [ObjSpace, str]
def getcwd(space):
- return space.wrap(os.getcwd())
+ try:
+ cur = os.getcwd()
+ except OSError, e:
+ raise wrap_oserror(space, e)
+ else:
+ return space.wrap(cur)
getcwd.unwrap_spec = [ObjSpace]
def dup(space, fd):
- return space.wrap(os.dup(fd))
+ try:
+ newfd = os.dup(fd)
+ except OSError, e:
+ raise wrap_oserror(space, e)
+ else:
+ return space.wrap(newfd)
dup.unwrap_spec = [ObjSpace, int]
Modified: pypy/dist/pypy/module/posix/test/test_posix2.py
==============================================================================
--- pypy/dist/pypy/module/posix/test/test_posix2.py (original)
+++ pypy/dist/pypy/module/posix/test/test_posix2.py Sat Jul 30 19:48:52 2005
@@ -30,3 +30,35 @@
assert stat # XXX
posix.close(fd2)
posix.close(fd)
+
+ def test_open_exception(self):
+ posix = self.posix
+ try:
+ posix.open('qowieuqwoeiu', 0, 0)
+ except OSError:
+ pass
+ else:
+ assert 0
+
+ def test_functions_raise_error(self):
+ def ex(func, *args):
+ try:
+ func(*args)
+ except OSError:
+ pass
+ else:
+ raise AssertionError("%s(%s) did not raise" %(
+ func.__name__,
+ ", ".join([str(x) for x in args])))
+ UNUSEDFD = 123123
+ ex(self.posix.open, "qweqwe", 0, 0)
+ ex(self.posix.lseek, UNUSEDFD, 123, 0)
+ #apparently not posix-required: ex(self.posix.isatty, UNUSEDFD)
+ ex(self.posix.read, UNUSEDFD, 123)
+ ex(self.posix.write, UNUSEDFD, "x")
+ ex(self.posix.close, UNUSEDFD)
+ #UMPF cpython raises IOError ex(self.posix.ftruncate, UNUSEDFD, 123)
+ ex(self.posix.fstat, UNUSEDFD)
+ ex(self.posix.stat, "qweqwehello")
+ # how can getcwd() raise?
+ ex(self.posix.dup, UNUSEDFD)
More information about the Pypy-commit
mailing list