14adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao""" 24adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Test cases for the dircache module 34adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao Nick Mathewson 44adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao""" 54adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 64adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoimport unittest 74adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaofrom test.test_support import run_unittest, import_module 84adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaodircache = import_module('dircache', deprecated=True) 94adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoimport os, time, sys, tempfile 104adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 114adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 124adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoclass DircacheTests(unittest.TestCase): 134adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def setUp(self): 144adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.tempdir = tempfile.mkdtemp() 154adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 164adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def tearDown(self): 174adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao for fname in os.listdir(self.tempdir): 184adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.delTemp(fname) 194adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao os.rmdir(self.tempdir) 204adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 214adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def writeTemp(self, fname): 224adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao f = open(os.path.join(self.tempdir, fname), 'w') 234adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao f.close() 244adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 254adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def mkdirTemp(self, fname): 264adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao os.mkdir(os.path.join(self.tempdir, fname)) 274adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 284adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def delTemp(self, fname): 294adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao fname = os.path.join(self.tempdir, fname) 304adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao if os.path.isdir(fname): 314adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao os.rmdir(fname) 324adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao else: 334adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao os.unlink(fname) 344adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 354adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_listdir(self): 364adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ## SUCCESSFUL CASES 374adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao entries = dircache.listdir(self.tempdir) 384adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(entries, []) 394adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 404adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # Check that cache is actually caching, not just passing through. 414adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertTrue(dircache.listdir(self.tempdir) is entries) 424adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 434adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # Directories aren't "files" on Windows, and directory mtime has 444adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # nothing to do with when files under a directory get created. 454adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # That is, this test can't possibly work under Windows -- dircache 464adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # is only good for capturing a one-shot snapshot there. 474adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 484adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao if sys.platform[:3] not in ('win', 'os2'): 494adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # Sadly, dircache has the same granularity as stat.mtime, and so 504adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # can't notice any changes that occurred within 1 sec of the last 514adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao # time it examined a directory. 524adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao time.sleep(1) 534adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.writeTemp("test1") 544adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao entries = dircache.listdir(self.tempdir) 554adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(entries, ['test1']) 564adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertTrue(dircache.listdir(self.tempdir) is entries) 574adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 584adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao ## UNSUCCESSFUL CASES 594adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertRaises(OSError, dircache.listdir, self.tempdir+"_nonexistent") 604adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 614adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao def test_annotate(self): 624adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.writeTemp("test2") 634adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.mkdirTemp("A") 644adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao lst = ['A', 'test2', 'test_nonexistent'] 654adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao dircache.annotate(self.tempdir, lst) 664adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao self.assertEqual(lst, ['A/', 'test2', 'test_nonexistent']) 674adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 684adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 694adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaodef test_main(): 704adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao try: 714adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao run_unittest(DircacheTests) 724adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao finally: 734adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao dircache.reset() 744adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 754adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao 764adfde8bc82dd39f59e0445588c3e599ada477dJosh Gaoif __name__ == "__main__": 774adfde8bc82dd39f59e0445588c3e599ada477dJosh Gao test_main() 78