--- a/tests/run-tests.py Thu May 31 12:47:50 2012 +0200
+++ b/tests/run-tests.py Tue Jun 05 00:20:53 2012 +0100
@@ -594,6 +594,19 @@
# can generate the surrounding doctest magic
inpython = False
+ # True or False when in a true or false conditional section
+ skipping = None
+
+ def hghave(reqs):
+ # TODO: do something smarter when all other uses of hghave is gone
+ proc = Popen4('%s -c "%s/hghave %s"' %
+ (options.shell, TESTDIR, ' '.join(reqs)), TESTDIR, 0)
+ proc.communicate()
+ ret = proc.wait()
+ if wifexited(ret):
+ ret = os.WEXITSTATUS(ret)
+ return ret == 0
+
f = open(test)
t = f.readlines()
f.close()
@@ -606,7 +619,24 @@
for n, l in enumerate(t):
if not l.endswith('\n'):
l += '\n'
- if l.startswith(' >>> '): # python inlines
+ if l.startswith('#if'):
+ if skipping is not None:
+ after.setdefault(pos, []).append(' !!! nested #if\n')
+ skipping = not hghave(l.split()[1:])
+ after.setdefault(pos, []).append(l)
+ elif l.startswith('#else'):
+ if skipping is None:
+ after.setdefault(pos, []).append(' !!! missing #if\n')
+ skipping = not skipping
+ after.setdefault(pos, []).append(l)
+ elif l.startswith('#endif'):
+ if skipping is None:
+ after.setdefault(pos, []).append(' !!! missing #if\n')
+ skipping = None
+ after.setdefault(pos, []).append(l)
+ elif skipping:
+ after.setdefault(pos, []).append(l)
+ elif l.startswith(' >>> '): # python inlines
after.setdefault(pos, []).append(l)
prepos = pos
pos = n
@@ -617,7 +647,7 @@
script.append('%s -m heredoctest <<EOF\n' % PYTHON)
addsalt(n, True)
script.append(l[2:])
- if l.startswith(' ... '): # python inlines
+ elif l.startswith(' ... '): # python inlines
after.setdefault(prepos, []).append(l)
script.append(l[2:])
elif l.startswith(' $ '): # commands
@@ -644,6 +674,8 @@
if inpython:
script.append("EOF\n")
+ if skipping is not None:
+ after.setdefault(pos, []).append(' !!! missing #endif\n')
addsalt(n + 1, False)
# Write out the script and execute it
@@ -1197,7 +1229,7 @@
del os.environ[k]
global TESTDIR, HGTMP, INST, BINDIR, PYTHONDIR, COVERAGE_FILE
- TESTDIR = os.environ["TESTDIR"] = os.getcwd()
+ TESTDIR = os.environ["TESTDIR"] = os.getcwd().replace('\\', '/')
if options.tmpdir:
options.keep_tmpdir = True
tmpdir = options.tmpdir