[pypy-commit] pypy default: More tests and small fixes in 'grp'.
arigo
noreply at buildbot.pypy.org
Fri Jun 28 21:16:52 CEST 2013
Author: Armin Rigo <arigo at tunes.org>
Branch:
Changeset: r65083:ae8a5b721a0d
Date: 2013-06-28 21:16 +0200
http://bitbucket.org/pypy/pypy/changeset/ae8a5b721a0d/
Log: More tests and small fixes in 'grp'.
diff --git a/lib_pypy/grp.py b/lib_pypy/grp.py
--- a/lib_pypy/grp.py
+++ b/lib_pypy/grp.py
@@ -8,6 +8,7 @@
from ctypes import Structure, c_char_p, c_int, POINTER
from ctypes_support import standard_c_lib as libc
+import _structseq
try: from __pypy__ import builtinify
except ImportError: builtinify = lambda f: f
@@ -23,32 +24,13 @@
('gr_mem', POINTER(c_char_p)),
)
-class Group(object):
- def __init__(self, gr_name, gr_passwd, gr_gid, gr_mem):
- self.gr_name = gr_name
- self.gr_passwd = gr_passwd
- self.gr_gid = gr_gid
- self.gr_mem = gr_mem
+class struct_group:
+ __metaclass__ = _structseq.structseqtype
- def __getitem__(self, item):
- if item == 0:
- return self.gr_name
- elif item == 1:
- return self.gr_passwd
- elif item == 2:
- return self.gr_gid
- elif item == 3:
- return self.gr_mem
- else:
- raise IndexError(item)
-
- def __len__(self):
- return 4
-
- def __repr__(self):
- return str((self.gr_name, self.gr_passwd, self.gr_gid, self.gr_mem))
-
- # whatever else...
+ gr_name = _structseq.structseqfield(0)
+ gr_passwd = _structseq.structseqfield(1)
+ gr_gid = _structseq.structseqfield(2)
+ gr_mem = _structseq.structseqfield(3)
libc.getgrgid.argtypes = [gid_t]
libc.getgrgid.restype = POINTER(GroupStruct)
@@ -71,8 +53,8 @@
while res.contents.gr_mem[i]:
mem.append(res.contents.gr_mem[i])
i += 1
- return Group(res.contents.gr_name, res.contents.gr_passwd,
- res.contents.gr_gid, mem)
+ return struct_group((res.contents.gr_name, res.contents.gr_passwd,
+ res.contents.gr_gid, mem))
@builtinify
def getgrgid(gid):
diff --git a/pypy/module/test_lib_pypy/test_grp_extra.py b/pypy/module/test_lib_pypy/test_grp_extra.py
--- a/pypy/module/test_lib_pypy/test_grp_extra.py
+++ b/pypy/module/test_lib_pypy/test_grp_extra.py
@@ -5,6 +5,22 @@
except ImportError:
py.test.skip("No grp module on this platform")
+def test_basic():
+ g = grp.getgrnam("root")
+ assert g.gr_gid == 0
+ assert g.gr_mem == ['root']
+ assert g.gr_name == 'root'
+ assert isinstance(g.gr_passwd, str) # usually just 'x', don't hope :-)
+
def test_extra():
py.test.raises(TypeError, grp.getgrnam, False)
py.test.raises(TypeError, grp.getgrnam, None)
+
+def test_struct_group():
+ g = grp.struct_group((10, 20, 30, 40))
+ assert len(g) == 4
+ assert list(g) == [10, 20, 30, 40]
+ assert g.gr_name == 10
+ assert g.gr_passwd == 20
+ assert g.gr_gid == 30
+ assert g.gr_mem == 40
More information about the pypy-commit
mailing list