# testcases
#
# This file should be filled with test cases to test applets that:
#
#  - can somehow produce output (we can't test sync or sleep)
#  - have a GNU (or other) counterpart
#  - are not interactive (don't require a ^C or anything)
#  - don't require extensive setup or cleanup (a litte setup is fine)
#  - don't have huge and possibly damaging effects (fsck, swapoff)
#
# If possible, a test case should be made that tests each option the applet
# supports. When a new option is added, a new test case should be written for
# it. When somebody reports a bug with a testcase, that testcase should be
# added here as well.
#
# Some other guidelines to follow:
#
#  - please try to keep applets alphabetized, it will make life easier
#  - use the file tester.sh or testcases when you need to do a non-destructive
#    test on a file (i.e. cat, md5sum)
#  - try to make the applet you're testing the first thing on the line (this
#    not always possible)
#  - (???) if you have to create a temporary file, call it TMPFILE


# ar

# basename
basename `pwd`

# cat
cat tester.sh

# chmod
# chown
# chgrp
# chroot
# chvt - can't be tested here
# clear - can't be tested here
# cmp
# cp
# mv

# cut
echo "1234" | cut -c1
echo "f1	f2" | cut -f2

# date
date
date -R
date -u
date +%d/%m/%y

# dc - needs an input file
# dd
# deallocvt

# df
df
df .
df -k
df -h
df -m

# dirname
dirname `pwd`

# dmesg (XXX: change the silly cmd business in the source)
dmesg
dmesg -n 8
dmesg -s 512
# I really don't want to do this next one
#dmesg -c

# dos2unix - needs an input file
# dpkg
# dpkg_deb

# du
du
du -s
du -l
du -k
du -h
du -m

# dumpkmap - no counterprt?
# dutmp - no counterprt?

# echo
echo "foo bar baz"
echo -n "no newline"


# expr
expr 1 \| 1
expr 1 \| 0
expr 0 \| 1
expr 0 \| 0

expr 1 \& 1
expr 1 \& 0
expr 0 \& 1
expr 0 \& 0

expr 0 \< 1
expr 1 \< 0

expr 1 \> 0
expr 0 \> 1

expr 0 \<= 1
expr 1 \<= 0
expr 1 \<= 1

expr 1 \>= 0
expr 0 \>= 1
expr 1 \>= 1

expr 1 + 2
expr 2 - 1
expr 2 \* 3
expr 12 / 2
expr 12 % 5

# somebody else can do all the string stuff


# fbset - can't be tested here
# fdflush
# find
find .

# free
free

# freeramdisk
# fsck.minix - won't test
# getopt
# grep
# gunzip
# gzip
# halt

# head
head tester.sh
head -n 2 tester.sh

# hostid
hostid

# hostname
hostname
hostname -s
hostname -i
hostname -d
# not going to do this next one
#hostname -F

# id
id
id -u
id -g
id -ur
id -un


# ifconfig
#ifconfig
#ifconfig eth0
#ifconfig lo

# init - won't test
# insmod - won't test

# kill
#kill -l
# not going to do any more

# length
# ln
# loadacm
# loadfont
# loadkmap
# logger
# logname
# ls
ls
ls -l
ls -s
ls -h
ls -1

# lsmod
lsmod

# makedevs

# md5sum
md5sum tester.sh

# mkdir
# mkfifo
# mkfs.minix - won't test
# mknod
# mkswap - won't test
# mktemp
# more - can't test: interactive

# mount
mount
# not going to test any more

# mt
# nc
# nfsmount
# nslookup
# ping - can't test: interactive (needs ^C)
# pivot_root
# poweroff - won't test
# printf
# ps - there's lotsa differences between busybox ps and any other ps

# pwd
pwd

# rdate - won't test

# readlink
ln -sf tester.sh LINKFILE
readlink LINKFILE
rm -f LINKFILE

# reboot - won't test
# renice - won't test
# reset - can't test: no output
# rm
# rmdir
# rmmod - won't test: dangerous
# route
# rpmunpack
# sed - we can do some one-liners here; probably needs it's own input file
# setkeycodes
# sh - this should probably have it's own testcase or input file
# sleep - can't test: produces no output
# sort
# stty
# swapon - won't test: dangerous
# swapoff - won't test: dangerous
# sync - can't test: no output
# syslogd

# tail
tail tester.sh
tail -n 2  tester.sh

# tar
# tee
# telnet
# test
# tftp
# touch
# tr
true ; echo $?
false ; echo $?
# tty
# umount
# uname
# uniq
# unix2dos
# update

uptime

# usleep
# uudecode
# uuencode
# watchdog

# wc
wc tester.sh
wc -c tester.sh
wc -w tester.sh
wc -l tester.sh
wc -L tester.sh

# wget

# which
which ls

# whoami
whoami

# xargs
# (for some reason, the > redirection isn't working)
#ls -1 > TMPFILE
#xargs md5sum < TMPFILE
#rm -f TMPFILE

# yes - can't test: interactive (needs ^C)
