#!/bin/bash # # Copyright (C) 2007 The Android Open Source Project # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # Set up prog to be the path of this script, including following symlinks, # and set up progdir to be the fully-qualified pathname of its directory. prog="$0" while [ -h "${prog}" ]; do newProg=`/bin/ls -ld "${prog}"` newProg=`expr "${newProg}" : ".* -> \(.*\)$"` if expr "x${newProg}" : 'x/' >/dev/null; then prog="${newProg}" else progdir=`dirname "${prog}"` prog="${progdir}/${newProg}" fi done oldwd=`pwd` progdir=`dirname "${prog}"` cd "${progdir}" progdir=`pwd` prog="${progdir}"/`basename "${prog}"` info="info.txt" run="run" expected="expected.txt" output="out.txt" skip="SKIP" dev_mode="no" if [ "x$1" = "x--dev" ]; then dev_mode="yes" shift fi update_mode="no" if [ "x$1" = "x--update" ]; then update_mode="yes" shift fi usage="no" if [ "x$1" = "x--help" ]; then usage="yes" else if [ "x$1" = "x" ]; then testdir=`basename "$oldwd"` else testdir="$1" fi if [ '!' -d "$testdir" ]; then td2=`echo ${testdir}-*` if [ '!' -d "$td2" ]; then echo "${testdir}: no such test directory" 1>&2 usage="yes" fi testdir="$td2" fi fi if [ "$usage" = "yes" ]; then prog=`basename $prog` ( echo "usage:" echo " $prog --help Print this message." echo " $prog testname Run test normally." echo " $prog --dev testname Development mode (dump to stdout)." echo " $prog --update testname Update mode (replace expected.txt)." echo " Omitting the test name uses the current directory as the test." ) 1>&2 exit 1 fi td_info="$testdir"/"$info" td_run="$testdir"/"$run" td_expected="$testdir"/"$expected" td_skip="$testdir"/"$skip" if [ -r "$td_skip" ]; then exit 2 fi tmpdir=/tmp/test-$$ if [ '!' '(' -r "$td_info" -a -r "$td_run" -a -r "$td_expected" ')' ]; then echo "${testdir}: missing files" 1>&2 exit 1 fi # copy the test to a temp dir and run it echo "${testdir}: running..." 1>&2 rm -rf "$tmpdir" cp -Rp "$testdir" "$tmpdir" cd "$tmpdir" chmod 755 "$run" #PATH="${progdir}/../build/bin:${PATH}" good="no" if [ "$dev_mode" = "yes" ]; then "./$run" 2>&1 echo "exit status: $?" 1>&2 good="yes" elif [ "$update_mode" = "yes" ]; then "./$run" >"${progdir}/$td_expected" 2>&1 good="yes" else "./$run" >"$output" 2>&1 cmp -s "$expected" "$output" if [ "$?" = "0" ]; then # output == expected good="yes" echo "$testdir"': succeeded!' 1>&2 fi fi if [ "$good" = "yes" ]; then cd "$oldwd" rm -rf "$tmpdir" exit 0 fi ( echo "${testdir}: FAILED!" echo ' ' echo '#################### info' cat "$info" | sed 's/^/# /g' echo '#################### diffs' diff -u "$expected" "$output" echo '####################' echo ' ' echo "files left in $tmpdir" ) 1>&2 exit 1