diff tests/run-tests.py @ 8060:84d0fe34427b

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.
author Nicolas Dumazet <nicdumz.commits@gmail.com>
date Wed, 08 Apr 2009 02:38:23 +0900
parents 076401cf2b63
children e85cc856d2e1
line wrap: on
line diff
--- a/tests/run-tests.py	Wed Apr 08 02:34:00 2009 +0900
+++ b/tests/run-tests.py	Wed Apr 08 02:38:23 2009 +0900
@@ -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: