blob: 48d5e3801e69bc7c6806f8a4ac4e8f597fc25d32 [file] [log] [blame]
Giampaolo Rodola'ffa1d0b2012-05-15 15:30:25 +02001import unittest
2import os
3import stat
4from test.support import TESTFN, run_unittest
5
6
7def get_mode(fname=TESTFN):
8 return stat.filemode(os.lstat(fname).st_mode)
9
10
11class TestFilemode(unittest.TestCase):
12
13 def setUp(self):
14 try:
15 os.remove(TESTFN)
16 except OSError:
17 try:
18 os.rmdir(TESTFN)
19 except OSError:
20 pass
21 tearDown = setUp
22
23 def test_mode(self):
24 with open(TESTFN, 'w'):
25 pass
Giampaolo Rodola'e1266782012-05-16 16:01:59 +020026 if os.name == 'posix':
27 os.chmod(TESTFN, 0o700)
28 self.assertEqual(get_mode(), '-rwx------')
29 os.chmod(TESTFN, 0o070)
30 self.assertEqual(get_mode(), '----rwx---')
31 os.chmod(TESTFN, 0o007)
32 self.assertEqual(get_mode(), '-------rwx')
33 os.chmod(TESTFN, 0o444)
34 self.assertEqual(get_mode(), '-r--r--r--')
35 else:
36 os.chmod(TESTFN, 0o700)
37 self.assertEqual(get_mode()[:3], '-rw')
Giampaolo Rodola'ffa1d0b2012-05-15 15:30:25 +020038
39 def test_directory(self):
40 os.mkdir(TESTFN)
41 os.chmod(TESTFN, 0o700)
Giampaolo Rodola'e1266782012-05-16 16:01:59 +020042 if os.name == 'posix':
43 self.assertEqual(get_mode(), 'drwx------')
44 else:
45 self.assertEqual(get_mode()[0], 'd')
Giampaolo Rodola'ffa1d0b2012-05-15 15:30:25 +020046
47 @unittest.skipUnless(hasattr(os, 'symlink'), 'os.symlink not available')
48 def test_link(self):
Giampaolo Rodola'e1266782012-05-16 16:01:59 +020049 try:
50 os.symlink(os.getcwd(), TESTFN)
51 except (OSError, NotImplementedError) as err:
52 raise unittest.SkipTest(str(err))
53 else:
54 self.assertEqual(get_mode()[0], 'l')
Giampaolo Rodola'ffa1d0b2012-05-15 15:30:25 +020055
56 @unittest.skipUnless(hasattr(os, 'mkfifo'), 'os.mkfifo not available')
57 def test_fifo(self):
58 os.mkfifo(TESTFN, 0o700)
59 self.assertEqual(get_mode(), 'prwx------')
60
61
62def test_main():
63 run_unittest(TestFilemode)
64
65if __name__ == '__main__':
66 test_main()