import unittest import os import stat from test.support import TESTFN, run_unittest def get_mode(fname=TESTFN): return stat.filemode(os.lstat(fname).st_mode) class TestFilemode(unittest.TestCase): def setUp(self): try: os.remove(TESTFN) except OSError: try: os.rmdir(TESTFN) except OSError: pass tearDown = setUp def test_mode(self): with open(TESTFN, 'w'): pass if os.name == 'posix': os.chmod(TESTFN, 0o700) self.assertEqual(get_mode(), '-rwx------') os.chmod(TESTFN, 0o070) self.assertEqual(get_mode(), '----rwx---') os.chmod(TESTFN, 0o007) self.assertEqual(get_mode(), '-------rwx') os.chmod(TESTFN, 0o444) self.assertEqual(get_mode(), '-r--r--r--') else: os.chmod(TESTFN, 0o700) self.assertEqual(get_mode()[:3], '-rw') def test_directory(self): os.mkdir(TESTFN) os.chmod(TESTFN, 0o700) if os.name == 'posix': self.assertEqual(get_mode(), 'drwx------') else: self.assertEqual(get_mode()[0], 'd') @unittest.skipUnless(hasattr(os, 'symlink'), 'os.symlink not available') def test_link(self): try: os.symlink(os.getcwd(), TESTFN) except (OSError, NotImplementedError) as err: raise unittest.SkipTest(str(err)) else: self.assertEqual(get_mode()[0], 'l') @unittest.skipUnless(hasattr(os, 'mkfifo'), 'os.mkfifo not available') def test_fifo(self): os.mkfifo(TESTFN, 0o700) self.assertEqual(get_mode(), 'prwx------') def test_main(): run_unittest(TestFilemode) if __name__ == '__main__': test_main()