From 229fa96029bd352626b934a724c88eba6a1350f7 Mon Sep 17 00:00:00 2001 From: Rob Savoye Date: Mon, 5 Feb 2001 04:26:49 +0000 Subject: Initial revision --- testsuite/lib/libsup.exp | 220 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 220 insertions(+) create mode 100644 testsuite/lib/libsup.exp (limited to 'testsuite/lib') diff --git a/testsuite/lib/libsup.exp b/testsuite/lib/libsup.exp new file mode 100644 index 0000000..eecf5f7 --- /dev/null +++ b/testsuite/lib/libsup.exp @@ -0,0 +1,220 @@ +# Copyright (C) 92, 93, 94, 95, 1996 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +# Please email any bugs, comments, and/or additions to this file to: +# bug-dejagnu@prep.ai.mit.edu + +# This file was written by Rob Savoye. (rob@cygnus.com) + +# +# Setup an environment so we can execute library procs without DejaGnu +# + +# +# Create a default environment and start expect. +# +proc make_defaults_file { defs } { + global srcdir + global objdir + global subdir + global build_triplet + global host_triplet + global target_triplet + global target_os + global target_cpu + + # We need to setup default values and a few default procs so we + # can execute library code without DejaGnu + set fd [open $defs w] + puts ${fd} "set tool foobar" + puts ${fd} "set srcdir ${srcdir}" + puts ${fd} "set objdir ${objdir}" + puts ${fd} "set subdir ${subdir}" + puts ${fd} "set build_triplet ${build_triplet}" + puts ${fd} "set host_triplet ${host_triplet}" + puts ${fd} "set target_triplet ${target_triplet}" + puts ${fd} "set target_os ${target_os}" + puts ${fd} "set target_cpu ${target_cpu}" + puts ${fd} "set tool foobar" + puts ${fd} "set testcnt 0" + puts ${fd} "set warncnt 0" + puts ${fd} "set errcnt 0" + puts ${fd} "set passcnt 0" + puts ${fd} "set xpasscnt 0" + puts ${fd} "set failcnt 0" + puts ${fd} "set xfailcnt 0" + puts ${fd} "set prms_id 0" + puts ${fd} "set bug_id 0" + puts ${fd} "set exit_status 0" + puts ${fd} "set untestedcnt 0" + puts ${fd} "set unresolvedcnt 0" + puts ${fd} "set unsupportedcnt 0" + puts ${fd} "set xfail_flag 0" + puts ${fd} "set xfail_prms 0" + puts ${fd} "set mail_logs 0" + puts ${fd} "set multipass_name 0" + catch "close $fd" +} + +proc start_expect { } { + global spawn_id + global base_dir + + # We need to setup default values and a few default procs so we + # can execute library code without DejaGnu + set defaults_file setval.tmp + make_defaults_file $defaults_file + set fd [open ${defaults_file} w] + + # look for expect + if ![info exists EXPECT] { + set EXPECT [findfile $base_dir/../../expect/expect "$base_dir/../../expect/expect" expect] + verbose "EXPECT defaulting to $EXPECT" 2 + } + +# catch close +# catch wait + + # Start expect runing + spawn "$EXPECT" + expect { + -re "expect.*> " { + verbose "Started the child expect shell" 2 + } + timeout { + perror "Timed out starting the child expect shell." + return -1 + } + } + + # Load the defaults file + exp_send "source ${defaults_file}\n" + expect { + "expect*> " { + verbose "Loaded testing defaults file." 2 + return 1 + } + timeout { + perror "Couldn't load the testing defaults file." + return -1 + } + } +} + +# +# Stop the runing expect process +# +proc stop_expect { } { + global spawn_id + + # make expect exit + exp_send "exit\n" + catch "close -i $spawn_id" + catch "wait -i $spawn_id" +} + +# +# Load the library to test +# +proc load_test_lib { lib } { + global spawn_id + exp_send "source ${lib}\n" + expect { + "expect*> " { + verbose "Testing ${lib}" 2 + } + timeout { + perror "Couldn't load the libraries to test" + return -1 + } + } +} + +# +# test a library proc that emits patterns +# +proc exp_test { cmd pattern msg } { + global spawn_id + + exp_send "puts ACK ; $cmd ; puts NAK\r\n" + expect { + "puts ACK*puts NAK" { + verbose "Got command echo" 3 + } + timeout { + warning "Never got command echo" + } + } + + expect { + "ACK" { + exp_continue + } + -re "\r\n1\r\n" { + warning "$msg, 1 was returned" + exp_continue + } + -re "\r\n0\r\n" { + warning "$msg, 0 was returned" + exp_continue + } + "$pattern" { + pass "$msg" + } + timeout { + fail "$msg" + } + } +} + +# test a config proc that only returns a code +# ex... config_test "isbuild $build_triplet" "pass" "fail" "isbuild, native" +# args are: command, true condition, false condition, message to print +proc config_test { cmd true false msg } { + global spawn_id + + set timeout 20 + exp_send "puts ACK ; puts \[$cmd\] ; puts NAK\r\n" + expect { + "puts ACK*$cmd*puts NAK" { + verbose "Got command echo" 3 + } + timeout { + warning "Never got command echo" + } + } + + expect { + -re "Checking pattern*with*\[\r\n\]" { + exp_continue + } + -re "\r\n1\r\n" { + $true "$msg" + } + -re "\r\n0\r\n" { + $false "$msg" + } + timeout { + perror "$msg (timed out)" + } + } +} + + + + + + -- cgit v1.1