388 lines
8.7 KiB
Bash
388 lines
8.7 KiB
Bash
#!/usr/bin/env bats
|
|
|
|
load ../test_helper
|
|
load "${BASH_IT}/vendor/github.com/erichs/composure/composure.sh"
|
|
load ../../lib/log
|
|
|
|
cite _about _param _example _group _author _version
|
|
|
|
load ../../lib/helpers
|
|
load ../../themes/githelpers.theme
|
|
load ../../themes/base.theme
|
|
|
|
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"
|
|
}
|