| 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 |