[PATCH 2 of 2] run-tests: detect when hghave fails to check for a feature and fail test

Nicolas Dumazet nicdumz at gmail.com
Tue Apr 7 12:39:13 CDT 2009


# HG changeset patch
# User Nicolas Dumazet <nicdumz.commits at gmail.com>
# Date 1239125903 -32400
# Node ID 58a301333b372088682c8cbf669610cb492fc02f
# Parent  70061f224d7920b2db2600d418d977f2364fdc22
run-tests: detect when hghave fails to check for a feature and fail test

hghave exitcode != 0 might mean that hghave failed to check for feature
avaibility. Detect those cases, and fail the test, instead of skipping it.

diff --git a/tests/hghave b/tests/hghave
--- a/tests/hghave
+++ b/tests/hghave
@@ -238,9 +238,15 @@
             continue

         check, desc = checks[feature]
-        if not negate and not check():
+        try:
+            available = check()
+        except Exception, e:
+            error('hghave check failed: ' + feature)
+            continue
+
+        if not negate and not available:
             error('skipped: missing feature: ' + desc)
-        elif negate and check():
+        elif negate and available:
             error('skipped: system supports %s' % desc)

     if failures != 0:
diff --git a/tests/run-tests.py b/tests/run-tests.py
--- a/tests/run-tests.py
+++ b/tests/run-tests.py
@@ -36,6 +36,7 @@
 # reserved exit code to skip test (used by hghave)
 SKIPPED_STATUS = 80
 SKIPPED_PREFIX = 'skipped: '
+FAILED_PREFIX  = 'hghave check failed: '

 required_tools = ["python", "diff", "grep", "unzip", "gunzip",
"bunzip2", "sed"]

@@ -129,16 +130,22 @@
         lines.append(text[i:n+1])
         i = n + 1

-def extract_missing_features(lines):
-    '''Extract missing/unknown features log lines as a list'''
+def parse_hghave_output(lines):
+    '''Parse hghave log lines.
+    Return tuple of lists (missing, failed):
+      * the missing/unknown features
+      * the features for which existence check failed'''
     missing = []
+    failed = []
     for line in lines:
-        if not line.startswith(SKIPPED_PREFIX):
-            continue
-        line = line.splitlines()[0]
-        missing.append(line[len(SKIPPED_PREFIX):])
+        if line.startswith(SKIPPED_PREFIX):
+            line = line.splitlines()[0]
+            missing.append(line[len(SKIPPED_PREFIX):])
+        elif line.startswith(FAILED_PREFIX):
+            line = line.splitlines()[0]
+            failed.append(line[len(FAILED_PREFIX):])

-    return missing
+    return missing, failed

 def show_diff(expected, output):
     for line in difflib.unified_diff(expected, output,
@@ -408,10 +415,14 @@
         ref_out = []
     if skipped:
         mark = 's'
-        missing = extract_missing_features(out)
+        missing, failed = parse_hghave_output(out)
         if not missing:
             missing = ['irrelevant']
-        skip(missing[-1])
+        if failed:
+            fail("hghave failed checking for %s" % failed[-1])
+            skipped = False
+        else:
+            skip(missing[-1])
     elif out != ref_out:
         mark = '!'
         if ret:


More information about the Mercurial-devel mailing list