Import VX multicall utility and applets
This commit is contained in:
Executable
+77
@@ -0,0 +1,77 @@
|
||||
#!/bin/sh
|
||||
# tests/test_which.sh - Tests for which applet
|
||||
_test_name="which"
|
||||
. "$(dirname "$0")/harness.sh"
|
||||
|
||||
setup_tmpdir
|
||||
WHICH="$VX which"
|
||||
|
||||
echo "Running which tests..."
|
||||
|
||||
# --- basic: find a known binary ---
|
||||
_got="$($WHICH sh 2>/dev/null)"
|
||||
# sh should resolve to something in PATH
|
||||
if [ -n "$_got" ] && [ -x "$_got" ]; then
|
||||
pass "basic: finds sh"
|
||||
else
|
||||
fail "basic: finds sh" "got: $_got"
|
||||
fi
|
||||
|
||||
# --- basic: nonexistent command ---
|
||||
check_exit "basic: nonexistent exits 1" 1 $WHICH this_command_does_not_exist_xyz
|
||||
|
||||
# --- -s (silent) ---
|
||||
_got="$($WHICH -s sh 2>/dev/null)"
|
||||
check_eq "$_got" "" "silent: -s produces no output"
|
||||
check_exit "silent: -s sh exits 0" 0 $WHICH -s sh
|
||||
check_exit "silent: -s nonexistent exits 1" 1 $WHICH -s this_command_does_not_exist_xyz
|
||||
|
||||
# --- -a (all matches) ---
|
||||
# Create a temp dir with a duplicate "testprog" and prepend it to PATH
|
||||
mkdir -p bin1 bin2
|
||||
printf '#!/bin/sh\n' > bin1/testprog
|
||||
printf '#!/bin/sh\n' > bin2/testprog
|
||||
chmod +x bin1/testprog bin2/testprog
|
||||
_old_path="$PATH"
|
||||
PATH="$(pwd)/bin1:$(pwd)/bin2:$PATH"
|
||||
export PATH
|
||||
|
||||
# Without -a, should find exactly 1
|
||||
_count="$($WHICH testprog 2>/dev/null | wc -l | tr -d ' ')"
|
||||
check_eq "$_count" "1" "allpaths: default finds 1"
|
||||
|
||||
# With -a, should find at least 2
|
||||
_count="$($WHICH -a testprog 2>/dev/null | wc -l | tr -d ' ')"
|
||||
if [ "$_count" -ge 2 ]; then
|
||||
pass "allpaths: -a finds multiple"
|
||||
else
|
||||
fail "allpaths: -a finds multiple" "got $_count matches"
|
||||
fi
|
||||
|
||||
PATH="$_old_path"
|
||||
export PATH
|
||||
|
||||
# --- multiple arguments ---
|
||||
$WHICH sh cat > multi_out 2>/dev/null
|
||||
_lines=$(wc -l < multi_out | tr -d ' ')
|
||||
check_eq "$_lines" "2" "multi: two args produce two lines"
|
||||
|
||||
# --- absolute path passthrough ---
|
||||
_got="$($WHICH /bin/sh 2>/dev/null)"
|
||||
if [ "$_got" = "/bin/sh" ] || [ "$_got" = "" ]; then
|
||||
# FreeBSD which passes through absolute paths if executable
|
||||
if [ -x /bin/sh ]; then
|
||||
check_eq "$_got" "/bin/sh" "absolute: /bin/sh passes through"
|
||||
else
|
||||
pass "absolute: /bin/sh not executable (skip)"
|
||||
fi
|
||||
else
|
||||
fail "absolute: /bin/sh passes through" "got: $_got"
|
||||
fi
|
||||
|
||||
# --- no args prints usage and exits 1 ---
|
||||
$WHICH >/dev/null 2>&1
|
||||
_rc=$?
|
||||
check_eq "$_rc" "1" "usage: no args exits 1"
|
||||
|
||||
summary
|
||||
Reference in New Issue
Block a user