test_cache.py 3.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. import unittest
  2. import os
  3. from shutil import rmtree
  4. from copy import copy
  5. from cPickle import dumps
  6. from cache import ADMINISTRATION_FILE, assert_file_exists, to_dir, Cache
  7. class TestCache(unittest.TestCase):
  8. def setUp(self):
  9. if os.path.exists('baz'):
  10. rmtree('baz')
  11. os.mkdir('baz')
  12. for name in ('foo', 'bar', 'baz'):
  13. f = open('baz/' + name, 'w')
  14. f.write(name)
  15. f.close()
  16. self.c = Cache(files=['foo', 'bar'], root='baz')
  17. def tearDown(self):
  18. rmtree('baz')
  19. if os.path.exists('cached'):
  20. rmtree('cached')
  21. def test_assert_file_exists(self):
  22. assert_file_exists('baz/foo')
  23. self.assertRaises(IOError, assert_file_exists, 'foobar')
  24. def test_to_dir(self):
  25. self.assertEqual(to_dir(''), '')
  26. self.assertEqual(to_dir('foo'), 'foo/')
  27. self.assertEqual(to_dir('foo/'), 'foo/')
  28. def test___init__(self):
  29. self.assertTrue(hasattr(self.c, 'root'))
  30. self.assertEqual(self.c.root, 'baz/')
  31. self.assertTrue(hasattr(self.c, 'files'))
  32. self.assertEqual(self.c.files, ['baz/foo', 'baz/bar'])
  33. self.assertTrue(hasattr(self.c, 'cached'))
  34. self.assertEqual(self.c.cached, 'cached/')
  35. def test___init___custom_root(self):
  36. c = Cache(root='foo')
  37. self.assertTrue(hasattr(c, 'root'))
  38. self.assertEqual(c.root, 'foo/')
  39. def test___init___custom_cached_dir(self):
  40. c = Cache(cached='foo')
  41. self.assertTrue(hasattr(c, 'cached'))
  42. self.assertEqual(c.cached, 'foo/')
  43. def test___init___non_existant_file(self):
  44. self.assertRaises(IOError, Cache, files=['foo'])
  45. def test_add(self):
  46. self.c.add('baz')
  47. self.assertIn('baz/baz', self.c.files)
  48. def test_add_non_relative(self):
  49. self.c.add('baz', absolute=True)
  50. self.assertIn('baz', self.c.files)
  51. def test_remove(self):
  52. self.c.remove('foo')
  53. self.assertNotIn('baz/foo', self.c.files)
  54. def test_remove_non_relative(self):
  55. self.c.remove('baz/foo', absolute=True)
  56. self.assertNotIn('baz/foo', self.c.files)
  57. def test_assert_modification_dates_exist(self):
  58. self.c.assert_modification_dates_exist()
  59. self.assertIn('baz/foo', self.c.modified)
  60. self.assertEqual(self.c.modified['baz/foo'],
  61. os.path.getmtime('baz/foo'))
  62. modified = copy(self.c.modified)
  63. self.c.assert_modification_dates_exist()
  64. self.assertEqual(self.c.modified, modified)
  65. def test_assert_cached_folder_exist(self):
  66. self.assertFalse(os.path.exists('cached'))
  67. self.c.assert_cached_folder_exist()
  68. self.assertTrue(os.path.exists('cached'))
  69. def test_save_administration(self):
  70. self.c.save_administration()
  71. path = 'cached/' + ADMINISTRATION_FILE
  72. self.assertTrue(os.path.exists(path))
  73. f = open(path, 'r')
  74. pickled = f.read()
  75. f.close()
  76. self.assertEqual(pickled, dumps(self.c.modified))