#! /usr/libexec/atf-sh
#
# Copyright (c) 2026 Dag-Erling Smørgrav
#
# SPDX-License-Identifier: BSD-2-Clause
#

atf_test_case logical
logical_head()
{
	atf_set "descr" "Cases where pwd prints the " \
		"logical working directory"
}
logical_body()
{
	root=$(realpath $PWD)
	atf_check mkdir -p phy/baz
	atf_check ln -s phy log
	cd log/baz

	# explicitly request logical
	export PWD="$root/log/baz"
	atf_check -o inline:"$root/log/baz\n" pwd -L
	atf_check -o inline:"$root/log/baz\n" pwd -P -L

	# logical is also the default
	export PWD="$root/log/baz"
	atf_check -o inline:"$root/log/baz\n" pwd
}

atf_test_case physical
physical_head()
{
	atf_set "descr" "Cases where pwd prints the " \
		"physical working directory"
}
physical_body()
{
	root=$(realpath $PWD)
	atf_check mkdir -p phy/baz
	atf_check ln -s phy log
	cd log/baz

	# explicitly request physical
	export PWD="$root/log/baz"
	atf_check -o inline:"$root/phy/baz\n" pwd -P
	atf_check -o inline:"$root/phy/baz\n" pwd -L -P

	# request logical but $PWD is relative
	export PWD="log/baz"
	atf_check -o inline:"$root/phy/baz\n" pwd -L

	# request logical but $PWD contains dot
	export PWD="$root/log/./baz"
	atf_check -o inline:"$root/phy/baz\n" pwd -L

	# request logical but $PWD contains dot-dot
	export PWD="$root/log/../log/baz"
	atf_check -o inline:"$root/phy/baz\n" pwd -L

	# request logical but $PWD does not exist
	export PWD="$root/baz"
	atf_check -o inline:"$root/phy/baz\n" pwd -L

	# request logical but $PWD does not match
	export PWD="$root/log"
	atf_check -o inline:"$root/phy/baz\n" pwd -L
}

atf_test_case stdout
stdout_head()
{
	atf_set descr "error writing to stdout"
}
stdout_body()
{
	pwd=$(which pwd)
	[ -f "$pwd" ] || atf_skip "unable to distinguish binary from builtin"
	(
		trap "" PIPE
		# Give true(1) some time to exit.
		sleep 1
		$pwd 2>stderr
		echo $? >result
	) | true
	atf_check -o inline:"1\n" cat result
	atf_check -o match:"stdout" cat stderr
}

atf_init_test_cases()
{
	atf_add_test_case logical
	atf_add_test_case physical
	atf_add_test_case stdout
}
