Allow tests to be skipped based on whether or not the compiler has a tag
authorIan Lynagh <igloo@earth.li>
Fri, 13 Apr 2007 23:38:59 +0000 (23:38 +0000)
committerIan Lynagh <igloo@earth.li>
Fri, 13 Apr 2007 23:38:59 +0000 (23:38 +0000)
When working on a new foo extension, you can now put your tests in the
testsuite, set ProjectTags=-foo in mk/build.mk and skip_unless_tag('foo')
in the tests.

testsuite/config/ghc
testsuite/config/hugs
testsuite/driver/runtests.py
testsuite/driver/testglobals.py
testsuite/driver/testlib.py

index 4491643..999dedc 100644 (file)
@@ -1,3 +1,7 @@
+
+import os
+import re
+
 # Testsuite configuration setup for GHC
 #
 # This file is Python source
@@ -73,3 +77,12 @@ config.way_rts_flags = {
        'hpc'        : []
        }
 
+def get_compiler_info():
+    h = os.popen(config.compiler + ' --numeric-version', 'r')
+    v = h.read()
+    h.close()
+    v = re.sub('[\r\n]', '', v)
+    v = v.split('-')
+    config.compiler_version = v[0]
+    config.compiler_tags = v[1:]
+
index f22d71c..5be508a 100644 (file)
@@ -15,3 +15,7 @@ config.other_ways            = []
 
 config.way_flags = { 'normal' : [] }
 config.way_rts_flags = { 'normal' : [] }
+
+def get_compiler_info():
+    pass
+
index 77a9c1a..3c4c0d5 100644 (file)
@@ -74,6 +74,9 @@ for opt,arg in opts:
     if opt == '--threads':
         config.threads = int(arg)
 
+# This has to come after arg parsing as the args can change the compiler
+get_compiler_info()
+
 # Can't import this earlier as we need to know if threading will be
 # enabled or not
 from testlib import *
index 9873d3b..15b9fb6 100644 (file)
@@ -54,6 +54,10 @@ class TestConfig:
         # and ghc-pkg
         self.ghc_pkg = ''
 
+        # Compiler version info
+        self.compiler_version = ''
+        self.compiler_tags = []
+
         # Flags we always give to this compiler
         self.compiler_always_flags = []
         
index 051d33a..faed2c3 100644 (file)
@@ -222,6 +222,22 @@ def _skip_if_platform( opts, plat ):
        opts.skip = 1
        
 # ---
+
+def skip_if_tag( tag ):
+   return lambda opts, t=tag: _skip_if_tag(opts, t)
+
+def _skip_if_tag( opts, tag ):
+    if tag in config.compiler_tags:
+       opts.skip = 1
+       
+def skip_unless_tag( tag ):
+   return lambda opts, t=tag: _skip_unless_tag(opts, t)
+
+def _skip_unless_tag( opts, tag ):
+    if not (tag in config.compiler_tags):
+       opts.skip = 1
+       
+# ---
 def alone(opts):
     opts.alone = 1