aboutsummaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorGravatar Jon Bernard <jbernard@tuxion.com> 2016-01-03 15:01:40 -0500
committerGravatar Jon Bernard <jbernard@tuxion.com> 2016-01-03 22:39:43 -0500
commit5c3c91c43e12b40a618ad471ba24950d5b6d1ea0 (patch)
treee738fdd7e322f86cc609b630f2e19e4eff7f71e6 /tests
parent48e781a75c8b5d20c1e9c54c92dd31e641dfd121 (diff)
downloaddotfiles-5c3c91c43e12b40a618ad471ba24950d5b6d1ea0.tar.gz
dotfiles-5c3c91c43e12b40a618ad471ba24950d5b6d1ea0.tar.bz2
dotfiles-5c3c91c43e12b40a618ad471ba24950d5b6d1ea0.zip
Consolidate tests into a single file
Diffstat (limited to 'tests')
-rw-r--r--tests/test_basic.py395
-rw-r--r--tests/test_cli.py10
-rw-r--r--tests/test_cli_orig.py16
-rw-r--r--tests/test_dotfile.py137
-rw-r--r--tests/test_package.py21
-rw-r--r--tests/test_prefix.py41
-rw-r--r--tests/test_repository.py72
-rw-r--r--tests/test_sync.py19
8 files changed, 0 insertions, 711 deletions
diff --git a/tests/test_basic.py b/tests/test_basic.py
deleted file mode 100644
index 97c643c..0000000
--- a/tests/test_basic.py
+++ /dev/null
@@ -1,395 +0,0 @@
-from __future__ import with_statement
-
-import os
-import pytest
-import shutil
-import tempfile
-import unittest
-
-from dotfiles.core import Dotfiles
-from dotfiles.utils import is_link_to
-
-
-def touch(fname, times=None):
- with open(fname, 'a'):
- os.utime(fname, times)
-
-
-class DotfilesTestCase(unittest.TestCase):
-
- def setUp(self):
- """Create a temporary home directory."""
-
- self.homedir = tempfile.mkdtemp()
-
- # Create a repository for the tests to use.
- self.repository = os.path.join(self.homedir, 'Dotfiles')
- os.mkdir(self.repository)
-
- def tearDown(self):
- """Delete the temporary home directory and its contents."""
-
- shutil.rmtree(self.homedir)
-
- def assertPathEqual(self, path1, path2):
- self.assertEqual(
- os.path.realpath(path1),
- os.path.realpath(path2))
-
- 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.homedir, '.lastpass'))
- externals = {'.lastpass': '/tmp'}
-
- dotfiles = Dotfiles(
- homedir=self.homedir, path=self.repository,
- prefix='', ignore=[], externals=externals, packages=[],
- dry_run=False)
-
- dotfiles.sync(force=True)
-
- self.assertPathEqual(
- os.path.join(self.homedir, '.lastpass'),
- '/tmp')
-
- def test_move_repository(self):
- """Test the move() method for a Dotfiles repository."""
-
- touch(os.path.join(self.repository, 'bashrc'))
-
- dotfiles = Dotfiles(
- homedir=self.homedir, path=self.repository,
- prefix='', ignore=[], force=True, externals={}, packages=[],
- dry_run=False)
-
- dotfiles.sync()
-
- # Make sure sync() did the right thing.
- self.assertPathEqual(
- os.path.join(self.homedir, '.bashrc'),
- os.path.join(self.repository, 'bashrc'))
-
- target = os.path.join(self.homedir, 'MyDotfiles')
-
- dotfiles.move(target)
-
- self.assertTrue(os.path.exists(os.path.join(target, 'bashrc')))
- self.assertPathEqual(
- os.path.join(self.homedir, '.bashrc'),
- os.path.join(target, 'bashrc'))
-
- def test_force_sync_directory_symlink(self):
- """Test a forced sync on a directory symlink.
-
- A bug was reported where a user wanted to replace a dotfile repository
- with an other one. They had a .vim directory in their home directory
- which was obviously also a symbolic link. This caused:
-
- OSError: Cannot call rmtree on a symbolic link
- """
-
- # Create a dotfile symlink to some directory
- os.mkdir(os.path.join(self.homedir, 'vim'))
- os.symlink(os.path.join(self.homedir, 'vim'),
- os.path.join(self.homedir, '.vim'))
-
- # Create a vim directory in the repository. This will cause the above
- # symlink to be overwritten on sync.
- os.mkdir(os.path.join(self.repository, 'vim'))
-
- # Make sure the symlink points to the correct location.
- self.assertPathEqual(
- os.path.join(self.homedir, '.vim'),
- os.path.join(self.homedir, 'vim'))
-
- dotfiles = Dotfiles(
- homedir=self.homedir, path=self.repository,
- prefix='', ignore=[], externals={}, packages=[], dry_run=False)
-
- dotfiles.sync(force=True)
-
- # The symlink should now point to the directory in the repository.
- self.assertPathEqual(
- os.path.join(self.homedir, '.vim'),
- os.path.join(self.repository, 'vim'))
-
- def test_glob_ignore_pattern(self):
- """ Test that the use of glob pattern matching works in the ignores
- list.
-
- The following repo dir exists:
-
- myscript.py
- myscript.pyc
- myscript.pyo
- bashrc
- bashrc.swp
- vimrc
- vimrc.swp
- install.sh
-
- Using the glob pattern dotfiles should have the following sync result
- in home:
-
- .myscript.py -> Dotfiles/myscript.py
- .bashrc -> Dotfiles/bashrc
- .vimrc -> Dotfiles/vimrc
-
- """
- ignore = ['*.swp', '*.py?', 'install.sh']
-
- all_repo_files = (
- ('myscript.py', '.myscript.py'),
- ('myscript.pyc', None),
- ('myscript.pyo', None),
- ('bashrc', '.bashrc'),
- ('bashrc.swp', None),
- ('vimrc', '.vimrc'),
- ('vimrc.swp', None),
- ('install.sh', None)
- )
-
- all_dotfiles = [f for f in all_repo_files if f[1] is not None]
-
- for original, symlink in all_repo_files:
- touch(os.path.join(self.repository, original))
-
- dotfiles = Dotfiles(
- homedir=self.homedir, path=self.repository,
- prefix='', ignore=ignore, externals={}, packages=[],
- dry_run=False)
-
- dotfiles.sync()
-
- # Now check that the files that should have a symlink
- # point to the correct file and are the only files that
- # exist in the home dir.
- self.assertEqual(
- sorted(os.listdir(self.homedir)),
- sorted([f[1] for f in all_dotfiles] + ['Dotfiles']))
-
- for original, symlink in all_dotfiles:
- self.assertPathEqual(
- os.path.join(self.repository, original),
- os.path.join(self.homedir, symlink))
-
- def test_packages(self):
- """
- Test packages.
- """
- files = ['foo', 'package/bar']
- symlinks = ['.foo', '.package/bar']
- join = os.path.join
-
- # Create files
- for filename in files:
- path = join(self.repository, filename)
- dirname = os.path.dirname(path)
- if not os.path.exists(dirname):
- os.makedirs(dirname)
- touch(path)
-
- # Create Dotfiles object
- dotfiles = Dotfiles(
- homedir=self.homedir, path=self.repository,
- prefix='', ignore=[], externals={}, packages=['package'],
- dry_run=False)
-
- # Create symlinks in homedir
- dotfiles.sync()
-
- # Verify it created what we expect
- def check_all(files, symlinks):
- self.assertTrue(os.path.isdir(join(self.homedir, '.package')))
- for src, dst in zip(files, symlinks):
- self.assertTrue(is_link_to(join(self.homedir, dst),
- join(self.repository, src)))
- check_all(files, symlinks)
-
- # Add files to the repository
- new_files = [join(self.homedir, f) for f in ['.bar', '.package/foo']]
- for filename in new_files:
- path = join(self.homedir, filename)
- touch(path)
- new_repo_files = ['bar', 'package/foo']
- dotfiles.add(new_files)
- check_all(files + new_repo_files, symlinks + new_files)
-
- # Remove them from the repository
- dotfiles.remove(new_files)
- check_all(files, symlinks)
-
- # Move the repository
- self.repository = join(self.homedir, 'Dotfiles2')
- dotfiles.move(self.repository)
- check_all(files, symlinks)
-
- def test_missing_package(self):
- """
- Test a non-existent package.
- """
-
- package_file = '.package/bar'
-
- # Create Dotfiles object
- dotfiles = Dotfiles(
- homedir=self.homedir, path=self.repository,
- prefix='', ignore=[], externals={}, packages=['package'],
- dry_run=False)
-
- path = os.path.join(self.homedir, package_file)
- dirname = os.path.dirname(path)
- if not os.path.exists(dirname):
- os.makedirs(dirname)
- touch(path)
-
- dotfiles.add([os.path.join(self.homedir, package_file)])
-
- def test_single_sync(self):
- """
- Test syncing a single file in the repo
-
- The following repo dir exists:
-
- bashrc
- netrc
- vimrc
-
- Syncing only vimrc should have the folowing sync result in home:
-
- .vimrc -> Dotfiles/vimrc
-
- """
-
- # define the repository contents
- repo_files = (
- ('bashrc', False),
- ('netrc', False),
- ('vimrc', True))
-
- # populate the repository
- for dotfile, _ in repo_files:
- touch(os.path.join(self.repository, dotfile))
-
- dotfiles = Dotfiles(
- homedir=self.homedir, path=self.repository,
- prefix='', ignore=[], externals={}, packages=[],
- dry_run=False)
-
- # sync only certain dotfiles
- for dotfile, should_sync in repo_files:
- if should_sync:
- dotfiles.sync(files=['.%s' % dotfile])
-
- # verify home directory contents
- for dotfile, should_sync in repo_files:
- if should_sync:
- self.assertPathEqual(
- os.path.join(self.repository, dotfile),
- os.path.join(self.homedir, '.%s' % dotfile))
- else:
- self.assertFalse(os.path.exists(
- os.path.join(self.homedir, dotfile)))
-
- def test_missing_remove(self):
- """Test removing a dotfile that's been removed from the repository."""
-
- repo_file = os.path.join(self.repository, 'testdotfile')
-
- touch(repo_file)
-
- dotfiles = Dotfiles(
- homedir=self.homedir, path=self.repository,
- prefix='', ignore=[], externals={}, packages=[],
- dry_run=False)
-
- dotfiles.sync()
-
- # remove the dotfile from the repository, homedir symlink is now broken
- os.remove(repo_file)
-
- # remove the broken symlink
- dotfiles.remove(['.testdotfile'])
-
- # verify symlink was removed
- self.assertFalse(os.path.exists(
- os.path.join(self.homedir, '.testdotfile')))
-
- def test_add_package(self):
- """
- Test adding a package that isn't already in the repository
-
- """
-
- package_dir = os.path.join(self.homedir,
- '.%s/%s' % ('config', 'gtk-3.0'))
-
- os.makedirs(package_dir)
- touch('%s/testfile' % package_dir)
-
- dotfiles = Dotfiles(
- homedir=self.homedir, path=self.repository,
- prefix='', ignore=[], externals={}, packages=['config'],
- dry_run=False, quiet=True)
-
- # This should fail, you should not be able to add dotfiles that are
- # defined to be packages.
- dotfiles.add(['.config'])
- self.assertFalse(os.path.islink(os.path.join(self.homedir, '.config')))
-
- def test_no_dot_prefix(self):
- # define the repository contents
- repo_files = ('bashrc', 'netrc', 'vimrc')
-
- # populate the repository
- for dotfile in repo_files:
- touch(os.path.join(self.repository, dotfile))
-
- dotfiles = Dotfiles(
- homedir=self.homedir, path=self.repository,
- prefix='', ignore=[], externals={}, packages=[],
- dry_run=False, no_dot_prefix=True)
-
- dotfiles.sync()
-
- # verify home directory contents
- for dotfile in repo_files:
- self.assertPathEqual(
- os.path.join(self.repository, dotfile),
- os.path.join(self.homedir, dotfile))
-
- @pytest.mark.xfail()
- def test_add_package_file(self):
- """
- Test adding a package that isn't already in the repository
-
- """
-
- package_dir = os.path.join(self.homedir,
- '.%s/%s' % ('config', 'gtk-3.0'))
-
- os.makedirs(package_dir)
- touch('%s/testfile' % package_dir)
-
- dotfiles = Dotfiles(
- homedir=self.homedir, path=self.repository,
- prefix='', ignore=[], externals={}, packages=['config'],
- dry_run=False)
-
- # This should succeed and the directory structure in the repository
- # should be created since it didn't already exist.
- dotfiles.add(['.config/gtk-3.0'])
- self.assertTrue(os.path.islink(
- os.path.join(self.homedir, '.config/gtk-3.0')))
-
-
-if __name__ == '__main__':
- unittest.main()
diff --git a/tests/test_cli.py b/tests/test_cli.py
deleted file mode 100644
index 7f08010..0000000
--- a/tests/test_cli.py
+++ /dev/null
@@ -1,10 +0,0 @@
-from click.testing import CliRunner
-
-from dotfiles import __version__
-from dotfiles.cli import version
-
-
-def test_version():
- runner = CliRunner()
- result = runner.invoke(version)
- assert ('dotfiles v%s\n' % __version__) == result.output
diff --git a/tests/test_cli_orig.py b/tests/test_cli_orig.py
deleted file mode 100644
index 58872e3..0000000
--- a/tests/test_cli_orig.py
+++ /dev/null
@@ -1,16 +0,0 @@
-from dotfiles.cli_orig import dispatch
-
-
-def test_dispatch():
- """Test that the force option is handed on to the sync method."""
-
- class MockDotfiles:
- def sync(self, files=None, force=False):
- assert force
-
- class MockNamespace:
- def __init__(self):
- self.action = 'sync'
- self.force = True
-
- dispatch(MockDotfiles(), MockNamespace(), [])
diff --git a/tests/test_dotfile.py b/tests/test_dotfile.py
deleted file mode 100644
index 1af1d8e..0000000
--- a/tests/test_dotfile.py
+++ /dev/null
@@ -1,137 +0,0 @@
-import pytest
-import py.error
-
-from dotfiles.dotfile import Dotfile, unique_suffix
-
-
-def test_unique_suffix_overlap():
- (name, target) = unique_suffix(py.path.local('/foo/baz'),
- py.path.local('/foo/bar/bat'))
- assert 'baz' == name
- assert 'bar/bat' == target
-
-
-@pytest.mark.xfail(reason='this is a bug')
-def test_unique_suffix_no_overlap():
- (name, target) = unique_suffix(py.path.local('/a/b/c'),
- py.path.local('/d/e/f'))
- assert '/a/b/c' == name
- assert '/d/e/f' == target
-
-
-def test_state_error(tmpdir):
-
- repo = tmpdir.ensure("Dotfiles", dir=1)
- name = tmpdir.join(".vimrc")
- target = repo.join("vimrc")
-
- dotfile = Dotfile(name, target)
-
- assert 'error' == dotfile.state
-
-
-def test_state_missing(tmpdir):
-
- repo = tmpdir.ensure("Dotfiles", dir=1)
- name = tmpdir.join(".vimrc")
- target = repo.ensure("vimrc")
-
- dotfile = Dotfile(name, target)
-
- assert 'missing' == dotfile.state
-
-
-def test_state_conflict(tmpdir):
-
- repo = tmpdir.ensure("Dotfiles", dir=1)
- name = tmpdir.ensure(".vimrc")
- target = repo.ensure("vimrc")
-
- dotfile = Dotfile(name, target)
-
- assert 'conflict' == dotfile.state
-
-
-def test_state_ok(tmpdir):
-
- repo = tmpdir.join("Dotfiles", dir=1)
- name = tmpdir.join(".vimrc")
- target = repo.ensure("vimrc")
- dotfile = Dotfile(name, target)
-
- name.mksymlinkto(target)
- assert 'ok' == dotfile.state
-
- name.remove()
- assert 'missing' == dotfile.state
-
-
-@pytest.mark.parametrize("times", range(1, 4))
-def test_add(tmpdir, times):
-
- repo = tmpdir.ensure("Dotfiles", dir=1)
- name = tmpdir.ensure(".vimrc")
- target = repo.join("vimrc")
-
- dotfile = Dotfile(name, target)
- dotfile.add()
-
- assert target.check(file=1, link=0)
- assert name.check(file=1, link=1)
- assert name.samefile(target)
-
- for x in range(2, times):
- with pytest.raises(OSError):
- dotfile.add()
- assert target.check(file=1, link=0)
- assert name.check(file=1, link=1)
- assert name.samefile(target)
-
-
-@pytest.mark.parametrize("times", range(1, 4))
-def test_remove(tmpdir, times):
-
- repo = tmpdir.ensure("Dotfiles", dir=1)
- name = tmpdir.join(".vimrc")
- target = repo.ensure("vimrc")
-
- name.mksymlinkto(target)
-
- dotfile = Dotfile(name, target)
- dotfile.remove()
-
- assert False == target.check()
- assert name.check(file=1, link=0)
-
- for x in range(2, times):
- with pytest.raises(OSError):
- dotfile.remove()
- assert False == target.check()
- assert name.check(file=1, link=0)
-
-
-@pytest.mark.parametrize("times", range(1, 4))
-def test_sync(tmpdir, times):
-
- repo = tmpdir.ensure("Dotfiles", dir=1)
- name = tmpdir.join(".vimrc")
- target = repo.ensure("vimrc")
-
- dotfile = Dotfile(name, target)
- dotfile.sync()
-
- assert target.check(file=1, link=0)
- assert name.check(file=1, link=1)
- assert name.samefile(target)
-
- for x in range(2, times):
- with pytest.raises(py.error.EEXIST):
- dotfile.sync()
- assert target.check(file=1, link=0)
- assert name.check(file=1, link=1)
- assert name.samefile(target)
-
-
-@pytest.mark.xfail(reason='not implemented yet')
-def test_unsync():
- raise NotImplementedError
diff --git a/tests/test_package.py b/tests/test_package.py
deleted file mode 100644
index ddc5787..0000000
--- a/tests/test_package.py
+++ /dev/null
@@ -1,21 +0,0 @@
-from dotfiles.core import Dotfiles
-
-
-def test_package_sync(tmpdir):
- """Test syncing a package."""
-
- repository = tmpdir.ensure('Dotfiles', dir=1)
- dotfile = repository.ensure('config/awesome/testfile')
-
- Dotfiles(homedir=str(tmpdir),
- path=str(repository),
- prefix='',
- ignore=[],
- externals={},
- packages=['config'],
- dry_run=False,
- quiet=True).sync()
-
- assert tmpdir.join('.config').check(dir=1)
- assert tmpdir.join('.config/awesome').check(link=1)
- assert tmpdir.join('.config/awesome').samefile(dotfile.dirname)
diff --git a/tests/test_prefix.py b/tests/test_prefix.py
deleted file mode 100644
index 636a7d1..0000000
--- a/tests/test_prefix.py
+++ /dev/null
@@ -1,41 +0,0 @@
-import pytest
-from dotfiles.core import Dotfiles
-
-
-@pytest.mark.xfail()
-def test_prefix(tmpdir):
- """Test basic sync when using a non-default prefix."""
-
- dotfile = tmpdir.ensure('Dotfiles/_vimrc')
- symlink = tmpdir.join('.vimrc')
-
- Dotfiles(homedir=str(tmpdir),
- path=str(dotfile.dirname),
- prefix='_',
- ignore=[],
- externals={},
- packages=[],
- dry_run=False).sync()
-
- assert symlink.check(link=1)
- assert symlink.samefile(dotfile)
-
-
-def test_prefix_with_package(tmpdir):
- """Test syncing a package when using a non-default prefix."""
-
- repository = tmpdir.ensure('Dotfiles', dir=1)
- dotfile = repository.ensure('.config/awesome/testfile')
-
- Dotfiles(homedir=str(tmpdir),
- path=str(repository),
- prefix='.',
- ignore=[],
- externals={},
- packages=['.config'],
- dry_run=False,
- quiet=True).sync()
-
- assert tmpdir.join('.config').check(dir=1)
- assert tmpdir.join('.config/awesome').check(link=1)
- assert tmpdir.join('.config/awesome').samefile(dotfile.dirname)
diff --git a/tests/test_repository.py b/tests/test_repository.py
deleted file mode 100644
index 2825b66..0000000
--- a/tests/test_repository.py
+++ /dev/null
@@ -1,72 +0,0 @@
-import os
-import py
-import pytest
-
-from dotfiles.repository import Repository
-
-
-def test_getters():
-
- repo = Repository('/a', '/b')
-
- assert isinstance(repo.homedir, str)
- assert isinstance(repo.repodir, str)
-
- assert '/a' == repo.repodir
- assert '/b' == repo.homedir
-
-
-def test_setters():
-
- repodir = py.path.local('/foo/bar')
- homedir = py.path.local('/fizz/buzz')
-
- repo = Repository('/a', '/b')
-
- repo.repodir = repodir
- repo.homedir = homedir
-
- assert repodir == repo.repodir
- assert homedir == repo.homedir
-
-
-def test_path_expansion():
-
- repo = Repository('~/foo', '~/bar')
-
- assert os.path.expanduser('~/foo') == repo.repodir
- assert os.path.expanduser('~/bar') == repo.homedir
-
-
-def test_repodir_create(tmpdir):
-
- repodir = tmpdir.join('test_create_repo')
- repo = Repository(repodir)
-
- assert True == repodir.check(exists=0)
- contents = repo.contents()
- assert [] == contents
- assert True == repodir.check(exists=1, dir=1)
-
-
-def test_contents_empty(tmpdir):
- assert [] == Repository(tmpdir.join('Dotfiles')).contents()
-
-
-def test_contents_nonempty(tmpdir):
-
- repodir = tmpdir.ensure('test_create_repo', dir=1)
- target_a = repodir.ensure('a')
- target_b = repodir.ensure('b')
- target_c = repodir.ensure('c')
-
- contents = Repository(repodir).contents()
-
- assert target_a == contents[0].target
- assert target_b == contents[1].target
- assert target_c == contents[2].target
-
-
-@pytest.mark.xfail(reason='not implemented yet')
-def test_rename():
- raise NotImplementedError
diff --git a/tests/test_sync.py b/tests/test_sync.py
deleted file mode 100644
index e8a51cc..0000000
--- a/tests/test_sync.py
+++ /dev/null
@@ -1,19 +0,0 @@
-from dotfiles.core import Dotfiles
-
-
-def test_sync(tmpdir):
- """Basic sync operation."""
-
- dotfile = tmpdir.ensure('Dotfiles/foo')
- symlink = tmpdir.join('.foo')
-
- Dotfiles(homedir=str(tmpdir),
- path=str(dotfile.dirname),
- prefix='',
- ignore=[],
- externals={},
- packages=[],
- dry_run=False).sync()
-
- assert symlink.check(link=1)
- assert symlink.samefile(dotfile)