Remove the Vagrant-based tests
This commit is contained in:
parent
d055802a66
commit
7a586aa4c5
62 changed files with 0 additions and 2057 deletions
|
@ -1,5 +0,0 @@
|
|||
[Vagrantfile]
|
||||
indent_size = 2
|
||||
|
||||
[{test,test_travis}]
|
||||
indent_size = 4
|
2
test/.gitignore
vendored
2
test/.gitignore
vendored
|
@ -1,2 +0,0 @@
|
|||
.vagrant/
|
||||
*.log
|
|
@ -1,86 +0,0 @@
|
|||
Testing
|
||||
=======
|
||||
|
||||
Dotbot testing code uses [Vagrant] to run all tests inside a virtual machine to
|
||||
have tests be completely isolated from the host machine. Specifically, you
|
||||
will need both:
|
||||
|
||||
- [VirtualBox]
|
||||
- [Vagrant]
|
||||
|
||||
Install Dotbot dependencies
|
||||
---------------------------
|
||||
|
||||
Ensure you have updated the `dotbot` submodule dependencies, on the host machine:
|
||||
|
||||
```bash
|
||||
git submodule sync --quiet --recursive
|
||||
git submodule update --init --recursive
|
||||
```
|
||||
Install Vagrant
|
||||
---------------
|
||||
|
||||
### Debian-based distributions
|
||||
|
||||
```bash
|
||||
sudo apt install vagrant virtualbox
|
||||
```
|
||||
|
||||
### macOS
|
||||
|
||||
You can download those directly from the above URLs, or via some MacOS package managers.
|
||||
e.g. using [HomeBrew](https://brew.sh/):
|
||||
|
||||
```bash
|
||||
brew cask install virtualbox
|
||||
brew cask install vagrant
|
||||
# optional, adding menu-bar support:
|
||||
brew cask install vagrant-manager
|
||||
```
|
||||
|
||||
Running the Tests
|
||||
-----------------
|
||||
|
||||
Before running the tests, you must start and `ssh` into the VM:
|
||||
|
||||
```bash
|
||||
vagrant up
|
||||
vagrant ssh
|
||||
```
|
||||
|
||||
All remaining commands are run inside the VM.
|
||||
|
||||
First, you must install a version of Python to test against, using:
|
||||
|
||||
pyenv install -s {version}
|
||||
|
||||
You can choose any version you like, e.g. `3.8.1`. It isn't particularly
|
||||
important to test against all supported versions of Python in the VM, because
|
||||
they will be tested by CI. Once you've installed a specific version of Python,
|
||||
activate it with:
|
||||
|
||||
pyenv global {version}
|
||||
|
||||
The VM mounts your host's Dotbot directory in `/dotbot` as read-only, allowing
|
||||
you to make edits on your host machine. Run the entire test suite by:
|
||||
|
||||
```bash
|
||||
cd /dotbot/test
|
||||
./test
|
||||
```
|
||||
|
||||
Selected tests can be run by passing paths to the tests as arguments, e.g.:
|
||||
|
||||
```bash
|
||||
./test tests/create.bash tests/defaults.bash
|
||||
```
|
||||
|
||||
To debug tests, you can run the test driver with the `--debug` (or `-d` short
|
||||
form) flag, e.g. `./test --debug tests/link-if.bash`. This will enable printing
|
||||
stdout/stderr.
|
||||
|
||||
When finished with testing, it is good to shut down the virtual machine by
|
||||
running `vagrant halt`.
|
||||
|
||||
[VirtualBox]: https://www.virtualbox.org/
|
||||
[Vagrant]: https://www.vagrantup.com/
|
28
test/Vagrantfile
vendored
28
test/Vagrantfile
vendored
|
@ -1,28 +0,0 @@
|
|||
Vagrant.configure(2) do |config|
|
||||
config.vm.box = 'ubuntu/jammy64'
|
||||
|
||||
config.vm.synced_folder "..", "/dotbot", mount_options: ["ro"]
|
||||
|
||||
# disable default synced folder
|
||||
config.vm.synced_folder ".", "/vagrant", disabled: true
|
||||
|
||||
# install packages
|
||||
config.vm.provision "shell", inline: <<-EOS
|
||||
apt-get -y update
|
||||
apt-get install -y git make build-essential libssl-dev zlib1g-dev \
|
||||
libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm \
|
||||
libncurses5-dev
|
||||
EOS
|
||||
|
||||
# install pyenv
|
||||
config.vm.provision "shell", privileged: false, inline: <<-EOS
|
||||
rm -rf ~/.pyenv
|
||||
git clone https://github.com/pyenv/pyenv.git ~/.pyenv
|
||||
cat <<-'PYENV' > ~/.bashrc
|
||||
export PYENV_ROOT="$HOME/.pyenv"
|
||||
export PATH="$PYENV_ROOT/bin:$PATH"
|
||||
eval "$(pyenv init --path)"
|
||||
eval "$(pyenv init -)"
|
||||
PYENV
|
||||
EOS
|
||||
end
|
|
@ -1,99 +0,0 @@
|
|||
red() {
|
||||
if [ -t 1 ]; then
|
||||
printf "\033[31m%s\033[0m\n" "$*"
|
||||
else
|
||||
printf "%s\n" "$*"
|
||||
fi
|
||||
}
|
||||
|
||||
green() {
|
||||
if [ -t 1 ]; then
|
||||
printf "\033[32m%s\033[0m\n" "$*"
|
||||
else
|
||||
printf "%s\n" "$*"
|
||||
fi
|
||||
}
|
||||
|
||||
yellow() {
|
||||
if [ -t 1 ]; then
|
||||
printf "\033[33m%s\033[0m\n" "$*"
|
||||
else
|
||||
printf "%s\n" "$*"
|
||||
fi
|
||||
}
|
||||
|
||||
|
||||
check_env() {
|
||||
if [[ "$(whoami)" != "vagrant" && "${CI}" != true ]]; then
|
||||
die "tests must be run inside Vagrant or CI"
|
||||
fi
|
||||
}
|
||||
|
||||
cleanup() {
|
||||
rm -rf ~/fakehome
|
||||
mkdir -p ~/fakehome
|
||||
}
|
||||
|
||||
initialize() {
|
||||
echo "initializing."
|
||||
tests_run=0
|
||||
tests_passed=0
|
||||
tests_failed=0
|
||||
tests_skipped=0
|
||||
tests_total="${1}"
|
||||
local plural="" && [ "${tests_total}" -gt 1 ] && plural="s"
|
||||
printf -- "running %d test%s...\n\n" "${tests_total}" "${plural}"
|
||||
}
|
||||
|
||||
pass() {
|
||||
tests_passed=$((tests_passed + 1))
|
||||
green "-> ok."
|
||||
echo
|
||||
}
|
||||
|
||||
fail() {
|
||||
tests_failed=$((tests_failed + 1))
|
||||
red "-> fail!"
|
||||
echo
|
||||
}
|
||||
|
||||
skip() {
|
||||
tests_skipped=$((tests_skipped + 1))
|
||||
yellow "-> skipped."
|
||||
echo
|
||||
}
|
||||
|
||||
run_test() {
|
||||
tests_run=$((tests_run + 1))
|
||||
printf '[%d/%d] (%s)\n' "${tests_run}" "${tests_total}" "${1}"
|
||||
cleanup
|
||||
if (cd "${BASEDIR}/test/tests" && HOME=~/fakehome DEBUG=${2} DOTBOT_TEST=true bash "${1}"); then
|
||||
pass
|
||||
elif [ $? -eq 42 ]; then
|
||||
skip
|
||||
else
|
||||
fail
|
||||
fi
|
||||
}
|
||||
|
||||
report() {
|
||||
printf -- "test report\n"
|
||||
printf -- "-----------\n"
|
||||
printf -- "- %3d run\n" ${tests_run}
|
||||
printf -- "- %3d passed\n" ${tests_passed}
|
||||
printf -- "- %3d skipped\n" ${tests_skipped}
|
||||
printf -- "- %3d failed\n" ${tests_failed}
|
||||
if [ ${tests_failed} -gt 0 ]; then
|
||||
red "==> FAIL! "
|
||||
return 1
|
||||
else
|
||||
green "==> PASS. "
|
||||
return 0
|
||||
fi
|
||||
}
|
||||
|
||||
die() {
|
||||
>&2 echo $@
|
||||
>&2 echo "terminating..."
|
||||
exit 1
|
||||
}
|
53
test/test
53
test/test
|
@ -1,53 +0,0 @@
|
|||
#!/usr/bin/env bash
|
||||
set -e
|
||||
|
||||
export BASEDIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
||||
cd "${BASEDIR}/test"
|
||||
. "./driver-lib.bash"
|
||||
|
||||
date_stamp="$(date --rfc-3339=ns)"
|
||||
start="$(date +%s)"
|
||||
|
||||
check_env
|
||||
|
||||
# parse flags; must come before positional arguments
|
||||
POSITIONAL=()
|
||||
DEBUG=false
|
||||
while [[ $# -gt 0 ]]; do
|
||||
case $1 in
|
||||
-d|--debug)
|
||||
DEBUG=true
|
||||
shift
|
||||
;;
|
||||
*)
|
||||
POSITIONAL+=("$1")
|
||||
shift
|
||||
;;
|
||||
esac
|
||||
done
|
||||
set -- "${POSITIONAL[@]}" # restore positional arguments
|
||||
|
||||
declare -a tests=()
|
||||
|
||||
if [ $# -eq 0 ]; then
|
||||
while read file; do
|
||||
tests+=("${file}")
|
||||
done < <(find tests -type f -name '*.bash' | sort)
|
||||
else
|
||||
tests=("$@")
|
||||
fi
|
||||
|
||||
initialize "${#tests[@]}"
|
||||
|
||||
for file in "${tests[@]}"; do
|
||||
run_test "$(basename "${file}")" "${DEBUG}"
|
||||
done
|
||||
|
||||
if report; then
|
||||
ret=0
|
||||
else
|
||||
ret=1
|
||||
fi
|
||||
|
||||
echo "(tests run in $(($(date +%s) - start)) seconds)"
|
||||
exit ${ret}
|
|
@ -1,76 +0,0 @@
|
|||
DOTBOT_EXEC="${BASEDIR}/bin/dotbot"
|
||||
DOTFILES="${HOME}/dotfiles"
|
||||
INSTALL_CONF='install.conf.yaml'
|
||||
INSTALL_CONF_JSON='install.conf.json'
|
||||
|
||||
test_run_() {
|
||||
if ! ${DEBUG}; then
|
||||
(eval "$*") >/dev/null 2>&1
|
||||
else
|
||||
(eval "$*")
|
||||
fi
|
||||
}
|
||||
|
||||
test_expect_success() {
|
||||
local tag=${1} && shift
|
||||
if ! test_run_ "$@"; then
|
||||
>&2 echo "- ${tag} failed."
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
test_expect_failure() {
|
||||
local tag=${1} && shift
|
||||
if test_run_ "$@"; then
|
||||
>&2 echo "- ${tag} failed."
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
skip_tests() {
|
||||
# exit with special exit code picked up by driver-lib.bash
|
||||
exit 42
|
||||
}
|
||||
|
||||
check_env() {
|
||||
if [ "${DOTBOT_TEST}" != "true" ]; then
|
||||
>&2 echo "test must be run by test driver"
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
# run comparison check on python version; args:
|
||||
# $1 - comparison operator (e.g. '>=')
|
||||
# $2 - version number, to be passed to python (e.g. '3', '3.5', '3.6.4')
|
||||
# status code will reflect if comparison is true/false
|
||||
# e.g. `check_python_version '>=' 3.5`
|
||||
check_python_version() {
|
||||
check="$1"
|
||||
version="$(echo "$2" | tr . , )"
|
||||
# this call to just `python` will work in the Vagrant-based testing VM
|
||||
# because `pyenv` will always create a link to the "right" version.
|
||||
python -c "import sys; exit( not (sys.version_info ${check} (${version})) )"
|
||||
}
|
||||
|
||||
initialize() {
|
||||
check_env
|
||||
echo "${test_description}"
|
||||
mkdir -p "${DOTFILES}"
|
||||
cd
|
||||
}
|
||||
|
||||
run_dotbot() {
|
||||
(
|
||||
cat > "${DOTFILES}/${INSTALL_CONF}"
|
||||
${DOTBOT_EXEC} -c "${DOTFILES}/${INSTALL_CONF}" "${@}"
|
||||
)
|
||||
}
|
||||
|
||||
run_dotbot_json() {
|
||||
(
|
||||
cat > "${DOTFILES}/${INSTALL_CONF_JSON}"
|
||||
${DOTBOT_EXEC} -c "${DOTFILES}/${INSTALL_CONF_JSON}" "${@}"
|
||||
)
|
||||
}
|
||||
|
||||
initialize
|
|
@ -1,19 +0,0 @@
|
|||
test_description='clean uses default unless overridden'
|
||||
. '../test-lib.bash'
|
||||
|
||||
test_expect_success 'setup' '
|
||||
ln -s /nowhere ~/.g
|
||||
'
|
||||
|
||||
test_expect_success 'run' '
|
||||
run_dotbot <<EOF
|
||||
- clean:
|
||||
~/nonexistent:
|
||||
force: true
|
||||
~/:
|
||||
EOF
|
||||
'
|
||||
|
||||
test_expect_success 'test' '
|
||||
test -h ~/.g
|
||||
'
|
|
@ -1,16 +0,0 @@
|
|||
test_description='clean expands environment variables'
|
||||
. '../test-lib.bash'
|
||||
|
||||
test_expect_success 'setup' '
|
||||
ln -s ${DOTFILES}/f ~/.f
|
||||
'
|
||||
|
||||
test_expect_success 'run' '
|
||||
run_dotbot <<EOF
|
||||
- clean: ["\$HOME"]
|
||||
EOF
|
||||
'
|
||||
|
||||
test_expect_success 'test' '
|
||||
! test -h ~/.f
|
||||
'
|
|
@ -1,19 +0,0 @@
|
|||
test_description='clean deletes links to missing files'
|
||||
. '../test-lib.bash'
|
||||
|
||||
test_expect_success 'setup' '
|
||||
touch ${DOTFILES}/f &&
|
||||
ln -s ${DOTFILES}/f ~/.f &&
|
||||
ln -s ${DOTFILES}/g ~/.g
|
||||
'
|
||||
|
||||
test_expect_success 'run' '
|
||||
run_dotbot <<EOF
|
||||
- clean: ["~"]
|
||||
EOF
|
||||
'
|
||||
|
||||
test_expect_success 'test' '
|
||||
test -f ~/.f &&
|
||||
! test -h ~/.g
|
||||
'
|
|
@ -1,8 +0,0 @@
|
|||
test_description='clean ignores nonexistent directories'
|
||||
. '../test-lib.bash'
|
||||
|
||||
test_expect_success 'run' '
|
||||
run_dotbot <<EOF
|
||||
- clean: ["~", "~/fake"]
|
||||
EOF
|
||||
'
|
|
@ -1,18 +0,0 @@
|
|||
test_description='clean forced to remove files linking outside dotfiles directory'
|
||||
. '../test-lib.bash'
|
||||
|
||||
test_expect_success 'setup' '
|
||||
ln -s /nowhere ~/.g
|
||||
'
|
||||
|
||||
test_expect_success 'run' '
|
||||
run_dotbot <<EOF
|
||||
- clean:
|
||||
~/:
|
||||
force: true
|
||||
EOF
|
||||
'
|
||||
|
||||
test_expect_success 'test' '
|
||||
! test -h ~/.g
|
||||
'
|
|
@ -1,18 +0,0 @@
|
|||
test_description='clean ignores files linking outside dotfiles directory'
|
||||
. '../test-lib.bash'
|
||||
|
||||
test_expect_success 'setup' '
|
||||
ln -s ${DOTFILES}/f ~/.f &&
|
||||
ln -s ~/g ~/.g
|
||||
'
|
||||
|
||||
test_expect_success 'run' '
|
||||
run_dotbot <<EOF
|
||||
- clean: ["~"]
|
||||
EOF
|
||||
'
|
||||
|
||||
test_expect_success 'test' '
|
||||
! test -h ~/.f &&
|
||||
test -h ~/.g
|
||||
'
|
|
@ -1,34 +0,0 @@
|
|||
test_description='clean removes recursively'
|
||||
. '../test-lib.bash'
|
||||
|
||||
test_expect_success 'setup' '
|
||||
mkdir -p ~/a/b
|
||||
ln -s /nowhere ~/c
|
||||
ln -s /nowhere ~/a/d
|
||||
ln -s /nowhere ~/a/b/e
|
||||
'
|
||||
|
||||
test_expect_success 'run' '
|
||||
run_dotbot <<EOF
|
||||
- clean:
|
||||
~/:
|
||||
force: true
|
||||
EOF
|
||||
'
|
||||
|
||||
test_expect_success 'test' '
|
||||
! test -h ~/c && test -h ~/a/d && test -h ~/a/b/e
|
||||
'
|
||||
|
||||
test_expect_success 'run 2' '
|
||||
run_dotbot <<EOF
|
||||
- clean:
|
||||
~/:
|
||||
force: true
|
||||
recursive: true
|
||||
EOF
|
||||
'
|
||||
|
||||
test_expect_success 'test 2' '
|
||||
! test -h ~/a/d && ! test -h ~/a/b/e
|
||||
'
|
|
@ -1,8 +0,0 @@
|
|||
test_description='blank config allowed'
|
||||
. '../test-lib.bash'
|
||||
|
||||
test_expect_success 'run' '
|
||||
run_dotbot <<EOF
|
||||
[]
|
||||
EOF
|
||||
'
|
|
@ -1,7 +0,0 @@
|
|||
test_description='empty config allowed'
|
||||
. '../test-lib.bash'
|
||||
|
||||
test_expect_success 'run' '
|
||||
run_dotbot <<EOF
|
||||
EOF
|
||||
'
|
|
@ -1,20 +0,0 @@
|
|||
test_description='json config with tabs allowed'
|
||||
. '../test-lib.bash'
|
||||
|
||||
test_expect_success 'setup' '
|
||||
echo "grape" > ${DOTFILES}/h
|
||||
'
|
||||
|
||||
test_expect_success 'run' '
|
||||
run_dotbot_json <<EOF
|
||||
[{
|
||||
"link": {
|
||||
"~/.i": "h"
|
||||
}
|
||||
}]
|
||||
EOF
|
||||
'
|
||||
|
||||
test_expect_success 'test' '
|
||||
grep "grape" ~/.i
|
||||
'
|
|
@ -1,20 +0,0 @@
|
|||
test_description='json config allowed'
|
||||
. '../test-lib.bash'
|
||||
|
||||
test_expect_success 'setup' '
|
||||
echo "grape" > ${DOTFILES}/h
|
||||
'
|
||||
|
||||
test_expect_success 'run' '
|
||||
run_dotbot_json <<EOF
|
||||
[{
|
||||
"link": {
|
||||
"~/.i": "h"
|
||||
}
|
||||
}]
|
||||
EOF
|
||||
'
|
||||
|
||||
test_expect_success 'test' '
|
||||
grep "grape" ~/.i
|
||||
'
|
|
@ -1,26 +0,0 @@
|
|||
test_description='create mode'
|
||||
. '../test-lib.bash'
|
||||
|
||||
test_expect_success 'run' '
|
||||
run_dotbot -v <<EOF
|
||||
- defaults:
|
||||
create:
|
||||
mode: 0755
|
||||
- create:
|
||||
- ~/downloads
|
||||
- ~/.vim/undo-history
|
||||
- create:
|
||||
~/.ssh:
|
||||
mode: 0700
|
||||
~/projects:
|
||||
EOF
|
||||
'
|
||||
|
||||
test_expect_success 'test' '
|
||||
[ -d ~/downloads ] &&
|
||||
[ -d ~/.vim/undo-history ] &&
|
||||
[ -d ~/.ssh ] &&
|
||||
[ -d ~/projects ] &&
|
||||
[ "$(stat -c %a ~/.ssh)" = "700" ] &&
|
||||
[ "$(stat -c %a ~/downloads)" = "755" ]
|
||||
'
|
|
@ -1,23 +0,0 @@
|
|||
test_description='create folders'
|
||||
. '../test-lib.bash'
|
||||
|
||||
test_expect_success 'run' '
|
||||
run_dotbot <<EOF
|
||||
- create:
|
||||
- ~/somedir
|
||||
- ~/nested/somedir
|
||||
EOF
|
||||
'
|
||||
|
||||
test_expect_success 'test' '
|
||||
[ -d ~/somedir ] &&
|
||||
[ -d ~/nested/somedir ]
|
||||
'
|
||||
|
||||
test_expect_success 'run 2' '
|
||||
run_dotbot <<EOF
|
||||
- create:
|
||||
- ~/somedir
|
||||
- ~/nested/somedir
|
||||
EOF
|
||||
'
|
|
@ -1,59 +0,0 @@
|
|||
test_description='defaults setting works'
|
||||
. '../test-lib.bash'
|
||||
|
||||
test_expect_success 'setup' '
|
||||
echo "apple" > ${DOTFILES}/f &&
|
||||
echo "grape" > ~/f &&
|
||||
ln -s ~/f ~/.f &&
|
||||
ln -s /nowhere ~/.g
|
||||
'
|
||||
|
||||
test_expect_failure 'run-fail' '
|
||||
run_dotbot <<EOF
|
||||
- link:
|
||||
~/.f: f
|
||||
EOF
|
||||
'
|
||||
|
||||
test_expect_failure 'test-fail' '
|
||||
grep "apple" ~/.f
|
||||
'
|
||||
|
||||
test_expect_success 'run' '
|
||||
run_dotbot <<EOF
|
||||
- defaults:
|
||||
link:
|
||||
relink: true
|
||||
|
||||
- link:
|
||||
~/.f: f
|
||||
EOF
|
||||
'
|
||||
|
||||
test_expect_success 'test' '
|
||||
grep "apple" ~/.f
|
||||
'
|
||||
|
||||
test_expect_success 'run-fail 2' '
|
||||
run_dotbot <<EOF
|
||||
- clean: ["~"]
|
||||
EOF
|
||||
'
|
||||
|
||||
test_expect_failure 'test-fail 2' '
|
||||
! test -h ~/.g
|
||||
'
|
||||
|
||||
test_expect_success 'run 2' '
|
||||
run_dotbot <<EOF
|
||||
- defaults:
|
||||
clean:
|
||||
force: true
|
||||
|
||||
- clean: ["~"]
|
||||
EOF
|
||||
'
|
||||
|
||||
test_expect_success 'test 2' '
|
||||
! test -h ~/.g
|
||||
'
|
|
@ -1,21 +0,0 @@
|
|||
test_description='--except with multiple arguments'
|
||||
. '../test-lib.bash'
|
||||
|
||||
test_expect_success 'setup' '
|
||||
ln -s ${DOTFILES}/nonexistent ~/bad && touch ${DOTFILES}/y
|
||||
'
|
||||
|
||||
test_expect_success 'run' '
|
||||
run_dotbot --except clean shell <<EOF
|
||||
- clean: ["~"]
|
||||
- shell:
|
||||
- echo "x" > ~/x
|
||||
- link:
|
||||
~/y: y
|
||||
EOF
|
||||
'
|
||||
|
||||
test_expect_success 'test' '
|
||||
[ "$(readlink ~/bad | cut -d/ -f5-)" = "dotfiles/nonexistent" ] &&
|
||||
! test -f ~/x && test -f ~/y
|
||||
'
|
|
@ -1,32 +0,0 @@
|
|||
test_description='--except'
|
||||
. '../test-lib.bash'
|
||||
|
||||
test_expect_success 'setup' '
|
||||
echo "apple" > ${DOTFILES}/x
|
||||
'
|
||||
|
||||
test_expect_success 'run' '
|
||||
run_dotbot --except link <<EOF
|
||||
- shell:
|
||||
- echo "pear" > ~/y
|
||||
- link:
|
||||
~/x: x
|
||||
EOF
|
||||
'
|
||||
|
||||
test_expect_success 'test' '
|
||||
grep "pear" ~/y && ! test -f ~/x
|
||||
'
|
||||
|
||||
test_expect_success 'run 2' '
|
||||
run_dotbot --except shell <<EOF
|
||||
- shell:
|
||||
- echo "pear" > ~/z
|
||||
- link:
|
||||
~/x: x
|
||||
EOF
|
||||
'
|
||||
|
||||
test_expect_success 'test' '
|
||||
grep "apple" ~/x && ! test -f ~/z
|
||||
'
|
|
@ -1,32 +0,0 @@
|
|||
test_description='test exit on failure'
|
||||
. '../test-lib.bash'
|
||||
|
||||
test_expect_success 'setup' '
|
||||
echo "apple" > ${DOTFILES}/f1 &&
|
||||
echo "orange" > ${DOTFILES}/f2 &&
|
||||
echo "pineapple" > ${DOTFILES}/f3
|
||||
'
|
||||
|
||||
test_expect_failure 'run_case1' '
|
||||
run_dotbot -x <<EOF
|
||||
- shell:
|
||||
- "this_is_not_a_command"
|
||||
- link:
|
||||
~/f1:
|
||||
EOF
|
||||
'
|
||||
|
||||
test_expect_failure 'run_case2' '
|
||||
run_dotbot -x <<EOF
|
||||
- link:
|
||||
~/f2:
|
||||
- shell:
|
||||
- "this_is_not_a_command"
|
||||
- link:
|
||||
~/f3:
|
||||
EOF
|
||||
'
|
||||
|
||||
test_expect_success 'test' '
|
||||
[[ ! -f ~/f1 ]] && [[ -f ~/f2 ]] && [[ ! -f ~/f3 ]]
|
||||
'
|
|
@ -1,60 +0,0 @@
|
|||
test_description='can find python executable with different names'
|
||||
. '../test-lib.bash'
|
||||
|
||||
# the test machine needs to have a binary named `python`
|
||||
test_expect_success 'setup' '
|
||||
mkdir ~/tmp_bin &&
|
||||
(
|
||||
IFS=:
|
||||
for p in $PATH; do
|
||||
if [ -d $p ]; then
|
||||
find $p -maxdepth 1 -mindepth 1 -exec sh -c \
|
||||
'"'"'ln -sf {} $HOME/tmp_bin/$(basename {})'"'"' \;
|
||||
fi
|
||||
done
|
||||
) &&
|
||||
rm -f ~/tmp_bin/python &&
|
||||
rm -f ~/tmp_bin/python2 &&
|
||||
rm -f ~/tmp_bin/python3
|
||||
'
|
||||
|
||||
test_expect_failure 'run' '
|
||||
PATH="$HOME/tmp_bin" run_dotbot <<EOF
|
||||
[]
|
||||
EOF
|
||||
'
|
||||
|
||||
test_expect_success 'setup 2' '
|
||||
touch ~/tmp_bin/python &&
|
||||
chmod +x ~/tmp_bin/python &&
|
||||
cat >> ~/tmp_bin/python <<EOF
|
||||
#!$HOME/tmp_bin/bash
|
||||
exec $(command -v python)
|
||||
EOF
|
||||
'
|
||||
|
||||
test_expect_success 'run 2' '
|
||||
PATH="$HOME/tmp_bin" run_dotbot <<EOF
|
||||
[]
|
||||
EOF
|
||||
'
|
||||
|
||||
test_expect_success 'setup 3' '
|
||||
mv ~/tmp_bin/python ~/tmp_bin/python2
|
||||
'
|
||||
|
||||
test_expect_success 'run 3' '
|
||||
PATH="$HOME/tmp_bin" run_dotbot <<EOF
|
||||
[]
|
||||
EOF
|
||||
'
|
||||
|
||||
test_expect_success 'setup 4' '
|
||||
mv ~/tmp_bin/python2 ~/tmp_bin/python3
|
||||
'
|
||||
|
||||
test_expect_success 'run 4' '
|
||||
PATH="$HOME/tmp_bin" run_dotbot <<EOF
|
||||
[]
|
||||
EOF
|
||||
'
|
|
@ -1,20 +0,0 @@
|
|||
test_description='linking canonicalizes path by default'
|
||||
. '../test-lib.bash'
|
||||
|
||||
test_expect_success 'setup' '
|
||||
echo "apple" > ${DOTFILES}/f &&
|
||||
ln -s dotfiles dotfiles-symlink
|
||||
'
|
||||
|
||||
test_expect_success 'run' '
|
||||
cat > "${DOTFILES}/${INSTALL_CONF}" <<EOF
|
||||
- link:
|
||||
~/.f:
|
||||
path: f
|
||||
EOF
|
||||
${DOTBOT_EXEC} -c dotfiles-symlink/${INSTALL_CONF}
|
||||
'
|
||||
|
||||
test_expect_success 'test' '
|
||||
[ "$(readlink ~/.f | cut -d/ -f5-)" = "dotfiles/f" ]
|
||||
'
|
|
@ -1,26 +0,0 @@
|
|||
test_description='link uses destination if source is null'
|
||||
. '../test-lib.bash'
|
||||
|
||||
test_expect_success 'setup' '
|
||||
echo "apple" > ${DOTFILES}/f &&
|
||||
echo "grape" > ${DOTFILES}/fd
|
||||
'
|
||||
|
||||
test_expect_success 'run' '
|
||||
run_dotbot <<EOF
|
||||
- link:
|
||||
~/f:
|
||||
~/.f:
|
||||
~/fd:
|
||||
force: false
|
||||
~/.fd:
|
||||
force: false
|
||||
EOF
|
||||
'
|
||||
|
||||
test_expect_success 'test' '
|
||||
grep "apple" ~/f &&
|
||||
grep "apple" ~/.f &&
|
||||
grep "grape" ~/fd &&
|
||||
grep "grape" ~/.fd
|
||||
'
|
|
@ -1,17 +0,0 @@
|
|||
test_description='link expands user in target'
|
||||
. '../test-lib.bash'
|
||||
|
||||
test_expect_success 'setup' '
|
||||
echo "apple" > ~/f
|
||||
'
|
||||
|
||||
test_expect_success 'run' '
|
||||
run_dotbot <<EOF
|
||||
- link:
|
||||
~/g: ~/f
|
||||
EOF
|
||||
'
|
||||
|
||||
test_expect_success 'test' '
|
||||
grep "apple" ~/g
|
||||
'
|
|
@ -1,20 +0,0 @@
|
|||
test_description='link expands environment variables in extended config syntax'
|
||||
. '../test-lib.bash'
|
||||
|
||||
test_expect_success 'setup' '
|
||||
echo "grape" > ${DOTFILES}/h
|
||||
'
|
||||
|
||||
test_expect_success 'run' '
|
||||
export APPLE="h" &&
|
||||
run_dotbot <<EOF
|
||||
- link:
|
||||
~/.i:
|
||||
path: \$APPLE
|
||||
relink: true
|
||||
EOF
|
||||
'
|
||||
|
||||
test_expect_success 'test' '
|
||||
grep "grape" ~/.i
|
||||
'
|
|
@ -1,18 +0,0 @@
|
|||
test_description='link expands environment variables in source'
|
||||
. '../test-lib.bash'
|
||||
|
||||
test_expect_success 'setup' '
|
||||
echo "grape" > ${DOTFILES}/h
|
||||
'
|
||||
|
||||
test_expect_success 'run' '
|
||||
export APPLE="h" &&
|
||||
run_dotbot <<EOF
|
||||
- link:
|
||||
~/.i: \$APPLE
|
||||
EOF
|
||||
'
|
||||
|
||||
test_expect_success 'test' '
|
||||
grep "grape" ~/.i
|
||||
'
|
|
@ -1,25 +0,0 @@
|
|||
test_description='link expands environment variables in target'
|
||||
. '../test-lib.bash'
|
||||
|
||||
test_expect_success 'setup' '
|
||||
echo "apple" > ${DOTFILES}/f &&
|
||||
echo "grape" > ${DOTFILES}/h
|
||||
'
|
||||
|
||||
test_expect_success 'run' '
|
||||
export ORANGE=".config" &&
|
||||
export BANANA="g" &&
|
||||
unset PEAR &&
|
||||
run_dotbot <<EOF
|
||||
- link:
|
||||
~/\${ORANGE}/\$BANANA:
|
||||
path: f
|
||||
create: true
|
||||
~/\$PEAR: h
|
||||
EOF
|
||||
'
|
||||
|
||||
test_expect_success 'test' '
|
||||
grep "apple" ~/.config/g &&
|
||||
grep "grape" ~/\$PEAR
|
||||
'
|
|
@ -1,18 +0,0 @@
|
|||
test_description='link leaves unset environment variables'
|
||||
. '../test-lib.bash'
|
||||
|
||||
test_expect_success 'setup' '
|
||||
echo "apple" > ${DOTFILES}/\$ORANGE
|
||||
'
|
||||
|
||||
test_expect_success 'run' '
|
||||
unset ORANGE &&
|
||||
run_dotbot <<EOF
|
||||
- link:
|
||||
~/.f: \$ORANGE
|
||||
EOF
|
||||
'
|
||||
|
||||
test_expect_success 'test' '
|
||||
grep "apple" ~/.f
|
||||
'
|
|
@ -1,24 +0,0 @@
|
|||
test_description='force leaves file when target nonexistent'
|
||||
. '../test-lib.bash'
|
||||
|
||||
test_expect_success 'setup' '
|
||||
mkdir ~/dir &&
|
||||
touch ~/file
|
||||
'
|
||||
|
||||
test_expect_failure 'run' '
|
||||
run_dotbot <<EOF
|
||||
- link:
|
||||
~/dir:
|
||||
path: dir
|
||||
force: true
|
||||
~/file:
|
||||
path: file
|
||||
force: true
|
||||
EOF
|
||||
'
|
||||
|
||||
test_expect_success 'test' '
|
||||
test -d ~/dir &&
|
||||
test -f ~/file
|
||||
'
|
|
@ -1,21 +0,0 @@
|
|||
test_description='force overwrites symlinked directory'
|
||||
. '../test-lib.bash'
|
||||
|
||||
test_expect_success 'setup' '
|
||||
mkdir ${DOTFILES}/dir ~/dir &&
|
||||
touch ${DOTFILES}/dir/f &&
|
||||
ln -s ~/ ~/.dir
|
||||
'
|
||||
|
||||
test_expect_success 'run' '
|
||||
run_dotbot <<EOF
|
||||
- link:
|
||||
~/.dir:
|
||||
path: dir
|
||||
force: true
|
||||
EOF
|
||||
'
|
||||
|
||||
test_expect_success 'test' '
|
||||
test -f ~/.dir/f
|
||||
'
|
|
@ -1,45 +0,0 @@
|
|||
test_description='link glob ambiguous'
|
||||
. '../test-lib.bash'
|
||||
|
||||
test_expect_success 'setup' '
|
||||
mkdir ${DOTFILES}/foo
|
||||
'
|
||||
|
||||
test_expect_failure 'run 1' '
|
||||
run_dotbot <<EOF
|
||||
- link:
|
||||
~/foo/:
|
||||
path: foo
|
||||
glob: true
|
||||
EOF
|
||||
'
|
||||
|
||||
test_expect_failure 'test 1' '
|
||||
test -d ~/foo
|
||||
'
|
||||
|
||||
test_expect_failure 'run 2' '
|
||||
run_dotbot <<EOF
|
||||
- link:
|
||||
~/foo/:
|
||||
path: foo/
|
||||
glob: true
|
||||
EOF
|
||||
'
|
||||
|
||||
test_expect_failure 'test 2' '
|
||||
test -d ~/foo
|
||||
'
|
||||
|
||||
test_expect_success 'run 3' '
|
||||
run_dotbot <<EOF
|
||||
- link:
|
||||
~/foo:
|
||||
path: foo
|
||||
glob: true
|
||||
EOF
|
||||
'
|
||||
|
||||
test_expect_success 'test 3' '
|
||||
test -d ~/foo
|
||||
'
|
|
@ -1,123 +0,0 @@
|
|||
test_description='link glob exclude'
|
||||
. '../test-lib.bash'
|
||||
|
||||
test_expect_success 'setup 1' '
|
||||
mkdir -p ${DOTFILES}/config/{foo,bar,baz} &&
|
||||
echo "apple" > ${DOTFILES}/config/foo/a &&
|
||||
echo "banana" > ${DOTFILES}/config/bar/b &&
|
||||
echo "cherry" > ${DOTFILES}/config/bar/c &&
|
||||
echo "donut" > ${DOTFILES}/config/baz/d
|
||||
'
|
||||
|
||||
test_expect_success 'run 1' '
|
||||
run_dotbot -v <<EOF
|
||||
- defaults:
|
||||
link:
|
||||
glob: true
|
||||
create: true
|
||||
- link:
|
||||
~/.config/:
|
||||
path: config/*
|
||||
exclude: [config/baz]
|
||||
EOF
|
||||
'
|
||||
|
||||
test_expect_success 'test 1' '
|
||||
! readlink ~/.config/ &&
|
||||
readlink ~/.config/foo &&
|
||||
! readlink ~/.config/baz &&
|
||||
grep "apple" ~/.config/foo/a &&
|
||||
grep "banana" ~/.config/bar/b &&
|
||||
grep "cherry" ~/.config/bar/c
|
||||
'
|
||||
|
||||
test_expect_success 'setup 2' '
|
||||
rm -rf ~/.config &&
|
||||
mkdir ${DOTFILES}/config/baz/buzz &&
|
||||
echo "egg" > ${DOTFILES}/config/baz/buzz/e
|
||||
'
|
||||
|
||||
test_expect_success 'run 2' '
|
||||
run_dotbot -v <<EOF
|
||||
- defaults:
|
||||
link:
|
||||
glob: true
|
||||
create: true
|
||||
- link:
|
||||
~/.config/:
|
||||
path: config/*/*
|
||||
exclude: [config/baz/*]
|
||||
EOF
|
||||
'
|
||||
|
||||
test_expect_success 'test 2' '
|
||||
! readlink ~/.config/ &&
|
||||
! readlink ~/.config/foo &&
|
||||
[ ! -d ~/.config/baz ] &&
|
||||
readlink ~/.config/foo/a &&
|
||||
grep "apple" ~/.config/foo/a &&
|
||||
grep "banana" ~/.config/bar/b &&
|
||||
grep "cherry" ~/.config/bar/c
|
||||
'
|
||||
|
||||
test_expect_success 'setup 3' '
|
||||
rm -rf ~/.config &&
|
||||
mkdir ${DOTFILES}/config/baz/bizz &&
|
||||
echo "grape" > ${DOTFILES}/config/baz/bizz/g
|
||||
'
|
||||
|
||||
test_expect_success 'run 3' '
|
||||
run_dotbot -v <<EOF
|
||||
- defaults:
|
||||
link:
|
||||
glob: true
|
||||
create: true
|
||||
- link:
|
||||
~/.config/:
|
||||
path: config/*/*
|
||||
exclude: [config/baz/buzz]
|
||||
EOF
|
||||
'
|
||||
|
||||
test_expect_success 'test 3' '
|
||||
! readlink ~/.config/ &&
|
||||
! readlink ~/.config/foo &&
|
||||
readlink ~/.config/foo/a &&
|
||||
! readlink ~/.config/baz/buzz &&
|
||||
readlink ~/.config/baz/bizz &&
|
||||
grep "apple" ~/.config/foo/a &&
|
||||
grep "banana" ~/.config/bar/b &&
|
||||
grep "cherry" ~/.config/bar/c &&
|
||||
grep "donut" ~/.config/baz/d &&
|
||||
grep "grape" ~/.config/baz/bizz/g
|
||||
'
|
||||
|
||||
test_expect_success 'setup 4' '
|
||||
rm -rf ~/.config &&
|
||||
mkdir ${DOTFILES}/config/fiz &&
|
||||
echo "fig" > ${DOTFILES}/config/fiz/f
|
||||
'
|
||||
|
||||
test_expect_success 'run 4' '
|
||||
run_dotbot -v <<EOF
|
||||
- defaults:
|
||||
link:
|
||||
glob: true
|
||||
create: true
|
||||
- link:
|
||||
~/.config/:
|
||||
path: config/*/*
|
||||
exclude: [config/baz/*, config/fiz/*]
|
||||
EOF
|
||||
'
|
||||
|
||||
test_expect_success 'test 4' '
|
||||
! readlink ~/.config/ &&
|
||||
! readlink ~/.config/foo &&
|
||||
[ ! -d ~/.config/baz ] &&
|
||||
[ ! -d ~/.config/fiz ] &&
|
||||
readlink ~/.config/foo/a &&
|
||||
grep "apple" ~/.config/foo/a &&
|
||||
grep "banana" ~/.config/bar/b &&
|
||||
grep "cherry" ~/.config/bar/c
|
||||
'
|
|
@ -1,31 +0,0 @@
|
|||
test_description='link glob multi star'
|
||||
. '../test-lib.bash'
|
||||
|
||||
test_expect_success 'setup' '
|
||||
mkdir ${DOTFILES}/config &&
|
||||
mkdir ${DOTFILES}/config/foo &&
|
||||
mkdir ${DOTFILES}/config/bar &&
|
||||
echo "apple" > ${DOTFILES}/config/foo/a &&
|
||||
echo "banana" > ${DOTFILES}/config/bar/b &&
|
||||
echo "cherry" > ${DOTFILES}/config/bar/c
|
||||
'
|
||||
|
||||
test_expect_success 'run' '
|
||||
run_dotbot -v <<EOF
|
||||
- defaults:
|
||||
link:
|
||||
glob: true
|
||||
create: true
|
||||
- link:
|
||||
~/.config/: config/*/*
|
||||
EOF
|
||||
'
|
||||
|
||||
test_expect_success 'test' '
|
||||
! readlink ~/.config/ &&
|
||||
! readlink ~/.config/foo &&
|
||||
readlink ~/.config/foo/a &&
|
||||
grep "apple" ~/.config/foo/a &&
|
||||
grep "banana" ~/.config/bar/b &&
|
||||
grep "cherry" ~/.config/bar/c
|
||||
'
|
|
@ -1,106 +0,0 @@
|
|||
test_description='link glob, all patterns'
|
||||
. '../test-lib.bash'
|
||||
|
||||
allfruit=(apple apricot banana cherry currant cantalope)
|
||||
|
||||
test_expect_success 'glob patterns setup' '
|
||||
mkdir ${DOTFILES}/conf &&
|
||||
for fruit in "${allfruit[@]}"; do
|
||||
echo "${fruit}" > ${DOTFILES}/conf/${fruit}
|
||||
echo "dot-${fruit}" > ${DOTFILES}/conf/.${fruit}
|
||||
done
|
||||
'
|
||||
|
||||
test_expect_success 'glob patterns: "conf/*"' '
|
||||
run_dotbot -v <<EOF
|
||||
- defaults:
|
||||
link:
|
||||
glob: true
|
||||
create: true
|
||||
- link:
|
||||
~/globtest: conf/*
|
||||
EOF
|
||||
|
||||
for fruit in "${allfruit[@]}"; do
|
||||
grep "${fruit}" ~/globtest/${fruit} &&
|
||||
test \! -e ~/globtest/.${fruit}
|
||||
done
|
||||
'
|
||||
|
||||
test_expect_success 'reset' 'rm -rf ~/globtest'
|
||||
|
||||
test_expect_success 'glob pattern: "conf/.*"' '
|
||||
run_dotbot -v <<EOF
|
||||
- defaults:
|
||||
link:
|
||||
glob: true
|
||||
create: true
|
||||
- link:
|
||||
~/globtest: conf/.*
|
||||
EOF
|
||||
|
||||
for fruit in "${allfruit[@]}"; do
|
||||
test \! -e ~/globtest/${fruit} &&
|
||||
grep "dot-${fruit}" ~/globtest/.${fruit}
|
||||
done
|
||||
'
|
||||
|
||||
test_expect_success 'reset 2' 'rm -rf ~/globtest'
|
||||
|
||||
test_expect_success 'glob pattern: "conf/[bc]*"' '
|
||||
run_dotbot -v <<EOF
|
||||
- defaults:
|
||||
link:
|
||||
glob: true
|
||||
create: true
|
||||
- link:
|
||||
~/globtest: conf/[bc]*
|
||||
EOF
|
||||
|
||||
for fruit in "${allfruit[@]}"; do
|
||||
[[ $fruit = [bc]* ]] &&
|
||||
grep "${fruit}" ~/globtest/${fruit} ||
|
||||
test \! -e ~/globtest/${fruit} &&
|
||||
test \! -e ~/globtest/.${fruit}
|
||||
done
|
||||
'
|
||||
|
||||
test_expect_success 'reset 3' 'rm -rf ~/globtest'
|
||||
|
||||
test_expect_success 'glob pattern: "conf/*e"' '
|
||||
run_dotbot -v <<EOF
|
||||
- defaults:
|
||||
link:
|
||||
glob: true
|
||||
create: true
|
||||
- link:
|
||||
~/globtest: conf/*e
|
||||
EOF
|
||||
|
||||
for fruit in "${allfruit[@]}"; do
|
||||
[[ $fruit = *e ]] &&
|
||||
grep "${fruit}" ~/globtest/${fruit} ||
|
||||
test \! -e ~/globtest/${fruit} &&
|
||||
test \! -e ~/globtest/.${fruit}
|
||||
done
|
||||
'
|
||||
|
||||
test_expect_success 'reset 4' 'rm -rf ~/globtest'
|
||||
|
||||
test_expect_success 'glob pattern: "conf/??r*"' '
|
||||
run_dotbot -v <<EOF
|
||||
- defaults:
|
||||
link:
|
||||
glob: true
|
||||
create: true
|
||||
- link:
|
||||
~/globtest: conf/??r*
|
||||
EOF
|
||||
|
||||
for fruit in "${allfruit[@]}"; do
|
||||
[[ $fruit = ??r* ]] &&
|
||||
grep "${fruit}" ~/globtest/${fruit} ||
|
||||
test \! -e ~/globtest/${fruit} &&
|
||||
test \! -e ~/globtest/.${fruit}
|
||||
done
|
||||
'
|
|
@ -1,46 +0,0 @@
|
|||
test_description='link glob recursive'
|
||||
. '../test-lib.bash'
|
||||
|
||||
check_python_version ">=" 3.5 \
|
||||
|| test_expect_failure 'expect-fail' '
|
||||
run_dotbot -v <<EOF
|
||||
- link:
|
||||
~/.config/:
|
||||
glob: true
|
||||
path: bogus/**
|
||||
EOF
|
||||
'
|
||||
|
||||
# Skip remaining tests if not supported
|
||||
check_python_version ">=" 3.5 \
|
||||
|| skip_tests
|
||||
|
||||
test_expect_success 'setup' '
|
||||
mkdir -p ${DOTFILES}/config/foo/bar &&
|
||||
echo "apple" > ${DOTFILES}/config/foo/bar/a &&
|
||||
echo "banana" > ${DOTFILES}/config/foo/bar/b &&
|
||||
echo "cherry" > ${DOTFILES}/config/foo/bar/c
|
||||
'
|
||||
|
||||
test_expect_success 'run' '
|
||||
run_dotbot -v <<EOF
|
||||
- defaults:
|
||||
link:
|
||||
glob: true
|
||||
create: true
|
||||
- link:
|
||||
~/.config/:
|
||||
path: config/**
|
||||
exclude: [config/**/b]
|
||||
EOF
|
||||
'
|
||||
|
||||
test_expect_success 'test' '
|
||||
! readlink ~/.config/ &&
|
||||
! readlink ~/.config/foo &&
|
||||
! readlink ~/.config/foo/bar &&
|
||||
readlink ~/.config/foo/bar/a &&
|
||||
grep "apple" ~/.config/foo/bar/a &&
|
||||
test \! -e ~/.config/foo/bar/b &&
|
||||
grep "cherry" ~/.config/foo/bar/c
|
||||
'
|
|
@ -1,93 +0,0 @@
|
|||
test_description='link glob'
|
||||
. '../test-lib.bash'
|
||||
|
||||
test_expect_success 'setup 1' '
|
||||
mkdir ${DOTFILES}/bin &&
|
||||
echo "apple" > ${DOTFILES}/bin/a &&
|
||||
echo "banana" > ${DOTFILES}/bin/b &&
|
||||
echo "cherry" > ${DOTFILES}/bin/c
|
||||
'
|
||||
|
||||
test_expect_success 'run 1' '
|
||||
run_dotbot -v <<EOF
|
||||
- defaults:
|
||||
link:
|
||||
glob: true
|
||||
create: true
|
||||
- link:
|
||||
~/bin: bin/*
|
||||
EOF
|
||||
'
|
||||
|
||||
test_expect_success 'test 1' '
|
||||
grep "apple" ~/bin/a &&
|
||||
grep "banana" ~/bin/b &&
|
||||
grep "cherry" ~/bin/c
|
||||
'
|
||||
|
||||
test_expect_success 'setup 2' '
|
||||
rm -rf ~/bin
|
||||
'
|
||||
|
||||
test_expect_success 'run 2' '
|
||||
run_dotbot -v <<EOF
|
||||
- defaults:
|
||||
link:
|
||||
glob: true
|
||||
create: true
|
||||
- link:
|
||||
~/bin/: bin/*
|
||||
EOF
|
||||
'
|
||||
|
||||
test_expect_success 'test 2' '
|
||||
grep "apple" ~/bin/a &&
|
||||
grep "banana" ~/bin/b &&
|
||||
grep "cherry" ~/bin/c
|
||||
'
|
||||
|
||||
test_expect_success 'setup 3' '
|
||||
rm -rf ~/bin &&
|
||||
echo "dot_apple" > ${DOTFILES}/bin/.a &&
|
||||
echo "dot_banana" > ${DOTFILES}/bin/.b &&
|
||||
echo "dot_cherry" > ${DOTFILES}/bin/.c
|
||||
'
|
||||
|
||||
test_expect_success 'run 3' '
|
||||
run_dotbot -v <<EOF
|
||||
- defaults:
|
||||
link:
|
||||
glob: true
|
||||
create: true
|
||||
- link:
|
||||
~/bin/: bin/.*
|
||||
EOF
|
||||
'
|
||||
|
||||
test_expect_success 'test 3' '
|
||||
grep "dot_apple" ~/bin/.a &&
|
||||
grep "dot_banana" ~/bin/.b &&
|
||||
grep "dot_cherry" ~/bin/.c
|
||||
'
|
||||
|
||||
test_expect_success 'setup 4' '
|
||||
rm -rf ~/bin &&
|
||||
echo "dot_apple" > ${DOTFILES}/.a &&
|
||||
echo "dot_banana" > ${DOTFILES}/.b &&
|
||||
echo "dot_cherry" > ${DOTFILES}/.c
|
||||
'
|
||||
|
||||
test_expect_success 'run 4' '
|
||||
run_dotbot -v <<EOF
|
||||
- link:
|
||||
"~":
|
||||
path: .*
|
||||
glob: true
|
||||
EOF
|
||||
'
|
||||
|
||||
test_expect_success 'test 4' '
|
||||
grep "dot_apple" ~/.a &&
|
||||
grep "dot_banana" ~/.b &&
|
||||
grep "dot_cherry" ~/.c
|
||||
'
|
|
@ -1,51 +0,0 @@
|
|||
test_description='link if'
|
||||
. '../test-lib.bash'
|
||||
|
||||
test_expect_success 'setup' '
|
||||
mkdir ~/d
|
||||
echo "apple" > ${DOTFILES}/f
|
||||
'
|
||||
|
||||
test_expect_success 'run' '
|
||||
run_dotbot <<EOF
|
||||
- link:
|
||||
~/.f:
|
||||
path: f
|
||||
if: "true"
|
||||
~/.g:
|
||||
path: f
|
||||
if: "false"
|
||||
~/.h:
|
||||
path: f
|
||||
if: "[ -d ~/d ]"
|
||||
~/.i:
|
||||
path: f
|
||||
if: "badcommand"
|
||||
EOF
|
||||
'
|
||||
|
||||
test_expect_success 'test' '
|
||||
grep "apple" ~/.f &&
|
||||
! test -f ~/.g &&
|
||||
grep "apple" ~/.h &&
|
||||
! test -f ~/.i
|
||||
'
|
||||
|
||||
test_expect_success 'run 2' '
|
||||
run_dotbot <<EOF
|
||||
- defaults:
|
||||
link:
|
||||
if: "false"
|
||||
- link:
|
||||
~/.j:
|
||||
path: f
|
||||
if: "true"
|
||||
~/.k:
|
||||
path: f
|
||||
EOF
|
||||
'
|
||||
|
||||
test_expect_success 'test 2' '
|
||||
grep "apple" ~/.j &&
|
||||
! test -f ~/.k
|
||||
'
|
|
@ -1,23 +0,0 @@
|
|||
test_description='link is created even if source is missing'
|
||||
. '../test-lib.bash'
|
||||
|
||||
test_expect_failure 'run' '
|
||||
run_dotbot <<EOF
|
||||
- link:
|
||||
~/missing_link:
|
||||
path: missing
|
||||
EOF
|
||||
'
|
||||
|
||||
test_expect_success 'run 2' '
|
||||
run_dotbot <<EOF
|
||||
- link:
|
||||
~/missing_link:
|
||||
path: missing
|
||||
ignore-missing: true
|
||||
EOF
|
||||
'
|
||||
|
||||
test_expect_success 'test' '
|
||||
test -L ~/missing_link
|
||||
'
|
|
@ -1,18 +0,0 @@
|
|||
test_description='relink does not overwrite file'
|
||||
. '../test-lib.bash'
|
||||
|
||||
test_expect_success 'setup' '
|
||||
echo "apple" > ${DOTFILES}/f &&
|
||||
echo "grape" > ~/.f
|
||||
'
|
||||
|
||||
test_expect_failure 'run' '
|
||||
run_dotbot <<EOF
|
||||
- link:
|
||||
~/.f: f
|
||||
EOF
|
||||
'
|
||||
|
||||
test_expect_success 'test' '
|
||||
grep "grape" ~/.f
|
||||
'
|
|
@ -1,40 +0,0 @@
|
|||
test_description='linking path canonicalization can be disabled'
|
||||
. '../test-lib.bash'
|
||||
|
||||
test_expect_success 'setup' '
|
||||
echo "apple" > ${DOTFILES}/f &&
|
||||
echo "grape" > ${DOTFILES}/g &&
|
||||
ln -s dotfiles dotfiles-symlink
|
||||
'
|
||||
|
||||
test_expect_success 'run' '
|
||||
cat > "${DOTFILES}/${INSTALL_CONF}" <<EOF
|
||||
- defaults:
|
||||
link:
|
||||
canonicalize-path: false
|
||||
- link:
|
||||
~/.f:
|
||||
path: f
|
||||
EOF
|
||||
${DOTBOT_EXEC} -c ./dotfiles-symlink/${INSTALL_CONF}
|
||||
'
|
||||
|
||||
test_expect_success 'test' '
|
||||
[ "$(readlink ~/.f | cut -d/ -f5-)" = "dotfiles-symlink/f" ]
|
||||
'
|
||||
|
||||
test_expect_success 'run 2' '
|
||||
cat > "${DOTFILES}/${INSTALL_CONF}" <<EOF
|
||||
- defaults:
|
||||
link:
|
||||
canonicalize: false
|
||||
- link:
|
||||
~/.g:
|
||||
path: g
|
||||
EOF
|
||||
${DOTBOT_EXEC} -c ./dotfiles-symlink/${INSTALL_CONF}
|
||||
'
|
||||
|
||||
test_expect_success 'test' '
|
||||
[ "$(readlink ~/.g | cut -d/ -f5-)" = "dotfiles-symlink/g" ]
|
||||
'
|
|
@ -1,23 +0,0 @@
|
|||
test_description='link prefix'
|
||||
. '../test-lib.bash'
|
||||
|
||||
test_expect_success 'setup' '
|
||||
mkdir ${DOTFILES}/conf &&
|
||||
echo "apple" > ${DOTFILES}/conf/a &&
|
||||
echo "banana" > ${DOTFILES}/conf/b &&
|
||||
echo "cherry" > ${DOTFILES}/conf/c
|
||||
'
|
||||
|
||||
test_expect_success 'test glob w/ prefix' '
|
||||
run_dotbot -v <<EOF
|
||||
- link:
|
||||
~/:
|
||||
glob: true
|
||||
path: conf/*
|
||||
prefix: '.'
|
||||
EOF
|
||||
|
||||
grep "apple" ~/.a &&
|
||||
grep "banana" ~/.b &&
|
||||
grep "cherry" ~/.c
|
||||
'
|
|
@ -1,36 +0,0 @@
|
|||
test_description='relative linking works'
|
||||
. '../test-lib.bash'
|
||||
|
||||
test_expect_success 'setup' '
|
||||
echo "apple" > ${DOTFILES}/f &&
|
||||
mkdir ${DOTFILES}/d &&
|
||||
echo "grape" > ${DOTFILES}/d/e
|
||||
'
|
||||
|
||||
test_expect_success 'run' '
|
||||
run_dotbot <<EOF
|
||||
- link:
|
||||
~/.f:
|
||||
path: f
|
||||
~/.frel:
|
||||
path: f
|
||||
relative: true
|
||||
~/nested/.frel:
|
||||
path: f
|
||||
create: true
|
||||
relative: true
|
||||
~/.d:
|
||||
path: d
|
||||
relative: true
|
||||
EOF
|
||||
'
|
||||
|
||||
test_expect_success 'test' '
|
||||
grep "apple" ~/.f &&
|
||||
grep "apple" ~/.frel &&
|
||||
[[ "$(readlink ~/.f)" == "$(readlink -f dotfiles/f)" ]] &&
|
||||
[[ "$(readlink ~/.frel)" == "dotfiles/f" ]] &&
|
||||
[[ "$(readlink ~/nested/.frel)" == "../dotfiles/f" ]] &&
|
||||
grep "grape" ~/.d/e &&
|
||||
[[ "$(readlink ~/.d)" == "dotfiles/d" ]]
|
||||
'
|
|
@ -1,20 +0,0 @@
|
|||
test_description='relink does not overwrite file'
|
||||
. '../test-lib.bash'
|
||||
|
||||
test_expect_success 'setup' '
|
||||
echo "apple" > ${DOTFILES}/f &&
|
||||
echo "grape" > ~/.f
|
||||
'
|
||||
|
||||
test_expect_failure 'run' '
|
||||
run_dotbot <<EOF
|
||||
- link:
|
||||
~/.f:
|
||||
path: f
|
||||
relink: true
|
||||
EOF
|
||||
'
|
||||
|
||||
test_expect_success 'test' '
|
||||
grep "grape" ~/.f
|
||||
'
|
|
@ -1,21 +0,0 @@
|
|||
test_description='relink overwrites symlink'
|
||||
. '../test-lib.bash'
|
||||
|
||||
test_expect_success 'setup' '
|
||||
echo "apple" > ${DOTFILES}/f &&
|
||||
echo "grape" > ~/f &&
|
||||
ln -s ~/f ~/.f
|
||||
'
|
||||
|
||||
test_expect_success 'run' '
|
||||
run_dotbot <<EOF
|
||||
- link:
|
||||
~/.f:
|
||||
path: f
|
||||
relink: true
|
||||
EOF
|
||||
'
|
||||
|
||||
test_expect_success 'test' '
|
||||
grep "apple" ~/.f
|
||||
'
|
|
@ -1,32 +0,0 @@
|
|||
test_description='relink relative does not incorrectly relink file'
|
||||
. '../test-lib.bash'
|
||||
|
||||
test_expect_success 'setup' '
|
||||
echo "apple" > ${DOTFILES}/f &&
|
||||
echo "grape" > ~/.f
|
||||
'
|
||||
|
||||
test_expect_success 'run' '
|
||||
run_dotbot <<EOF
|
||||
- link:
|
||||
~/.folder/f:
|
||||
path: f
|
||||
create: true
|
||||
relative: true
|
||||
EOF
|
||||
'
|
||||
|
||||
# these are done in a single block because they run in a subshell, and it
|
||||
# wouldn't be possible to access `$mtime` outside of the subshell
|
||||
test_expect_success 'test' '
|
||||
mtime=$(stat ~/.folder/f | grep Modify)
|
||||
run_dotbot <<EOF
|
||||
- link:
|
||||
~/.folder/f:
|
||||
path: f
|
||||
create: true
|
||||
relative: true
|
||||
relink: true
|
||||
EOF
|
||||
[[ "$mtime" == "$(stat ~/.folder/f | grep Modify)" ]]
|
||||
'
|
|
@ -1,22 +0,0 @@
|
|||
test_description='--only does not skip defaults'
|
||||
. '../test-lib.bash'
|
||||
|
||||
test_expect_success 'setup' '
|
||||
echo "apple" > ${DOTFILES}/x
|
||||
'
|
||||
|
||||
test_expect_success 'run' '
|
||||
run_dotbot --only link <<EOF
|
||||
- defaults:
|
||||
link:
|
||||
create: true
|
||||
- shell:
|
||||
- echo "pear" > ~/z
|
||||
- link:
|
||||
~/d/x: x
|
||||
EOF
|
||||
'
|
||||
|
||||
test_expect_success 'test' '
|
||||
grep "apple" ~/d/x && ! test -f ~/z
|
||||
'
|
|
@ -1,20 +0,0 @@
|
|||
test_description='--only with multiple arguments'
|
||||
. '../test-lib.bash'
|
||||
|
||||
test_expect_success 'setup' '
|
||||
ln -s ${DOTFILES}/nonexistent ~/bad && touch ${DOTFILES}/y
|
||||
'
|
||||
|
||||
test_expect_success 'run' '
|
||||
run_dotbot --only clean shell <<EOF
|
||||
- clean: ["~"]
|
||||
- shell:
|
||||
- echo "x" > ~/x
|
||||
- link:
|
||||
~/y: y
|
||||
EOF
|
||||
'
|
||||
|
||||
test_expect_success 'test' '
|
||||
! test -f ~/bad && grep "x" ~/x && ! test -f ~/y
|
||||
'
|
|
@ -1,32 +0,0 @@
|
|||
test_description='--only'
|
||||
. '../test-lib.bash'
|
||||
|
||||
test_expect_success 'setup' '
|
||||
echo "apple" > ${DOTFILES}/x
|
||||
'
|
||||
|
||||
test_expect_success 'run' '
|
||||
run_dotbot --only shell <<EOF
|
||||
- shell:
|
||||
- echo "pear" > ~/y
|
||||
- link:
|
||||
~/x: x
|
||||
EOF
|
||||
'
|
||||
|
||||
test_expect_success 'test' '
|
||||
grep "pear" ~/y && ! test -f ~/x
|
||||
'
|
||||
|
||||
test_expect_success 'run 2' '
|
||||
run_dotbot --only link <<EOF
|
||||
- shell:
|
||||
- echo "pear" > ~/z
|
||||
- link:
|
||||
~/x: x
|
||||
EOF
|
||||
'
|
||||
|
||||
test_expect_success 'test' '
|
||||
grep "apple" ~/x && ! test -f ~/z
|
||||
'
|
|
@ -1,29 +0,0 @@
|
|||
test_description='directory-based plugin loading works'
|
||||
. '../test-lib.bash'
|
||||
|
||||
test_expect_success 'setup' '
|
||||
mkdir ${DOTFILES}/plugins
|
||||
cat > ${DOTFILES}/plugins/test.py <<EOF
|
||||
import dotbot
|
||||
import os.path
|
||||
|
||||
class Test(dotbot.Plugin):
|
||||
def can_handle(self, directive):
|
||||
return directive == "test"
|
||||
|
||||
def handle(self, directive, data):
|
||||
with open(os.path.expanduser("~/flag"), "w") as f:
|
||||
f.write("it works")
|
||||
return True
|
||||
EOF
|
||||
'
|
||||
|
||||
test_expect_success 'run' '
|
||||
run_dotbot --plugin-dir ${DOTFILES}/plugins <<EOF
|
||||
- test: ~
|
||||
EOF
|
||||
'
|
||||
|
||||
test_expect_success 'test' '
|
||||
grep "it works" ~/flag
|
||||
'
|
|
@ -1,17 +0,0 @@
|
|||
test_description='can disable built-in plugins'
|
||||
. '../test-lib.bash'
|
||||
|
||||
test_expect_success 'setup' '
|
||||
echo "apple" > ${DOTFILES}/f
|
||||
'
|
||||
|
||||
test_expect_failure 'run' '
|
||||
run_dotbot --disable-built-in-plugins <<EOF
|
||||
- link:
|
||||
~/.f: f
|
||||
EOF
|
||||
'
|
||||
|
||||
test_expect_failure 'test' '
|
||||
test -f ~/.f
|
||||
'
|
|
@ -1,64 +0,0 @@
|
|||
test_description='plugin loading works'
|
||||
. '../test-lib.bash'
|
||||
|
||||
test_expect_success 'setup 1' '
|
||||
cat > ${DOTFILES}/test.py <<EOF
|
||||
import dotbot
|
||||
import os.path
|
||||
|
||||
class Test(dotbot.Plugin):
|
||||
def can_handle(self, directive):
|
||||
return directive == "test"
|
||||
|
||||
def handle(self, directive, data):
|
||||
with open(os.path.expanduser("~/flag"), "w") as f:
|
||||
f.write("it works")
|
||||
return True
|
||||
EOF
|
||||
'
|
||||
|
||||
test_expect_success 'run 1' '
|
||||
run_dotbot --plugin ${DOTFILES}/test.py <<EOF
|
||||
- test: ~
|
||||
EOF
|
||||
'
|
||||
|
||||
test_expect_success 'test 1' '
|
||||
grep "it works" ~/flag
|
||||
'
|
||||
|
||||
test_expect_success 'setup 2' '
|
||||
rm ${DOTFILES}/test.py;
|
||||
cat > ${DOTFILES}/test.py <<EOF
|
||||
import dotbot
|
||||
import os.path
|
||||
|
||||
class Test(dotbot.Plugin):
|
||||
def can_handle(self, directive):
|
||||
return directive == "test"
|
||||
|
||||
def handle(self, directive, data):
|
||||
self._log.debug("Attempting to get options from Context")
|
||||
options = self._context.options()
|
||||
if len(options.plugins) != 1:
|
||||
self._log.debug("Context.options.plugins length is %i, expected 1" % len(options.plugins))
|
||||
return False
|
||||
if not options.plugins[0].endswith("test.py"):
|
||||
self._log.debug("Context.options.plugins[0] is %s, expected end with test.py" % options.plugins[0])
|
||||
return False
|
||||
|
||||
with open(os.path.expanduser("~/flag"), "w") as f:
|
||||
f.write("it works")
|
||||
return True
|
||||
EOF
|
||||
'
|
||||
|
||||
test_expect_success 'run 2' '
|
||||
run_dotbot --plugin ${DOTFILES}/test.py <<EOF
|
||||
- test: ~
|
||||
EOF
|
||||
'
|
||||
|
||||
test_expect_success 'test 2' '
|
||||
grep "it works" ~/flag
|
||||
'
|
|
@ -1,11 +0,0 @@
|
|||
test_description='shell command stdout works'
|
||||
. '../test-lib.bash'
|
||||
|
||||
test_expect_success 'run' '
|
||||
(run_dotbot | grep "^apple") <<EOF
|
||||
- shell:
|
||||
-
|
||||
command: echo apple
|
||||
stdout: true
|
||||
EOF
|
||||
'
|
|
@ -1,79 +0,0 @@
|
|||
test_description='cli options can override config file'
|
||||
. '../test-lib.bash'
|
||||
|
||||
test_expect_success 'run 1' '
|
||||
(run_dotbot -vv | (grep "^apple")) <<EOF
|
||||
- shell:
|
||||
-
|
||||
command: echo apple
|
||||
EOF
|
||||
'
|
||||
|
||||
test_expect_success 'run 2' '
|
||||
(run_dotbot -vv | (grep "^apple")) <<EOF
|
||||
- shell:
|
||||
-
|
||||
command: echo apple
|
||||
stdout: false
|
||||
EOF
|
||||
'
|
||||
|
||||
test_expect_success 'run 3' '
|
||||
(run_dotbot -vv | (grep "^apple")) <<EOF
|
||||
- defaults:
|
||||
shell:
|
||||
stdout: false
|
||||
- shell:
|
||||
- command: echo apple
|
||||
EOF
|
||||
'
|
||||
|
||||
# Control to make sure stderr redirection is working as expected
|
||||
test_expect_failure 'run 4' '
|
||||
(run_dotbot -vv | (grep "^apple")) <<EOF
|
||||
- shell:
|
||||
- command: echo apple >&2
|
||||
EOF
|
||||
'
|
||||
|
||||
test_expect_success 'run 5' '
|
||||
(run_dotbot -vv 2>&1 | (grep "^apple")) <<EOF
|
||||
- shell:
|
||||
- command: echo apple >&2
|
||||
EOF
|
||||
'
|
||||
|
||||
test_expect_success 'run 6' '
|
||||
(run_dotbot -vv 2>&1 | (grep "^apple")) <<EOF
|
||||
- shell:
|
||||
-
|
||||
command: echo apple >&2
|
||||
stdout: false
|
||||
EOF
|
||||
'
|
||||
|
||||
test_expect_success 'run 7' '
|
||||
(run_dotbot -vv 2>&1 | (grep "^apple")) <<EOF
|
||||
- defaults:
|
||||
shell:
|
||||
stdout: false
|
||||
- shell:
|
||||
- command: echo apple >&2
|
||||
EOF
|
||||
'
|
||||
|
||||
# Make sure that we must use verbose level 2
|
||||
# This preserves backwards compatability
|
||||
test_expect_failure 'run 8' '
|
||||
(run_dotbot -v | (grep "^apple")) <<EOF
|
||||
- shell:
|
||||
- command: echo apple
|
||||
EOF
|
||||
'
|
||||
|
||||
test_expect_failure 'run 9' '
|
||||
(run_dotbot -v | (grep "^apple")) <<EOF
|
||||
- shell:
|
||||
- command: echo apple >&2
|
||||
EOF
|
||||
'
|
|
@ -1,22 +0,0 @@
|
|||
test_description='shell command stdout works in compact form'
|
||||
. '../test-lib.bash'
|
||||
|
||||
test_expect_success 'run' '
|
||||
(run_dotbot | grep "^apple") <<EOF
|
||||
- defaults:
|
||||
shell:
|
||||
stdout: true
|
||||
- shell:
|
||||
- echo apple
|
||||
EOF
|
||||
'
|
||||
|
||||
test_expect_success 'run 2' '
|
||||
(run_dotbot | grep "^apple") <<EOF
|
||||
- defaults:
|
||||
shell:
|
||||
stdout: true
|
||||
- shell:
|
||||
- [echo apple, "echoing message"]
|
||||
EOF
|
||||
'
|
|
@ -1,9 +0,0 @@
|
|||
test_description='shell command stdout disabled by default'
|
||||
. '../test-lib.bash'
|
||||
|
||||
test_expect_success 'run' '
|
||||
(run_dotbot | (! grep "^banana")) <<EOF
|
||||
- shell:
|
||||
- echo banana
|
||||
EOF
|
||||
'
|
|
@ -1,14 +0,0 @@
|
|||
test_description='shell command can override default'
|
||||
. '../test-lib.bash'
|
||||
|
||||
test_expect_success 'run' '
|
||||
(run_dotbot | (! grep "^apple")) <<EOF
|
||||
- defaults:
|
||||
shell:
|
||||
stdout: true
|
||||
- shell:
|
||||
-
|
||||
command: echo apple
|
||||
stdout: false
|
||||
EOF
|
||||
'
|
|
@ -1,30 +0,0 @@
|
|||
test_description='shell command can be suppressed in output'
|
||||
. '../test-lib.bash'
|
||||
|
||||
# when not quiet, expect to see command that was run
|
||||
test_expect_success 'run' '
|
||||
(run_dotbot | grep "echo banana") <<EOF
|
||||
- shell:
|
||||
- command: echo banana
|
||||
description: echoing a thing...
|
||||
EOF
|
||||
'
|
||||
|
||||
# when quiet, expect command to be suppressed
|
||||
test_expect_success 'run 2' '
|
||||
(run_dotbot | (! grep "echo banana")) <<EOF
|
||||
- shell:
|
||||
- command: echo banana
|
||||
description: echoing a thing...
|
||||
quiet: true
|
||||
EOF
|
||||
'
|
||||
|
||||
# when no description, expect to see command
|
||||
test_expect_success 'run 3' '
|
||||
(run_dotbot | grep "echo banana") <<EOF
|
||||
- shell:
|
||||
- command: echo banana
|
||||
quiet: true
|
||||
EOF
|
||||
'
|
|
@ -1,22 +0,0 @@
|
|||
test_description='install shim works'
|
||||
. '../test-lib.bash'
|
||||
|
||||
test_expect_success 'setup' '
|
||||
cd ${DOTFILES}
|
||||
git init
|
||||
git submodule add ${BASEDIR} dotbot
|
||||
cp ./dotbot/tools/git-submodule/install .
|
||||
echo "pear" > ${DOTFILES}/foo
|
||||
'
|
||||
|
||||
test_expect_success 'run' '
|
||||
cat > ${DOTFILES}/install.conf.yaml <<EOF
|
||||
- link:
|
||||
~/.foo: foo
|
||||
EOF
|
||||
${DOTFILES}/install
|
||||
'
|
||||
|
||||
test_expect_success 'test' '
|
||||
grep "pear" ~/.foo
|
||||
'
|
Loading…
Reference in a new issue