diff options
| author | Brian <none@none> | 2010-08-25 23:40:39 -0600 |
|---|---|---|
| committer | Brian <none@none> | 2010-08-25 23:40:39 -0600 |
| commit | bed85f565b853b13576258adcd585c9753e3e10f (patch) | |
| tree | b5ed510db75eefcbb380f4c5edd52d4fc8d69942 /dep/libzip/regress/runtest | |
| parent | 55b09e7a9c312e900d6995fac790173904d5cf60 (diff) | |
Core/Dep: Added libzip which IS needed by G3D
Fixes compile on Windows and Linux (if you didn't have libzip installed for
some reason).
--HG--
branch : trunk
Diffstat (limited to 'dep/libzip/regress/runtest')
| -rwxr-xr-x | dep/libzip/regress/runtest | 363 |
1 files changed, 363 insertions, 0 deletions
diff --git a/dep/libzip/regress/runtest b/dep/libzip/regress/runtest new file mode 100755 index 00000000000..a1042510eaf --- /dev/null +++ b/dep/libzip/regress/runtest @@ -0,0 +1,363 @@ +#!/bin/sh + +# from ckmame:runtest,v 1.22 2005/12/27 09:41:51 dillo Exp +# +# runtest -- run regression tests +# Copyright (C) 2002-2007 Dieter Baron and Thomas Klausner +# +# This file is part of libzip, a library to manipulate ZIP archives. +# The authors can be contacted at <libzip@nih.at> +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in +# the documentation and/or other materials provided with the +# distribution. +# 3. The names of the authors may not be used to endorse or promote +# products derived from this software without specific prior +# written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +# OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +# GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +# IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +# runtest TESTNAME +# +# files: +# TESTNAME.test: test scenario +# +# test scenario: +# Lines beginning with # are comments. +# +# The following commands are recognized; return and args must +# appear exactly once, the others are optional. +# +# args ARGS +# run program with command line arguments ARGS +# +# description TEXT +# description of what test is for +# +# file TEST IN OUT +# copy file IN as TEST, compare against OUT after program run. +# +# file-del TEST IN +# copy file IN as TEST, check that it is removed by program. +# +# file-new TEST OUT +# check that file TEST is created by program and compare +# against OUT. +# +# mkdir MODE NAME +# create directory NAME with permissions MODE. +# +# program PRG +# run PRG. +# +# return RET +# RET is the expected exit code +# +# stderr TEXT +# program is expected to produce the error message TEXT. If +# multiple stderr commands are used, the messages are +# expected in the order given. +# +# stdout TEXT +# program is expected to print TEXT to stdout. If multiple +# stdout commands are used, the messages are expected in +# the order given. +# +# exit status +# runtest uses the following exit codes: +# 0: test passed +# 1: test failed +# 2: other error +# 77: test was skipped +# +# environment variables: +# VERBOSE: if set, be more verbose (e. g., output diffs) +# NOCLEANUP: if set, don't delete directory test is run in + +die() { + echo "$0: $*" >&2; + cleanup; + exit 2; +} + +fail() { + if [ ! -z "${VERBOSE}" ] + then + echo "${TEST} -- FAILED: $*"; + fi; + cleanup; + exit 1; +} + +skip() { + if [ ! -z "${VERBOSE}" ] + then + echo "${TEST} -- skipped: $*"; + fi; + cleanup; + exit 77; +} + +succeed() { + if [ ! -z "${VERBOSE}" ] + then + echo "${TEST} -- passed"; + fi + cleanup; + exit 0; +} + +cleanup() { + cd ..; + if [ -z "${NOCLEANUP}" ] + then + chmod -R u+rw ${DIR}; + rm -r ${DIR}; + fi +} + +check_in_out_exists() { + if [ ! -f "$2" ] + then + fail "missing output file: '$2'" + elif [ ! -f "$1" ] + then + die "cannot find input file '$1'" + fi +} + +checkdb() { + check_in_out_exists "$1" "$2" + out=`../dbdump "$2" | sort | diff ${DIFF_FLAGS} "$1" -` + if [ $? -ne 0 ] + then + if [ $VERBOSE ] + then + echo "$out" + fi + fail "$3" + fi + +} + +checkfile() { + check_in_out_exists "$1" "$2" + out=`diff ${DIFF_FLAGS} "$1" "$2"` + if [ $? -ne 0 ] + then + if [ $VERBOSE ] + then + echo "$out" + fi + fail "$3" + fi +} + +checkzip() { + check_in_out_exists "$1" "$2" + # quiet CRC errors + ${ZIPCMP} -t ${ZIPCMP_FLAGS} "$1" "$2" 2>/dev/null + if [ $? -ne 0 ] + then + fail "$3" + fi +} + +test_empty() { + if [ ! -z "$1" ] + then + die "directive $2 appeared twice in test file" + fi +} + +test_set() { + if [ -z "$1" ] + then + die "required directive $2 missing in test file" + fi +} + +copy_file() { + src="${srcdir}/$1" + + if [ ! -f "$src" ] + then + die "source file '$src' does not exist" + fi + dir=`dirname "$2"` + if [ ! -d "$dir" ] + then + mkdir -p "$dir" + fi + cp "$src" "$2" +} + +# GNU sort behaves differently on locales other than C, breaking tests +LC_ALL=C +export LC_ALL + +#testdir=`dirname $1` +TEST=`echo $1 | sed -e s',.*/,,' -e 's/\.test$//'` +shift + +DIR=${TEST}.d$$ +if [ -z "${srcdir}" ] +then + srcdir=.. +else + # XXX: fix for absolute srcdir? + srcdir=../${srcdir} +fi + +if [ -z "${ZIPCMP}" ] +then + ZIPCMP=zipcmp +else + if expr "${ZIPCMP}" : '[^/].*/' > /dev/null + then + ZIPCMP="../${ZIPCMP}" + fi +fi + +if [ -z "${VERBOSE}" ] +then + DIFF_FLAGS='' + ZIPCMP_FLAGS='-q' +else + DIFF_FLAGS='-u' + ZIPCMP_FLAGS='-v' +fi + +# XXX: set up trap to cleanup + +mkdir ${DIR} || ( die "cannot create test directory ${DIR}" ) +cd ${DIR} || ( die "cannot cd to test directory ${DIR}" ) + +{ + +RET='' +ARGS='' +FILES='' +FILES_SHOULD='' +DESCR='' + +touch stderr stdout + +while read cmd arg +do + case $cmd in + \#*) ;; + args) + test_empty "${ARGS}" args + ARGS="$arg";; + description) + test_empty "${DESCR}" description + DESCR="$arg";; + file) + set $arg + copy_file "$2" "$1" + FILES="${FILES} ${srcdir}/$3!$1";; + file-del) + set $arg + copy_file "$2" "$1";; + file-new) + set $arg + FILES="${FILES} ${srcdir}/$2!$1";; + mkdir) + set $arg + mkdir "$2" && chmod "$1" "$2";; + program) + PROGRAM=../"$arg";; + return) + test_empty "${RET}" return + RET="$arg";; + stderr) + echo "${PROGRAM}: $arg" >> stderr;; + stdout) + echo "$arg" >> stdout;; + *) + die "unknown directive '$cmd'" + esac +done + +test_set "${RET}" return +test_set "${ARGS}" args + +if [ -z "${PROGRAM}" ] +then + die no program to run given +fi + +if [ ! -z "${SETUP_ONLY}" ] +then + echo ${DIR} + exit 0 +fi + +if [ ! -z "${VERBOSE}" ] +then + echo "${TEST}: ${DESCR}" + echo "running: ${PROGRAM} ${ARGS}" +fi + +${PROGRAM} ${ARGS} > gotout 2> goterr +ret=$? + +if [ $ret -ne ${RET} ] +then + if [ ! -z "${VERBOSE}" ] + then + cat gotout + cat goterr + fi + fail "unexpected exit status: got $ret, expected ${RET}" +fi + +FILES_SHOULD="${FILES_SHOULD} stderr stdout gotout goterr" + +checkfile stderr goterr "unexpected error output" +checkfile stdout gotout "unexpected output" + +if [ ! -z "${FILES}" ] +then + for fs in ${FILES} + do + set -- `echo ${fs} | tr '!' ' '` + FILES_SHOULD="${FILES_SHOULD} $2" + case "$2" in + *.db) + checkdb "$1" "$2" "database $2 wrong";; + *.zip) + checkzip "$1" "$2" "zip file $2 wrong";; + *) + checkfile "$1" "$2" "file $2 wrong";; + esac + done +fi + +# check that no additional files exist +echo gotfiles shouldfiles ${FILES_SHOULD} | tr ' ' '\012' | sort > shouldfiles +touch gotfiles +find . -type f -print | sed 's!^./!!' | sort > gotfiles + +checkfile shouldfiles gotfiles "unexpected/missing files" + +succeed + +} < ${srcdir}/${TEST}.test |
