| """ | |
| Test cases for the dircache module | |
| Nick Mathewson | |
| """ | |
| import unittest | |
| from test.test_support import run_unittest, import_module | |
| dircache = import_module('dircache', deprecated=True) | |
| import os, time, sys, tempfile | |
| class DircacheTests(unittest.TestCase): | |
| def setUp(self): | |
| self.tempdir = tempfile.mkdtemp() | |
| 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) | |
| def test_listdir(self): | |
| ## SUCCESSFUL CASES | |
| entries = dircache.listdir(self.tempdir) | |
| self.assertEqual(entries, []) | |
| # Check that cache is actually caching, not just passing through. | |
| self.assertTrue(dircache.listdir(self.tempdir) is entries) | |
| # 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 | |
| # can't notice any changes that occurred within 1 sec of the last | |
| # time it examined a directory. | |
| time.sleep(1) | |
| self.writeTemp("test1") | |
| entries = dircache.listdir(self.tempdir) | |
| self.assertEqual(entries, ['test1']) | |
| self.assertTrue(dircache.listdir(self.tempdir) is entries) | |
| ## UNSUCCESSFUL CASES | |
| self.assertRaises(OSError, dircache.listdir, self.tempdir+"_nonexistent") | |
| def test_annotate(self): | |
| self.writeTemp("test2") | |
| self.mkdirTemp("A") | |
| lst = ['A', 'test2', 'test_nonexistent'] | |
| dircache.annotate(self.tempdir, lst) | |
| self.assertEqual(lst, ['A/', 'test2', 'test_nonexistent']) | |
| def test_main(): | |
| try: | |
| run_unittest(DircacheTests) | |
| finally: | |
| dircache.reset() | |
| if __name__ == "__main__": | |
| test_main() |