chiark / gitweb /
tests figure out paths more automatically
authorRichard Kettlewell <rjk@greenend.org.uk>
Wed, 21 Nov 2007 10:03:19 +0000 (10:03 +0000)
committerRichard Kettlewell <rjk@greenend.org.uk>
Wed, 21 Nov 2007 10:03:19 +0000 (10:03 +0000)
tests/Makefile.am
tests/alltests
tests/dtest.py

index e65100fa649d65772b50040a5a76650bcfaa6c63..c3d9b449b35049f934e0b1c812123bd7a72f2df8 100644 (file)
@@ -19,9 +19,6 @@
 #
 
 check:
-       PATH=`pwd`/../server:`pwd`/..clients:$$PATH \
-       PYTHONPATH=../python \
-               topsrcdir=${top_srcdir} \
-               ${PYTHON} ${srcdir}/alltests
+       ${PYTHON} ${srcdir}/alltests
 
 EXTRA_DIST=alltests dtest.py nothing.py version.py
index 884a8708bb181a0984dd319ddd8de5b4e46ab12e..0d216f3d832f9ad8005a5d69574c5f1d087d6010 100755 (executable)
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
 # USA
 #
-import dtest,sys
+import sys,re,os.path
+
+# Parse the makefile in the current directory to identify the source directory
+top_srcdir = None
+for l in file("Makefile"):
+    r = re.match("top_srcdir *= *(.*)",  l)
+    if r:
+        top_srcdir = r.group(1)
+        break
+if not top_srcdir:
+    fatal("cannot identify source directory")
+
+# Make sure that the test directory is on the module search path (so we can
+# find dtest and the tests themselves)
+sys.path.insert(0, os.path.join(top_srcdir, "tests"))
+import dtest
 
 tests = ["nothing", "version"]
 
index 776a3ad43a8102e1c74822332ca963af92e436ac..b9862f401365d2a2e3d9f57af8b3c23379c43a4b 100644 (file)
 
 """Utility module used by tests"""
 
-import os,os.path,subprocess,sys,disorder
+import os,os.path,subprocess,sys,re
+
+def fatal(s):
+    """Write an error message and exit"""
+    sys.stderr.write("ERROR: %s\n" % s)
+    sys.exit(1)
+
+# Identify the top build directory
+cwd = os.getcwd()
+if os.path.exists("config.h"):
+    top_builddir = cwd
+elif os.path.exists("alltests"):
+    top_builddir = os.path.dirname(cwd)
+else:
+    fatal("cannot identify build directory")
+
+# Make sure the Python build directory is on the module search path
+sys.path.insert(0, os.path.join(top_builddir, "python"))
+import disorder
+
+# Make sure the server build directory is on the executable search path
+ospath = os.environ["PATH"].split(os.pathsep)
+ospath.insert(0, os.path.join(top_builddir, "server"))
+os.environ["PATH"] = os.pathsep.join(ospath)
+
+# Parse the makefile in the current directory to identify the source directory
+top_srcdir = None
+for l in file("Makefile"):
+    r = re.match("top_srcdir *= *(.*)",  l)
+    if r:
+        top_srcdir = r.group(1)
+        break
+if not top_srcdir:
+    fatal("cannot identify source directory")
+
+# The tests source directory must be on the module search path already since
+# we found dtest.py
+
+# -----------------------------------------------------------------------------
 
 def copyfile(a,b):
     """copyfile(A, B)
@@ -36,7 +74,7 @@ Make track with relative path S exist"""
     trackdir = os.path.dirname(trackpath)
     if not os.path.exists(trackdir):
         os.makedirs(trackdir)
-    copyfile("%s/sounds/slap.ogg" % topsrcdir, trackpath)
+    copyfile("%s/sounds/slap.ogg" % top_srcdir, trackpath)
 
 def stdtracks():
     maketrack("Joe Bloggs/First Album/01:First track.ogg")
@@ -140,8 +178,7 @@ Recursively delete directory D"""
 tests = 0
 failures = 0
 daemon = None
-testroot = "%s/testroot" % os.getcwd()
-topsrcdir = os.path.abspath(os.getenv("topsrcdir"))
+testroot = "%s/tests/testroot" % top_builddir
 remove_dir(testroot)
 os.mkdir(testroot)
 open("%s/config" % testroot, "w").write(
@@ -168,5 +205,5 @@ tracklength *.ogg disorder-tracklength
 tracklength *.wav disorder-tracklength
 tracklength *.flac disorder-tracklength
 """ % (testroot, testroot, testroot, testroot))
-copyfile("%s/sounds/scratch.ogg" % topsrcdir,
+copyfile("%s/sounds/scratch.ogg" % top_srcdir,
          "%s/scratch.ogg" % testroot)