#!/bin/sh

# Tests for busybox applet itself.
# Copyright 2005 by Rob Landley <rob@landley.net>
# Licensed under GPL v2, see file LICENSE for details.

if [ ${#COMMAND} -eq 0 ]; then COMMAND=busybox; fi
. testing.sh

HELPDUMP=`$COMMAND`

# We need to test under calling the binary under other names.

ln -s `which "$COMMAND"` busybox-suffix
ln -s `which "$COMMAND"` unknown

testing "busybox --help busybox" "--help busybox" "$HELPDUMP\n\n" "" ""

for i in busybox busybox-suffix
do
	# The gratuitous "\n"s are due to a shell idiosyncrasy:
	# environment variables seem to strip trailing whitespace.

	testing "$i" "" "$HELPDUMP\n\n" "" ""

	testing "$i unknown" "unknown 2>&1" \
		"unknown: applet not found\n" "" ""

	testing "$i --help" "--help 2>&1" "$HELPDUMP\n\n" "" ""

	optional CAT
	testing "$i cat" "cat" "moo" "" "moo"
	testing "$i --help cat" "--help cat 2>&1 | grep prints" \
		"Concatenates FILE(s) and prints them to stdout.\n" "" ""
	optional ""

	testing "$i --help unknown" "--help unknown 2>&1" \
		"unknown: applet not found\n" "" ""

	COMMAND=./busybox-suffix
done

COMMAND="./unknown"
testing "busybox as unknown name" "2>&1" "unknown: applet not found\n" "" ""

rm -f busybox-suffix unknown


# verify the applet order is correct in applets.h
# otherwise applets wont be called properly
sed -n \
	-e '/^\tAPPLET/{s:.*(::;s:,.*::;s:"::g;p}' \
	../include/applets.h > applet.order.current
LC_ALL=C sort applet.order.current > applet.order.correct
diff -u applet.order.current applet.order.correct
FAILCOUNT=$[$FAILCOUNT+$?]
rm -f applet.order.current applet.order.correct


exit $FAILCOUNT
