mirror of https://github.com/python/cpython
214 lines
6.1 KiB
Python
214 lines
6.1 KiB
Python
# As a test suite for the os module, this is woefully inadequate, but this
|
|
# does add tests for a few functions which have been determined to be more
|
|
# more portable than they had been thought to be.
|
|
|
|
import os
|
|
import unittest
|
|
import warnings
|
|
|
|
warnings.filterwarnings("ignore", "tempnam", RuntimeWarning, __name__)
|
|
warnings.filterwarnings("ignore", "tmpnam", RuntimeWarning, __name__)
|
|
|
|
from test.test_support import TESTFN, run_suite
|
|
|
|
class TemporaryFileTests(unittest.TestCase):
|
|
def setUp(self):
|
|
self.files = []
|
|
os.mkdir(TESTFN)
|
|
|
|
def tearDown(self):
|
|
for name in self.files:
|
|
os.unlink(name)
|
|
os.rmdir(TESTFN)
|
|
|
|
def check_tempfile(self, name):
|
|
# make sure it doesn't already exist:
|
|
self.failIf(os.path.exists(name),
|
|
"file already exists for temporary file")
|
|
# make sure we can create the file
|
|
open(name, "w")
|
|
self.files.append(name)
|
|
|
|
def test_tempnam(self):
|
|
if not hasattr(os, "tempnam"):
|
|
return
|
|
warnings.filterwarnings("ignore", "tempnam", RuntimeWarning,
|
|
r"test_os$")
|
|
self.check_tempfile(os.tempnam())
|
|
|
|
name = os.tempnam(TESTFN)
|
|
self.check_tempfile(name)
|
|
|
|
name = os.tempnam(TESTFN, "pfx")
|
|
self.assert_(os.path.basename(name)[:3] == "pfx")
|
|
self.check_tempfile(name)
|
|
|
|
def test_tmpfile(self):
|
|
if not hasattr(os, "tmpfile"):
|
|
return
|
|
fp = os.tmpfile()
|
|
fp.write("foobar")
|
|
fp.seek(0,0)
|
|
s = fp.read()
|
|
fp.close()
|
|
self.assert_(s == "foobar")
|
|
|
|
def test_tmpnam(self):
|
|
if not hasattr(os, "tmpnam"):
|
|
return
|
|
warnings.filterwarnings("ignore", "tmpnam", RuntimeWarning,
|
|
r"test_os$")
|
|
self.check_tempfile(os.tmpnam())
|
|
|
|
# Test attributes on return values from os.*stat* family.
|
|
class StatAttributeTests(unittest.TestCase):
|
|
def setUp(self):
|
|
os.mkdir(TESTFN)
|
|
self.fname = os.path.join(TESTFN, "f1")
|
|
f = open(self.fname, 'wb')
|
|
f.write("ABC")
|
|
f.close()
|
|
|
|
def tearDown(self):
|
|
os.unlink(self.fname)
|
|
os.rmdir(TESTFN)
|
|
|
|
def test_stat_attributes(self):
|
|
if not hasattr(os, "stat"):
|
|
return
|
|
|
|
import stat
|
|
result = os.stat(self.fname)
|
|
|
|
# Make sure direct access works
|
|
self.assertEquals(result[stat.ST_SIZE], 3)
|
|
self.assertEquals(result.st_size, 3)
|
|
|
|
import sys
|
|
|
|
# Make sure all the attributes are there
|
|
members = dir(result)
|
|
for name in dir(stat):
|
|
if name[:3] == 'ST_':
|
|
attr = name.lower()
|
|
self.assertEquals(getattr(result, attr),
|
|
result[getattr(stat, name)])
|
|
self.assert_(attr in members)
|
|
|
|
try:
|
|
result[200]
|
|
self.fail("No exception thrown")
|
|
except IndexError:
|
|
pass
|
|
|
|
# Make sure that assignment fails
|
|
try:
|
|
result.st_mode = 1
|
|
self.fail("No exception thrown")
|
|
except TypeError:
|
|
pass
|
|
|
|
try:
|
|
result.st_rdev = 1
|
|
self.fail("No exception thrown")
|
|
except (AttributeError, TypeError):
|
|
pass
|
|
|
|
try:
|
|
result.parrot = 1
|
|
self.fail("No exception thrown")
|
|
except AttributeError:
|
|
pass
|
|
|
|
# Use the stat_result constructor with a too-short tuple.
|
|
try:
|
|
result2 = os.stat_result((10,))
|
|
self.fail("No exception thrown")
|
|
except TypeError:
|
|
pass
|
|
|
|
# Use the constructr with a too-long tuple.
|
|
try:
|
|
result2 = os.stat_result((0,1,2,3,4,5,6,7,8,9,10,11,12,13,14))
|
|
except TypeError:
|
|
pass
|
|
|
|
|
|
def test_statvfs_attributes(self):
|
|
if not hasattr(os, "statvfs"):
|
|
return
|
|
|
|
import statvfs
|
|
try:
|
|
result = os.statvfs(self.fname)
|
|
except OSError, e:
|
|
# On AtheOS, glibc always returns ENOSYS
|
|
import errno
|
|
if e.errno == errno.ENOSYS:
|
|
return
|
|
|
|
# Make sure direct access works
|
|
self.assertEquals(result.f_bfree, result[statvfs.F_BFREE])
|
|
|
|
# Make sure all the attributes are there
|
|
members = dir(result)
|
|
for name in dir(statvfs):
|
|
if name[:2] == 'F_':
|
|
attr = name.lower()
|
|
self.assertEquals(getattr(result, attr),
|
|
result[getattr(statvfs, name)])
|
|
self.assert_(attr in members)
|
|
|
|
# Make sure that assignment really fails
|
|
try:
|
|
result.f_bfree = 1
|
|
self.fail("No exception thrown")
|
|
except TypeError:
|
|
pass
|
|
|
|
try:
|
|
result.parrot = 1
|
|
self.fail("No exception thrown")
|
|
except AttributeError:
|
|
pass
|
|
|
|
# Use the constructor with a too-short tuple.
|
|
try:
|
|
result2 = os.statvfs_result((10,))
|
|
self.fail("No exception thrown")
|
|
except TypeError:
|
|
pass
|
|
|
|
# Use the constructr with a too-long tuple.
|
|
try:
|
|
result2 = os.statvfs_result((0,1,2,3,4,5,6,7,8,9,10,11,12,13,14))
|
|
except TypeError:
|
|
pass
|
|
|
|
from test_userdict import TestMappingProtocol
|
|
|
|
class EnvironTests(TestMappingProtocol):
|
|
"""check that os.environ object conform to mapping protocol"""
|
|
_tested_class = None
|
|
def _reference(self):
|
|
return {"KEY1":"VALUE1", "KEY2":"VALUE2", "KEY3":"VALUE3"}
|
|
def _empty_mapping(self):
|
|
os.environ.clear()
|
|
return os.environ
|
|
def setUp(self):
|
|
self.__save = dict(os.environ)
|
|
os.environ.clear()
|
|
def tearDown(self):
|
|
os.environ.clear()
|
|
os.environ.update(self.__save)
|
|
|
|
def test_main():
|
|
suite = unittest.TestSuite()
|
|
suite.addTest(unittest.makeSuite(TemporaryFileTests))
|
|
suite.addTest(unittest.makeSuite(StatAttributeTests))
|
|
suite.addTest(unittest.makeSuite(EnvironTests))
|
|
run_suite(suite)
|
|
|
|
if __name__ == "__main__":
|
|
test_main()
|