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