test_dircache.py 2.25 KB
Newer Older
1 2 3 4 5 6
"""
  Test cases for the dircache module
  Nick Mathewson
"""

import unittest
7
from test.test_support import run_unittest, TESTFN
8
import dircache, os, time, sys, tempfile
9 10 11 12


class DircacheTests(unittest.TestCase):
    def setUp(self):
13
        self.tempdir = tempfile.mkdtemp()
14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32

    def tearDown(self):
        for fname in os.listdir(self.tempdir):
            self.delTemp(fname)
        os.rmdir(self.tempdir)

    def writeTemp(self, fname):
        f = open(os.path.join(self.tempdir, fname), 'w')
        f.close()

    def mkdirTemp(self, fname):
        os.mkdir(os.path.join(self.tempdir, fname))

    def delTemp(self, fname):
        fname = os.path.join(self.tempdir, fname)
        if os.path.isdir(fname):
            os.rmdir(fname)
        else:
            os.unlink(fname)
33

34 35 36 37 38 39
    def test_listdir(self):
        ## SUCCESSFUL CASES
        entries = dircache.listdir(self.tempdir)
        self.assertEquals(entries, [])

        # Check that cache is actually caching, not just passing through.
40 41
        self.assert_(dircache.listdir(self.tempdir) is entries)

42 43 44 45 46 47 48
        # Directories aren't "files" on Windows, and directory mtime has
        # nothing to do with when files under a directory get created.
        # That is, this test can't possibly work under Windows -- dircache
        # is only good for capturing a one-shot snapshot there.

        if sys.platform[:3] not in ('win', 'os2'):
            # Sadly, dircache has the same granularity as stat.mtime, and so
49
            # can't notice any changes that occurred within 1 sec of the last
50 51 52 53 54 55
            # time it examined a directory.
            time.sleep(1)
            self.writeTemp("test1")
            entries = dircache.listdir(self.tempdir)
            self.assertEquals(entries, ['test1'])
            self.assert_(dircache.listdir(self.tempdir) is entries)
56

57
        ## UNSUCCESSFUL CASES
58
        self.assertRaises(OSError, dircache.listdir, self.tempdir+"_nonexistent")
59 60 61 62 63 64 65 66

    def test_annotate(self):
        self.writeTemp("test2")
        self.mkdirTemp("A")
        lst = ['A', 'test2', 'test_nonexistent']
        dircache.annotate(self.tempdir, lst)
        self.assertEquals(lst, ['A/', 'test2', 'test_nonexistent'])

67 68 69 70 71 72 73

def test_main():
    run_unittest(DircacheTests)


if __name__ == "__main__":
    test_main()