4.4BSD/usr/src/contrib/mkmf/tmp/ptest

#! /bin/csh -f
#
# Copyright (c) 1983, 1985, 1991 Peter J. Nicklin.
# Copyright (c) 1991 Version Technology.
# All Rights Reserved.
#
# $License: VT.1.1 $
# Redistribution and use in source and binary forms,  with or without
# modification,  are permitted provided that the following conditions
# are met:  (1) Redistributions of source code must retain the  above
# copyright  notice,  this  list  of  conditions  and  the  following
# disclaimer.  (2) Redistributions in binary form must reproduce  the
# above  copyright notice,  this list of conditions and the following
# disclaimer in the  documentation  and/or other  materials  provided
# with  the  distribution.  (3) All advertising materials  mentioning
# features or  use  of  this  software  must  display  the  following
# acknowledgement:  ``This  product  includes  software  developed by
# Version Technology.''  Neither the name of Version  Technology  nor
# the  name  of  Peter J. Nicklin  may  be used to endorse or promote
# products derived from this software without specific prior  written
# permission.
#
# THIS SOFTWARE IS PROVIDED BY VERSION TECHNOLOGY ``AS IS''  AND  ANY
# EXPRESS OR IMPLIED WARRANTIES,  INCLUDING,  BUT NOT LIMITED TO, THE
# IMPLIED  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
# PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL  VERSION  TECHNOLOGY  BE
# LIABLE  FOR ANY DIRECT,  INDIRECT,  INCIDENTAL, SPECIAL, EXEMPLARY,
# OR  CONSEQUENTIAL DAMAGES   (INCLUDING,   BUT   NOT   LIMITED   TO,
# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;  LOSS OF USE, DATA, OR
# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
# OF  LIABILITY,  WHETHER  IN  CONTRACT,  STRICT LIABILITY,  OR  TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE)  ARISING  IN ANY WAY OUT OF THE
# USE OF THIS SOFTWARE,  EVEN  IF  ADVISED OF THE POSSIBILITY OF SUCH
# DAMAGE.
#
# Report problems and direct questions to nicklin@netcom.com
#
# $Header: ptest.sh,v 4.5 91/11/26 17:01:57 nicklin Exp $
#
# ptest - test a project module
#
# Author: Peter J. Nicklin
#
set path = ($cwd $path)
set template = C.t

top:

if ($#argv > 0) then
	switch ($argv[1])
		case -d:
			set debug
			shift
			breaksw
		case -F*:
			if ($argv[1] != -F) then
				set argv[1] = `echo $argv[1] | sed -e s/-F//`
			else if ($#argv < 2) then
				set error
				breaksw
			else
				shift
			endif
			set template = $argv[1]
			shift
			breaksw
		case -P*:
			if ($argv[1] != -P) then
				set argv[1] = `echo $argv[1] | sed -e s/-P//`
			else if ($#argv < 2) then
				set error
				breaksw
			else
				shift
			endif
			pushd . >& /dev/null
			eval `chproject -f $argv[1]`
			if ($status != 0) exit(1)
			popd >& /dev/null
			shift
			breaksw
		case -*:
			echo "ptest: bad option $argv[1]"
			set error
			shift
			breaksw
		default:
			goto next
			breaksw
		endsw
		goto top
endif

next:

if ($?error) then
	echo "ptest: usage: ptest [-d] [-F template] [-P projectname] [module ...]"
	exit(1)
endif

if (!($?PROJECT)) then
	echo "ptest: no project environment"
	exit(1)
endif

# does the test case directory exist?
if (!(-e $PROJECT/test)) then
	echo "ptest: $PROJECT/test: No such file or directory"
	exit(1)
endif

# test all modules
if ($#argv < 1) then
	pushd $PROJECT/test >& /dev/null
	foreach test (`ls`)
		if ($test =~ *.a || -d $test ) set argv = ($argv $test:r)
	end
	if ($#argv < 1) then
		echo "ptest: no test cases available"
		exit(1)
	endif
	popd >& /dev/null
endif

# remove compilable test programs
foreach file (`ls`)
	switch ($file)
		case T*.sh:
			breaksw
		case T*.mkmf:
			breaksw
		case T*.*:
			/bin/rm -f $file
			breaksw
	endsw
end

foreach test ($argv[*])
	# extract test files from archive
	if (-e $PROJECT/test/$test.a) then
		echo -n "${test}: extracting archive ... "
		ar x $PROJECT/test/$test.a
	else if (-d $PROJECT/test/$test) then
		echo -n "${test}: copying test ... "
		cp $PROJECT/test/$test/* .
	else
		echo "ptest: test case $test not found"
		continue
	endif

	# Compile test program
	unset userscript
	foreach program (T*.*)
		switch ($program)
			case T*.sh:
				set userscript
				breaksw
			default:
				echo -n "compiling test ... "
				if ( -e T$test.mkmf) then
					mkmf -cd -fT_makefile -FT$test.mkmf PROGRAM=T$test
				else
					mkmf -cd -fT_makefile -M$template PROGRAM=T$test
				endif
				make -f T_makefile -s >& E$test
				if ($status != 0) goto badtest
				breaksw
		endsw
	end

	# Run test
	echo -n "executing test ... "
	if ($?userscript) then
		# User supplied test script
		./T$test.sh >>& E$test
		if ($status != 0) goto badtest
	else if (-e I$test) then
		# Default test script with input
		./T$test < I$test |& diff - O$test >>& E$test
		if ($status != 0) goto badtest
	else
		# Default test script without input
		./T$test |& diff - O$test >>& E$test
		if ($status != 0) goto badtest
	endif

	if (!($?debug)) /bin/rm -f E$test [TIO]$test* T_makefile
	echo done
	continue

badtest:
	if (!($?debug)) /bin/rm -f [TIO]$test* T_makefile
	echo failed
	set error
end

if ($?error) exit(1)
exit(0)