add bash-it

This commit is contained in:
2022-05-05 22:20:02 +02:00
parent 6a62a35d0d
commit 43701f0590
490 changed files with 33047 additions and 0 deletions
+343
View File
@@ -0,0 +1,343 @@
# shellcheck shell=bats
load "${MAIN_BASH_IT_DIR?}/test/test_helper.bash"
function local_setup_file() {
# Copy the test fixture to the Bash-it folder
cp -fRP "${BASH_IT?}/test/fixtures/bash_it"/* "${BASH_IT?}/" || true
# don't load any libraries as the tests here test the *whole* kit
}
@test "bash-it: verify that the test fixture is available" {
assert_file_exist "$BASH_IT/aliases/available/a.aliases.bash"
assert_file_exist "$BASH_IT/aliases/available/b.aliases.bash"
}
@test "bash-it: load aliases in order" {
mkdir -p $BASH_IT/aliases/enabled
mkdir -p $BASH_IT/plugins/enabled
ln -s $BASH_IT/plugins/available/base.plugin.bash $BASH_IT/plugins/enabled/250---base.plugin.bash
assert_link_exist "$BASH_IT/plugins/enabled/250---base.plugin.bash"
ln -s $BASH_IT/aliases/available/a.aliases.bash $BASH_IT/aliases/enabled/150---a.aliases.bash
assert_link_exist "$BASH_IT/aliases/enabled/150---a.aliases.bash"
ln -s $BASH_IT/aliases/available/b.aliases.bash $BASH_IT/aliases/enabled/150---b.aliases.bash
assert_link_exist "$BASH_IT/aliases/enabled/150---b.aliases.bash"
# The `test_alias` alias should not exist
run alias test_alias &> /dev/null
assert_failure
load "$BASH_IT/bash_it.sh"
run alias test_alias &> /dev/null
assert_success
assert_line -n 0 "alias test_alias='b'"
}
@test "bash-it: load aliases in priority order" {
mkdir -p $BASH_IT/aliases/enabled
mkdir -p $BASH_IT/plugins/enabled
ln -s $BASH_IT/plugins/available/base.plugin.bash $BASH_IT/plugins/enabled/250---base.plugin.bash
assert_link_exist "$BASH_IT/plugins/enabled/250---base.plugin.bash"
ln -s $BASH_IT/aliases/available/a.aliases.bash $BASH_IT/aliases/enabled/175---a.aliases.bash
assert_link_exist "$BASH_IT/aliases/enabled/175---a.aliases.bash"
ln -s $BASH_IT/aliases/available/b.aliases.bash $BASH_IT/aliases/enabled/150---b.aliases.bash
assert_link_exist "$BASH_IT/aliases/enabled/150---b.aliases.bash"
# The `test_alias` alias should not exist
run alias test_alias &> /dev/null
assert_failure
load "$BASH_IT/bash_it.sh"
run alias test_alias &> /dev/null
assert_success
assert_line -n 0 "alias test_alias='a'"
}
@test "bash-it: load aliases and plugins in priority order" {
mkdir -p $BASH_IT/aliases/enabled
mkdir -p $BASH_IT/plugins/enabled
ln -s $BASH_IT/plugins/available/base.plugin.bash $BASH_IT/plugins/enabled/250---base.plugin.bash
assert_link_exist "$BASH_IT/plugins/enabled/250---base.plugin.bash"
ln -s $BASH_IT/aliases/available/a.aliases.bash $BASH_IT/aliases/enabled/150---a.aliases.bash
assert_link_exist "$BASH_IT/aliases/enabled/150---a.aliases.bash"
ln -s $BASH_IT/aliases/available/b.aliases.bash $BASH_IT/aliases/enabled/150---b.aliases.bash
assert_link_exist "$BASH_IT/aliases/enabled/150---b.aliases.bash"
ln -s $BASH_IT/plugins/available/c.plugin.bash $BASH_IT/plugins/enabled/250---c.plugin.bash
assert_link_exist "$BASH_IT/plugins/enabled/250---c.plugin.bash"
# The `test_alias` alias should not exist
run alias test_alias &> /dev/null
assert_failure
load "$BASH_IT/bash_it.sh"
run alias test_alias &> /dev/null
assert_success
assert_line -n 0 "alias test_alias='c'"
}
@test "bash-it: load aliases, plugins and completions in priority order" {
mkdir -p $BASH_IT/aliases/enabled
mkdir -p $BASH_IT/plugins/enabled
mkdir -p $BASH_IT/completion/enabled
ln -s $BASH_IT/plugins/available/base.plugin.bash $BASH_IT/plugins/enabled/250---base.plugin.bash
assert_link_exist "$BASH_IT/plugins/enabled/250---base.plugin.bash"
ln -s $BASH_IT/aliases/available/a.aliases.bash $BASH_IT/aliases/enabled/150---a.aliases.bash
assert_link_exist "$BASH_IT/aliases/enabled/150---a.aliases.bash"
ln -s $BASH_IT/aliases/available/b.aliases.bash $BASH_IT/completion/enabled/350---b.completion.bash
assert_link_exist "$BASH_IT/completion/enabled/350---b.completion.bash"
ln -s $BASH_IT/plugins/available/c.plugin.bash $BASH_IT/plugins/enabled/250---c.plugin.bash
assert_link_exist "$BASH_IT/plugins/enabled/250---c.plugin.bash"
# The `test_alias` alias should not exist
run alias test_alias &> /dev/null
assert_failure
load "$BASH_IT/bash_it.sh"
run alias test_alias &> /dev/null
assert_success
# "b" wins since completions are loaded last in the old directory structure
assert_line -n 0 "alias test_alias='b'"
}
@test "bash-it: load aliases, plugins and completions in priority order, even if the priority says otherwise" {
mkdir -p $BASH_IT/aliases/enabled
mkdir -p $BASH_IT/plugins/enabled
mkdir -p $BASH_IT/completion/enabled
ln -s $BASH_IT/plugins/available/base.plugin.bash $BASH_IT/plugins/enabled/250---base.plugin.bash
assert_link_exist "$BASH_IT/plugins/enabled/250---base.plugin.bash"
ln -s $BASH_IT/aliases/available/a.aliases.bash $BASH_IT/aliases/enabled/450---a.aliases.bash
assert_link_exist "$BASH_IT/aliases/enabled/450---a.aliases.bash"
ln -s $BASH_IT/aliases/available/b.aliases.bash $BASH_IT/completion/enabled/350---b.completion.bash
assert_link_exist "$BASH_IT/completion/enabled/350---b.completion.bash"
ln -s $BASH_IT/plugins/available/c.plugin.bash $BASH_IT/plugins/enabled/950---c.plugin.bash
assert_link_exist "$BASH_IT/plugins/enabled/950---c.plugin.bash"
# The `test_alias` alias should not exist
run alias test_alias &> /dev/null
assert_failure
load "$BASH_IT/bash_it.sh"
run alias test_alias &> /dev/null
assert_success
# "b" wins since completions are loaded last in the old directory structure
assert_line -n 0 "alias test_alias='b'"
}
@test "bash-it: load aliases and plugins in priority order, with one alias higher than plugins" {
mkdir -p $BASH_IT/aliases/enabled
mkdir -p $BASH_IT/plugins/enabled
ln -s $BASH_IT/plugins/available/base.plugin.bash $BASH_IT/plugins/enabled/250---base.plugin.bash
assert_link_exist "$BASH_IT/plugins/enabled/250---base.plugin.bash"
ln -s $BASH_IT/aliases/available/a.aliases.bash $BASH_IT/aliases/enabled/350---a.aliases.bash
assert_link_exist "$BASH_IT/aliases/enabled/350---a.aliases.bash"
ln -s $BASH_IT/aliases/available/b.aliases.bash $BASH_IT/aliases/enabled/150---b.aliases.bash
assert_link_exist "$BASH_IT/aliases/enabled/150---b.aliases.bash"
ln -s $BASH_IT/plugins/available/c.plugin.bash $BASH_IT/plugins/enabled/250---c.plugin.bash
assert_link_exist "$BASH_IT/plugins/enabled/250---c.plugin.bash"
# The `test_alias` alias should not exist
run alias test_alias &> /dev/null
assert_failure
load "$BASH_IT/bash_it.sh"
run alias test_alias &> /dev/null
assert_success
# This will be c, loaded from the c plugin, since the individual directories
# are loaded one by one.
assert_line -n 0 "alias test_alias='c'"
}
@test "bash-it: load global aliases in order" {
mkdir -p $BASH_IT/enabled
ln -s $BASH_IT/plugins/available/base.plugin.bash $BASH_IT/enabled/250---base.plugin.bash
assert_link_exist "$BASH_IT/enabled/250---base.plugin.bash"
ln -s $BASH_IT/aliases/available/a.aliases.bash $BASH_IT/enabled/150---a.aliases.bash
assert_link_exist "$BASH_IT/enabled/150---a.aliases.bash"
ln -s $BASH_IT/aliases/available/b.aliases.bash $BASH_IT/enabled/150---b.aliases.bash
assert_link_exist "$BASH_IT/enabled/150---b.aliases.bash"
# The `test_alias` alias should not exist
run alias test_alias &> /dev/null
assert_failure
load "$BASH_IT/bash_it.sh"
run alias test_alias &> /dev/null
assert_success
assert_line -n 0 "alias test_alias='b'"
}
@test "bash-it: load global aliases in priority order" {
mkdir -p $BASH_IT/enabled
ln -s $BASH_IT/plugins/available/base.plugin.bash $BASH_IT/enabled/250---base.plugin.bash
assert_link_exist "$BASH_IT/enabled/250---base.plugin.bash"
ln -s $BASH_IT/aliases/available/a.aliases.bash $BASH_IT/enabled/175---a.aliases.bash
assert_link_exist "$BASH_IT/enabled/175---a.aliases.bash"
ln -s $BASH_IT/aliases/available/b.aliases.bash $BASH_IT/enabled/150---b.aliases.bash
assert_link_exist "$BASH_IT/enabled/150---b.aliases.bash"
# The `test_alias` alias should not exist
run alias test_alias &> /dev/null
assert_failure
load "$BASH_IT/bash_it.sh"
run alias test_alias &> /dev/null
assert_success
assert_line -n 0 "alias test_alias='a'"
}
@test "bash-it: load global aliases and plugins in priority order" {
mkdir -p $BASH_IT/enabled
ln -s $BASH_IT/plugins/available/base.plugin.bash $BASH_IT/enabled/250---base.plugin.bash
assert_link_exist "$BASH_IT/enabled/250---base.plugin.bash"
ln -s $BASH_IT/aliases/available/a.aliases.bash $BASH_IT/enabled/150---a.aliases.bash
assert_link_exist "$BASH_IT/enabled/150---a.aliases.bash"
ln -s $BASH_IT/aliases/available/b.aliases.bash $BASH_IT/enabled/150---b.aliases.bash
assert_link_exist "$BASH_IT/enabled/150---b.aliases.bash"
ln -s $BASH_IT/plugins/available/c.plugin.bash $BASH_IT/enabled/250---c.plugin.bash
assert_link_exist "$BASH_IT/enabled/250---c.plugin.bash"
# The `test_alias` alias should not exist
run alias test_alias &> /dev/null
assert_failure
load "$BASH_IT/bash_it.sh"
run alias test_alias &> /dev/null
assert_success
assert_line -n 0 "alias test_alias='c'"
}
@test "bash-it: load global aliases and plugins in priority order, with one alias higher than plugins" {
mkdir -p $BASH_IT/enabled
ln -s $BASH_IT/plugins/available/base.plugin.bash $BASH_IT/enabled/250---base.plugin.bash
assert_link_exist "$BASH_IT/enabled/250---base.plugin.bash"
ln -s $BASH_IT/aliases/available/a.aliases.bash $BASH_IT/enabled/350---a.aliases.bash
assert_link_exist "$BASH_IT/enabled/350---a.aliases.bash"
ln -s $BASH_IT/aliases/available/b.aliases.bash $BASH_IT/enabled/150---b.aliases.bash
assert_link_exist "$BASH_IT/enabled/150---b.aliases.bash"
ln -s $BASH_IT/plugins/available/c.plugin.bash $BASH_IT/enabled/250---c.plugin.bash
assert_link_exist "$BASH_IT/enabled/250---c.plugin.bash"
# The `test_alias` alias should not exist
run alias test_alias &> /dev/null
assert_failure
load "$BASH_IT/bash_it.sh"
run alias test_alias &> /dev/null
assert_success
# This will be a, loaded from the a aliases, since the global directory
# loads all component types at once
assert_line -n 0 "alias test_alias='a'"
}
@test "bash-it: load global aliases and plugins in priority order, individual old directories are loaded later" {
mkdir -p $BASH_IT/enabled
mkdir -p $BASH_IT/aliases/enabled
ln -s $BASH_IT/plugins/available/base.plugin.bash $BASH_IT/enabled/250---base.plugin.bash
assert_link_exist "$BASH_IT/enabled/250---base.plugin.bash"
ln -s $BASH_IT/aliases/available/a.aliases.bash $BASH_IT/enabled/350---a.aliases.bash
assert_link_exist "$BASH_IT/enabled/350---a.aliases.bash"
ln -s $BASH_IT/aliases/available/b.aliases.bash $BASH_IT/enabled/150---b.aliases.bash
assert_link_exist "$BASH_IT/enabled/150---b.aliases.bash"
ln -s $BASH_IT/plugins/available/c.plugin.bash $BASH_IT/enabled/250---c.plugin.bash
assert_link_exist "$BASH_IT/enabled/250---c.plugin.bash"
# Add one file in the old directory structure
ln -s $BASH_IT/aliases/available/b.aliases.bash $BASH_IT/aliases/enabled/150---b.aliases.bash
assert_link_exist "$BASH_IT/aliases/enabled/150---b.aliases.bash"
# The `test_alias` alias should not exist
run alias test_alias &> /dev/null
assert_failure
load "$BASH_IT/bash_it.sh"
run alias test_alias &> /dev/null
assert_success
# This will be "b", loaded from the b aliases in the individual directory, since
# the individual directories are loaded after the global one.
assert_line -n 0 "alias test_alias='b'"
}
@test "bash-it: load enabled aliases from new structure, priority-based" {
mkdir -p $BASH_IT/enabled
ln -s $BASH_IT/aliases/available/atom.aliases.bash $BASH_IT/enabled/150---atom.aliases.bash
assert_link_exist "$BASH_IT/enabled/150---atom.aliases.bash"
ln -s $BASH_IT/plugins/available/base.plugin.bash $BASH_IT/enabled/250---base.plugin.bash
assert_link_exist "$BASH_IT/enabled/250---base.plugin.bash"
# The `ah` alias should not exist
run alias ah &> /dev/null
assert_failure
load "$BASH_IT/bash_it.sh"
run alias ah &> /dev/null
assert_success
}
@test "bash-it: load enabled aliases from old structure, priority-based" {
mkdir -p $BASH_IT/aliases/enabled
mkdir -p $BASH_IT/plugins/enabled
ln -s $BASH_IT/aliases/available/atom.aliases.bash $BASH_IT/aliases/enabled/150---atom.aliases.bash
assert_link_exist "$BASH_IT/aliases/enabled/150---atom.aliases.bash"
ln -s $BASH_IT/plugins/available/base.plugin.bash $BASH_IT/plugins/enabled/250---base.plugin.bash
assert_link_exist "$BASH_IT/plugins/enabled/250---base.plugin.bash"
# The `ah` alias should not exist
run alias ah &> /dev/null
assert_failure
load "$BASH_IT/bash_it.sh"
run alias ah &> /dev/null
assert_success
}
@test "bash-it: load enabled aliases from old structure, without priorities" {
mkdir -p $BASH_IT/aliases/enabled
mkdir -p $BASH_IT/plugins/enabled
ln -s $BASH_IT/aliases/available/atom.aliases.bash $BASH_IT/aliases/enabled/atom.aliases.bash
assert_link_exist "$BASH_IT/aliases/enabled/atom.aliases.bash"
ln -s $BASH_IT/plugins/available/base.plugin.bash $BASH_IT/plugins/enabled/base.plugin.bash
assert_link_exist "$BASH_IT/plugins/enabled/base.plugin.bash"
# The `ah` alias should not exist
run alias ah &> /dev/null
assert_failure
load "$BASH_IT/bash_it.sh"
run alias ah &> /dev/null
assert_success
}
@@ -0,0 +1,30 @@
# shellcheck shell=bats
load "${MAIN_BASH_IT_DIR?}/test/test_helper.bash"
function local_setup_file() {
setup_libs "helpers"
# Load something, anything...
load ../../completion/available/capistrano.completion
}
@test "alias-completion: See that aliases with double quotes and brackets do not break the plugin" {
alias gtest="git log --graph --pretty=format:'%C(bold)%h%Creset%C(magenta)%d%Creset %s %C(yellow)<%an> %C(cyan)(%cr)%Creset' --abbrev-commit --date=relative"
run load "${BASH_IT?}/completion/available/aliases.completion.bash"
assert_success
}
@test "alias-completion: See that aliases with single quotes and brackets do not break the plugin" {
alias gtest='git log --graph --pretty=format:"%C(bold)%h%Creset%C(magenta)%d%Creset %s %C(yellow)<%an> %C(cyan)(%cr)%Creset" --abbrev-commit --date=relative'
run load "${BASH_IT?}/completion/available/aliases.completion.bash"
assert_success
}
@test "alias-completion: See that having aliased rm command does not output unnecessary output" {
alias rm='rm -v'
run load "${BASH_IT?}/completion/available/aliases.completion.bash"
refute_output
}
@@ -0,0 +1,359 @@
# shellcheck shell=bats
load "${MAIN_BASH_IT_DIR?}/test/test_helper.bash"
function local_setup_file() {
setup_libs "helpers"
load "${BASH_IT?}/completion/available/bash-it.completion.bash"
}
@test "completion bash-it: ensure that the _bash-it function is available" {
run type -t _bash-it
assert_success
assert_output "function"
}
function __check_completion () {
# Get the parameters as a single value
COMP_LINE=$*
# Get the parameters as an array
eval set -- "$@"
COMP_WORDS=("$@")
# Index of the cursor in the line
COMP_POINT=${#COMP_LINE}
# Get the last character of the line that was entered
COMP_LAST=$((${COMP_POINT} - 1))
# If the last character was a space...
if [[ ${COMP_LINE:$COMP_LAST} = ' ' ]]; then
# ...then add an empty array item
COMP_WORDS+=('')
fi
# Word index of the last word
COMP_CWORD=$(( ${#COMP_WORDS[@]} - 1 ))
# Run the Bash-it completion function
_bash-it
# Return the completion output
echo "${COMPREPLY[@]}"
}
@test "completion bash-it: doctor - show options" {
run __check_completion 'bash-it doctor '
assert_line -n 0 "errors warnings all"
}
@test "completion bash-it: help - show options" {
run __check_completion 'bash-it help '
assert_line -n 0 "aliases completions migrate plugins update"
}
@test "completion bash-it: help - aliases v" {
run __check_completion 'bash-it help aliases v'
assert_line -n 0 "vagrant vault vim"
}
@test "completion bash-it: update - show options" {
run __check_completion 'bash-it update '
assert_line -n 0 "stable dev"
}
@test "completion bash-it: update - show optional flags" {
run __check_completion 'bash-it update -'
assert_line -n 0 "-s --silent"
}
@test "completion bash-it: search - show no options" {
run __check_completion 'bash-it search '
assert_line -n 0 ""
}
@test "completion bash-it: migrate - show no options" {
run __check_completion 'bash-it migrate '
assert_line -n 0 ""
}
@test "completion bash-it: show options" {
run __check_completion 'bash-it '
assert_line -n 0 "disable enable help migrate reload restart preview profile doctor search show update version"
}
@test "completion bash-it: bash-ti - show options" {
run __check_completion 'bash-ti '
assert_line -n 0 "disable enable help migrate reload restart preview profile doctor search show update version"
}
@test "completion bash-it: shit - show options" {
run __check_completion 'shit '
assert_line -n 0 "disable enable help migrate reload restart preview profile doctor search show update version"
}
@test "completion bash-it: bashit - show options" {
run __check_completion 'bashit '
assert_line -n 0 "disable enable help migrate reload restart preview profile doctor search show update version"
}
@test "completion bash-it: batshit - show options" {
run __check_completion 'batshit '
assert_line -n 0 "disable enable help migrate reload restart preview profile doctor search show update version"
}
@test "completion bash-it: bash_it - show options" {
run __check_completion 'bash_it '
assert_line -n 0 "disable enable help migrate reload restart preview profile doctor search show update version"
}
@test "completion bash-it: profile - show options" {
run __check_completion 'bash-it profile '
assert_line -n 0 "load save list rm"
}
@test "completion bash-it: profile load - show options" {
run __check_completion 'bash-it profile load '
assert_line -n 0 "default"
}
@test "completion bash-it: show - show options" {
run __check_completion 'bash-it show '
assert_line -n 0 "aliases completions plugins"
}
@test "completion bash-it: enable - show options" {
run __check_completion 'bash-it enable '
assert_line -n 0 "alias completion plugin"
}
@test "completion bash-it: enable - show options a" {
run __check_completion 'bash-it enable a'
assert_line -n 0 "alias"
}
@test "completion bash-it: disable - show options" {
run __check_completion 'bash-it disable '
assert_line -n 0 "alias completion plugin"
}
@test "completion bash-it: disable - show options a" {
run __check_completion 'bash-it disable a'
assert_line -n 0 "alias"
}
@test "completion bash-it: disable - provide nothing when atom is not enabled" {
run __check_completion 'bash-it disable alias ato'
assert_line -n 0 ""
}
@test "completion bash-it: disable - provide all when atom is not enabled" {
run __check_completion 'bash-it disable alias a'
assert_line -n 0 "all"
}
@test "completion bash-it: disable - provide the a* aliases when atom is enabled with the old location and name" {
ln -s "$BASH_IT/aliases/available/atom.aliases.bash" "$BASH_IT/aliases/enabled/atom.aliases.bash"
assert_link_exist "$BASH_IT/aliases/enabled/atom.aliases.bash"
ln -s "$BASH_IT/completion/available/apm.completion.bash" "$BASH_IT/completion/enabled/apm.completion.bash"
assert_link_exist "$BASH_IT/completion/enabled/apm.completion.bash"
run __check_completion 'bash-it disable alias a'
assert_line -n 0 "all atom"
}
@test "completion bash-it: disable - provide the a* aliases when atom is enabled with the old location and priority-based name" {
ln -s "$BASH_IT/aliases/available/atom.aliases.bash" "$BASH_IT/aliases/enabled/150---atom.aliases.bash"
assert_link_exist "$BASH_IT/aliases/enabled/150---atom.aliases.bash"
ln -s "$BASH_IT/completion/available/apm.completion.bash" "$BASH_IT/completion/enabled/350---apm.completion.bash"
assert_link_exist "$BASH_IT/completion/enabled/350---apm.completion.bash"
run __check_completion 'bash-it disable alias a'
assert_line -n 0 "all atom"
}
@test "completion bash-it: disable - provide the a* aliases when atom is enabled with the new location and priority-based name" {
ln -s "$BASH_IT/aliases/available/atom.aliases.bash" "$BASH_IT/enabled/150---atom.aliases.bash"
assert_link_exist "$BASH_IT/enabled/150---atom.aliases.bash"
ln -s "$BASH_IT/completion/available/apm.completion.bash" "$BASH_IT/enabled/350---apm.completion.bash"
assert_link_exist "$BASH_IT/enabled/350---apm.completion.bash"
run __check_completion 'bash-it disable alias a'
assert_line -n 0 "all atom"
}
@test "completion bash-it: disable - provide the docker-machine plugin when docker-machine is enabled with the old location and name" {
ln -s "$BASH_IT/aliases/available/docker-compose.aliases.bash" "$BASH_IT/aliases/enabled/docker-compose.aliases.bash"
assert_link_exist "$BASH_IT/aliases/enabled/docker-compose.aliases.bash"
ln -s "$BASH_IT/plugins/available/docker-machine.plugin.bash" "$BASH_IT/plugins/enabled/docker-machine.plugin.bash"
assert_link_exist "$BASH_IT/plugins/enabled/docker-machine.plugin.bash"
run __check_completion 'bash-it disable plugin docker'
assert_line -n 0 "docker-machine"
}
@test "completion bash-it: disable - provide the docker-machine plugin when docker-machine is enabled with the old location and priority-based name" {
ln -s "$BASH_IT/aliases/available/docker-compose.aliases.bash" "$BASH_IT/aliases/enabled/150---docker-compose.aliases.bash"
assert_link_exist "$BASH_IT/aliases/enabled/150---docker-compose.aliases.bash"
ln -s "$BASH_IT/plugins/available/docker-machine.plugin.bash" "$BASH_IT/plugins/enabled/350---docker-machine.plugin.bash"
assert_link_exist "$BASH_IT/plugins/enabled/350---docker-machine.plugin.bash"
run __check_completion 'bash-it disable plugin docker'
assert_line -n 0 "docker-machine"
}
@test "completion bash-it: disable - provide the docker-machine plugin when docker-machine is enabled with the new location and priority-based name" {
ln -s "$BASH_IT/aliases/available/docker-compose.aliases.bash" "$BASH_IT/enabled/150---docker-compose.aliases.bash"
assert_link_exist "$BASH_IT/enabled/150---docker-compose.aliases.bash"
ln -s "$BASH_IT/plugins/available/docker-machine.plugin.bash" "$BASH_IT/enabled/350---docker-machine.plugin.bash"
assert_link_exist "$BASH_IT/enabled/350---docker-machine.plugin.bash"
run __check_completion 'bash-it disable plugin docker'
assert_line -n 0 "docker-machine"
}
@test "completion bash-it: disable - provide the todo.txt-cli aliases when todo plugin is enabled with the old location and name" {
ln -s "$BASH_IT/aliases/available/todo.txt-cli.aliases.bash" "$BASH_IT/aliases/enabled/todo.txt-cli.aliases.bash"
assert_link_exist "$BASH_IT/aliases/enabled/todo.txt-cli.aliases.bash"
ln -s "$BASH_IT/plugins/available/todo.plugin.bash" "$BASH_IT/plugins/enabled/todo.plugin.bash"
assert_link_exist "$BASH_IT/plugins/enabled/todo.plugin.bash"
run __check_completion 'bash-it disable alias to'
assert_line -n 0 "todo.txt-cli"
}
@test "completion bash-it: disable - provide the todo.txt-cli aliases when todo plugin is enabled with the old location and priority-based name" {
ln -s "$BASH_IT/aliases/available/todo.txt-cli.aliases.bash" "$BASH_IT/aliases/enabled/150---todo.txt-cli.aliases.bash"
assert_link_exist "$BASH_IT/aliases/enabled/150---todo.txt-cli.aliases.bash"
ln -s "$BASH_IT/plugins/available/todo.plugin.bash" "$BASH_IT/plugins/enabled/350---todo.plugin.bash"
assert_link_exist "$BASH_IT/plugins/enabled/350---todo.plugin.bash"
run __check_completion 'bash-it disable alias to'
assert_line -n 0 "todo.txt-cli"
}
@test "completion bash-it: disable - provide the todo.txt-cli aliases when todo plugin is enabled with the new location and priority-based name" {
ln -s "$BASH_IT/aliases/available/todo.txt-cli.aliases.bash" "$BASH_IT/enabled/150---todo.txt-cli.aliases.bash"
assert_link_exist "$BASH_IT/enabled/150---todo.txt-cli.aliases.bash"
ln -s "$BASH_IT/plugins/available/todo.plugin.bash" "$BASH_IT/enabled/350---todo.plugin.bash"
assert_link_exist "$BASH_IT/enabled/350---todo.plugin.bash"
run __check_completion 'bash-it disable alias to'
assert_line -n 0 "todo.txt-cli"
}
@test "completion bash-it: enable - provide the atom aliases when not enabled" {
run __check_completion 'bash-it enable alias ato'
assert_line -n 0 "atom"
}
@test "completion bash-it: enable - provide the a* aliases when not enabled" {
run __check_completion 'bash-it enable alias a'
assert_line -n 0 "all ag ansible apt atom"
}
@test "completion bash-it: enable - provide the a* aliases when atom is enabled with the old location and name" {
ln -s "$BASH_IT/aliases/available/atom.aliases.bash" "$BASH_IT/aliases/enabled/atom.aliases.bash"
assert_link_exist "$BASH_IT/aliases/enabled/atom.aliases.bash"
run __check_completion 'bash-it enable alias a'
assert_line -n 0 "all ag ansible apt"
}
@test "completion bash-it: enable - provide the a* aliases when atom is enabled with the old location and priority-based name" {
ln -s "$BASH_IT/aliases/available/atom.aliases.bash" "$BASH_IT/aliases/enabled/150---atom.aliases.bash"
assert_link_exist "$BASH_IT/aliases/enabled/150---atom.aliases.bash"
run __check_completion 'bash-it enable alias a'
assert_line -n 0 "all ag ansible apt"
}
@test "completion bash-it: enable - provide the a* aliases when atom is enabled with the new location and priority-based name" {
ln -s "$BASH_IT/aliases/available/atom.aliases.bash" "$BASH_IT/enabled/150---atom.aliases.bash"
assert_link_exist "$BASH_IT/enabled/150---atom.aliases.bash"
run __check_completion 'bash-it enable alias a'
assert_line -n 0 "all ag ansible apt"
}
@test "completion bash-it: enable - provide the docker* plugins when docker-compose is enabled with the old location and name" {
ln -s "$BASH_IT/aliases/available/docker-compose.aliases.bash" "$BASH_IT/aliases/enabled/docker-compose.aliases.bash"
assert_link_exist "$BASH_IT/aliases/enabled/docker-compose.aliases.bash"
run __check_completion 'bash-it enable plugin docker'
assert_line -n 0 "docker docker-compose docker-machine"
}
@test "completion bash-it: enable - provide the docker-* plugins when docker-compose is enabled with the old location and priority-based name" {
ln -s "$BASH_IT/aliases/available/docker-compose.aliases.bash" "$BASH_IT/aliases/enabled/150---docker-compose.aliases.bash"
assert_link_exist "$BASH_IT/aliases/enabled/150---docker-compose.aliases.bash"
run __check_completion 'bash-it enable plugin docker'
assert_line -n 0 "docker docker-compose docker-machine"
}
@test "completion bash-it: enable - provide the docker-* plugins when docker-compose is enabled with the new location and priority-based name" {
ln -s "$BASH_IT/aliases/available/docker-compose.aliases.bash" "$BASH_IT/enabled/150---docker-compose.aliases.bash"
assert_link_exist "$BASH_IT/enabled/150---docker-compose.aliases.bash"
run __check_completion 'bash-it enable plugin docker'
assert_line -n 0 "docker docker-compose docker-machine"
}
@test "completion bash-it: enable - provide the docker* completions when docker-compose is enabled with the old location and name" {
ln -s "$BASH_IT/aliases/available/docker-compose.aliases.bash" "$BASH_IT/aliases/enabled/docker-compose.aliases.bash"
assert_link_exist "$BASH_IT/aliases/enabled/docker-compose.aliases.bash"
run __check_completion 'bash-it enable completion docker'
assert_line -n 0 "docker docker-compose docker-machine"
}
@test "completion bash-it: enable - provide the docker* completions when docker-compose is enabled with the old location and priority-based name" {
ln -s "$BASH_IT/aliases/available/docker-compose.aliases.bash" "$BASH_IT/aliases/enabled/150---docker-compose.aliases.bash"
assert_link_exist "$BASH_IT/aliases/enabled/150---docker-compose.aliases.bash"
run __check_completion 'bash-it enable completion docker'
assert_line -n 0 "docker docker-compose docker-machine"
}
@test "completion bash-it: enable - provide the docker* completions when docker-compose is enabled with the new location and priority-based name" {
ln -s "$BASH_IT/aliases/available/docker-compose.aliases.bash" "$BASH_IT/enabled/150---docker-compose.aliases.bash"
assert_link_exist "$BASH_IT/enabled/150---docker-compose.aliases.bash"
run __check_completion 'bash-it enable completion docker'
assert_line -n 0 "docker docker-compose docker-machine"
}
@test "completion bash-it: enable - provide the todo.txt-cli aliases when todo plugin is enabled with the old location and name" {
ln -s "$BASH_IT/plugins/available/todo.plugin.bash" "$BASH_IT/plugins/enabled/todo.plugin.bash"
assert_link_exist "$BASH_IT/plugins/enabled/todo.plugin.bash"
run __check_completion 'bash-it enable alias to'
assert_line -n 0 "todo.txt-cli"
}
@test "completion bash-it: enable - provide the todo.txt-cli aliases when todo plugin is enabled with the old location and priority-based name" {
ln -s "$BASH_IT/plugins/available/todo.plugin.bash" "$BASH_IT/plugins/enabled/350---todo.plugin.bash"
assert_link_exist "$BASH_IT/plugins/enabled/350---todo.plugin.bash"
run __check_completion 'bash-it enable alias to'
assert_line -n 0 "todo.txt-cli"
}
@test "completion bash-it: enable - provide the todo.txt-cli aliases when todo plugin is enabled with the new location and priority-based name" {
ln -s "$BASH_IT/plugins/available/todo.plugin.bash" "$BASH_IT/enabled/350---todo.plugin.bash"
assert_link_exist "$BASH_IT/enabled/350---todo.plugin.bash"
run __check_completion 'bash-it enable alias to'
assert_line -n 0 "todo.txt-cli"
}
+51
View File
@@ -0,0 +1,51 @@
#!/usr/bin/env bash
test_directory="$(cd "$(dirname "$0")" && pwd)"
bats_executable="${test_directory}/../test_lib/bats-core/bin/bats"
# Locate ourselves for easy reference.
export MAIN_BASH_IT_DIR="${test_directory%/*}"
export MAIN_BASH_IT_GITDIR="${MAIN_BASH_IT_DIR}/.git"
# Make sure BATS is available:
git submodule init && git submodule update
# Warn user that tests run from the current git HEAD
if ! git diff --quiet; then
echo "${BASH_SOURCE##*/}: your worktree is dirty; uncommitted changes will *not* be tested!"
fi
# Which tests do we run?
if [[ $# -eq '0' ]]; then
test_dirs=("${test_directory}"/{bash_it,completion,install,lib,plugins,themes})
else
test_dirs=("$@")
fi
# Make sure that the `parallel` command is installed,
# AND that it is the GNU version of `parallel`.
# If that is the case, try to guess the number of CPU cores,
# so we can run `bats` in parallel processing mode, which is a lot faster.
if command -v parallel &> /dev/null \
&& parallel -V &> /dev/null \
&& { parallel -V 2> /dev/null | grep -q '^GNU\>'; }; then
# Expect to run at least on a dual-core CPU; slightly degraded performance
# shouldn't matter otherwise.
declare -i -r test_jobs_default=2
# shellcheck disable=SC2155
declare -i -r test_jobs_effective="$(
if [[ "${TEST_JOBS:-detect}" = "detect" ]] \
&& command -v nproc &> /dev/null; then
nproc
elif [[ -n "${TEST_JOBS}" ]] \
&& [[ "${TEST_JOBS}" != "detect" ]]; then
echo "${TEST_JOBS}"
else
echo "${test_jobs_default}"
fi
)"
exec "$bats_executable" "${CI:+--tap}" --jobs "${test_jobs_effective}" \
--no-parallelize-within-files "${test_dirs[@]}"
else
# Run `bats` in single-threaded mode.
exec "$bats_executable" "${CI:+--tap}" "${test_dirs[@]}"
fi
@@ -0,0 +1,3 @@
#!/usr/bin/env bash
alias test_alias="a"
@@ -0,0 +1,3 @@
#!/usr/bin/env bash
alias test_alias="b"
@@ -0,0 +1,3 @@
#!/usr/bin/env bash
alias test_alias="c"
@@ -0,0 +1,12 @@
# plugins
plugins base
# completion
completion aliases
completion bash-it
completion system
# aliases
aliases general
# Bad component
aliases bla
@@ -0,0 +1,12 @@
# plugins
plugins base
# Bad type
compleetion aliases
# completion
completion aliases
completion bash-it
completion system
# aliases
aliases general
+4
View File
@@ -0,0 +1,4 @@
#!/usr/bin/env bash
# Simply return an error code to simulate a broken SVN installation
exit 72
+10
View File
@@ -0,0 +1,10 @@
#!/usr/bin/env bash
# If the info command is called
# AND the parent folder contains the .svn folder
# THEN return the current path, similar to what `svn info` does
if [[ "$1" == "info" ]] && [[ -d "../.svn" ]]; then
echo "$PWD"
fi
exit 0
+88
View File
@@ -0,0 +1,88 @@
# shellcheck shell=bats
load "${MAIN_BASH_IT_DIR?}/test/test_helper.bash"
function local_setup() {
export HOME="$BATS_TEST_TMPDIR"
}
function local_setup_file() {
# Determine which config file to use based on OS.
case $OSTYPE in
darwin*)
export BASH_IT_CONFIG_FILE=.bash_profile
;;
*)
export BASH_IT_CONFIG_FILE=.bashrc
;;
esac
# don't load any libraries as the tests here test the *whole* kit
}
@test "install: verify that the install script exists" {
assert_file_exist "$BASH_IT/install.sh"
}
@test "install: run the install script silently" {
cd "$BASH_IT"
./install.sh --silent
assert_file_exist "$HOME/$BASH_IT_CONFIG_FILE"
assert_link_exist "$BASH_IT/enabled/150---general.aliases.bash"
assert_link_exist "$BASH_IT/enabled/250---base.plugin.bash"
assert_link_exist "$BASH_IT/enabled/800---aliases.completion.bash"
assert_link_exist "$BASH_IT/enabled/350---bash-it.completion.bash"
assert_link_exist "$BASH_IT/enabled/325---system.completion.bash"
}
@test "install: verify that a backup file is created" {
cd "$BASH_IT"
touch "$HOME/$BASH_IT_CONFIG_FILE"
echo "test file content" > "$HOME/$BASH_IT_CONFIG_FILE"
local md5_orig=$(md5sum "$HOME/$BASH_IT_CONFIG_FILE" | awk '{print $1}')
./install.sh --silent
assert_file_exist "$HOME/$BASH_IT_CONFIG_FILE"
assert_file_exist "$HOME/$BASH_IT_CONFIG_FILE.bak"
local md5_bak=$(md5sum "$HOME/$BASH_IT_CONFIG_FILE.bak" | awk '{print $1}')
assert_equal "$md5_orig" "$md5_bak"
}
@test "install: verify that silent and interactive can not be used at the same time" {
cd "$BASH_IT"
run ./install.sh --silent --interactive
assert_failure
}
@test "install: verify that no-modify-config and append-to-config can not be used at the same time" {
cd "$BASH_IT"
run ./install.sh --silent --no-modify-config --append-to-config
assert_failure
}
@test "install: verify that the template is appended" {
cd "$BASH_IT"
touch "$HOME/$BASH_IT_CONFIG_FILE"
echo "test file content" > "$HOME/$BASH_IT_CONFIG_FILE"
./install.sh --silent --append-to-config
assert_file_exist "$HOME/$BASH_IT_CONFIG_FILE"
assert_file_exist "$HOME/$BASH_IT_CONFIG_FILE.bak"
run cat "$HOME/$BASH_IT_CONFIG_FILE"
assert_line "test file content"
assert_line "source \"\$BASH_IT\"/bash_it.sh"
}
+61
View File
@@ -0,0 +1,61 @@
# shellcheck shell=bats
load "${MAIN_BASH_IT_DIR?}/test/test_helper.bash"
function local_setup() {
export HOME="$BATS_TEST_TMPDIR"
}
function local_setup_file() {
# Determine which config file to use based on OS.
case $OSTYPE in
darwin*)
export BASH_IT_CONFIG_FILE=.bash_profile
;;
*)
export BASH_IT_CONFIG_FILE=.bashrc
;;
esac
# don't load any libraries as the tests here test the *whole* kit
}
@test "uninstall: verify that the uninstall script exists" {
assert_file_exist "$BASH_IT/uninstall.sh"
}
@test "uninstall: run the uninstall script with an existing backup file" {
cd "$BASH_IT"
echo "test file content for backup" > "$HOME/$BASH_IT_CONFIG_FILE.bak"
echo "test file content for original file" > "$HOME/$BASH_IT_CONFIG_FILE"
local md5_bak=$(md5sum "$HOME/$BASH_IT_CONFIG_FILE.bak" | awk '{print $1}')
run ./uninstall.sh
assert_success
assert_file_not_exist "$HOME/$BASH_IT_CONFIG_FILE.uninstall"
assert_file_not_exist "$HOME/$BASH_IT_CONFIG_FILE.bak"
assert_file_exist "$HOME/$BASH_IT_CONFIG_FILE"
local md5_conf=$(md5sum "$HOME/$BASH_IT_CONFIG_FILE" | awk '{print $1}')
assert_equal "$md5_bak" "$md5_conf"
}
@test "uninstall: run the uninstall script without an existing backup file" {
cd "$BASH_IT"
echo "test file content for original file" > "$HOME/$BASH_IT_CONFIG_FILE"
local md5_orig=$(md5sum "$HOME/$BASH_IT_CONFIG_FILE" | awk '{print $1}')
run ./uninstall.sh
assert_success
assert_file_exist "$HOME/$BASH_IT_CONFIG_FILE.uninstall"
assert_file_not_exist "$HOME/$BASH_IT_CONFIG_FILE.bak"
assert_file_not_exist "$HOME/$BASH_IT_CONFIG_FILE"
local md5_uninstall=$(md5sum "$HOME/$BASH_IT_CONFIG_FILE.uninstall" | awk '{print $1}')
assert_equal "$md5_orig" "$md5_uninstall"
}
+13
View File
@@ -0,0 +1,13 @@
# shellcheck shell=bats
load "${MAIN_BASH_IT_DIR?}/test/test_helper.bash"
function local_setup_file() {
true
# don't load any libraries as the tests here test the *whole* kit
}
@test "lib composure: _composure_keywords()" {
run _composure_keywords
assert_output "about author example group param version"
}
+732
View File
@@ -0,0 +1,732 @@
# shellcheck shell=bats
load "${MAIN_BASH_IT_DIR?}/test/test_helper.bash"
function local_setup_file() {
setup_libs "colors"
load "${BASH_IT?}/plugins/available/base.plugin.bash"
}
function local_setup() {
# Copy the test fixture to the Bash-it folder
cp -RP "$BASH_IT/test/fixtures/bash_it"/* "$BASH_IT/"
}
# TODO Create global __is_enabled function
# TODO Create global __get_base_name function
# TODO Create global __get_enabled_name function
@test "bash-it: verify that the test fixture is available" {
assert_file_exist "$BASH_IT/profiles/test-bad-component.bash_it"
assert_file_exist "$BASH_IT/profiles/test-bad-type.bash_it"
}
@test "helpers: _command_exists function exists" {
run type -a _command_exists &> /dev/null
assert_success
}
@test "helpers: _command_exists function positive test ls" {
run _command_exists ls
assert_success
}
@test "helpers: _command_exists function positive test bash-it" {
run _command_exists bash-it
assert_success
}
@test "helpers: _command_exists function negative test" {
run _command_exists __addfkds_dfdsjdf
assert_failure
}
@test "helpers: _binary_exists function exists" {
run type -a _binary_exists &> /dev/null
assert_success
}
@test "helpers: _binary_exists function positive test ls" {
run _binary_exists ls
assert_success
}
@test "helpers: _binary_exists function negative test function" {
run _binary_exists _binary_exists
assert_failure
}
@test "helpers: _binary_exists function negative test" {
run _binary_exists __addfkds_dfdsjdf
assert_failure
}
@test "helpers: bash-it help aliases ag" {
run bash-it help aliases "ag"
assert_line -n 0 "ag='ag --smart-case --pager=\"less -MIRFX'"
}
@test "helpers: bash-it help aliases without any aliases enabled" {
run bash-it help aliases
assert_line -n 0 ""
}
@test "helpers: bash-it help plugins" {
run bash-it help plugins
assert_line -n 1 "base:"
}
@test "helpers: bash-it help list aliases without any aliases enabled" {
run _help-list-aliases "$BASH_IT/aliases/available/ag.aliases.bash"
assert_line -n 0 "ag:"
}
@test "helpers: bash-it help list aliases with ag aliases enabled" {
ln -s $BASH_IT/aliases/available/ag.aliases.bash $BASH_IT/aliases/enabled/150---ag.aliases.bash
assert_link_exist "$BASH_IT/aliases/enabled/150---ag.aliases.bash"
run _help-list-aliases "$BASH_IT/aliases/enabled/150---ag.aliases.bash"
assert_line -n 0 "ag:"
}
@test "helpers: bash-it help list aliases with todo.txt-cli aliases enabled" {
ln -s $BASH_IT/aliases/available/todo.txt-cli.aliases.bash $BASH_IT/aliases/enabled/150---todo.txt-cli.aliases.bash
assert_link_exist "$BASH_IT/aliases/enabled/150---todo.txt-cli.aliases.bash"
run _help-list-aliases "$BASH_IT/aliases/enabled/150---todo.txt-cli.aliases.bash"
assert_line -n 0 "todo.txt-cli:"
}
@test "helpers: bash-it help list aliases with docker-compose aliases enabled" {
ln -s $BASH_IT/aliases/available/docker-compose.aliases.bash $BASH_IT/aliases/enabled/150---docker-compose.aliases.bash
assert_link_exist "$BASH_IT/aliases/enabled/150---docker-compose.aliases.bash"
run _help-list-aliases "$BASH_IT/aliases/enabled/150---docker-compose.aliases.bash"
assert_line -n 0 "docker-compose:"
}
@test "helpers: bash-it help list aliases with ag aliases enabled in global directory" {
ln -s $BASH_IT/aliases/available/ag.aliases.bash $BASH_IT/enabled/150---ag.aliases.bash
assert_link_exist "$BASH_IT/enabled/150---ag.aliases.bash"
run _help-list-aliases "$BASH_IT/enabled/150---ag.aliases.bash"
assert_line -n 0 "ag:"
}
@test "helpers: bash-it help aliases one alias enabled in the old directory" {
ln -s $BASH_IT/aliases/available/ag.aliases.bash $BASH_IT/aliases/enabled/150---ag.aliases.bash
assert_link_exist "$BASH_IT/aliases/enabled/150---ag.aliases.bash"
run bash-it help aliases
assert_line -n 0 "ag:"
}
@test "helpers: bash-it help aliases one alias enabled in global directory" {
run bash-it enable alias "ag"
assert_line -n 0 'ag enabled with priority 150.'
assert_link_exist "$BASH_IT/enabled/150---ag.aliases.bash"
run bash-it enable plugin "aws"
assert_line -n 0 'aws enabled with priority 250.'
assert_link_exist "$BASH_IT/enabled/250---aws.plugin.bash"
run bash-it help aliases
assert_line -n 0 "ag:"
assert_line -n 1 "ag='ag --smart-case --pager=\"less -MIRFX'"
}
@test "helpers: enable the todo.txt-cli aliases through the bash-it function" {
run bash-it enable alias "todo.txt-cli"
assert_line -n 0 'todo.txt-cli enabled with priority 150.'
assert_link_exist "$BASH_IT/enabled/150---todo.txt-cli.aliases.bash"
}
@test "helpers: enable the curl aliases" {
run _enable-alias "curl"
assert_line -n 0 'curl enabled with priority 150.'
assert_link_exist "$BASH_IT/enabled/150---curl.aliases.bash"
}
@test "helpers: enable the apm completion through the bash-it function" {
run bash-it enable completion "apm"
assert_line -n 0 'apm enabled with priority 350.'
assert_link_exist "$BASH_IT/enabled/350---apm.completion.bash"
}
@test "helpers: enable the brew completion" {
run _enable-completion "brew"
assert_line -n 0 'brew enabled with priority 375.'
assert_link_exist "$BASH_IT/enabled/375---brew.completion.bash"
}
@test "helpers: enable the node plugin" {
run _enable-plugin "node"
assert_line -n 0 'node enabled with priority 250.'
assert_link_exist "$BASH_IT/enabled/250---node.plugin.bash" "../plugins/available/node.plugin.bash"
}
@test "helpers: enable the node plugin through the bash-it function" {
run bash-it enable plugin "node"
assert_line -n 0 'node enabled with priority 250.'
assert_link_exist "$BASH_IT/enabled/250---node.plugin.bash"
}
@test "helpers: enable the node and nvm plugins through the bash-it function" {
run bash-it enable plugin "node" "nvm"
assert_line -n 0 'node enabled with priority 250.'
assert_line -n 1 'nvm enabled with priority 225.'
assert_link_exist "$BASH_IT/enabled/250---node.plugin.bash"
assert_link_exist "$BASH_IT/enabled/225---nvm.plugin.bash"
}
@test "helpers: enable the foo-unkown and nvm plugins through the bash-it function" {
run bash-it enable plugin "foo-unknown" "nvm"
assert_line -n 0 'sorry, foo-unknown does not appear to be an available plugin.'
assert_line -n 1 'nvm enabled with priority 225.'
assert_link_exist "$BASH_IT/enabled/225---nvm.plugin.bash"
}
@test "helpers: enable the nvm plugin" {
run _enable-plugin "nvm"
assert_line -n 0 'nvm enabled with priority 225.'
assert_link_exist "$BASH_IT/enabled/225---nvm.plugin.bash"
}
@test "helpers: enable an unknown plugin" {
run _enable-plugin "unknown-foo"
assert_line -n 0 'sorry, unknown-foo does not appear to be an available plugin.'
# Check for both old an new structure
assert [ ! -L "$BASH_IT/plugins/enabled/250---unknown-foo.plugin.bash" ]
assert [ ! -L "$BASH_IT/plugins/enabled/unknown-foo.plugin.bash" ]
assert [ ! -L "$BASH_IT/enabled/250---unknown-foo.plugin.bash" ]
assert [ ! -L "$BASH_IT/enabled/unknown-foo.plugin.bash" ]
}
@test "helpers: enable an unknown plugin through the bash-it function" {
run bash-it enable plugin "unknown-foo"
echo "${lines[@]}"
assert_line -n 0 'sorry, unknown-foo does not appear to be an available plugin.'
# Check for both old an new structure
assert [ ! -L "$BASH_IT/plugins/enabled/250---unknown-foo.plugin.bash" ]
assert [ ! -L "$BASH_IT/plugins/enabled/unknown-foo.plugin.bash" ]
assert [ ! -L "$BASH_IT/enabled/250---unknown-foo.plugin.bash" ]
assert [ ! -L "$BASH_IT/enabled/unknown-foo.plugin.bash" ]
}
@test "helpers: disable a plugin that is not enabled" {
run _disable-plugin "sdkman"
assert_line -n 0 'sorry, sdkman does not appear to be an enabled plugin.'
}
@test "helpers: enable and disable the nvm plugin" {
run _enable-plugin "nvm"
assert_line -n 0 'nvm enabled with priority 225.'
assert_link_exist "$BASH_IT/enabled/225---nvm.plugin.bash"
assert [ ! -L "$BASH_IT/plugins/enabled/225---nvm.plugin.bash" ]
run _disable-plugin "nvm"
assert_line -n 0 'nvm disabled.'
assert [ ! -L "$BASH_IT/enabled/225---nvm.plugin.bash" ]
}
@test "helpers: disable the nvm plugin if it was enabled with a priority, but in the component-specific directory" {
ln -s $BASH_IT/plugins/available/nvm.plugin.bash $BASH_IT/plugins/enabled/225---nvm.plugin.bash
assert_link_exist "$BASH_IT/plugins/enabled/225---nvm.plugin.bash"
assert [ ! -L "$BASH_IT/enabled/225---nvm.plugin.bash" ]
run _disable-plugin "nvm"
assert_line -n 0 'nvm disabled.'
assert [ ! -L "$BASH_IT/plugins/enabled/225---nvm.plugin.bash" ]
assert [ ! -L "$BASH_IT/enabled/225---nvm.plugin.bash" ]
}
@test "helpers: disable the nvm plugin if it was enabled without a priority" {
ln -s $BASH_IT/plugins/available/nvm.plugin.bash $BASH_IT/plugins/enabled/nvm.plugin.bash
assert_link_exist "$BASH_IT/plugins/enabled/nvm.plugin.bash"
run _disable-plugin "nvm"
assert_line -n 0 'nvm disabled.'
assert [ ! -L "$BASH_IT/plugins/enabled/nvm.plugin.bash" ]
}
@test "helpers: enable the nvm plugin if it was enabled without a priority" {
ln -s $BASH_IT/plugins/available/nvm.plugin.bash $BASH_IT/plugins/enabled/nvm.plugin.bash
assert_link_exist "$BASH_IT/plugins/enabled/nvm.plugin.bash"
run _enable-plugin "nvm"
assert_line -n 0 'nvm is already enabled.'
assert_link_exist "$BASH_IT/plugins/enabled/nvm.plugin.bash"
assert [ ! -L "$BASH_IT/plugins/enabled/225---nvm.plugin.bash" ]
assert [ ! -L "$BASH_IT/enabled/225---nvm.plugin.bash" ]
}
@test "helpers: enable the nvm plugin if it was enabled with a priority, but in the component-specific directory" {
ln -s $BASH_IT/plugins/available/nvm.plugin.bash $BASH_IT/plugins/enabled/225---nvm.plugin.bash
assert_link_exist "$BASH_IT/plugins/enabled/225---nvm.plugin.bash"
run _enable-plugin "nvm"
assert_line -n 0 'nvm is already enabled.'
assert [ ! -L "$BASH_IT/plugins/enabled/nvm.plugin.bash" ]
assert_link_exist "$BASH_IT/plugins/enabled/225---nvm.plugin.bash"
assert [ ! -L "$BASH_IT/enabled/225---nvm.plugin.bash" ]
}
@test "helpers: enable the nvm plugin twice" {
run _enable-plugin "nvm"
assert_line -n 0 'nvm enabled with priority 225.'
assert_link_exist "$BASH_IT/enabled/225---nvm.plugin.bash"
run _enable-plugin "nvm"
assert_line -n 0 'nvm is already enabled.'
assert_link_exist "$BASH_IT/enabled/225---nvm.plugin.bash"
}
@test "helpers: profile load command sanity" {
run _bash-it-profile-load "default"
assert_success
assert_link_exist "$BASH_IT/enabled/150---general.aliases.bash"
assert_link_exist "$BASH_IT/enabled/250---base.plugin.bash"
assert_link_exist "$BASH_IT/enabled/800---aliases.completion.bash"
assert_link_exist "$BASH_IT/enabled/350---bash-it.completion.bash"
assert_link_exist "$BASH_IT/enabled/325---system.completion.bash"
}
@test "helpers: profile save command sanity" {
run _enable-plugin "nvm"
run _bash-it-profile-save "test"
assert_line -n 0 "Saving plugins configuration..."
assert_line -n 1 "Saving completion configuration..."
assert_line -n 2 "Saving aliases configuration..."
assert_line -n 3 "All done!"
assert_file_exist "$BASH_IT/profiles/test.bash_it"
}
@test "helpers: profile save creates valid file with only plugin enabled" {
run _enable-plugin "nvm"
run _bash-it-profile-save "test"
run cat "$BASH_IT/profiles/test.bash_it"
assert_line -n 0 "# This file is auto generated by Bash-it. Do not edit manually!"
assert_line -n 1 "# plugins"
assert_line -n 2 "plugins nvm"
}
@test "helpers: profile save creates valid file with only completion enabled" {
run _enable-completion "bash-it"
run _bash-it-profile-save "test"
run cat "$BASH_IT/profiles/test.bash_it"
assert_line -n 0 "# This file is auto generated by Bash-it. Do not edit manually!"
assert_line -n 1 "# completion"
assert_line -n 2 "completion bash-it"
}
@test "helpers: profile save creates valid file with only aliases enabled" {
run _enable-alias "general"
run _bash-it-profile-save "test"
run cat "$BASH_IT/profiles/test.bash_it"
assert_line -n 0 "# This file is auto generated by Bash-it. Do not edit manually!"
assert_line -n 1 "# aliases"
assert_line -n 2 "aliases general"
}
@test "helpers: profile edge case, empty configuration" {
run _bash-it-profile-save "test"
assert_line -n 3 "It seems like no configuration was enabled.."
assert_line -n 4 "Make sure to double check that this is the wanted behavior."
run _enable-alias "general"
run _enable-plugin "base"
run _enable-plugin "alias-completion"
run _enable-completion "bash-it"
run _enable-completion "system"
run _bash-it-profile-load "test"
assert_link_not_exist "$BASH_IT/enabled/150---general.aliases.bash"
assert_link_not_exist "$BASH_IT/enabled/250---base.plugin.bash"
assert_link_not_exist "$BASH_IT/enabled/800---aliases.completion.bash"
assert_link_not_exist "$BASH_IT/enabled/350---bash-it.completion.bash"
assert_link_not_exist "$BASH_IT/enabled/325---system.completion.bash"
}
@test "helpers: profile save and load" {
run _enable-alias "general"
run _enable-plugin "base"
run _enable-plugin "alias-completion"
run _enable-completion "bash-it"
run _enable-completion "system"
run _bash-it-profile-save "test"
assert_success
run _disable-alias "general"
assert_link_not_exist "$BASH_IT/enabled/150---general.aliases.bash"
run _bash-it-profile-load "test"
assert_link_exist "$BASH_IT/enabled/150---general.aliases.bash"
}
@test "helpers: profile load corrupted profile file: bad component" {
run _bash-it-profile-load "test-bad-component"
assert_line -n 1 -p "Bad line(#12) in profile, aborting load..."
}
@test "helpers: profile load corrupted profile file: bad subdirectory" {
run _bash-it-profile-load "test-bad-type"
assert_line -n 1 -p "Bad line(#4) in profile, aborting load..."
}
@test "helpers: profile rm sanity" {
run _bash-it-profile-save "test"
assert_file_exist "$BASH_IT/profiles/test.bash_it"
run _bash-it-profile-rm "test"
assert_line -n 0 "Removed profile 'test' successfully!"
assert_file_not_exist "$BASH_IT/profiles/test.bash_it"
}
@test "helpers: profile rm no params" {
run _bash-it-profile-rm ""
assert_line -n 0 -p "Please specify profile name to remove..."
}
@test "helpers: profile load no params" {
run _bash-it-profile-load ""
assert_line -n 0 -p "Please specify profile name to load, not changing configuration..."
}
@test "helpers: profile rm default" {
run _bash-it-profile-rm "default"
assert_line -n 0 -p "Can not remove the default profile..."
assert_file_exist "$BASH_IT/profiles/default.bash_it"
}
@test "helpers: profile rm bad profile name" {
run _bash-it-profile-rm "notexisting"
assert_line -n 0 -p "Could not find profile 'notexisting'..."
}
@test "helpers: profile list sanity" {
run _bash-it-profile-list
assert_line -n 0 "Available profiles:"
assert_line -n 1 "default"
}
@test "helpers: profile list more profiles" {
run _bash-it-profile-save "cactus"
run _bash-it-profile-save "another"
run _bash-it-profile-save "brother"
run _bash-it-profile-list
assert_line -n 0 "Available profiles:"
assert_line -n 4 "default"
assert_line -n 3 "cactus"
assert_line -n 1 "another"
assert_line -n 2 "brother"
}
@test "helpers: migrate plugins and completions that share the same name" {
ln -s $BASH_IT/completion/available/dirs.completion.bash $BASH_IT/completion/enabled/350---dirs.completion.bash
assert_link_exist "$BASH_IT/completion/enabled/350---dirs.completion.bash"
ln -s $BASH_IT/plugins/available/dirs.plugin.bash $BASH_IT/plugins/enabled/250---dirs.plugin.bash
assert_link_exist "$BASH_IT/plugins/enabled/250---dirs.plugin.bash"
run _bash-it-migrate
assert_line -n 0 'Migrating plugin dirs.'
assert_line -n 1 'dirs disabled.'
assert_line -n 2 'dirs enabled with priority 250.'
assert_line -n 3 'Migrating completion dirs.'
assert_line -n 4 'dirs disabled.'
assert_line -n 5 'dirs enabled with priority 350.'
assert_line -n 6 'If any migration errors were reported, please try the following: reload && bash-it migrate'
assert_link_exist "$BASH_IT/enabled/350---dirs.completion.bash"
assert_link_exist "$BASH_IT/enabled/250---dirs.plugin.bash"
assert [ ! -L "$BASH_IT/completion/enabled/350----dirs.completion.bash" ]
assert [ ! -L "$BASH_IT/plugins/enabled/250----dirs.plugin.bash" ]
}
@test "helpers: migrate enabled plugins that don't use the new priority-based configuration" {
ln -s $BASH_IT/plugins/available/nvm.plugin.bash $BASH_IT/plugins/enabled/nvm.plugin.bash
assert_link_exist "$BASH_IT/plugins/enabled/nvm.plugin.bash"
ln -s $BASH_IT/plugins/available/node.plugin.bash $BASH_IT/plugins/enabled/node.plugin.bash
assert_link_exist "$BASH_IT/plugins/enabled/node.plugin.bash"
ln -s $BASH_IT/aliases/available/todo.txt-cli.aliases.bash $BASH_IT/aliases/enabled/todo.txt-cli.aliases.bash
assert_link_exist "$BASH_IT/aliases/enabled/todo.txt-cli.aliases.bash"
run _enable-plugin "ssh"
assert_link_exist "$BASH_IT/enabled/250---ssh.plugin.bash"
run _bash-it-migrate
assert_line -n 0 'Migrating alias todo.txt-cli.'
assert_line -n 1 'todo.txt-cli disabled.'
assert_line -n 2 'todo.txt-cli enabled with priority 150.'
assert_link_exist "$BASH_IT/enabled/225---nvm.plugin.bash"
assert_link_exist "$BASH_IT/enabled/250---node.plugin.bash"
assert_link_exist "$BASH_IT/enabled/250---ssh.plugin.bash"
assert_link_exist "$BASH_IT/enabled/150---todo.txt-cli.aliases.bash"
assert [ ! -L "$BASH_IT/plugins/enabled/node.plugin.bash" ]
assert [ ! -L "$BASH_IT/plugins/enabled/nvm.plugin.bash" ]
assert [ ! -L "$BASH_IT/aliases/enabled/todo.txt-cli.aliases.bash" ]
}
@test "helpers: migrate enabled plugins that use the new priority-based configuration in the individual directories" {
ln -s $BASH_IT/plugins/available/nvm.plugin.bash $BASH_IT/plugins/enabled/225---nvm.plugin.bash
assert_link_exist "$BASH_IT/plugins/enabled/225---nvm.plugin.bash"
ln -s $BASH_IT/plugins/available/node.plugin.bash $BASH_IT/plugins/enabled/250---node.plugin.bash
assert_link_exist "$BASH_IT/plugins/enabled/250---node.plugin.bash"
ln -s $BASH_IT/aliases/available/todo.txt-cli.aliases.bash $BASH_IT/aliases/enabled/250---todo.txt-cli.aliases.bash
assert_link_exist "$BASH_IT/aliases/enabled/250---todo.txt-cli.aliases.bash"
run _enable-plugin "ssh"
assert_link_exist "$BASH_IT/enabled/250---ssh.plugin.bash"
run _bash-it-migrate
assert_link_exist "$BASH_IT/enabled/225---nvm.plugin.bash"
assert_link_exist "$BASH_IT/enabled/250---node.plugin.bash"
assert_link_exist "$BASH_IT/enabled/250---ssh.plugin.bash"
assert_link_exist "$BASH_IT/enabled/150---todo.txt-cli.aliases.bash"
assert [ ! -L "$BASH_IT/plugins/enabled/225----node.plugin.bash" ]
assert [ ! -L "$BASH_IT/plugins/enabled/250----nvm.plugin.bash" ]
assert [ ! -L "$BASH_IT/aliases/enabled/250----todo.txt-cli.aliases.bash" ]
}
@test "helpers: run the migrate command without anything to migrate and nothing enabled" {
run _bash-it-migrate
}
@test "helpers: run the migrate command without anything to migrate" {
run _enable-plugin "ssh"
assert_link_exist "$BASH_IT/enabled/250---ssh.plugin.bash"
run _bash-it-migrate
assert_link_exist "$BASH_IT/enabled/250---ssh.plugin.bash"
}
function __migrate_all_components() {
subdirectory="$1"
one_type="$2"
priority="$3"
for f in "${BASH_IT}/$subdirectory/available/"*.bash
do
to_enable=$(basename $f)
if [ -z "$priority" ]; then
ln -s "../available/$to_enable" "${BASH_IT}/${subdirectory}/enabled/$to_enable"
else
ln -s "../available/$to_enable" "${BASH_IT}/${subdirectory}/enabled/$priority---$to_enable"
fi
done
ls ${BASH_IT}/${subdirectory}/enabled
all_available=$(compgen -G "${BASH_IT}/${subdirectory}/available/*.$one_type.bash" | wc -l | xargs)
all_enabled_old=$(compgen -G "${BASH_IT}/${subdirectory}/enabled/*.$one_type.bash" | wc -l | xargs)
assert_equal "$all_available" "$all_enabled_old"
run bash-it migrate
all_enabled_old_after=$(compgen -G "${BASH_IT}/${subdirectory}/enabled/*.$one_type.bash" | wc -l | xargs)
assert_equal "0" "$all_enabled_old_after"
all_enabled_new_after=$(compgen -G "${BASH_IT}/enabled/*.$one_type.bash" | wc -l | xargs)
assert_equal "$all_enabled_old" "$all_enabled_new_after"
}
@test "helpers: migrate all plugins" {
subdirectory="plugins"
one_type="plugin"
__migrate_all_components "$subdirectory" "$one_type"
}
@test "helpers: migrate all aliases" {
subdirectory="aliases"
one_type="aliases"
__migrate_all_components "$subdirectory" "$one_type"
}
@test "helpers: migrate all completions" {
subdirectory="completion"
one_type="completion"
__migrate_all_components "$subdirectory" "$one_type"
}
@test "helpers: migrate all plugins with previous priority" {
subdirectory="plugins"
one_type="plugin"
__migrate_all_components "$subdirectory" "$one_type" "100"
}
@test "helpers: migrate all aliases with previous priority" {
subdirectory="aliases"
one_type="aliases"
__migrate_all_components "$subdirectory" "$one_type" "100"
}
@test "helpers: migrate all completions with previous priority" {
subdirectory="completion"
one_type="completion"
__migrate_all_components "$subdirectory" "$one_type" "100"
}
@test "helpers: verify that existing components are automatically migrated when something is enabled" {
ln -s $BASH_IT/plugins/available/nvm.plugin.bash $BASH_IT/plugins/enabled/nvm.plugin.bash
assert_link_exist "$BASH_IT/plugins/enabled/nvm.plugin.bash"
run bash-it enable plugin "node"
assert_line -n 0 'Migrating plugin nvm.'
assert_line -n 1 'nvm disabled.'
assert_line -n 2 'nvm enabled with priority 225.'
assert_line -n 3 'If any migration errors were reported, please try the following: reload && bash-it migrate'
assert_line -n 4 'node enabled with priority 250.'
assert [ ! -L "$BASH_IT/plugins/enabled/nvm.plugin.bash" ]
assert_link_exist "$BASH_IT/enabled/225---nvm.plugin.bash"
assert_link_exist "$BASH_IT/enabled/250---node.plugin.bash"
}
@test "helpers: verify that existing components are automatically migrated when something is disabled" {
ln -s $BASH_IT/plugins/available/nvm.plugin.bash $BASH_IT/plugins/enabled/nvm.plugin.bash
assert_link_exist "$BASH_IT/plugins/enabled/nvm.plugin.bash"
ln -s $BASH_IT/plugins/available/node.plugin.bash $BASH_IT/plugins/enabled/250---node.plugin.bash
assert_link_exist "$BASH_IT/plugins/enabled/250---node.plugin.bash"
run bash-it disable plugin "node"
assert_line -n 0 'Migrating plugin node.'
assert_line -n 1 'node disabled.'
assert_line -n 2 'node enabled with priority 250.'
assert_line -n 3 'Migrating plugin nvm.'
assert_line -n 4 'nvm disabled.'
assert_line -n 5 'nvm enabled with priority 225.'
assert_line -n 6 'If any migration errors were reported, please try the following: reload && bash-it migrate'
assert_line -n 7 'node disabled.'
assert [ ! -L "$BASH_IT/plugins/enabled/nvm.plugin.bash" ]
assert_link_exist "$BASH_IT/enabled/225---nvm.plugin.bash"
assert [ ! -L "$BASH_IT/plugins/enabled/250---node.plugin.bash" ]
assert [ ! -L "$BASH_IT/enabled/250---node.plugin.bash" ]
}
@test "helpers: enable all plugins" {
run _enable-plugin "all"
local available=$(find $BASH_IT/plugins/available -name *.plugin.bash | wc -l | xargs)
local enabled=$(find $BASH_IT/enabled -name [0-9]*.plugin.bash | wc -l | xargs)
assert_equal "$available" "$enabled"
}
@test "helpers: disable all plugins" {
run _enable-plugin "all"
local available=$(find $BASH_IT/plugins/available -name *.plugin.bash | wc -l | xargs)
local enabled=$(find $BASH_IT/enabled -name [0-9]*.plugin.bash | wc -l | xargs)
assert_equal "$available" "$enabled"
run _enable-alias "ag"
assert_link_exist "$BASH_IT/enabled/150---ag.aliases.bash"
run _disable-plugin "all"
local enabled2=$(find $BASH_IT/enabled -name [0-9]*.plugin.bash | wc -l | xargs)
assert_equal "0" "$enabled2"
assert_link_exist "$BASH_IT/enabled/150---ag.aliases.bash"
}
@test "helpers: disable all plugins in the old directory structure" {
ln -s $BASH_IT/plugins/available/nvm.plugin.bash $BASH_IT/plugins/enabled/nvm.plugin.bash
assert_link_exist "$BASH_IT/plugins/enabled/nvm.plugin.bash"
ln -s $BASH_IT/plugins/available/node.plugin.bash $BASH_IT/plugins/enabled/node.plugin.bash
assert_link_exist "$BASH_IT/plugins/enabled/node.plugin.bash"
local enabled=$(find $BASH_IT/plugins/enabled -name *.plugin.bash | wc -l | xargs)
assert_equal "2" "$enabled"
run _enable-alias "ag"
assert_link_exist "$BASH_IT/enabled/150---ag.aliases.bash"
run _disable-plugin "all"
local enabled2=$(find $BASH_IT/plugins/enabled -name *.plugin.bash | wc -l | xargs)
assert_equal "0" "$enabled2"
assert_link_exist "$BASH_IT/enabled/150---ag.aliases.bash"
}
@test "helpers: disable all plugins in the old directory structure with priority" {
ln -s $BASH_IT/plugins/available/nvm.plugin.bash $BASH_IT/plugins/enabled/250---nvm.plugin.bash
assert_link_exist "$BASH_IT/plugins/enabled/250---nvm.plugin.bash"
ln -s $BASH_IT/plugins/available/node.plugin.bash $BASH_IT/plugins/enabled/250---node.plugin.bash
assert_link_exist "$BASH_IT/plugins/enabled/250---node.plugin.bash"
local enabled=$(find $BASH_IT/plugins/enabled -name *.plugin.bash | wc -l | xargs)
assert_equal "2" "$enabled"
run _enable-alias "ag"
assert_link_exist "$BASH_IT/enabled/150---ag.aliases.bash"
run _disable-plugin "all"
local enabled2=$(find $BASH_IT/plugins/enabled -name *.plugin.bash | wc -l | xargs)
assert_equal "0" "$enabled2"
assert_link_exist "$BASH_IT/enabled/150---ag.aliases.bash"
}
@test "helpers: disable all plugins without anything enabled" {
local enabled=$(find $BASH_IT/enabled -name [0-9]*.plugin.bash | wc -l | xargs)
assert_equal "0" "$enabled"
run _enable-alias "ag"
assert_link_exist "$BASH_IT/enabled/150---ag.aliases.bash"
run _disable-plugin "all"
local enabled2=$(find $BASH_IT/enabled -name [0-9]*.plugin.bash | wc -l | xargs)
assert_equal "0" "$enabled2"
assert_link_exist "$BASH_IT/enabled/150---ag.aliases.bash"
}
@test "helpers: enable the ansible aliases through the bash-it function" {
run bash-it enable alias "ansible"
assert_line -n 0 'ansible enabled with priority 150.'
assert_link_exist "$BASH_IT/enabled/150---ansible.aliases.bash"
}
@test "helpers: describe the nvm plugin without enabling it" {
_bash-it-plugins | grep "nvm" | grep "\[ \]"
}
@test "helpers: describe the nvm plugin after enabling it" {
run _enable-plugin "nvm"
assert_line -n 0 'nvm enabled with priority 225.'
assert_link_exist "$BASH_IT/enabled/225---nvm.plugin.bash"
_bash-it-plugins | grep "nvm" | grep "\[x\]"
}
@test "helpers: describe the nvm plugin after enabling it in the old directory" {
ln -s $BASH_IT/plugins/available/nvm.plugin.bash $BASH_IT/plugins/enabled/nvm.plugin.bash
assert_link_exist "$BASH_IT/plugins/enabled/nvm.plugin.bash"
_bash-it-plugins | grep "nvm" | grep "\[x\]"
}
@test "helpers: describe the nvm plugin after enabling it in the old directory with priority" {
ln -s $BASH_IT/plugins/available/nvm.plugin.bash $BASH_IT/plugins/enabled/225---nvm.plugin.bash
assert_link_exist "$BASH_IT/plugins/enabled/225---nvm.plugin.bash"
_bash-it-plugins | grep "nvm" | grep "\[x\]"
}
@test "helpers: describe the todo.txt-cli aliases without enabling them" {
run _bash-it-aliases
assert_line "todo.txt-cli [ ] todo.txt-cli abbreviations"
}
+84
View File
@@ -0,0 +1,84 @@
# shellcheck shell=bats
load "${MAIN_BASH_IT_DIR?}/test/test_helper.bash"
function local_setup_file() {
setup_libs "log"
}
@test "lib log: basic debug logging with BASH_IT_LOG_LEVEL_ALL" {
BASH_IT_LOG_LEVEL=$BASH_IT_LOG_LEVEL_ALL
run _log_debug "test test test"
assert_output "DEBUG: default: test test test"
}
@test "lib log: basic warning logging with BASH_IT_LOG_LEVEL_ALL" {
BASH_IT_LOG_LEVEL=$BASH_IT_LOG_LEVEL_ALL
run _log_warning "test test test"
assert_output " WARN: default: test test test"
}
@test "lib log: basic error logging with BASH_IT_LOG_LEVEL_ALL" {
BASH_IT_LOG_LEVEL=$BASH_IT_LOG_LEVEL_ALL
run _log_error "test test test"
assert_output "ERROR: default: test test test"
}
@test "lib log: basic debug logging with BASH_IT_LOG_LEVEL_WARNING" {
BASH_IT_LOG_LEVEL=$BASH_IT_LOG_LEVEL_WARNING
run _log_debug "test test test"
refute_output
}
@test "lib log: basic warning logging with BASH_IT_LOG_LEVEL_WARNING" {
BASH_IT_LOG_LEVEL=$BASH_IT_LOG_LEVEL_WARNING
run _log_warning "test test test"
assert_output " WARN: default: test test test"
}
@test "lib log: basic error logging with BASH_IT_LOG_LEVEL_WARNING" {
BASH_IT_LOG_LEVEL=$BASH_IT_LOG_LEVEL_WARNING
run _log_error "test test test"
assert_output "ERROR: default: test test test"
}
@test "lib log: basic debug logging with BASH_IT_LOG_LEVEL_ERROR" {
BASH_IT_LOG_LEVEL=$BASH_IT_LOG_LEVEL_ERROR
run _log_debug "test test test"
refute_output
}
@test "lib log: basic warning logging with BASH_IT_LOG_LEVEL_ERROR" {
BASH_IT_LOG_LEVEL=$BASH_IT_LOG_LEVEL_ERROR
run _log_warning "test test test"
refute_output
}
@test "lib log: basic error logging with BASH_IT_LOG_LEVEL_ERROR" {
BASH_IT_LOG_LEVEL=$BASH_IT_LOG_LEVEL_ERROR
run _log_error "test test test"
assert_output "ERROR: default: test test test"
}
@test "lib log: basic debug silent logging" {
run _log_debug "test test test"
refute_output
}
@test "lib log: basic warning silent logging" {
run _log_warning "test test test"
refute_output
}
@test "lib log: basic error silent logging" {
run _log_error "test test test"
refute_output
}
@test "lib log: logging with prefix" {
BASH_IT_LOG_LEVEL=$BASH_IT_LOG_LEVEL_ALL
BASH_IT_LOG_PREFIX="nice: prefix: "
run _log_debug "test test test"
assert_output "DEBUG: nice: prefix: test test test"
}
+164
View File
@@ -0,0 +1,164 @@
# shellcheck shell=bats
load ../test_helper
function local_setup {
setup_test_fixture
export __bp_enable_subshells=yas
}
@test "vendor preexec: __bp_install_after_session_init() without existing" {
test_prompt_string=""
export PROMPT_COMMAND="$test_prompt_string"
load ../../vendor/github.com/rcaloras/bash-preexec/bash-preexec.sh
assert_success
assert_equal "${PROMPT_COMMAND}" $'__bp_trap_string="$(trap -p DEBUG)"\ntrap - DEBUG\n__bp_install'
}
@test "vendor preexec: __bp_install_after_session_init() with existing" {
test_prompt_string="nah"
export PROMPT_COMMAND="$test_prompt_string"
load ../../vendor/github.com/rcaloras/bash-preexec/bash-preexec.sh
assert_success
assert_equal "${PROMPT_COMMAND}" "$test_prompt_string"$'\n__bp_trap_string="$(trap -p DEBUG)"\ntrap - DEBUG\n__bp_install'
}
@test "vendor preexec: __bp_install_after_session_init() delayed" {
test_prompt_string="nah"
export PROMPT_COMMAND="$test_prompt_string"
export __bp_delay_install="blarg"
load ../../vendor/github.com/rcaloras/bash-preexec/bash-preexec.sh
assert_success
assert_equal "${PROMPT_COMMAND}" "$test_prompt_string"
run __bp_install_after_session_init
assert_success
__bp_install_after_session_init
assert_equal "${PROMPT_COMMAND}" "$test_prompt_string"$'\n__bp_trap_string="$(trap -p DEBUG)"\ntrap - DEBUG\n__bp_install'
}
@test "vendor preexec: __bp_install() without existing" {
test_prompt_string=""
export PROMPT_COMMAND="$test_prompt_string"
load ../../vendor/github.com/rcaloras/bash-preexec/bash-preexec.sh
assert_success
run __bp_install
assert_success
__bp_install
assert_equal "${PROMPT_COMMAND}" $'__bp_precmd_invoke_cmd\n__bp_interactive_mode'
}
@test "vendor preexec: __bp_install() with existing" {
test_prompt_string="nah"
export PROMPT_COMMAND="$test_prompt_string"
load ../../vendor/github.com/rcaloras/bash-preexec/bash-preexec.sh
assert_success
run __bp_install
assert_success
__bp_install
assert_equal "${PROMPT_COMMAND}" $'__bp_precmd_invoke_cmd\n'"$test_prompt_string"$'\n__bp_interactive_mode'
}
@test "lib preexec: __bp_require_not_readonly()" {
run type -t __bp_require_not_readonly
assert_failure
run load ../../lib/preexec.bash
assert_success
load ../../lib/preexec.bash
run type -t __bp_require_not_readonly
assert_success
export HISTCONTROL=blah:blah PROMPT_COMMAND="silly;rabbit"
readonly HISTCONTROL PROMPT_COMMAND
run __bp_require_not_readonly
assert_success
}
@test "lib preexec: __bp_adjust_histcontrol()" {
run type -t __bp_adjust_histcontrol
assert_failure
run load ../../lib/preexec.bash
assert_success
load ../../lib/preexec.bash
run type -t __bp_adjust_histcontrol
assert_success
test_history_control_string="ignoreall:ignoredups:ignorespace:erasedups"
export HISTCONTROL="${test_history_control_string}"
run __bp_adjust_histcontrol
assert_success
assert_equal "${HISTCONTROL}" "${test_history_control_string}"
}
@test "lib preexec: __check_precmd_conflict()" {
test_precmd_function_name="test"
setup_libs "preexec"
run __check_precmd_conflict "$test_precmd_function_name"
assert_failure
export precmd_functions=("$test_precmd_function_name")
run __check_precmd_conflict "$test_precmd_function_name"
assert_success
}
@test "lib preexec: __check_preexec_conflict()" {
test_preexec_function_name="test"
setup_libs "preexec"
run __check_preexec_conflict "$test_preexec_function_name"
assert_failure
export preexec_functions=("$test_preexec_function_name")
run __check_preexec_conflict "$test_preexec_function_name"
assert_success
}
@test "lib preexec: safe_append_prompt_command()" {
test_precmd_function_name="test"
setup_libs "preexec"
export precmd_functions=()
assert_equal "${precmd_functions[*]}" ""
run safe_append_prompt_command "$test_precmd_function_name"
assert_success
safe_append_prompt_command "$test_precmd_function_name"
assert_equal "${precmd_functions[*]}" "$test_precmd_function_name"
}
@test "lib preexec: safe_append_preexec()" {
test_preexec_function_name="test"
setup_libs "preexec"
export preexec_functions=()
assert_equal "${preexec_functions[*]}" ""
run safe_append_preexec "$test_preexec_function_name"
assert_success
safe_append_preexec "$test_preexec_function_name"
assert_equal "${preexec_functions[*]}" "$test_preexec_function_name"
}
+68
View File
@@ -0,0 +1,68 @@
# shellcheck shell=bats
load "${MAIN_BASH_IT_DIR?}/test/test_helper.bash"
function local_setup_file() {
setup_libs "search"
}
function local_setup() {
# shellcheck disable=SC2034
BASH_IT_SEARCH_USE_COLOR=false
}
@test "search: plugin base" {
export BASH_IT_SEARCH_USE_COLOR=false
run _bash-it-search-component 'plugins' 'base'
assert_line -n 0 ' plugins: base '
}
@test "search: git" {
run _bash-it-search 'git' --no-color
assert_line -n 0 ' aliases: git gitsvn '
assert_line -n 1 -p ' plugins:'
for plugin in "autojump" "git" "gitstatus" "git-subrepo" "jgitflow" "jump"
do
echo $plugin
assert_line -n 1 -p $plugin
done
assert_line -n 2 ' completions: git git_flow git_flow_avh github-cli '
}
@test "search: ruby gem bundle rake rails" {
run _bash-it-search rails ruby gem bundler rake --no-color
assert_line -n 0 ' aliases: bundler rails '
assert_line -n 1 ' plugins: chruby chruby-auto rails ruby '
assert_line -n 2 ' completions: bundler gem rake '
}
@test "search: rails ruby gem bundler rake -chruby" {
run _bash-it-search rails ruby gem bundler rake -chruby --no-color
assert_line -n 0 ' aliases: bundler rails '
assert_line -n 1 ' plugins: rails ruby '
assert_line -n 2 ' completions: bundler gem rake '
}
@test "search: @git" {
run _bash-it-search '@git' --no-color
assert_line -n 0 ' aliases: git '
assert_line -n 1 ' plugins: git '
assert_line -n 2 ' completions: git '
}
@test "search: @git --enable / --disable" {
set -e
run _bash-it-search '@git' --enable --no-color
run _bash-it-search '@git' --no-color
[[ "${lines[0]}" =~ '✓' ]]
run _bash-it-search '@git' --disable --no-color
run _bash-it-search '@git' --no-color
assert_line -n 0 ' aliases: git '
assert_line -n 1 ' plugins: git '
assert_line -n 2 ' completions: git '
}
+83
View File
@@ -0,0 +1,83 @@
# shellcheck shell=bats
load "${MAIN_BASH_IT_DIR?}/test/test_helper.bash"
function local_setup_file() {
setup_libs "helpers"
}
@test "_bash-it-component-item-is-enabled() - for a disabled item" {
run _bash-it-component-item-is-enabled aliases svn
assert_failure
}
@test "_bash-it-component-item-is-enabled() - for an enabled/disabled item" {
run bash-it enable alias svn
assert_line -n 0 'svn enabled with priority 150.'
run _bash-it-component-item-is-enabled alias svn
assert_success
run _bash-it-component-item-is-disabled alias svn
assert_failure
run bash-it disable alias svn
assert_line -n 0 'svn disabled.'
run _bash-it-component-item-is-enabled alias svn
assert_failure
run _bash-it-component-item-is-disabled alias svn
assert_success
}
@test "_bash-it-component-item-is-disabled() - for a disabled item" {
run _bash-it-component-item-is-disabled alias svn
assert_success
}
@test "_bash-it-component-item-is-disabled() - for an enabled/disabled item" {
run bash-it enable alias svn
assert_line -n 0 'svn enabled with priority 150.'
run _bash-it-component-item-is-disabled alias svn
assert_failure
run _bash-it-component-item-is-enabled alias svn
assert_success
run bash-it disable alias svn
assert_line -n 0 'svn disabled.'
run _bash-it-component-item-is-disabled alias svn
assert_success
run _bash-it-component-item-is-enabled alias svn
assert_failure
}
@test "_bash-it-array-contains-element() - when match is found, and is the first" {
declare -a fruits=(apple pear orange mandarin)
run _bash-it-array-contains-element apple "${fruits[@]}"
assert_success
}
@test "_bash-it-array-contains-element() - when match is found, and is the last" {
declare -a fruits=(apple pear orange mandarin)
run _bash-it-array-contains-element mandarin "${fruits[@]}"
assert_success
}
@test "_bash-it-array-contains-element() - when match is found, and is in the middle" {
declare -a fruits=(apple pear orange mandarin)
run _bash-it-array-contains-element pear "${fruits[@]}"
assert_success
}
@test "_bash-it-array-contains-element() - when match is found, and it has spaces" {
declare -a fruits=(apple pear orange mandarin "yellow watermelon")
run _bash-it-array-contains-element "yellow watermelon" "${fruits[@]}"
assert_success
}
@test "_bash-it-array-contains-element() - when match is not found" {
declare -a fruits=(apple pear orange mandarin)
run _bash-it-array-contains-element xyz "${fruits[@]}"
assert_failure
}
+1
View File
@@ -0,0 +1 @@
pre-commit==2.3.0
+76
View File
@@ -0,0 +1,76 @@
# shellcheck shell=bats
load "${MAIN_BASH_IT_DIR?}/test/test_helper.bash"
function local_setup_file() {
setup_libs "helpers"
load "${BASH_IT?}/plugins/available/base.plugin.bash"
}
@test 'plugins base: ips()' {
declare -r localhost='127.0.0.1'
run ips
assert_success
assert_line $localhost
}
@test 'plugins base: myip()' {
run myip
assert_success
declare -r mask_ip=$(echo $output | tr -s '[0-9]' '?')
[[ $mask_ip == 'Your public IP is:'*'?.?.?.?'* ]]
}
@test 'plugins base: pickfrom()' {
stub_file="${BATS_TEST_TMPDIR}/stub_file"
printf "l1\nl2\nl3" > $stub_file
run pickfrom $stub_file
assert_success
[[ $output == l? ]]
}
@test 'plugins base: mkcd()' {
cd "${BATS_TEST_TMPDIR}"
declare -r dir_name="-dir_with_dash"
# Make sure that the directory does not exist prior to the test
rm -rf "${BATS_TEST_TMPDIR}/${dir_name}"
run mkcd "${dir_name}"
assert_success
assert_dir_exist "${BATS_TEST_TMPDIR}/${dir_name}"
mkcd "${dir_name}"
assert_equal "${PWD}" "${BATS_TEST_TMPDIR//\/\///}/${dir_name}"
}
@test 'plugins base: lsgrep()' {
for i in 1 2 3; do mkdir -p "${BASH_IT}/${i}"; done
cd $BASH_IT
run lsgrep 2
assert_success
assert_equal $output 2
}
@test 'plugins base: buf()' {
declare -r file="${BATS_TEST_TMPDIR}/file"
touch $file
# Take one timestamp before running the `buf` function
declare -r stamp1=$(date +%Y%m%d_%H%M%S)
run buf $file
# Take another timestamp after running `buf`.
declare -r stamp2=$(date +%Y%m%d_%H%M%S)
# Verify that the backup file ends with one of the two timestamps.
# This is done to avoid race conditions where buf is run close to the end
# of a second, in which case the second timestamp might be in the next second,
# causing the test to fail.
# By using `or` for the two checks, we can verify that one of the two files is present.
# In most cases, it's going to have the same timestamp anyway.
# We can't use `assert_file_exist` here, since it only checks for a single file name.
assert [ -e "${file}_${stamp1}" \
-o -e "${file}_${stamp2}" ]
}
@@ -0,0 +1,384 @@
# shellcheck shell=bats
load "${MAIN_BASH_IT_DIR?}/test/test_helper.bash"
function local_setup_file() {
setup_libs "helpers"
load "${BASH_IT?}/plugins/available/battery.plugin.bash"
}
# Sets up the `_command_exists` function so that it only responds `true` if called with
# the name of the function that was passed in as an argument to `setup_command_exists`.
# This is used to ensure that the test cases can test the various energy management tools
# without actually having them. When called like
#
# setup_command_exists "pmset"
#
# then calling `_command_exists "pmset"` will return `true`,
# while calling `_command_exists "ioreg"` (or other commands) will return `false`.
#
# It's cool that Bash allows to define functions within functions, works almost like
# a closure in JavaScript.
function setup_command_exists {
success_command="$1"
function _command_exists {
case "$1" in
"${success_command}")
true
;;
*)
false
;;
esac
}
}
#######################
#
# no tool
#
@test 'plugins battery: battery-percentage with no tool' {
setup_command_exists "fooooo"
run battery_percentage
assert_output "no"
}
#######################
#
# pmset
#
# Creates a `pmset` function that simulates output like the real `pmset` command.
# The passed in parameter is used for the remaining battery percentage.
function setup_pmset {
percent="$1"
function pmset {
printf "\-InternalBattery-0 (id=12345) %s; discharging; 16:00 remaining present: true" "${percent}"
}
}
@test 'plugins battery: battery-percentage with pmset, 100%' {
setup_command_exists "pmset"
setup_pmset "100%"
run battery_percentage
assert_output "100"
}
@test 'plugins battery: battery-percentage with pmset, 98%' {
setup_command_exists "pmset"
setup_pmset "98%"
run battery_percentage
assert_output "98"
}
@test 'plugins battery: battery-percentage with pmset, 98.5%' {
setup_command_exists "pmset"
setup_pmset "98.5%"
run battery_percentage
assert_output "98"
}
@test 'plugins battery: battery-percentage with pmset, 4%' {
setup_command_exists "pmset"
setup_pmset "4%"
run battery_percentage
assert_output "04"
}
@test 'plugins battery: battery-percentage with pmset, no status' {
setup_command_exists "pmset"
setup_pmset ""
run battery_percentage
assert_output "-1"
}
#######################
#
# acpi
#
# Creates a `acpi` function that simulates output like the real `acpi` command.
# The passed in parameters are used for
# 1) the remaining battery percentage.
# 2) the battery status
function setup_acpi {
percent="$1"
status="$2"
function acpi {
printf "Battery 0: %s, %s, 01:02:48 until charged" "${status}" "${percent}"
}
}
@test 'plugins battery: battery-percentage with acpi, 100% Full' {
setup_command_exists "acpi"
setup_acpi "100%" "Full"
run battery_percentage
assert_output "100"
}
@test 'plugins battery: battery-percentage with acpi, 98% Charging' {
setup_command_exists "acpi"
setup_acpi "98%" "Charging"
run battery_percentage
assert_output "98"
}
@test 'plugins battery: battery-percentage with acpi, 98% Discharging' {
setup_command_exists "acpi"
setup_acpi "98%" "Discharging"
run battery_percentage
assert_output "98"
}
@test 'plugins battery: battery-percentage with acpi, 98% Unknown' {
setup_command_exists "acpi"
setup_acpi "98%" "Unknown"
run battery_percentage
assert_output "98"
}
@test 'plugins battery: battery-percentage with acpi, 4% Charging' {
setup_command_exists "acpi"
setup_acpi "4%" "Charging"
run battery_percentage
assert_output "04"
}
@test 'plugins battery: battery-percentage with acpi, 4% no status' {
setup_command_exists "acpi"
setup_acpi "4%" ""
run battery_percentage
assert_output "04"
}
@test 'plugins battery: battery-percentage with acpi, no status' {
setup_command_exists "acpi"
setup_acpi "" ""
run battery_percentage
assert_output "-1"
}
#######################
#
# upower
#
# Creates a `upower` function that simulates output like the real `upower` command.
# The passed in parameter is used for the remaining battery percentage.
function setup_upower {
percent="$1"
BAT0="/org/freedesktop/UPower/devices/battery_BAT$RANDOM"
function upower {
case $1 in
'-e'|'--enumerate')
printf '%s\n' "$BAT0" "/org/freedesktop/UPower/devices/mouse_hid_${RANDOM}_battery"
;;
'-i'|'--show-info')
if [[ $2 == "$BAT0" ]]
then
printf "voltage: 12.191 V\n time to full: 57.3 minutes\n percentage: %s\n capacity: 84.6964" "${percent}"
else
false
fi
;;
esac
}
}
@test 'plugins battery: battery-percentage with upower, 100%' {
setup_command_exists "upower"
setup_upower "100.00%"
run battery_percentage
assert_output "100"
}
@test 'plugins battery: battery-percentage with upower, 98%' {
setup_command_exists "upower"
setup_upower "98.4567%"
run battery_percentage
assert_output "98"
}
@test 'plugins battery: battery-percentage with upower, 98.5%' {
setup_command_exists "upower"
setup_upower "98.5%"
run battery_percentage
assert_output "98"
}
@test 'plugins battery: battery-percentage with upower, 4%' {
setup_command_exists "upower"
setup_upower "4.2345%"
run battery_percentage
assert_output "04"
}
@test 'plugins battery: battery-percentage with upower, no output' {
setup_command_exists "upower"
setup_upower ""
run battery_percentage
assert_output "-1"
}
#######################
#
# ioreg
#
# Creates a `ioreg` function that simulates output like the real `ioreg` command.
# The passed in parameter is used for the remaining battery percentage.
function setup_ioreg {
percent="$1"
function ioreg {
printf "\"MaxCapacity\" = 100\n\"CurrentCapacity\" = %s" "${percent}"
}
}
@test 'plugins battery: battery-percentage with ioreg, 100%' {
setup_command_exists "ioreg"
setup_ioreg "100%"
run battery_percentage
assert_output "100"
}
@test 'plugins battery: battery-percentage with ioreg, 98%' {
setup_command_exists "ioreg"
setup_ioreg "98%"
run battery_percentage
assert_output "98"
}
@test 'plugins battery: battery-percentage with ioreg, 98.5%' {
setup_command_exists "ioreg"
setup_ioreg "98.5%"
run battery_percentage
assert_output "98"
}
@test 'plugins battery: battery-percentage with ioreg, 4%' {
setup_command_exists "ioreg"
setup_ioreg "4%"
run battery_percentage
assert_output "04"
}
@test 'plugins battery: battery-percentage with ioreg, no status' {
setup_command_exists "ioreg"
# Simulate that no battery is present
function ioreg {
printf ""
}
run battery_percentage
assert_output "-1"
}
#######################
#
# WMIC
#
# Creates a `WMIC` function that simulates output like the real `WMIC` command.
# The passed in parameter is used for the remaining battery percentage.
function setup_WMIC {
percent="$1"
function WMIC {
printf "Charge: %s" "${percent}"
}
}
@test 'plugins battery: battery-percentage with WMIC, 100%' {
setup_command_exists "WMIC"
setup_WMIC "100%"
run battery_percentage
assert_output "100"
}
@test 'plugins battery: battery-percentage with WMIC, 98%' {
setup_command_exists "WMIC"
setup_WMIC "98%"
run battery_percentage
assert_output "98"
}
@test 'plugins battery: battery-percentage with WMIC, 98.5%' {
setup_command_exists "WMIC"
setup_WMIC "98.5%"
run battery_percentage
assert_output "98"
}
@test 'plugins battery: battery-percentage with WMIC, 4%' {
setup_command_exists "WMIC"
setup_WMIC "4%"
run battery_percentage
assert_output "04"
}
@test 'plugins battery: battery-percentage with WMIC, no status' {
setup_command_exists "WMIC"
setup_WMIC ""
run battery_percentage
assert_output "-1"
}
@@ -0,0 +1,41 @@
# shellcheck shell=bats
load "${MAIN_BASH_IT_DIR?}/test/test_helper.bash"
function local_setup_file() {
setup_libs "command_duration"
load "${BASH_IT?}/plugins/available/cmd-returned-notify.plugin.bash"
}
@test "plugins cmd-returned-notify: notify after elapsed time" {
export NOTIFY_IF_COMMAND_RETURNS_AFTER=0
export COMMAND_DURATION_START_SECONDS="${EPOCHREALTIME:-$SECONDS}"
sleep 1
run precmd_return_notification
assert_success
assert_output $'\a'
}
@test "plugins cmd-returned-notify: do not notify before elapsed time" {
export NOTIFY_IF_COMMAND_RETURNS_AFTER=10
export COMMAND_DURATION_START_SECONDS="${EPOCHREALTIME:-$SECONDS}"
sleep 1
run precmd_return_notification
assert_success
assert_output $''
}
@test "lib command_duration: preexec no output" {
export COMMAND_DURATION_START_SECONDS=
run _command_duration_pre_exec
assert_success
assert_output ""
}
@test "lib command_duration: preexec set COMMAND_DURATION_START_SECONDS" {
export COMMAND_DURATION_START_SECONDS=
assert_equal "${COMMAND_DURATION_START_SECONDS}" ""
NOW="${EPOCHREALTIME:-$SECONDS}"
_command_duration_pre_exec
# We need to make sure to account for nanoseconds...
assert_equal "${COMMAND_DURATION_START_SECONDS%.*}" "${NOW%.*}"
}
+74
View File
@@ -0,0 +1,74 @@
# shellcheck shell=bats
load "${MAIN_BASH_IT_DIR?}/test/test_helper.bash"
function local_setup_file() {
setup_libs "helpers"
}
function setup_go_path()
{
local go_path="$1"
# Make sure that the requested GO folder is available
assert_dir_exist "$go_path/bin"
# Make sure that the requested GO folder is on the path
export GOPATH="$go_path:${GOPATH:-}"
}
# We test `go version` in each test to account for users with goenv and no system go.
@test 'ensure _bash-it-gopath-pathmunge is defined' {
{ _command_exists go && go version &>/dev/null; } || skip 'golang not found'
load ../../plugins/available/go.plugin
run type -t _bash-it-gopath-pathmunge
assert_line 'function'
}
@test 'plugins go: single entry in GOPATH' {
{ _command_exists go && go version &>/dev/null; } || skip 'golang not found'
setup_go_path "$BASH_IT/test/fixtures/go/gopath"
load ../../plugins/available/go.plugin
assert_equal "$(cut -d':' -f1 <<<$PATH)" "$BASH_IT/test/fixtures/go/gopath/bin"
}
@test 'plugins go: single entry in GOPATH, with space' {
{ _command_exists go && go version &>/dev/null; } || skip 'golang not found'
setup_go_path "$BASH_IT/test/fixtures/go/go path"
load ../../plugins/available/go.plugin
assert_equal "$(cut -d':' -f1 <<<$PATH)" "$BASH_IT/test/fixtures/go/go path/bin"
}
@test 'plugins go: single entry in GOPATH, with escaped space' {
skip 'huh?'
{ _command_exists go && go version &>/dev/null; } || skip 'golang not found'
setup_go_path "$BASH_IT/test/fixtures/go/go\ path"
load ../../plugins/available/go.plugin
assert_equal "$(cut -d':' -f1 <<<$PATH)" "$BASH_IT/test/fixtures/go/go\ path/bin"
}
@test 'plugins go: multiple entries in GOPATH' {
{ _command_exists go && go version &>/dev/null; } || skip 'golang not found'
setup_go_path "$BASH_IT/test/fixtures/go/gopath"
setup_go_path "$BASH_IT/test/fixtures/go/gopath2"
load ../../plugins/available/go.plugin
assert_equal "$(cut -d':' -f1,2 <<<$PATH)" "$BASH_IT/test/fixtures/go/gopath2/bin:$BASH_IT/test/fixtures/go/gopath/bin"
}
@test 'plugins go: multiple entries in GOPATH, with space' {
{ _command_exists go && go version &>/dev/null; } || skip 'golang not found'
setup_go_path "$BASH_IT/test/fixtures/go/gopath"
setup_go_path "$BASH_IT/test/fixtures/go/go path"
load ../../plugins/available/go.plugin
assert_equal "$(cut -d':' -f1,2 <<<$PATH)" "$BASH_IT/test/fixtures/go/go path/bin:$BASH_IT/test/fixtures/go/gopath/bin"
}
@test 'plugins go: multiple entries in GOPATH, with escaped space' {
skip 'huh?'
{ _command_exists go && go version &>/dev/null; } || skip 'golang not found'
setup_go_path "$BASH_IT/test/fixtures/go/gopath"
setup_go_path "$BASH_IT/test/fixtures/go/go path"
load ../../plugins/available/go.plugin
assert_equal "$(cut -d':' -f1,2 <<<$PATH)" "$BASH_IT/test/fixtures/go/go\ path/bin:$BASH_IT/test/fixtures/go/gopath/bin"
}
+31
View File
@@ -0,0 +1,31 @@
# shellcheck shell=bats
load "${MAIN_BASH_IT_DIR?}/test/test_helper.bash"
function local_setup_file() {
setup_libs "helpers"
}
@test "plugins ruby: remove_gem is defined" {
run load "${BASH_IT?}/plugins/available/ruby.plugin.bash"
assert_success
load "${BASH_IT?}/plugins/available/ruby.plugin.bash"
run type remove_gem
assert_line -n 1 "remove_gem () "
}
@test "plugins ruby: PATH includes ~/.gem/ruby/bin" {
if ! type ruby >/dev/null; then
skip 'ruby not installed'
fi
mkdir -p "$(ruby -e 'print Gem.user_dir')/bin"
run load "${BASH_IT?}/plugins/available/ruby.plugin.bash"
assert_success
load "${BASH_IT?}/plugins/available/ruby.plugin.bash"
local last_path_entry="$(tail -1 <<<"${PATH//:/$'\n'}")"
[[ "${last_path_entry}" == "$(ruby -e 'print Gem.user_dir')/bin" ]]
}
@@ -0,0 +1,42 @@
# shellcheck shell=bats
load "${MAIN_BASH_IT_DIR?}/test/test_helper.bash"
function local_setup_file() {
setup_libs "helpers"
load "${BASH_IT?}/plugins/available/xterm.plugin.bash"
}
@test "plugins xterm: shorten command output" {
export SHORT_TERM_LINE=true
run _short-command "${BASH_IT}/test/fixtures/plugin/xterm/files"/*
assert_success
assert_output "${BASH_IT}/test/fixtures/plugin/xterm/files/arg0"
}
@test "plugins xterm: full command output" {
export SHORT_TERM_LINE=false
run _short-command "${BASH_IT}/test/fixtures/plugin/xterm/files"/*
assert_success
assert_output "$(echo "${BASH_IT}/test/fixtures/plugin/xterm/files"/*)"
}
@test "plugins xterm: shorten dirname output" {
export SHORT_TERM_LINE=true
run _short-dirname
assert_success
assert_output "$(basename "${PWD}")"
}
@test "plugins xterm: full dirname output" {
export SHORT_TERM_LINE=false
run _short-dirname
assert_success
assert_output "${PWD}"
}
@test "plugins xterm: set xterm title" {
run set_xterm_title title
assert_success
assert_output $'\033]0;title\007'
}
+117
View File
@@ -0,0 +1,117 @@
# shellcheck shell=bash
function setup_file() {
common_setup_file
}
function common_setup_file() {
# export *everything* to subshells, needed to support tests
set -a
# Locate ourselves for easy reference.
TEST_MAIN_DIR="${MAIN_BASH_IT_DIR:-${BATS_TEST_DIRNAME?}/../..}/test"
TEST_DEPS_DIR="${MAIN_BASH_IT_DIR:-${TEST_MAIN_DIR}/..}/test_lib"
# Load the BATS modules we use:
load "${TEST_DEPS_DIR}/bats-support/load.bash"
load "${TEST_DEPS_DIR}/bats-assert/load.bash"
load "${TEST_DEPS_DIR}/bats-file/load.bash"
# shellcheck disable=SC2034 # Clear any inherited environment:
XDG_DUMMY="" BASH_IT_DUMMY="" # avoid possible invalid reference:
unset "${!XDG_@}" "${!BASH_IT@}" # unset all BASH_IT* and XDG_* variables
unset GIT_HOSTING NGINX_PATH IRC_CLIENT TODO SCM_CHECK
# 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.
readonly HOME="${BATS_SUITE_TMPDIR?}"
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 "Bash It BATS Runner"
git config --global user.email "bats@bash.it"
git config --global advice.detachedHead false
git config --global init.defaultBranch "master"
# Locate the temporary folder, avoid double-slash.
BASH_IT="${BATS_FILE_TMPDIR//\/\///}/.bash_it"
# This sets up a local test fixture, i.e. a completely fresh and isolated Bash-it directory. This is done to avoid messing with your own Bash-it source directory.
git --git-dir="${MAIN_BASH_IT_GITDIR?}" worktree add -d "${BASH_IT}"
load "${BASH_IT?}/vendor/github.com/erichs/composure/composure.sh"
# support 'plumbing' metadata
cite _about _param _example _group _author _version
cite about-alias about-plugin about-completion
# Run any local test setup
local_setup_file
set +a # not needed, but symetiric!
}
# Load standard _Bash It_ libraries
function setup_libs() {
local lib
# Use a loop to allow convenient short-circuiting for some test files
for lib in "log" "utilities" "helpers" "search" "preexec" "colors" "command_duration"; do
load "${BASH_IT?}/lib/${lib}.bash" || return
# shellcheck disable=SC2015 # short-circuit if we've reached the requested library
[[ "${lib}" == "${1:-}" ]] && return 0 || true
done
return 0
}
function local_setup_file() {
true
}
function local_setup() {
true
}
function local_teardown() {
true
}
function clean_test_fixture() {
rm -rf "${BASH_IT_CONFIG?}/enabled"
rm -rf "${BASH_IT_CONFIG?}/aliases/enabled"
rm -rf "${BASH_IT_CONFIG?}/completion/enabled"
rm -rf "${BASH_IT_CONFIG?}/plugins/enabled"
rm -rf "${BASH_IT_CONFIG?}/tmp/cache"
rm -rf "${BASH_IT_CONFIG?}/profiles"/test*.bash_it
}
function setup_test_fixture() {
mkdir -p "${BASH_IT_CONFIG?}/enabled"
mkdir -p "${BASH_IT_CONFIG?}/aliases/enabled"
mkdir -p "${BASH_IT_CONFIG?}/completion/enabled"
mkdir -p "${BASH_IT_CONFIG?}/plugins/enabled"
}
function setup() {
# be independent of git's system configuration
export GIT_CONFIG_NOSYSTEM
# Locate the temporary folder:
BASH_IT_CONFIG="${BASH_IT?}" #"${BATS_TEST_TMPDIR//\/\///}"
export XDG_CACHE_HOME="${BATS_TEST_TMPDIR?}"
setup_test_fixture
local_setup
}
function teardown() {
unset GIT_CONFIG_NOSYSTEM
local_teardown
clean_test_fixture
}
function teardown_file() {
# This only serves to clean metadata from the real git repo.
git --git-dir="${MAIN_BASH_IT_GITDIR?}" worktree remove -f "${BASH_IT?}"
}
+73
View File
@@ -0,0 +1,73 @@
# shellcheck shell=bats
load "${MAIN_BASH_IT_DIR?}/test/test_helper.bash"
function local_setup_file() {
setup_libs "colors" #"theme"
load "${BASH_IT?}/themes/base.theme.bash"
}
@test 'themes base: battery_percentage should not exist' {
run type -a battery_percentage &> /dev/null
assert_failure
}
@test 'themes base: battery_percentage should exist if battery plugin loaded' {
load "${BASH_IT?}/plugins/available/battery.plugin.bash"
run type -a battery_percentage &> /dev/null
assert_success
}
@test 'themes base: battery_char should exist' {
run type -t battery_char
assert_success
assert_line "function"
run battery_char
assert_line -n 0 ""
}
@test 'themes base: battery_char should exist if battery plugin loaded' {
unset -f battery_char
load "${BASH_IT?}/plugins/available/battery.plugin.bash"
run type -t battery_percentage
assert_success
assert_line "function"
load "${BASH_IT?}/themes/base.theme.bash"
run type -t battery_char
assert_success
assert_line "function"
run battery_char
assert_success
run type -a battery_char
assert_output --partial 'THEME_BATTERY_PERCENTAGE_CHECK'
}
@test 'themes base: battery_charge should exist' {
run type -a battery_charge &> /dev/null
assert_success
run battery_charge
assert_success
assert_output ""
}
@test 'themes base: battery_charge should exist if battery plugin loaded' {
unset -f battery_charge
load "${BASH_IT?}/plugins/available/battery.plugin.bash"
load "${BASH_IT?}/themes/base.theme.bash"
run type -a battery_charge &> /dev/null
assert_success
run battery_charge
assert_success
run type -a battery_charge
assert_line ' no)'
}
+387
View File
@@ -0,0 +1,387 @@
# shellcheck shell=bats
# shellcheck disable=SC2034
# shellcheck disable=SC2016
load "${MAIN_BASH_IT_DIR?}/test/test_helper.bash"
function local_setup_file() {
setup_libs "colors" #"theme"
load "${BASH_IT?}/themes/base.theme.bash"
load "${BASH_IT?}/themes/githelpers.theme.bash"
}
add_commit() {
local file_name="general-${RANDOM}"
touch "${file_name}"
echo "" >> "${file_name}"
git add "${file_name}"
git commit -m"message"
}
enter_new_git_repo() {
repo="$(setup_repo)"
pushd "${repo}"
}
setup_repo() {
upstream="$(mktemp -d)"
pushd "$upstream" > /dev/null
git init . > /dev/null
echo "$upstream"
}
setup_repo_with_upstream() {
upstream="$(setup_repo)"
pushd "$upstream" > /dev/null
add_commit > /dev/null
git checkout -b branch-two
git checkout -b gone-branch
git checkout master
popd > /dev/null
downstream="$(setup_repo)"
pushd "$downstream" > /dev/null
add_commit > /dev/null
git remote add my-remote "$upstream"
git fetch my-remote
git branch -u my-remote/master > /dev/null
popd > /dev/null
pushd "$upstream" > /dev/null
git branch -d gone-branch > /dev/null
popd > /dev/null
pushd "$downstream" > /dev/null
git fetch my-remote
popd > /dev/null
echo "$downstream"
}
@test 'themes base: Git: when tracking a remote branch: it shows the commits ahead and behind' {
pre="\$(_git-friendly-ref)"
remote="$(setup_repo)"
pushd "$remote"
add_commit
add_commit
popd
clone="$(mktemp -d)"
pushd "$clone"
git clone "$remote" clone
cd clone
SCM_GIT_SHOW_COMMIT_COUNT=true
git_prompt_vars
assert_equal "$SCM_BRANCH" "${pre}"
add_commit
git_prompt_vars
assert_equal "$SCM_BRANCH" "${pre} ↑1"
add_commit
git_prompt_vars
assert_equal "$SCM_BRANCH" "${pre} ↑2"
popd
pushd "$remote"
add_commit
add_commit
add_commit
popd
pushd "$clone/clone"
git fetch
git_prompt_vars
assert_equal "$SCM_BRANCH" "${pre} ↑2 ↓3"
git reset HEAD~2 --hard
SCM_GIT_BEHIND_CHAR="↓"
git_prompt_vars
assert_equal "$SCM_BRANCH" "${pre} ↓3"
}
@test 'themes base: Git: when stashes exist: it shows the number of stashes' {
pre="\$(_git-friendly-ref)"
enter_new_git_repo
add_commit
touch file
git add file
git stash
SCM_GIT_SHOW_STASH_INFO=true
git_prompt_vars
assert_equal "$SCM_BRANCH" "${pre} {1}"
touch file2
git add file2
git stash
git_prompt_vars
assert_equal "$SCM_BRANCH" "${pre} {2}"
}
@test 'themes base: Git: remote info: when there is no upstream remote: is empty' {
pre="\$(_git-friendly-ref)"
post=" ↑1 ↓1"
enter_new_git_repo
add_commit
git_prompt_vars
assert_equal "$SCM_BRANCH" "${pre}"
}
@test 'themes base: Git: remote info: when SCM_GIT_SHOW_REMOTE_INFO is true: includes the remote' {
pre="\$(_git-friendly-ref) → "
eval_pre="master → "
post=" ↑1 ↓1"
repo="$(setup_repo_with_upstream)"
pushd "${repo}"
SCM_GIT_SHOW_REMOTE_INFO=true
SCM_GIT_SHOW_COMMIT_COUNT=true
git_prompt_vars
assert_equal "$SCM_BRANCH" "${pre}my-remote${post}"
git branch -u my-remote/branch-two
git_prompt_vars
assert_equal "$SCM_BRANCH" "${pre}\$(_git-upstream)${post}"
assert_equal "$(eval "echo \"$SCM_BRANCH\"")" "${eval_pre}my-remote/branch-two${post}"
}
@test 'themes base: Git: remote info: when SCM_GIT_SHOW_REMOTE_INFO is auto: includes the remote when more than one remote' {
pre="\$(_git-friendly-ref)"
eval_pre="master"
post=" ↑1 ↓1"
repo="$(setup_repo_with_upstream)"
pushd "${repo}"
SCM_GIT_SHOW_REMOTE_INFO=auto
SCM_GIT_SHOW_COMMIT_COUNT=true
git_prompt_vars
assert_equal "$SCM_BRANCH" "${pre}${post}"
pre="${pre} → "
eval_pre="${eval_pre} → "
git branch -u my-remote/branch-two
git_prompt_vars
assert_equal "$SCM_BRANCH" "${pre}\$(_git-upstream-branch)${post}"
assert_equal "$(eval "echo \"$SCM_BRANCH\"")" "${eval_pre}branch-two${post}"
git remote add second-remote "$(mktemp -d)"
git branch -u my-remote/master
git_prompt_vars
assert_equal "$SCM_BRANCH" "${pre}my-remote${post}"
git branch -u my-remote/branch-two
git_prompt_vars
assert_equal "$SCM_BRANCH" "${pre}\$(_git-upstream)${post}"
assert_equal "$(eval "echo \"$SCM_BRANCH\"")" "${eval_pre}my-remote/branch-two${post}"
}
@test 'themes base: Git: remote info: when SCM_GIT_SHOW_REMOTE_INFO is false: never include the remote' {
pre="\$(_git-friendly-ref)"
eval_pre="master"
post=" ↑1 ↓1"
repo="$(setup_repo_with_upstream)"
pushd "${repo}"
git remote add second-remote "$(mktemp -d)"
git remote add third-remote "$(mktemp -d)"
SCM_GIT_SHOW_REMOTE_INFO=false
SCM_GIT_SHOW_COMMIT_COUNT=true
git_prompt_vars
assert_equal "$SCM_BRANCH" "${pre}${post}"
pre="${pre} → "
eval_pre="${eval_pre} → "
git branch -u my-remote/branch-two
git_prompt_vars
assert_equal "$SCM_BRANCH" "${pre}\$(_git-upstream-branch)${post}"
assert_equal "$(eval "echo \"$SCM_BRANCH\"")" "${eval_pre}branch-two${post}"
}
@test 'themes base: Git: remote info: when showing remote info: show if upstream branch is gone' {
pre="\$(_git-friendly-ref)"
post=" ↑1 ↓1"
repo="$(setup_repo_with_upstream)"
pushd "${repo}"
SCM_GIT_SHOW_REMOTE_INFO=true
SCM_GIT_SHOW_COMMIT_COUNT=true
git_prompt_vars
assert_equal "$SCM_BRANCH" "${pre} → my-remote${post}"
git checkout gone-branch
git fetch --prune --all
git_prompt_vars
assert_equal "$SCM_BRANCH" "${pre} ⇢ my-remote"
}
@test 'themes base: Git: git friendly ref: when a branch is checked out: shows that branch' {
enter_new_git_repo
git_prompt_vars
assert_equal "$(eval "echo \"$SCM_BRANCH\"")" "master"
git checkout -b second-branch
git_prompt_vars
assert_equal "$(eval "echo \"$SCM_BRANCH\"")" "second-branch"
}
@test 'themes base: Git: git friendly ref: when a branch is not checked out: shows that branch' {
enter_new_git_repo
git_prompt_vars
assert_equal "$(eval "echo \"$SCM_BRANCH\"")" "master"
git checkout -b second-branch
git_prompt_vars
assert_equal "$(eval "echo \"$SCM_BRANCH\"")" "second-branch"
}
@test 'themes base: Git: git friendly ref: when detached: commit has branch and tag: show a tag' {
enter_new_git_repo
add_commit
git tag first-tag
git checkout -b second-branch
add_commit
git checkout HEAD~1
git_prompt_vars
assert_equal "$(eval "echo \"$SCM_BRANCH\"")" "tag:first-tag"
}
@test 'themes base: Git: git friendly ref: when detached: commit has branch and no tag: show a branch' {
enter_new_git_repo
add_commit
git checkout -b second-branch
add_commit
git checkout HEAD~1
git_prompt_vars
assert_equal "$(eval "echo \"$SCM_BRANCH\"")" "detached:master"
}
@test 'themes base: Git: git friendly ref: when detached with no branch or tag: commit is parent to a named ref: show relative name' {
enter_new_git_repo
add_commit
add_commit
git checkout HEAD~1
git_prompt_vars
assert_equal "$(eval "echo \"$SCM_BRANCH\"")" "detached:master~1"
}
@test 'themes base: Git: git friendly ref: when detached with no branch or tag: commit is not parent to a named ref: show short sha' {
enter_new_git_repo
add_commit
add_commit
sha="$(git rev-parse --short HEAD)"
git reset --hard HEAD~1
git checkout "$sha"
git_prompt_vars
assert_equal "$(eval "echo \"$SCM_BRANCH\"")" "detached:$sha"
}
@test 'themes base: Git: git friendly ref: shows staged, unstaged, and untracked file counts' {
pre="\$(_git-friendly-ref)"
enter_new_git_repo
echo "line1" > file1
echo "line1" > file2
echo "line1" > file3
echo "line1" > file4
git add .
git commit -m"commit1"
git_prompt_vars
assert_equal "$SCM_STATE" " ✓"
echo "line2" >> file1
git add file1
SCM_GIT_SHOW_DETAILS=true
git_prompt_vars
assert_equal "$SCM_BRANCH" "${pre} S:1"
assert_equal "$SCM_STATE" " ✗"
assert_equal "$SCM_DIRTY" "3"
echo "line2" >> file2
echo "line2" >> file3
echo "line2" >> file4
git_prompt_vars
assert_equal "$SCM_BRANCH" "${pre} S:1 U:3"
assert_equal "$SCM_DIRTY" "2"
echo "line1" > newfile5
echo "line1" > newfile6
git_prompt_vars
assert_equal "$SCM_BRANCH" "${pre} S:1 U:3 ?:2"
assert_equal "$SCM_DIRTY" "1"
git config bash-it.hide-status 1
SCM_DIRTY='nope'
git_prompt_vars
assert_equal "$SCM_BRANCH" "${pre}"
assert_equal "$SCM_DIRTY" "nope"
}
@test 'themes base: Git: git user info: shows user initials' {
pre="\$(_git-friendly-ref)"
enter_new_git_repo
git config user.name "Cool User"
git_prompt_vars
assert_equal "$SCM_BRANCH" "${pre}"
SCM_GIT_SHOW_CURRENT_USER=true
git_prompt_vars
assert_equal "$SCM_BRANCH" "${pre} ☺︎ cu"
git config user.name "Çool Üser"
git_prompt_vars
assert_equal "$SCM_BRANCH" "${pre} ☺︎ çü"
# show initials set by `git pair`
git config user.initials "ab cd"
git_prompt_vars
assert_equal "$SCM_BRANCH" "${pre} ☺︎ ab+cd"
}
+106
View File
@@ -0,0 +1,106 @@
# shellcheck shell=bats
load "${MAIN_BASH_IT_DIR?}/test/test_helper.bash"
function local_setup_file() {
setup_libs "colors" #"theme"
load "${BASH_IT?}/themes/base.theme.bash"
}
function setup_repo {
upstream="$(mktemp -d)"
pushd "$upstream" > /dev/null
# Create a dummy SVN folder - this will not work with an actual `svn` command,
# but will be enough to trigger the SVN check in the base theme.
mkdir .svn
echo "$upstream"
}
function setup_svn_path {
local svn_path="$1"
# Make sure that the requested SVN script is available
assert_file_exist "$svn_path/svn"
# Make sure that the requested SVN script is on the path
export PATH="$svn_path:/usr/bin:/bin:/usr/sbin"
}
@test 'themes base: SVN: detect SVN repo' {
repo="$(setup_repo)"
pushd "$repo"
setup_svn_path "$BASH_IT/test/fixtures/svn/working"
# Init the base theme again so that the working SVN script is detected
_bash_it_appearance_scm_init
scm
# Make sure that the SVN command is used
assert_equal "$SCM" "$SCM_SVN"
}
@test 'themes base: SVN: detect SVN repo even from a subfolder' {
repo="$(setup_repo)"
pushd "$repo"
mkdir foo
pushd foo
setup_svn_path "$BASH_IT/test/fixtures/svn/working"
# init the base theme again so that the working SVN script is detected
_bash_it_appearance_scm_init
scm
# Make sure that the SVN command is used
assert_equal "$SCM" "$SCM_SVN"
}
@test 'themes base: SVN: no SCM if no .svn folder can be found' {
repo="$(setup_repo)"
pushd "$repo"
rm -rf .svn
setup_svn_path "$BASH_IT/test/fixtures/svn/working"
# Init the base theme again so that the working SVN script is detected
_bash_it_appearance_scm_init
scm
# Make sure that no SVN command is used
assert_equal "$SCM" "$SCM_NONE"
}
@test 'themes base: SVN: ignore SVN repo when using broken SVN command' {
repo="$(setup_repo)"
pushd "$repo"
setup_svn_path "$BASH_IT/test/fixtures/svn/broken"
# Init the base theme again so that the broken SVN script is detected
_bash_it_appearance_scm_init
scm
# Make sure that no SVN command is not used
assert_equal "$SCM" "$SCM_NONE"
}
@test 'themes base: SVN: ignore SVN repo even from a subfolder when using a broken SVN' {
repo="$(setup_repo)"
pushd "$repo"
mkdir foo
pushd foo
setup_svn_path "$BASH_IT/test/fixtures/svn/broken"
# Init the base theme again so that the broken SVN script is detected
_bash_it_appearance_scm_init
scm
# Make sure that no SVN command is used
assert_equal "$SCM" "$SCM_NONE"
}