diff --git a/tests/hghave b/tests/hghave
index a0555ae394b3b3d955b10f056fc9a4b03b7c882b_dGVzdHMvaGdoYXZl..41a2c5cbcb6a9afc95ec045026b9cdda34088b89_dGVzdHMvaGdoYXZl 100755
--- a/tests/hghave
+++ b/tests/hghave
@@ -190,4 +190,15 @@
         desc = feature[1]
         print name + ':', desc
 
+def test_features():
+    failed = 0
+    for name, feature in checks.iteritems():
+        check, _ = feature
+        try:
+            check()
+        except Exception, e:
+            print "feature %s failed:  %s" % (name, e)
+            failed += 1
+    return failed
+
 parser = optparse.OptionParser("%prog [options] [features]")
@@ -193,4 +204,6 @@
 parser = optparse.OptionParser("%prog [options] [features]")
+parser.add_option("--test-features", action="store_true",
+                  help="test available features")
 parser.add_option("--list-features", action="store_true",
                   help="list available features")
 parser.add_option("-q", "--quiet", action="store_true",
@@ -202,6 +215,9 @@
         list_features()
         sys.exit(0)
 
+    if options.test_features:
+        sys.exit(test_features())
+
     quiet = options.quiet
 
     failures = 0
diff --git a/tests/test-hghave b/tests/test-hghave
new file mode 100755
index 0000000000000000000000000000000000000000..41a2c5cbcb6a9afc95ec045026b9cdda34088b89_dGVzdHMvdGVzdC1oZ2hhdmU=
--- /dev/null
+++ b/tests/test-hghave
@@ -0,0 +1,4 @@
+#!/bin/sh
+# Testing that hghave does not crash when checking features
+
+"$TESTDIR/hghave" --test-features 2>/dev/null
diff --git a/tests/test-hghave.out b/tests/test-hghave.out
new file mode 100644