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

import unittest
7 8 9
from test.test_support import run_unittest, TESTFN, import_module
dircache = import_module('dircache', deprecated=True)
import os, time, sys, tempfile
10 11 12 13


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

    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)
34

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

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

43 44 45 46 47 48 49
        # 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
50
            # can't notice any changes that occurred within 1 sec of the last
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'])
56
            self.assertTrue(dircache.listdir(self.tempdir) is entries)
57

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

    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'])

68 69

def test_main():
70 71 72 73
    try:
        run_unittest(DircacheTests)
    finally:
        dircache.reset()
74 75 76 77


if __name__ == "__main__":
    test_main()