summaryrefslogtreecommitdiffstats
path: root/t/t2012-checkout-last.sh
diff options
context:
space:
mode:
Diffstat (limited to 't/t2012-checkout-last.sh')
-rwxr-xr-xt/t2012-checkout-last.sh169
1 files changed, 169 insertions, 0 deletions
diff --git a/t/t2012-checkout-last.sh b/t/t2012-checkout-last.sh
new file mode 100755
index 0000000..1f6c4ed
--- /dev/null
+++ b/t/t2012-checkout-last.sh
@@ -0,0 +1,169 @@
+#!/bin/sh
+
+test_description='checkout can switch to last branch and merge base'
+
+GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME=main
+export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME
+
+. ./test-lib.sh
+
+test_expect_success 'setup' '
+ test_commit initial world hello &&
+ git branch other &&
+ test_commit --append second world "hello again"
+'
+
+test_expect_success '"checkout -" does not work initially' '
+ test_must_fail git checkout -
+'
+
+test_expect_success 'first branch switch' '
+ git checkout other
+'
+
+test_cmp_symbolic_HEAD_ref () {
+ echo refs/heads/"$1" >expect &&
+ git symbolic-ref HEAD >actual &&
+ test_cmp expect actual
+}
+
+test_expect_success '"checkout -" switches back' '
+ git checkout - &&
+ test_cmp_symbolic_HEAD_ref main
+'
+
+test_expect_success '"checkout -" switches forth' '
+ git checkout - &&
+ test_cmp_symbolic_HEAD_ref other
+'
+
+test_expect_success 'detach HEAD' '
+ git checkout $(git rev-parse HEAD)
+'
+
+test_expect_success '"checkout -" attaches again' '
+ git checkout - &&
+ test_cmp_symbolic_HEAD_ref other
+'
+
+test_expect_success '"checkout -" detaches again' '
+ git checkout - &&
+
+ git rev-parse other >expect &&
+ git rev-parse HEAD >actual &&
+ test_cmp expect actual &&
+
+ test_must_fail git symbolic-ref HEAD
+'
+
+test_expect_success 'more switches' '
+ for i in 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1
+ do
+ git checkout -b branch$i || return 1
+ done
+'
+
+more_switches () {
+ for i in 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1
+ do
+ git checkout branch$i || return 1
+ done
+}
+
+test_expect_success 'switch to the last' '
+ more_switches &&
+ git checkout @{-1} &&
+ test_cmp_symbolic_HEAD_ref branch2
+'
+
+test_expect_success 'switch to second from the last' '
+ more_switches &&
+ git checkout @{-2} &&
+ test_cmp_symbolic_HEAD_ref branch3
+'
+
+test_expect_success 'switch to third from the last' '
+ more_switches &&
+ git checkout @{-3} &&
+ test_cmp_symbolic_HEAD_ref branch4
+'
+
+test_expect_success 'switch to fourth from the last' '
+ more_switches &&
+ git checkout @{-4} &&
+ test_cmp_symbolic_HEAD_ref branch5
+'
+
+test_expect_success 'switch to twelfth from the last' '
+ more_switches &&
+ git checkout @{-12} &&
+ test_cmp_symbolic_HEAD_ref branch13
+'
+
+test_expect_success 'merge base test setup' '
+ git checkout -b another other &&
+ test_commit --append third world "hello again"
+'
+
+test_expect_success 'another...main' '
+ git checkout another &&
+ git checkout another...main &&
+
+ git rev-parse --verify main^ >expect &&
+ git rev-parse --verify HEAD >actual &&
+ test_cmp expect actual
+'
+
+test_expect_success '...main' '
+ git checkout another &&
+ git checkout ...main &&
+
+ git rev-parse --verify main^ >expect &&
+ git rev-parse --verify HEAD >actual &&
+ test_cmp expect actual
+'
+
+test_expect_success 'main...' '
+ git checkout another &&
+ git checkout main... &&
+
+ git rev-parse --verify main^ >expect &&
+ git rev-parse --verify HEAD >actual &&
+ test_cmp expect actual
+'
+
+test_expect_success '"checkout -" works after a rebase A' '
+ git checkout main &&
+ git checkout other &&
+ git rebase main &&
+ git checkout - &&
+ test_cmp_symbolic_HEAD_ref main
+'
+
+test_expect_success '"checkout -" works after a rebase A B' '
+ git branch moodle main~1 &&
+ git checkout main &&
+ git checkout other &&
+ git rebase main moodle &&
+ git checkout - &&
+ test_cmp_symbolic_HEAD_ref main
+'
+
+test_expect_success '"checkout -" works after a rebase -i A' '
+ git checkout main &&
+ git checkout other &&
+ git rebase -i main &&
+ git checkout - &&
+ test_cmp_symbolic_HEAD_ref main
+'
+
+test_expect_success '"checkout -" works after a rebase -i A B' '
+ git branch foodle main~1 &&
+ git checkout main &&
+ git checkout other &&
+ git rebase main foodle &&
+ git checkout - &&
+ test_cmp_symbolic_HEAD_ref main
+'
+
+test_done