# Store pwd to later go back before cleaning up set -l oldpwd (pwd) # Create a test directory to store our stuff. set -l base /tmp/cdcomp_test rm -Rf $base mkdir -p $base logmsg cd symlink non-resolution set real (mktemp -d) set link $base/link ln -s $real $link cd $link test "$PWD" = "$link" || echo "\$PWD != \$link:"\n "\$PWD: $PWD"\n "\$link: $link"\n test (pwd) = "$link" || echo "(pwd) != \$link:"\n "\$PWD: "(pwd)\n "\$link: $link"\n test (pwd -P) = "$real" || echo "(pwd -P) != \$real:"\n "\$PWD: $PWD"\n "\$real: $real"\n test (pwd -P -L) = "$link" || echo "(pwd -P -L) != \$link:"\n "\$PWD: $PWD"\n "\$link: $link"\n logmsg cd symlink completion # Create a symlink and verify logical completion. # create directory $base/through/the/looking/glass # symlink $base/somewhere/teleport -> $base/through/the/looking/glass # verify that .. completions work cd $base mkdir -p $base/through/the/looking/glass mkdir -p $base/somewhere mkdir $base/somewhere/a1 mkdir $base/somewhere/a2 mkdir $base/somewhere/a3 touch $base/through/the/looking/b(seq 1 3) mkdir $base/through/the/looking/d1 mkdir $base/through/the/looking/d2 mkdir $base/through/the/looking/d3 ln -s $base/through/the/looking/glass $base/somewhere/rabbithole cd $base/somewhere/rabbithole echo "ls:" complete -C'ls ../' echo "cd:" complete -C'cd ../' logmsg Virtual PWD inheritance # PWD should be imported and respected by fish cd $oldpwd mkdir -p $base/realhome set fish_path $PWD/../test/root/bin/fish ln -s $base/realhome $base/linkhome cd $base/linkhome set -l real_getcwd (pwd -P) env HOME=$base/linkhome $fish_path -c 'echo PWD is $PWD' # Do not inherit a virtual PWD that fails to resolve to getcwd (#5647) env HOME=$base/linkhome PWD=/tmp $fish_path -c 'echo $PWD' | read output_pwd test (realpath $output_pwd) = $real_getcwd and echo "BogusPWD test 1 succeeded" or echo "BogusPWD test 1 failed: $output_pwd vs $real_getcwd" env HOME=$base/linkhome PWD=/path/to/nowhere $fish_path -c 'echo $PWD' | read output_pwd test (realpath $output_pwd) = $real_getcwd and echo "BogusPWD test 2 succeeded" or echo "BogusPWD test 2 failed: $output_pwd vs $real_getcwd" # $CDPATH logmsg CDPATH set -g CDPATH $base cd linkhome test $PWD = $base/linkhome; and echo Gone to linkhome via CDPATH set -g CDPATH /tmp cd $base test $PWD = $base; and echo Gone to base cd linkhome test $PWD = $base/linkhome; and echo Gone to linkhome via implicit . in CDPATH set -g CDPATH ./ cd $base test $PWD = $base; and echo No crash with ./ CDPATH # test for directories beginning with a hyphen mkdir $base/-testdir cd $base cd -- -testdir test $PWD = $base/-testdir # cd back before removing the test directory again. cd $oldpwd rm -Rf $base logmsg on-variable PWD # Verify that PWD on-variable events are sent function __fish_test_changed_pwd --on-variable PWD echo "Changed to $PWD" end cd / functions --erase __fish_test_changed_pwd logmsg cd concurrency # Verify that cds don't stomp on each other. function __fish_test_thrash_cd set -l dir (mktemp -d) cd $dir for i in (seq 50) test (/bin/pwd) = $dir and test $PWD = $dir or echo "cd test failed" 1>&2 sleep .002 end end __fish_test_thrash_cd | __fish_test_thrash_cd | __fish_test_thrash_cd | __fish_test_thrash_cd | __fish_test_thrash_cd