1f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#!/bin/bash 2f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project# 3f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project# Copyright (C) 2007 The Android Open Source Project 4f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project# 5f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project# Licensed under the Apache License, Version 2.0 (the "License"); 6f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project# you may not use this file except in compliance with the License. 7f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project# You may obtain a copy of the License at 8f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project# 9f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project# http://www.apache.org/licenses/LICENSE-2.0 10f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project# 11f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project# Unless required by applicable law or agreed to in writing, software 12f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project# distributed under the License is distributed on an "AS IS" BASIS, 13f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project# See the License for the specific language governing permissions and 15f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project# limitations under the License. 16f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 17f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project# Set up prog to be the path of this script, including following symlinks, 18f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project# and set up progdir to be the fully-qualified pathname of its directory. 19f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectprog="$0" 20f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectwhile [ -h "${prog}" ]; do 21f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project newProg=`/bin/ls -ld "${prog}"` 22f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project newProg=`expr "${newProg}" : ".* -> \(.*\)$"` 23f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if expr "x${newProg}" : 'x/' >/dev/null; then 24f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project prog="${newProg}" 25f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project else 26f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project progdir=`dirname "${prog}"` 27f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project prog="${progdir}/${newProg}" 28f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fi 29f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectdone 30f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectoldwd=`pwd` 31f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectprogdir=`dirname "${prog}"` 32f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectcd "${progdir}" 33f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectprogdir=`pwd` 34f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectprog="${progdir}"/`basename "${prog}"` 35f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 36f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectexport JAVAC="${progdir}/../../../prebuilt/common/openjdk/bin/javac" 37f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectif [ "!" -e "$JAVAC" ]; then 38f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project JAVAC="javac" 39f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectfi 40f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 41f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectinfo="info.txt" 42f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectrun="run" 43f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectexpected="expected.txt" 44f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectoutput="out.txt" 45f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 46f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectdev_mode="no" 47f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectupdate_mode="no" 489feebf2627346eee3a9c6a117d7f279784a51720Orion Hodsontmpdir=/tmp/test-$$ 49f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectusage="no" 509feebf2627346eee3a9c6a117d7f279784a51720Orion Hodson 519feebf2627346eee3a9c6a117d7f279784a51720Orion Hodsonwhile [[ "x$1" = "x-"* ]]; do 529feebf2627346eee3a9c6a117d7f279784a51720Orion Hodson case $1 in 539feebf2627346eee3a9c6a117d7f279784a51720Orion Hodson --dev) dev_mode="yes" ;; 549feebf2627346eee3a9c6a117d7f279784a51720Orion Hodson --output_dir) 559feebf2627346eee3a9c6a117d7f279784a51720Orion Hodson tmpdir=$2 569feebf2627346eee3a9c6a117d7f279784a51720Orion Hodson shift ;; 579feebf2627346eee3a9c6a117d7f279784a51720Orion Hodson --update) update_mode="yes" ;; 589feebf2627346eee3a9c6a117d7f279784a51720Orion Hodson --help) usage="yes" ;; 599feebf2627346eee3a9c6a117d7f279784a51720Orion Hodson *) usage="yes" ;; 609feebf2627346eee3a9c6a117d7f279784a51720Orion Hodson esac 619feebf2627346eee3a9c6a117d7f279784a51720Orion Hodson shift 629feebf2627346eee3a9c6a117d7f279784a51720Orion Hodsondone 639feebf2627346eee3a9c6a117d7f279784a51720Orion Hodson 649feebf2627346eee3a9c6a117d7f279784a51720Orion Hodsonif [ "x$1" = "x" ]; then 659feebf2627346eee3a9c6a117d7f279784a51720Orion Hodson testdir=`basename "$oldwd"` 66f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectelse 679feebf2627346eee3a9c6a117d7f279784a51720Orion Hodson testdir="$1" 689feebf2627346eee3a9c6a117d7f279784a51720Orion Hodsonfi 69f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 709feebf2627346eee3a9c6a117d7f279784a51720Orion Hodsonif [ '!' -d "$testdir" ]; then 719feebf2627346eee3a9c6a117d7f279784a51720Orion Hodson td2=`echo ${testdir}-*` 729feebf2627346eee3a9c6a117d7f279784a51720Orion Hodson if [ '!' -d "$td2" ]; then 739feebf2627346eee3a9c6a117d7f279784a51720Orion Hodson echo "${testdir}: no such test directory" 1>&2 749feebf2627346eee3a9c6a117d7f279784a51720Orion Hodson usage="yes" 75f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fi 769feebf2627346eee3a9c6a117d7f279784a51720Orion Hodson testdir="$td2" 779feebf2627346eee3a9c6a117d7f279784a51720Orion Hodsonfi 789feebf2627346eee3a9c6a117d7f279784a51720Orion Hodson 799feebf2627346eee3a9c6a117d7f279784a51720Orion Hodsonif [ "$update_mode" = "yes" -a "$dev_mode" = "yes" ] ; then 809feebf2627346eee3a9c6a117d7f279784a51720Orion Hodson echo Error: --dev is incompatible with --update. 1>&2 819feebf2627346eee3a9c6a117d7f279784a51720Orion Hodson usage="yes" 82f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectfi 83f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 84f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectif [ "$usage" = "yes" ]; then 85f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project prog=`basename $prog` 86f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ( 87f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project echo "usage:" 88f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project echo " $prog --help Print this message." 89f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project echo " $prog testname Run test normally." 90f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project echo " $prog --dev testname Development mode (dump to stdout)." 91f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project echo " $prog --update testname Update mode (replace expected.txt)." 92f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project echo " Omitting the test name uses the current directory as the test." 939feebf2627346eee3a9c6a117d7f279784a51720Orion Hodson echo "options:" 949feebf2627346eee3a9c6a117d7f279784a51720Orion Hodson echo " --output_dir <dir> Use <dir> for the test outputs." 95f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ) 1>&2 96f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project exit 1 97f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectfi 98f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 99b7d748318354aba23ba03f76bdefc31fa6adc885Orion Hodsontd_info="${testdir}/${info}" 100b7d748318354aba23ba03f76bdefc31fa6adc885Orion Hodsontd_run="${testdir}/${run}" 101b7d748318354aba23ba03f76bdefc31fa6adc885Orion Hodsontd_expected="${testdir}/${expected}" 102f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 103b7d748318354aba23ba03f76bdefc31fa6adc885Orion Hodsonfor td_file in "$td_info" "$td_run" "$td_expected"; do 104b7d748318354aba23ba03f76bdefc31fa6adc885Orion Hodson if [[ ! -r "$td_file" ]]; then 105b7d748318354aba23ba03f76bdefc31fa6adc885Orion Hodson echo "${testdir}: missing file $td_file" 1>&2 106b7d748318354aba23ba03f76bdefc31fa6adc885Orion Hodson exit 1 107b7d748318354aba23ba03f76bdefc31fa6adc885Orion Hodson fi 108b7d748318354aba23ba03f76bdefc31fa6adc885Orion Hodsondone 109f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 110f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project# copy the test to a temp dir and run it 1119feebf2627346eee3a9c6a117d7f279784a51720Orion Hodsonif [ -d "$tmpdir" ]; then 1129feebf2627346eee3a9c6a117d7f279784a51720Orion Hodson rm -rf "$tmpdir" || exit 1 1139feebf2627346eee3a9c6a117d7f279784a51720Orion Hodsonfi 1149feebf2627346eee3a9c6a117d7f279784a51720Orion Hodsonoutput_parent=`dirname ${tmpdir}` 1159feebf2627346eee3a9c6a117d7f279784a51720Orion Hodsonmkdir -p "${output_parent}" || exit 1 1169feebf2627346eee3a9c6a117d7f279784a51720Orion Hodsoncp -Rp "$testdir" "$tmpdir" || exit 1 117f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectcd "$tmpdir" 118f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectchmod 755 "$run" 119f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1209feebf2627346eee3a9c6a117d7f279784a51720Orion Hodsonecho "${testdir}: running..." 1>&2 121f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectgood="no" 122f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectif [ "$dev_mode" = "yes" ]; then 123f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project "./$run" 2>&1 124f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project echo "exit status: $?" 1>&2 125f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project good="yes" 126f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectelif [ "$update_mode" = "yes" ]; then 127d5370b6315ee137744746479003c9d07185f34f0Orion Hodson "./$run" >"$output" 2>&1 128d5370b6315ee137744746479003c9d07185f34f0Orion Hodson if [[ $? == 0 ]]; then 129d5370b6315ee137744746479003c9d07185f34f0Orion Hodson good="yes" 130d5370b6315ee137744746479003c9d07185f34f0Orion Hodson mv "$output" "${progdir}/${td_expected}" 131d5370b6315ee137744746479003c9d07185f34f0Orion Hodson else 132d5370b6315ee137744746479003c9d07185f34f0Orion Hodson echo "Test failed during update." 133d5370b6315ee137744746479003c9d07185f34f0Orion Hodson good="no" 134d5370b6315ee137744746479003c9d07185f34f0Orion Hodson fi 135d5370b6315ee137744746479003c9d07185f34f0Orion Hodson 136f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectelse 137f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project "./$run" >"$output" 2>&1 138f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp -s "$expected" "$output" 139f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if [ "$?" = "0" ]; then 140f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project # output == expected 141f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project good="yes" 142f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project echo "$testdir"': succeeded!' 1>&2 143f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fi 144f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectfi 145f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 146f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectif [ "$good" = "yes" ]; then 147f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cd "$oldwd" 148f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project rm -rf "$tmpdir" 149f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project exit 0 150f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectfi 151f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 152f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project( 153f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project echo "${testdir}: FAILED!" 154f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project echo ' ' 155f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project echo '#################### info' 156f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cat "$info" | sed 's/^/# /g' 157f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project echo '#################### diffs' 158f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project diff -u "$expected" "$output" 159f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project echo '####################' 160f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project echo ' ' 161f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project echo "files left in $tmpdir" 162f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project) 1>&2 163f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 164f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectexit 1 165