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 Projectif [ "x$1" = "x--dev" ]; then 48f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project dev_mode="yes" 49f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project shift 50f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectfi 51f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 52f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectupdate_mode="no" 53f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectif [ "x$1" = "x--update" ]; then 54f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project update_mode="yes" 55f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project shift 56f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectfi 57f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 58f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectusage="no" 59f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectif [ "x$1" = "x--help" ]; then 60f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project usage="yes" 61f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectelse 62f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if [ "x$1" = "x" ]; then 63f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testdir=`basename "$oldwd"` 64f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project else 65f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testdir="$1" 66f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fi 67f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 68f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if [ '!' -d "$testdir" ]; then 69f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project td2=`echo ${testdir}-*` 70f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if [ '!' -d "$td2" ]; then 71f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project echo "${testdir}: no such test directory" 1>&2 72f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project usage="yes" 73f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fi 74f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project testdir="$td2" 75f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fi 76f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectfi 77f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 78f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectif [ "$usage" = "yes" ]; then 79f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project prog=`basename $prog` 80f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ( 81f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project echo "usage:" 82f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project echo " $prog --help Print this message." 83f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project echo " $prog testname Run test normally." 84f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project echo " $prog --dev testname Development mode (dump to stdout)." 85f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project echo " $prog --update testname Update mode (replace expected.txt)." 86f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project echo " Omitting the test name uses the current directory as the test." 87f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ) 1>&2 88f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project exit 1 89f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectfi 90f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 91f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projecttd_info="$testdir"/"$info" 92f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projecttd_run="$testdir"/"$run" 93f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projecttd_expected="$testdir"/"$expected" 94f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 95f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projecttmpdir=/tmp/test-$$ 96f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 97f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectif [ '!' '(' -r "$td_info" -a -r "$td_run" -a -r "$td_expected" ')' ]; then 98f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project echo "${testdir}: missing files" 1>&2 99f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project exit 1 100f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectfi 101f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 102f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project# copy the test to a temp dir and run it 103f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 104f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectecho "${testdir}: running..." 1>&2 105f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 106f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectrm -rf "$tmpdir" 107f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectcp -Rp "$testdir" "$tmpdir" 108f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectcd "$tmpdir" 109f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectchmod 755 "$run" 110f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 111f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#PATH="${progdir}/../build/bin:${PATH}" 112f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 113f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectgood="no" 114f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectif [ "$dev_mode" = "yes" ]; then 115f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project "./$run" 2>&1 116f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project echo "exit status: $?" 1>&2 117f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project good="yes" 118f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectelif [ "$update_mode" = "yes" ]; then 119f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project "./$run" >"${progdir}/$td_expected" 2>&1 120f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project good="yes" 121f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectelse 122f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project "./$run" >"$output" 2>&1 123f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp -s "$expected" "$output" 124f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if [ "$?" = "0" ]; then 125f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project # output == expected 126f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project good="yes" 127f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project echo "$testdir"': succeeded!' 1>&2 128f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project fi 129f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectfi 130f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 131f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectif [ "$good" = "yes" ]; then 132f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cd "$oldwd" 133f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project rm -rf "$tmpdir" 134f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project exit 0 135f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectfi 136f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 137f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project( 138f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project echo "${testdir}: FAILED!" 139f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project echo ' ' 140f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project echo '#################### info' 141f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cat "$info" | sed 's/^/# /g' 142f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project echo '#################### diffs' 143f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project diff -u "$expected" "$output" 144f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project echo '####################' 145f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project echo ' ' 146f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project echo "files left in $tmpdir" 147f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project) 1>&2 148f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 149f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectexit 1 150