151 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			151 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
#!/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
 |