Bash · 2617 bytes Raw Blame History
1 #!/bin/sh
2 TEST_PREFIX="[pushd-popd-dirs]"
3 . "$(cd "$(dirname "$0")/.." && pwd)/test_harness.sh"
4
5 section "1. pushd basic"
6 compare_output "pushd changes directory" 'pushd /tmp >/dev/null && pwd'
7 compare_output "pushd prints stack" 'pushd /tmp 2>/dev/null'
8 compare_output "pushd to HOME with tilde" 'pushd /tmp >/dev/null; pushd ~ >/dev/null && pwd'
9 compare_exit "pushd to nonexistent dir fails" 'pushd /nonexistent_xyz_12345 2>/dev/null'
10 compare_output "pushd swaps top two with no arg" 'pushd /tmp >/dev/null; pushd /var >/dev/null; pushd >/dev/null; pwd'
11 compare_output "pushd -n suppresses cd" 'cd /tmp; pushd -n /var 2>/dev/null; pwd'
12 compare_output "pushd to root" 'pushd / >/dev/null && pwd'
13 compare_output "pushd multiple dirs" 'pushd /tmp >/dev/null; pushd /var >/dev/null; pushd / >/dev/null; pwd'
14
15 section "2. popd basic"
16 compare_output "popd returns to previous dir" 'pushd /tmp >/dev/null; pushd /var >/dev/null; popd >/dev/null; pwd'
17 compare_exit "popd on empty stack fails" 'popd 2>/dev/null'
18 compare_output "popd -n suppresses cd" 'pushd /tmp >/dev/null; pushd /var >/dev/null; popd -n >/dev/null; pwd'
19 compare_output "multiple pushd then popd" 'pushd /tmp >/dev/null; pushd /var >/dev/null; pushd / >/dev/null; popd >/dev/null; popd >/dev/null; pwd'
20 compare_output "popd all the way back" 'ORIG=$(pwd); pushd /tmp >/dev/null; pushd /var >/dev/null; popd >/dev/null; popd >/dev/null; pwd'
21
22 section "3. popd with index"
23 compare_output "popd +0 removes top" 'pushd /tmp >/dev/null; pushd /var >/dev/null; popd +0 >/dev/null; pwd'
24 compare_output "popd +1 removes second" 'pushd /tmp >/dev/null; pushd /var >/dev/null; popd +1 >/dev/null 2>/dev/null; pwd'
25
26 section "4. dirs"
27 compare_exit "dirs shows current dir" 'dirs'
28 compare_output "dirs -c clears stack" 'pushd /tmp >/dev/null; dirs -c; dirs'
29 compare_output "dirs -p one per line" 'pushd /tmp >/dev/null; dirs -p'
30 compare_output "dirs -v numbered" 'pushd /tmp >/dev/null; dirs -v'
31 compare_output "dirs after pushd shows stack" 'pushd /tmp >/dev/null; pushd /var >/dev/null; dirs'
32 compare_output "dirs -l long format" 'pushd /tmp >/dev/null; dirs -l'
33 compare_output "dirs with no stack shows cwd" 'dirs -c; dirs'
34
35 section "5. directory stack round-trip"
36 compare_output "pushd/popd preserves original" 'ORIG=$(pwd); pushd /tmp >/dev/null; pushd /var >/dev/null; popd >/dev/null; popd >/dev/null; test "$(pwd)" = "$ORIG" && echo yes'
37 compare_output "deep stack round-trip" 'ORIG=$(pwd); pushd /tmp >/dev/null; pushd /var >/dev/null; pushd / >/dev/null; popd >/dev/null; popd >/dev/null; popd >/dev/null; test "$(pwd)" = "$ORIG" && echo yes'
38
39 print_summary