aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-xtest_dotfiles.py85
1 files changed, 85 insertions, 0 deletions
diff --git a/test_dotfiles.py b/test_dotfiles.py
new file mode 100755
index 0000000..360d7db
--- /dev/null
+++ b/test_dotfiles.py
@@ -0,0 +1,85 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+
+import os
+import shutil
+import tempfile
+import unittest
+
+from dotfiles import core
+
+
+def touch(fname, times=None):
+ with file(fname, 'a'):
+ os.utime(fname, times)
+
+
+class DotfilesTestCase(unittest.TestCase):
+
+ def setUp(self):
+ """Create a temporary home directory."""
+
+ self.home = tempfile.mkdtemp()
+
+ # create a repository for the tests to use
+ self.repo = os.path.join(self.home, 'Dotfiles')
+ os.mkdir(self.repo)
+
+ def tearDown(self):
+ """Delete the temporary home directory and its contents."""
+
+ shutil.rmtree(self.home)
+
+ def test_force_sync_directory(self):
+ """Test forced sync when the dotfile is a directory.
+
+ I installed the lastpass chrome extension which stores a socket in
+ ~/.lastpass. So I added that directory as an external to /tmp and
+ attempted a forced sync. An error occurred because sync() calls
+ os.remove() as it mistakenly assumes the dotfile is a file and not
+ a directory.
+ """
+
+ os.mkdir(os.path.join(self.home, '.lastpass'))
+ externals = {'.lastpass': '/tmp'}
+
+ dotfiles = core.Dotfiles(home=self.home, repo=self.repo, prefix='',
+ ignore=[], externals=externals)
+
+ dotfiles.sync(force=True)
+
+ self.assertEqual(
+ os.path.realpath(os.path.join(self.home, '.lastpass')), '/tmp')
+
+ def test_move_repository(self):
+ """Test the move() method for a Dotfiles repository."""
+
+ touch(os.path.join(self.repo, 'bashrc'))
+
+ dotfiles = core.Dotfiles(
+ home=self.home, repo=self.repo, prefix='',
+ ignore=[], force=True, externals={})
+
+ dotfiles.sync()
+
+ # make sure sync() did the right thing
+ self.assertEqual(
+ os.path.realpath(os.path.join(self.home, '.bashrc')),
+ os.path.join(self.repo, 'bashrc'))
+
+ target = os.path.join(self.home, 'MyDotfiles')
+
+ dotfiles.move(target)
+
+ self.assertTrue(os.path.exists(os.path.join(target, 'bashrc')))
+ self.assertEqual(
+ os.path.realpath(os.path.join(self.home, '.bashrc')),
+ os.path.join(target, 'bashrc'))
+
+
+def suite():
+ suite = unittest.TestLoader().loadTestsFromTestCase(DotfilesTestCase)
+ return suite
+
+if __name__ == '__main__':
+ unittest.TextTestRunner().run(suite())