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