summaryrefslogtreecommitdiffstats
path: root/test/test-commits.sh
diff options
context:
space:
mode:
Diffstat (limited to 'test/test-commits.sh')
-rwxr-xr-xtest/test-commits.sh436
1 files changed, 436 insertions, 0 deletions
diff --git a/test/test-commits.sh b/test/test-commits.sh
new file mode 100755
index 0000000..4593918
--- /dev/null
+++ b/test/test-commits.sh
@@ -0,0 +1,436 @@
+#!/bin/bash
+scriptDir="$(cd "$(dirname "$0")"; pwd)"
+
+source "$scriptDir/sonar-base.sh"
+
+tmpfile=""
+
+cd_to_tmp() {
+ tmpfile="/tmp/git-prompt-tests-$(time_now)$1"
+ mkdir -p "$tmpfile"
+ cd "$tmpfile"
+}
+
+rm_tmp() {
+ cd $scriptDir
+ rm -rf /tmp/git-prompt-tests*
+}
+test_commits_with_no_commits() {
+ cd_to_tmp
+ git init --quiet
+
+ assertEquals "0" "$(commits_ahead_of_remote)"
+ assertEquals "0" "$(commits_behind_of_remote)"
+
+ rm_tmp
+}
+
+test_commits_behind_no_remote() {
+ cd_to_tmp
+ git init --quiet
+
+ echo "foo" > foo
+ git add .
+ git commit -m "test commit" --quiet
+ assertEquals "0" "$(commits_behind_of_remote)"
+
+ rm_tmp
+}
+
+test_commits_ahead_no_remote() {
+ cd_to_tmp
+ git init --quiet
+
+ echo "foo" > foo
+ git add .
+ git commit -m "test commit" --quiet
+ assertEquals "0" "$(commits_ahead_of_remote)"
+
+ echo "bar" > bar
+ git add .
+ git commit -m "test commit" --quiet
+ assertEquals "0" "$(commits_ahead_of_remote)"
+
+ rm_tmp
+}
+
+test_commits_ahead_with_remote() {
+ cd_to_tmp "remote"
+ git init --quiet
+ touch README
+ git add .
+ git commit -m "initial commit" --quiet
+ remoteLocation="$(pwd)"
+
+ cd_to_tmp "new"
+ git init --quiet
+ git remote add origin $remoteLocation
+ git fetch origin --quiet
+ git checkout master --quiet
+ repoLocation="$(pwd)"
+
+ cd "$remoteLocation"
+ echo "foo" > foo
+ git add .
+ git commit -m "test commit" --quiet
+ cd "$repoLocation"
+ git fetch origin --quiet
+ assertEquals "1" "$(commits_ahead_of_remote)"
+
+ cd "$remoteLocation"
+ echo "bar" > bar
+ git add .
+ git commit -m "test commit" --quiet
+ cd "$repoLocation"
+ git fetch origin --quiet
+ assertEquals "2" "$(commits_ahead_of_remote)"
+
+ rm_tmp
+}
+
+test_commits_ahead_with_remote() {
+ cd_to_tmp "remote"
+ git init --quiet
+ touch README
+ git add .
+ git commit -m "initial commit" --quiet
+ remoteLocation="$(pwd)"
+
+ cd_to_tmp "new"
+ git init --quiet
+ git remote add origin $remoteLocation
+ git fetch origin --quiet
+ git checkout master --quiet
+
+ echo "foo" > foo
+ git add .
+ git commit -m "test commit" --quiet
+ assertEquals "1" "$(commits_ahead_of_remote)"
+
+ echo "bar" > bar
+ git add .
+ git commit -m "test commit" --quiet
+ assertEquals "2" "$(commits_ahead_of_remote)"
+
+ rm_tmp
+}
+
+test_remote_ahead_master() {
+ cd_to_tmp "remote"
+ git init --quiet
+ touch README
+ git add .
+ git commit -m "initial commit" --quiet
+ remoteLocation="$(pwd)"
+
+ cd_to_tmp "new"
+ git init --quiet
+ git remote add origin $remoteLocation
+ git fetch origin --quiet
+ git checkout master --quiet
+
+ git checkout -b foo --quiet
+ git push --quiet -u origin foo >/dev/null
+
+ echo "foo" > foo
+ git add .
+ git commit -m "test commit" --quiet
+ assertEquals "0" "$(remote_ahead_of_master)"
+ git push --quiet
+ assertEquals "1" "$(remote_ahead_of_master)"
+
+ echo "bar" > bar
+ git add .
+ git commit -m "test commit" --quiet
+ assertEquals "1" "$(remote_ahead_of_master)"
+ git push --quiet
+ assertEquals "2" "$(remote_ahead_of_master)"
+
+ rm_tmp
+}
+
+test_remote_behind_master() {
+ cd_to_tmp "remote"
+ git init --bare --quiet
+ remoteLocation="$(pwd)"
+
+ cd_to_tmp "new"
+ git init --quiet
+ git remote add origin $remoteLocation
+ git fetch origin --quiet
+ git checkout -b master --quiet
+ touch README
+ git add README
+ git commit -m "initial commit" --quiet
+
+ git push --quiet -u origin master >/dev/null
+ git reset --quiet --hard HEAD
+
+ git checkout -b foo --quiet
+ git push --quiet -u origin foo >/dev/null
+
+ assertEquals "0" "$(remote_behind_of_master)"
+ git checkout master --quiet
+ echo "foo" > foo
+ git add .
+ git commit -m "test commit" --quiet
+ git push --quiet >/dev/null
+ git checkout foo --quiet
+ assertEquals "1" "$(remote_behind_of_master)"
+
+ git checkout master --quiet
+ echo "bar" > bar
+ git add .
+ git commit -m "test commit" --quiet
+ git push --quiet >/dev/null
+ git checkout foo --quiet
+ assertEquals "2" "$(remote_behind_of_master)"
+
+ rm_tmp
+}
+
+test_remote_branch_starts_with_local_branch_name() {
+ cd_to_tmp "remote"
+ git init --bare --quiet
+ remoteLocation="$(pwd)"
+
+ cd_to_tmp "local"
+ git init --quiet
+ git remote add origin $remoteLocation
+ git fetch origin --quiet
+
+ git checkout -b master --quiet
+ touch README
+ git add README
+ git commit -m "initial commit" --quiet
+
+ git push --quiet -u origin master >/dev/null
+ git reset --quiet --hard HEAD
+
+ git checkout -b foobar --quiet
+ touch foobarfile
+ git add foobarfile
+ git commit -m "added foobar" --quiet
+ git push --quiet -u origin foobar >/dev/null
+
+ git checkout -b foo --quiet
+
+ assertEquals "0" "$(remote_ahead_of_master)"
+ assertEquals "0" "$(remote_behind_of_master)"
+ assertEquals "0" "$(commits_behind_of_remote)"
+ assertEquals "0" "$(commits_ahead_of_remote)"
+
+ rm_tmp
+}
+test_remote_branch_ends_with_local_branch_name() {
+ cd_to_tmp "remote"
+ git init --bare --quiet
+ remoteLocation="$(pwd)"
+
+ cd_to_tmp "local"
+ git init --quiet
+ git remote add origin $remoteLocation
+ git fetch origin --quiet
+
+ git checkout -b master --quiet
+ touch README
+ git add README
+ git commit -m "initial commit" --quiet
+
+ git push --quiet -u origin master >/dev/null
+ git reset --quiet --hard HEAD
+
+ git checkout -b foobar --quiet
+ touch foobarfile
+ git add foobarfile
+ git commit -m "added foobar" --quiet
+ git push --quiet -u origin foobar >/dev/null
+
+ git checkout -b bar --quiet
+
+ assertEquals "0" "$(remote_ahead_of_master)"
+ assertEquals "0" "$(remote_behind_of_master)"
+ assertEquals "0" "$(commits_behind_of_remote)"
+ assertEquals "0" "$(commits_ahead_of_remote)"
+
+ rm_tmp
+}
+
+test_dont_call_remote_branch_name() {
+ cd_to_tmp "remote"
+ git init --bare --quiet
+ remoteLocation="$(pwd)"
+
+ cd_to_tmp "new"
+ git init --quiet
+ git remote add origin $remoteLocation
+ git fetch origin --quiet
+ git checkout -b master --quiet
+ touch README
+ git add README
+ git commit -m "initial commit" --quiet
+
+ git push --quiet -u origin master >/dev/null
+ git reset --quiet --hard HEAD
+
+ git checkout -b foo --quiet
+ git push --quiet -u origin foo >/dev/null
+
+ remote_branch="$(remote_branch_name)"
+
+ debug_output="$(
+ {
+ set -x
+ output="$(
+ remote_behind_of_master "$remote_branch";
+ remote_ahead_of_master "$remote_branch";
+ commits_ahead_of_remote "$remote_branch";
+ commits_behind_of_remote "$remote_branch";
+ )"
+ set +x
+ } 2>&1
+ echo "$output"
+ )"
+
+ #Grep through the output and look for remote_branch_name being called
+ usages="$(echo "$debug_output" | grep 'remote_branch_name' | wc -l )"
+
+ #wc -l has a weird output
+ if [[ $OSTYPE == darwin* ]];then
+ expected=" 0"
+ else
+ expected="0"
+ fi;
+ assertEquals "$expected" "$usages"
+
+ rm_tmp
+}
+test_dont_remote_if_remote_is_master() {
+ cd_to_tmp
+ git init --quiet
+
+ remote_branch="origin/master"
+
+ debug_output="$(
+ {
+ set -x
+ output="$(
+ remote_behind_of_master "$remote_branch";
+ remote_ahead_of_master "$remote_branch";
+ )"
+ set +x
+ } 2>&1
+ echo "$output"
+ )"
+
+ usages="$(echo "$debug_output" | grep 'git rev-list' | wc -l )"
+
+ if [[ $OSTYPE == darwin* ]];then
+ expected=" 0"
+ else
+ expected="0"
+ fi;
+ assertEquals "$expected" "$usages"
+
+ rm_tmp
+}
+
+test_quiet_if_no_remote_master() {
+ cd_to_tmp "remote"
+ git init --quiet
+ touch README
+ git add .
+ git checkout -b foo --quiet
+ git commit -m "initial commit" --quiet
+ remoteLocation="$(pwd)"
+
+ cd_to_tmp "new"
+ git init --quiet
+ git remote add origin $remoteLocation
+ git fetch origin --quiet
+ git checkout foo --quiet
+ repoLocation="$(pwd)"
+
+ remote_branch="$(remote_branch_name)"
+
+ debug_output="$(
+ {
+ output="$(
+ remote_behind_of_master "$remote_branch";
+ )"
+ } 2>&1
+ echo "$output"
+ )"
+
+ assertEquals "0" "$debug_output"
+ debug_output="$(
+ {
+ output="$(
+ remote_ahead_of_master "$remote_branch";
+ )"
+ } 2>&1
+ echo "$output"
+ )"
+
+ assertEquals "0" "$debug_output"
+
+ rm_tmp
+}
+
+test_local_commits() {
+ local up="↑"
+ local both="⇵"
+ local down="↓"
+
+ cd_to_tmp "remote"
+
+ assertEquals "" "$(zsh_color_local_commits)"
+ assertEquals "" "$(bash_color_local_commits)"
+ assertEquals "" "$(color_local_commits)"
+
+ git init --quiet
+ touch README
+ git add .
+ git commit -m "initial commit" --quiet
+ remote="$(pwd)"
+
+ cd_to_tmp "new"
+ git init --quiet
+ git remote add origin $remote
+ git fetch origin --quiet
+ git checkout master --quiet
+ repo="$(pwd)"
+
+ assertEquals "" "$(zsh_color_local_commits)"
+ assertEquals "" "$(bash_color_local_commits)"
+ assertEquals "" "$(color_local_commits)"
+
+ cd "$repo"
+ echo "bar" > bar
+ git add .
+ git commit -m "test commit" --quiet
+
+ assertEquals "1$up" "$(zsh_color_local_commits)"
+ assertEquals "1$up" "$(bash_color_local_commits)"
+ assertEquals "1$up" "$(color_local_commits)"
+
+ cd "$remote"
+ echo "foo" > foo
+ git add .
+ git commit -m "test commit" --quiet
+
+ cd "$repo"
+ git fetch origin --quiet
+
+ assertEquals "1${both}1" "$(zsh_color_local_commits)"
+ assertEquals "1${both}1" "$(bash_color_local_commits)"
+ assertEquals "1${both}1" "$(color_local_commits)"
+
+ git reset --hard HEAD^ --quiet
+
+ assertEquals "1$down" "$(zsh_color_local_commits)"
+ assertEquals "1$down" "$(bash_color_local_commits)"
+ assertEquals "1$down" "$(color_local_commits)"
+}
+
+. ./shunit/shunit2