Git uses system-wide and user-wide configurations per default and these can interfere with our tests. Keep `git` from using them by setting the according environment variables. This might also help with other tools which access user's home directory.
105 lines
2.8 KiB
Bash
105 lines
2.8 KiB
Bash
unset BASH_IT_THEME
|
|
unset GIT_HOSTING
|
|
unset NGINX_PATH
|
|
unset IRC_CLIENT
|
|
unset TODO
|
|
unset SCM_CHECK
|
|
unset BASH_IT_AUTOMATIC_RELOAD_AFTER_CONFIG_CHANGE
|
|
|
|
BASH_IT_TEST_DIR="${BATS_TMPDIR}/.bash_it"
|
|
|
|
# guard against executing this block twice due to bats internals
|
|
if [ "$BASH_IT_ROOT" != "${BASH_IT_TEST_DIR}/root" ]; then
|
|
export BASH_IT_ROOT="${BASH_IT_TEST_DIR}/root"
|
|
export BASH_IT=$BASH_IT_TEST_DIR
|
|
fi
|
|
|
|
export TEST_MAIN_DIR="${BATS_TEST_DIRNAME}/.."
|
|
export TEST_DEPS_DIR="${TEST_DEPS_DIR-${TEST_MAIN_DIR}/../test_lib}"
|
|
|
|
# be independent of git's system configuration
|
|
export GIT_CONFIG_NOSYSTEM
|
|
|
|
# Some tools, e.g. `git` use configuration files from the $HOME directory,
|
|
# which interferes with our tests. The only way to keep `git` from doing this
|
|
# seems to set HOME explicitly to a separate location.
|
|
# Refer to https://git-scm.com/docs/git-config#FILES.
|
|
unset XDG_CONFIG_HOME
|
|
export HOME="${BATS_TMPDIR}/home"
|
|
mkdir -p "${HOME}"
|
|
|
|
# For `git` tests to run well, user name and email need to be set.
|
|
# Refer to https://git-scm.com/docs/git-commit#_commit_information.
|
|
# This goes to the test-specific config, due to the $HOME overridden above.
|
|
git config --global user.name "John Doe"
|
|
git config --global user.email "johndoe@example.com"
|
|
|
|
load "${TEST_DEPS_DIR}/bats-support/load.bash"
|
|
load "${TEST_DEPS_DIR}/bats-assert/load.bash"
|
|
load "${TEST_DEPS_DIR}/bats-file/load.bash"
|
|
|
|
local_setup() {
|
|
true
|
|
}
|
|
|
|
local_teardown() {
|
|
true
|
|
}
|
|
|
|
setup() {
|
|
mkdir -p -- "${BASH_IT_ROOT}"
|
|
|
|
local_setup
|
|
}
|
|
|
|
teardown() {
|
|
local_teardown
|
|
|
|
rm -rf "${BASH_IT_TEST_DIR}"
|
|
}
|
|
|
|
# Fail and display path of the link if it does not exist. Also fails
|
|
# if the path exists, but is not a link.
|
|
# This function is the logical complement of `assert_file_not_exist'.
|
|
# There is no dedicated function for checking that a link does not exist.
|
|
#
|
|
# Globals:
|
|
# BATSLIB_FILE_PATH_REM
|
|
# BATSLIB_FILE_PATH_ADD
|
|
# Arguments:
|
|
# $1 - path
|
|
# Returns:
|
|
# 0 - link exists and is a link
|
|
# 1 - otherwise
|
|
# Outputs:
|
|
# STDERR - details, on failure
|
|
assert_link_exist() {
|
|
local -r file="$1"
|
|
local -r target="$2"
|
|
if [[ ! -L "$file" ]]; then
|
|
local -r rem="$BATSLIB_FILE_PATH_REM"
|
|
local -r add="$BATSLIB_FILE_PATH_ADD"
|
|
if [[ -e "$file" ]]; then
|
|
batslib_print_kv_single 4 'path' "${file/$rem/$add}" \
|
|
| batslib_decorate 'exists, but is not a link' \
|
|
| fail
|
|
else
|
|
batslib_print_kv_single 4 'path' "${file/$rem/$add}" \
|
|
| batslib_decorate 'link does not exist' \
|
|
| fail
|
|
fi
|
|
else
|
|
if [ -n "$target" ]; then
|
|
local link_target=''
|
|
link_target=$(readlink "$file")
|
|
if [[ "$link_target" != "$target" ]]; then
|
|
batslib_print_kv_single_or_multi 8 'path' "${file/$rem/$add}" \
|
|
'expected' "$target" \
|
|
'actual' "$link_target" \
|
|
| batslib_decorate 'link exists, but does not point to target file' \
|
|
| fail
|
|
fi
|
|
fi
|
|
fi
|
|
}
|