1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 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
}
|