setup: copy misc/build_helpers/run_trial.py from tahoe-lafs (ref: #52)
authorzooko <zooko@zooko.com>
Sun, 19 Sep 2010 00:43:23 +0000 (06:13 +0530)
committerzooko <zooko@zooko.com>
Sun, 19 Sep 2010 00:43:23 +0000 (06:13 +0530)
Ignore-this: 5e3ee2511f54fb857bb87dd5d9ad7c94

darcs-hash:c744372840befe040838072c53fc52521cb1f53d

misc/build_helpers/run_trial.py [changed mode: 0644->0755]

old mode 100644 (file)
new mode 100755 (executable)
index 4d06a5d..eb9c63a
@@ -1 +1,55 @@
-from twisted.scripts.trial import run; run()
\ No newline at end of file
+#!/usr/bin/env python
+
+import os, sys, re
+
+modulename = None
+for i in xrange(1, len(sys.argv)):
+    if not sys.argv[i].startswith('-'):
+        modulename = sys.argv[i]
+        break
+
+if modulename is None:
+    raise AssertionError("no test module specified")
+
+__import__(modulename)
+srcfile = sys.modules[modulename].__file__
+srcdir = os.path.dirname(os.path.realpath(srcfile))
+for i in modulename.split('.'):
+    srcdir = os.path.dirname(srcdir)
+
+if os.path.normcase(srcdir).endswith('.egg'):
+    srcdir = os.path.dirname(srcdir)
+elif os.path.normcase(os.path.basename(srcdir)) == 'site-packages':
+    srcdir = os.path.dirname(srcdir)
+    if re.search(r'python.+\..+', os.path.normcase(os.path.basename(srcdir))):
+        srcdir = os.path.dirname(srcdir)
+    if os.path.normcase(os.path.basename(srcdir)) == 'lib':
+        srcdir = os.path.dirname(srcdir)
+
+srcdir = os.path.normcase(os.path.normpath(srcdir))
+cwd = os.path.normcase(os.path.normpath(os.getcwd()))
+
+same = (srcdir == cwd)
+if not same:
+    try:
+        same = os.path.samefile(srcdir, cwd)
+    except AttributeError, e:
+        e  # hush pyflakes
+
+if not same:
+    msg = ("We seem to be testing the code at %r\n"
+           "(according to the source filename %r),\n"
+           "but expected to be testing the code at %r.\n"
+           % (srcdir, srcfile, cwd))
+    if (not isinstance(cwd, unicode) and
+        cwd.decode(sys.getfilesystemencoding(), 'replace') != os.path.normcase(os.path.normpath(os.getcwdu()))):
+        msg += ("However, this may be a false alarm because the current directory path\n"
+                "is not representable in the filesystem encoding. This script needs to be\n"
+                "run from the source directory to be tested, at a non-Unicode path.")
+    else:
+        msg += "This script needs to be run from the source directory to be tested."
+
+    raise AssertionError(msg)
+
+from twisted.scripts.trial import run
+run()
\ No newline at end of file