summaryrefslogtreecommitdiff
path: root/test/tetapi.sh
diff options
context:
space:
mode:
Diffstat (limited to 'test/tetapi.sh')
-rwxr-xr-xtest/tetapi.sh313
1 files changed, 313 insertions, 0 deletions
diff --git a/test/tetapi.sh b/test/tetapi.sh
new file mode 100755
index 0000000..a835769
--- /dev/null
+++ b/test/tetapi.sh
@@ -0,0 +1,313 @@
+#
+# SCCS: @(#)tetapi.sh 1.17 (03/03/31)
+#
+# UniSoft Ltd., London, England
+#
+# (C) Copyright 1996 X/Open Company Limited
+#
+# All rights reserved. No part of this source code may be reproduced,
+# stored in a retrieval system, or transmitted, in any form or by any
+# means, electronic, mechanical, photocopying, recording or otherwise,
+# except as stated in the end-user licence agreement, without the prior
+# permission of the copyright owners.
+# A copy of the end-user licence agreement is contained in the file
+# Licence which accompanies this distribution.
+#
+# X/Open and the 'X' symbol are trademarks of X/Open Company Limited in
+# the UK and other countries.
+#
+# ************************************************************************
+
+# Copyright 1990 Open Software Foundation (OSF)
+# Copyright 1990 Unix International (UI)
+# Copyright 1990 X/Open Company Limited (X/Open)
+#
+# Permission to use, copy, modify, and distribute this software and its
+# documentation for any purpose and without fee is hereby granted, provided
+# that the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of OSF, UI or X/Open not be used in
+# advertising or publicity pertaining to distribution of the software
+# without specific, written prior permission. OSF, UI and X/Open make
+# no representations about the suitability of this software for any purpose.
+# It is provided "as is" without express or implied warranty.
+#
+# OSF, UI and X/Open DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+# EVENT SHALL OSF, UI or X/Open BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF
+# USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
+# OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+#
+# ***********************************************************************
+#
+# SCCS: @(#)tetapi.sh 1.17 03/31/03
+# NAME: Shell API Support Routines
+# PRODUCT: TET (Test Environment Toolkit)
+# as supplied with TETware release 3.7
+# AUTHOR: Andrew Dingwall, UniSoft Ltd.
+# DATE CREATED: 1 November 1990
+#
+# DESCRIPTION:
+# This file contains shell functions for use with the shell API.
+# It is sourced automatically by the shell TCM.
+# In addition it should be sourced by test purposes that are written as
+# separate shell scripts, by means of the shell . command.
+#
+# The following functions are provided:
+#
+# tet_setcontext
+# tet_setblock
+# tet_infoline
+# tet_result
+# tet_delete
+# tet_reason
+#
+# MODIFICATIONS:
+#
+# Geoff Clare, 29 Jan 1992
+# Rewrite tet_setcontext() so context number will change.
+#
+# Geoff Clare, UniSoft Ltd., August 1996
+# Make TP number unique over test case, not just IC.
+# Use $$ as context number whenever possible.
+#
+# Andrew Dingwall, UniSoft Ltd., October 1996
+# Port to NT
+#
+# Andrew Dingwall, The Open Group, January 2002
+# changed "ed -" to "ed -s" so as to conform to UNIX2003
+#
+# ***********************************************************************
+
+#
+# publicly available shell API functions
+#
+
+# set current context and reset block and sequence
+# usage: tet_setcontext
+# Note that when tet_setcontext is called in a subshell started using
+# "( ... )" we cannot use $$ because it has the same value as in the parent.
+tet_setcontext(){
+ if test $$ != "$TET_CONTEXT"
+ then
+ TET_CONTEXT=$$
+ else
+ # obtain a new, unused PID without generating a zombie process.
+ TET_CONTEXT=`(:)& echo $!`
+ fi
+ TET_BLOCK=1
+ TET_SEQUENCE=1
+}
+
+# increment the current block ID, reset the sequence number to 1
+# usage: tet_setblock
+tet_setblock(){
+ TET_BLOCK=`expr ${TET_BLOCK:?} + 1`
+ TET_SEQUENCE=1
+}
+
+# print an information line to the execution results file
+# and increment the sequence number
+# usage: tet_infoline args [...]
+tet_infoline(){
+ tet_output 520 "${TET_TPNUMBER:?} ${TET_CONTEXT:?} ${TET_BLOCK:?} ${TET_SEQUENCE:?}" "$*"
+ TET_SEQUENCE=`expr $TET_SEQUENCE + 1`
+}
+
+# record a test result for later emmision to the execution results file
+# by tet_tpend
+# usage: tet_result result_name
+# (note that a result name is expected, not a result code number)
+tet_result(){
+ TET_ARG1="${1:?}"
+ if tet_getcode "$TET_ARG1"
+ then
+ : ok
+ else
+ tet_error "invalid result name \"$TET_ARG1\"" \
+ "passed to tet_result"
+ TET_ARG1=NORESULT
+ fi
+
+ echo $TET_ARG1 >> ${TET_TMPRES:?}
+ unset TET_ARG1
+}
+
+# mark a test purpose as deleted
+# usage: tet_delete test_name reason [...]
+tet_delete(){
+ TET_ARG1=${1:?}
+ shift
+ TET_ARG2N="$*"
+ if test -z "$TET_ARG2N"
+ then
+ tet_undelete $TET_ARG1
+ return
+ fi
+
+ case $TET_OSNAME in
+ Windows_*)
+ TET_DEVNULL=nul
+ ;;
+ *)
+ TET_DEVNULL=/dev/null
+ ;;
+ esac
+
+ if tet_reason $TET_ARG1 > $TET_DEVNULL
+ then
+ tet_undelete $TET_ARG1
+ fi
+
+ echo "$TET_ARG1 $TET_ARG2N" >> ${TET_DELETES:?}
+ unset TET_ARG1 TET_ARG2N
+}
+
+# print the reason why a test purpose has been deleted
+# return 0 if the test purpose has been deleted, 1 otherwise
+# usage: tet_reason test_name
+tet_reason(){
+ : ${1:?}
+ (
+ while read TET_A TET_B
+ do
+ if test X"$TET_A" = X"$1"
+ then
+ echo "$TET_B"
+ exit 0
+ fi
+ done
+ exit 1
+ ) < ${TET_DELETES:?}
+
+ return $?
+}
+
+
+# ******************************************************************
+
+#
+# "private" functions for internal use by the shell API
+# these are not published interfaces and may go away one day
+#
+
+
+# tet_getcode
+# look up a result code name in the result code definition file
+# return 0 if successful with the result number in TET_RESNUM and TET_ABORT
+# set to YES or NO
+# otherwise return 1 if the code could not be found
+tet_getcode(){
+ TET_ABORT=NO
+ TET_RESNUM=-1
+ : ${TET_CODE:?}
+
+ TET_A="${1:?}"
+ eval "`sed '/^#/d; /^[ ]*$/d' $TET_CODE | while read TET_B
+ do
+ eval set -- $TET_B
+ if test X\"$2\" = X\"$TET_A\"
+ then
+ echo TET_RESNUM=\\"$1\\"
+ echo TET_ABACTION=\\"$3\\"
+ exit
+ fi
+ done`"
+ unset TET_A
+
+ case "$TET_RESNUM" in
+ -1)
+ unset TET_ABACTION
+ return 1
+ ;;
+ esac
+
+ case "$TET_ABACTION" in
+ ""|Continue)
+ TET_ABORT=NO
+ ;;
+ Abort)
+ TET_ABORT=YES
+ ;;
+ *)
+ tet_error "invalid action field \"$TET_ABACTION\" in file" \
+ $TET_CODE
+ TET_ABORT=NO
+ ;;
+ esac
+
+ unset TET_ABACTION
+ return 0
+}
+
+# tet_undelete - undelete a test purpose
+# Note: if your system has a very old version of ed(1) which doesn't
+# understand -s, change the invocation to "ed -"
+tet_undelete(){
+ echo "g/^${1:?} /d
+w
+q" | ed -s ${TET_DELETES:?}
+}
+
+# tet_error - print an error message to stderr and on TCM Message line
+tet_error(){
+ echo "$TET_PNAME: $*" 1>&2
+ echo "510|${TET_ACTIVITY:-0}|$*" >> ${TET_RESFILE:?}
+}
+
+# tet_output - print a line to the execution results file
+tet_output(){
+ > ${TET_STDERR:?}
+
+ case $TET_OSNAME in
+ Windows_*)
+ TET_DEVNULL=nul
+ ;;
+ *)
+ TET_DEVNULL=/dev/null
+ ;;
+ esac
+
+ awk 'END {
+ if (length(tet_arg2) > 0)
+ tet_sp = " ";
+ else
+ tet_sp = "";
+ line = sprintf("%d|%s%s%s|%s", tet_arg1, tet_activity, \
+ tet_sp, tet_arg2, tet_arg3);
+
+ # ensure no newline characters in data
+ nl = sprintf("\n");
+ n = split(line, a, nl);
+ if (n > 1)
+ {
+ line = a[1];
+ for (i = 2; i <= n; i++)
+ {
+ if (a[i] != "")
+ line = line " " a[i];
+ }
+ }
+
+ # journal lines must not exceed 512 bytes
+ if (length(line) > 511)
+ {
+ printf("warning: results file line truncated: prefix: %d|%s%s%s|\n", tet_arg1, tet_activity, tet_sp, tet_arg2) >tet_stderr;
+ line = substr(line, 1, 511);
+ }
+
+ # line is now OK to print
+ print line;
+ }' "tet_arg1=${1:?}" "tet_arg2=$2" "tet_arg3=$3" \
+ "tet_activity=${TET_ACTIVITY:-0}" \
+ "tet_stderr=$TET_STDERR" $TET_DEVNULL >> ${TET_RESFILE:?}
+
+ if test -s $TET_STDERR
+ then
+ tet_error "`cat $TET_STDERR`"
+ fi
+ > $TET_STDERR
+}
+