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