xref: /freebsd/bin/pwd/tests/pwd_test.sh (revision 5b398611607b0dab2f2550ef73f62d41dab6fac5)
136ec2b1cSDag-Erling Smørgrav#
236ec2b1cSDag-Erling Smørgrav# Copyright (c) 2026 Dag-Erling Smørgrav
336ec2b1cSDag-Erling Smørgrav#
436ec2b1cSDag-Erling Smørgrav# SPDX-License-Identifier: BSD-2-Clause
536ec2b1cSDag-Erling Smørgrav#
636ec2b1cSDag-Erling Smørgrav
736ec2b1cSDag-Erling Smørgravatf_test_case logical
836ec2b1cSDag-Erling Smørgravlogical_head()
936ec2b1cSDag-Erling Smørgrav{
1036ec2b1cSDag-Erling Smørgrav	atf_set "descr" "Cases where pwd prints the " \
1136ec2b1cSDag-Erling Smørgrav		"logical working directory"
1236ec2b1cSDag-Erling Smørgrav}
1336ec2b1cSDag-Erling Smørgravlogical_body()
1436ec2b1cSDag-Erling Smørgrav{
1536ec2b1cSDag-Erling Smørgrav	root=$(realpath $PWD)
1636ec2b1cSDag-Erling Smørgrav	atf_check mkdir -p phy/baz
1736ec2b1cSDag-Erling Smørgrav	atf_check ln -s phy log
1836ec2b1cSDag-Erling Smørgrav	cd log/baz
1936ec2b1cSDag-Erling Smørgrav
2036ec2b1cSDag-Erling Smørgrav	# explicitly request logical
2136ec2b1cSDag-Erling Smørgrav	export PWD="$root/log/baz"
2236ec2b1cSDag-Erling Smørgrav	atf_check -o inline:"$root/log/baz\n" pwd -L
2336ec2b1cSDag-Erling Smørgrav	atf_check -o inline:"$root/log/baz\n" pwd -P -L
2436ec2b1cSDag-Erling Smørgrav
2536ec2b1cSDag-Erling Smørgrav	# logical is also the default
2636ec2b1cSDag-Erling Smørgrav	export PWD="$root/log/baz"
2736ec2b1cSDag-Erling Smørgrav	atf_check -o inline:"$root/log/baz\n" pwd
2836ec2b1cSDag-Erling Smørgrav}
2936ec2b1cSDag-Erling Smørgrav
3036ec2b1cSDag-Erling Smørgravatf_test_case physical
3136ec2b1cSDag-Erling Smørgravphysical_head()
3236ec2b1cSDag-Erling Smørgrav{
3336ec2b1cSDag-Erling Smørgrav	atf_set "descr" "Cases where pwd prints the " \
3436ec2b1cSDag-Erling Smørgrav		"physical working directory"
3536ec2b1cSDag-Erling Smørgrav}
3636ec2b1cSDag-Erling Smørgravphysical_body()
3736ec2b1cSDag-Erling Smørgrav{
3836ec2b1cSDag-Erling Smørgrav	root=$(realpath $PWD)
3936ec2b1cSDag-Erling Smørgrav	atf_check mkdir -p phy/baz
4036ec2b1cSDag-Erling Smørgrav	atf_check ln -s phy log
4136ec2b1cSDag-Erling Smørgrav	cd log/baz
4236ec2b1cSDag-Erling Smørgrav
4336ec2b1cSDag-Erling Smørgrav	# explicitly request physical
4436ec2b1cSDag-Erling Smørgrav	export PWD="$root/log/baz"
4536ec2b1cSDag-Erling Smørgrav	atf_check -o inline:"$root/phy/baz\n" pwd -P
4636ec2b1cSDag-Erling Smørgrav	atf_check -o inline:"$root/phy/baz\n" pwd -L -P
4736ec2b1cSDag-Erling Smørgrav
4836ec2b1cSDag-Erling Smørgrav	# request logical but $PWD is relative
4936ec2b1cSDag-Erling Smørgrav	export PWD="log/baz"
5036ec2b1cSDag-Erling Smørgrav	atf_check -o inline:"$root/phy/baz\n" pwd -L
5136ec2b1cSDag-Erling Smørgrav
5236ec2b1cSDag-Erling Smørgrav	# request logical but $PWD contains dot
5336ec2b1cSDag-Erling Smørgrav	export PWD="$root/log/./baz"
5436ec2b1cSDag-Erling Smørgrav	atf_check -o inline:"$root/phy/baz\n" pwd -L
5536ec2b1cSDag-Erling Smørgrav
5636ec2b1cSDag-Erling Smørgrav	# request logical but $PWD contains dot-dot
5736ec2b1cSDag-Erling Smørgrav	export PWD="$root/log/../log/baz"
5836ec2b1cSDag-Erling Smørgrav	atf_check -o inline:"$root/phy/baz\n" pwd -L
5936ec2b1cSDag-Erling Smørgrav
6036ec2b1cSDag-Erling Smørgrav	# request logical but $PWD does not exist
6136ec2b1cSDag-Erling Smørgrav	export PWD="$root/baz"
6236ec2b1cSDag-Erling Smørgrav	atf_check -o inline:"$root/phy/baz\n" pwd -L
6336ec2b1cSDag-Erling Smørgrav
6436ec2b1cSDag-Erling Smørgrav	# request logical but $PWD does not match
6536ec2b1cSDag-Erling Smørgrav	export PWD="$root/log"
6636ec2b1cSDag-Erling Smørgrav	atf_check -o inline:"$root/phy/baz\n" pwd -L
6736ec2b1cSDag-Erling Smørgrav}
6836ec2b1cSDag-Erling Smørgrav
69*5b398611SDag-Erling Smørgravatf_test_case stdout
70*5b398611SDag-Erling Smørgravstdout_head()
71*5b398611SDag-Erling Smørgrav{
72*5b398611SDag-Erling Smørgrav	atf_set descr "error writing to stdout"
73*5b398611SDag-Erling Smørgrav}
74*5b398611SDag-Erling Smørgravstdout_body()
75*5b398611SDag-Erling Smørgrav{
76*5b398611SDag-Erling Smørgrav	pwd=$(which pwd)
77*5b398611SDag-Erling Smørgrav	[ -f "$pwd" ] || atf_skip "unable to distinguish binary from builtin"
78*5b398611SDag-Erling Smørgrav	(
79*5b398611SDag-Erling Smørgrav		trap "" PIPE
80*5b398611SDag-Erling Smørgrav		# Give true(1) some time to exit.
81*5b398611SDag-Erling Smørgrav		sleep 1
82*5b398611SDag-Erling Smørgrav		$pwd 2>stderr
83*5b398611SDag-Erling Smørgrav		echo $? >result
84*5b398611SDag-Erling Smørgrav	) | true
85*5b398611SDag-Erling Smørgrav	atf_check -o inline:"1\n" cat result
86*5b398611SDag-Erling Smørgrav	atf_check -o match:"stdout" cat stderr
87*5b398611SDag-Erling Smørgrav}
88*5b398611SDag-Erling Smørgrav
8936ec2b1cSDag-Erling Smørgravatf_init_test_cases()
9036ec2b1cSDag-Erling Smørgrav{
9136ec2b1cSDag-Erling Smørgrav	atf_add_test_case logical
9236ec2b1cSDag-Erling Smørgrav	atf_add_test_case physical
93*5b398611SDag-Erling Smørgrav	atf_add_test_case stdout
9436ec2b1cSDag-Erling Smørgrav}
95