summaryrefslogtreecommitdiffstats
path: root/Lib/test/test_stat.py
blob: 48d5e3801e69bc7c6806f8a4ac4e8f597fc25d32 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
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()