11import unittest
22import os
33from test .support import TESTFN , run_unittest , import_fresh_module
4- import stat
4+
5+ c_stat = import_fresh_module ('stat' , fresh = ['_stat' ])
6+ py_stat = import_fresh_module ('stat' , blocked = ['_stat' ])
57
68class TestFilemode (unittest .TestCase ):
9+ statmod = None
10+
711 file_flags = {'SF_APPEND' , 'SF_ARCHIVED' , 'SF_IMMUTABLE' , 'SF_NOUNLINK' ,
812 'SF_SNAPSHOT' , 'UF_APPEND' , 'UF_COMPRESSED' , 'UF_HIDDEN' ,
913 'UF_IMMUTABLE' , 'UF_NODUMP' , 'UF_NOUNLINK' , 'UF_OPAQUE' }
@@ -60,17 +64,17 @@ def setUp(self):
6064
6165 def get_mode (self , fname = TESTFN ):
6266 st_mode = os .lstat (fname ).st_mode
63- modestr = stat .filemode (st_mode )
67+ modestr = self . statmod .filemode (st_mode )
6468 return st_mode , modestr
6569
6670 def assertS_IS (self , name , mode ):
6771 # test format, lstrip is for S_IFIFO
68- fmt = getattr (stat , "S_IF" + name .lstrip ("F" ))
69- self .assertEqual (stat .S_IFMT (mode ), fmt )
72+ fmt = getattr (self . statmod , "S_IF" + name .lstrip ("F" ))
73+ self .assertEqual (self . statmod .S_IFMT (mode ), fmt )
7074 # test that just one function returns true
7175 testname = "S_IS" + name
7276 for funcname in self .format_funcs :
73- func = getattr (stat , funcname , None )
77+ func = getattr (self . statmod , funcname , None )
7478 if func is None :
7579 if funcname == testname :
7680 raise ValueError (funcname )
@@ -88,35 +92,35 @@ def test_mode(self):
8892 st_mode , modestr = self .get_mode ()
8993 self .assertEqual (modestr , '-rwx------' )
9094 self .assertS_IS ("REG" , st_mode )
91- self .assertEqual (stat .S_IMODE (st_mode ),
92- stat .S_IRWXU )
95+ self .assertEqual (self . statmod .S_IMODE (st_mode ),
96+ self . statmod .S_IRWXU )
9397
9498 os .chmod (TESTFN , 0o070 )
9599 st_mode , modestr = self .get_mode ()
96100 self .assertEqual (modestr , '----rwx---' )
97101 self .assertS_IS ("REG" , st_mode )
98- self .assertEqual (stat .S_IMODE (st_mode ),
99- stat .S_IRWXG )
102+ self .assertEqual (self . statmod .S_IMODE (st_mode ),
103+ self . statmod .S_IRWXG )
100104
101105 os .chmod (TESTFN , 0o007 )
102106 st_mode , modestr = self .get_mode ()
103107 self .assertEqual (modestr , '-------rwx' )
104108 self .assertS_IS ("REG" , st_mode )
105- self .assertEqual (stat .S_IMODE (st_mode ),
106- stat .S_IRWXO )
109+ self .assertEqual (self . statmod .S_IMODE (st_mode ),
110+ self . statmod .S_IRWXO )
107111
108112 os .chmod (TESTFN , 0o444 )
109113 st_mode , modestr = self .get_mode ()
110114 self .assertS_IS ("REG" , st_mode )
111115 self .assertEqual (modestr , '-r--r--r--' )
112- self .assertEqual (stat .S_IMODE (st_mode ), 0o444 )
116+ self .assertEqual (self . statmod .S_IMODE (st_mode ), 0o444 )
113117 else :
114118 os .chmod (TESTFN , 0o700 )
115119 st_mode , modestr = self .get_mode ()
116120 self .assertEqual (modestr [:3 ], '-rw' )
117121 self .assertS_IS ("REG" , st_mode )
118- self .assertEqual (stat .S_IFMT (st_mode ),
119- stat .S_IFREG )
122+ self .assertEqual (self . statmod .S_IFMT (st_mode ),
123+ self . statmod .S_IFREG )
120124
121125 def test_directory (self ):
122126 os .mkdir (TESTFN )
@@ -162,25 +166,38 @@ def test_devices(self):
162166
163167 def test_module_attributes (self ):
164168 for key , value in self .stat_struct .items ():
165- modvalue = getattr (stat , key )
169+ modvalue = getattr (self . statmod , key )
166170 self .assertEqual (value , modvalue , key )
167171 for key , value in self .permission_bits .items ():
168- modvalue = getattr (stat , key )
172+ modvalue = getattr (self . statmod , key )
169173 self .assertEqual (value , modvalue , key )
170174 for key in self .file_flags :
171- modvalue = getattr (stat , key )
175+ modvalue = getattr (self . statmod , key )
172176 self .assertIsInstance (modvalue , int )
173177 for key in self .formats :
174- modvalue = getattr (stat , key )
178+ modvalue = getattr (self . statmod , key )
175179 self .assertIsInstance (modvalue , int )
176180 for key in self .format_funcs :
177- func = getattr (stat , key )
181+ func = getattr (self . statmod , key )
178182 self .assertTrue (callable (func ))
179183 self .assertEqual (func (0 ), 0 )
180184
181185
186+ class TestFilemodeCStat (TestFilemode ):
187+ statmod = c_stat
188+
189+ formats = TestFilemode .formats | {'S_IFDOOR' , 'S_IFPORT' , 'S_IFWHT' }
190+ format_funcss = TestFilemode .format_funcs | {'S_ISDOOR' , 'S_ISPORT' ,
191+ 'S_ISWHT' }
192+
193+
194+ class TestFilemodePyStat (TestFilemode ):
195+ statmod = py_stat
196+
197+
182198def test_main ():
183- run_unittest (TestFilemode )
199+ run_unittest (TestFilemodeCStat )
200+ run_unittest (TestFilemodePyStat )
184201
185202if __name__ == '__main__' :
186203 test_main ()
0 commit comments