• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1"""
2  Test cases for the dircache module
3  Nick Mathewson
4"""
5
6import unittest
7from test.test_support import run_unittest, import_module
8dircache = import_module('dircache', deprecated=True)
9import os, time, sys, tempfile
10
11
12class DircacheTests(unittest.TestCase):
13    def setUp(self):
14        self.tempdir = tempfile.mkdtemp()
15
16    def tearDown(self):
17        for fname in os.listdir(self.tempdir):
18            self.delTemp(fname)
19        os.rmdir(self.tempdir)
20
21    def writeTemp(self, fname):
22        f = open(os.path.join(self.tempdir, fname), 'w')
23        f.close()
24
25    def mkdirTemp(self, fname):
26        os.mkdir(os.path.join(self.tempdir, fname))
27
28    def delTemp(self, fname):
29        fname = os.path.join(self.tempdir, fname)
30        if os.path.isdir(fname):
31            os.rmdir(fname)
32        else:
33            os.unlink(fname)
34
35    def test_listdir(self):
36        ## SUCCESSFUL CASES
37        entries = dircache.listdir(self.tempdir)
38        self.assertEqual(entries, [])
39
40        # Check that cache is actually caching, not just passing through.
41        self.assertTrue(dircache.listdir(self.tempdir) is entries)
42
43        # Directories aren't "files" on Windows, and directory mtime has
44        # nothing to do with when files under a directory get created.
45        # That is, this test can't possibly work under Windows -- dircache
46        # is only good for capturing a one-shot snapshot there.
47
48        if sys.platform[:3] not in ('win', 'os2'):
49            # Sadly, dircache has the same granularity as stat.mtime, and so
50            # can't notice any changes that occurred within 1 sec of the last
51            # time it examined a directory.
52            time.sleep(1)
53            self.writeTemp("test1")
54            entries = dircache.listdir(self.tempdir)
55            self.assertEqual(entries, ['test1'])
56            self.assertTrue(dircache.listdir(self.tempdir) is entries)
57
58        ## UNSUCCESSFUL CASES
59        self.assertRaises(OSError, dircache.listdir, self.tempdir+"_nonexistent")
60
61    def test_annotate(self):
62        self.writeTemp("test2")
63        self.mkdirTemp("A")
64        lst = ['A', 'test2', 'test_nonexistent']
65        dircache.annotate(self.tempdir, lst)
66        self.assertEqual(lst, ['A/', 'test2', 'test_nonexistent'])
67
68
69def test_main():
70    try:
71        run_unittest(DircacheTests)
72    finally:
73        dircache.reset()
74
75
76if __name__ == "__main__":
77    test_main()
78