From 0414745f7d331997faac2c98a7fe614473342646 Mon Sep 17 00:00:00 2001 From: David Caldwell Date: Wed, 15 May 2013 15:33:40 -0700 Subject: [PATCH] Add testing infrastructure and a simple test --- test/main.test | 23 ++++++++++++++++++++++ test/run-tests | 50 +++++++++++++++++++++++++++++++++++++++++++++++ test/vcs/cvs.sh | 19 ++++++++++++++++++ test/vcs/darcs.sh | 13 ++++++++++++ test/vcs/git.sh | 13 ++++++++++++ test/vcs/hg.sh | 13 ++++++++++++ 6 files changed, 131 insertions(+) create mode 100644 test/main.test create mode 100755 test/run-tests create mode 100644 test/vcs/cvs.sh create mode 100644 test/vcs/darcs.sh create mode 100644 test/vcs/git.sh create mode 100644 test/vcs/hg.sh diff --git a/test/main.test b/test/main.test new file mode 100644 index 0000000..322931e --- /dev/null +++ b/test/main.test @@ -0,0 +1,23 @@ +# -*- sh -*- + +echo "initial" > a + +diff -uN --label /dev/null --label ${DIFF_PREFIX}a /dev/null a > initial.patch || true + +$COMMIT_PATCH -m "initial" initial.patch + +echo "1234" >> a + +$VC_DIFF > changed.patch || true + +$COMMIT_PATCH -m "changed" changed.patch + +rm a + +# Some VCSes won't show diffs for removed files unless you tell it they are removed: +[ $VC == 'cvs' ] && cvs rm a +[ $VC == 'hg' ] && hg rm a + +$VC_DIFF > removed.patch || true + +$COMMIT_PATCH -m "removed" removed.patch diff --git a/test/run-tests b/test/run-tests new file mode 100755 index 0000000..4839ed5 --- /dev/null +++ b/test/run-tests @@ -0,0 +1,50 @@ +#!/bin/bash + +set -x +TESTDIR=$(dirname $0) +TESTDIR_ABS=$(cd $TESTDIR && pwd) +export COMMIT_PATCH="$TESTDIR_ABS/../commit-patch --verbose" + +VCSes=$((cd "$TESTDIR/vcs" && ls -1 *.sh) | sed -e 's/\(.*\)\.sh/\1/') +Tests=$(cd "$TESTDIR" && ls -1 *.test) + +usage () { + set +x + echo "Usage:" + echo " $0 " + echo "" + echo " Where is one of: $(echo $VCSes)" + exit 1; +} + +VCs=${1:-$VCSes} + +[ "$VCs" == "--help" -o "$VCs" == "-h" ] && usage + +for vc in "$TESTDIR/vcs/"*.sh; do + source "$vc" +done + +run_test () { + export VC=$1 + TEST=$2 + + [ -d "$TESTDIR/tmp" ] || mkdir "$TESTDIR/tmp" + WD=$(mktemp -d "$TESTDIR_ABS/tmp/wd.XXXXXXX") + REPO=$(mktemp -d "$TESTDIR_ABS/tmp/repo.XXXXXXX") + + ${VC}_init "$WD" "$REPO" + + if ! (cd "$WD" && sh -x -e "$TESTDIR_ABS/$TEST"); then + echo "$VC / $TEST: Test failed." + exit 1; + fi + +# ${VC}_cleanup "$WD" "$REPO" +} + +for vc in $VCs; do + for t in $Tests; do + run_test $vc $t + done +done diff --git a/test/vcs/cvs.sh b/test/vcs/cvs.sh new file mode 100644 index 0000000..92d2e3d --- /dev/null +++ b/test/vcs/cvs.sh @@ -0,0 +1,19 @@ +cvs_init () { + WD=$1 + REPO=$2 + + export CVSROOT="$REPO" + cvs init + mkdir "$REPO/test" + cvs checkout -d "$WD" test + + export VC_DIFF="cvs diff -N" + export DIFF_PREFIX="" +} + +cvs_cleanup () { + WD=$1 + REPO=$2 + rm -rf "$WD" + rm -rf "$REPO" +} diff --git a/test/vcs/darcs.sh b/test/vcs/darcs.sh new file mode 100644 index 0000000..d0fdf3b --- /dev/null +++ b/test/vcs/darcs.sh @@ -0,0 +1,13 @@ +darcs_init () { + WD=$1 + mkdir -p "$WD" + (cd "$WD" && darcs init) + + export VC_DIFF="darcs diff" + export DIFF_PREFIX="a/" +} + +darcs_cleanup () { + WD=$1 + rm -rf "$WD" +} diff --git a/test/vcs/git.sh b/test/vcs/git.sh new file mode 100644 index 0000000..e0923f6 --- /dev/null +++ b/test/vcs/git.sh @@ -0,0 +1,13 @@ +git_init () { + WD=$1 + mkdir -p "$WD" + (cd "$WD" && git init) + + export VC_DIFF="git diff" + export DIFF_PREFIX="b/" +} + +git_cleanup () { + WD=$1 + rm -rf "$WD" +} diff --git a/test/vcs/hg.sh b/test/vcs/hg.sh new file mode 100644 index 0000000..29e1d71 --- /dev/null +++ b/test/vcs/hg.sh @@ -0,0 +1,13 @@ +hg_init () { + WD=$1 + mkdir -p "$WD" + (cd "$WD" && hg init) + + export VC_DIFF="hg diff" + export DIFF_PREFIX="a/" +} + +hg_cleanup () { + WD=$1 + rm -rf "$WD" +} -- 2.51.2