# HG changeset patch # User Doug Simon # Date 1340098587 -7200 # Node ID 14505f3e6b4ce60bf95bba24cd300b4da7e642cf # Parent 1cfa35d467de40c3092346d7c17cc82953225140 modified harness for running JUnit and JTT tests such that only projects declaring a 'testHarness' attribute in mx/projects are scanned for tests diff -r 1cfa35d467de -r 14505f3e6b4c mx/commands.py --- a/mx/commands.py Mon Jun 18 15:39:07 2012 +0200 +++ b/mx/commands.py Tue Jun 19 11:36:27 2012 +0200 @@ -175,7 +175,7 @@ """run one or all DaCapo benchmarks DaCapo options are distinguished from VM options by a '@' prefix. - For example, '@--iterations @5' will pass '--iterations 5' to the + For example, '@-n @5' will pass '-n 5' to the DaCapo harness.""" numTests = {} @@ -624,26 +624,7 @@ elif e == basename + '.class': classes.append(pkg + '.' + basename) - -# Table of unit tests. -# Keys are project names, values are package name lists. -# All source files in the given (project,package) pairs are scanned for lines -# containing '@Test'. These are then determined to be the classes defining -# unit tests. -_unittests = { - 'com.oracle.graal.tests': ['com.oracle.graal.compiler.tests'], -} -_jtttests = { - 'com.oracle.graal.jtt': ['com.oracle.graal.jtt'], -} - -def unittest(args): - """run the Graal Compiler Unit Tests in the GraalVM - - If filters are supplied, only tests whose fully qualified name - include a filter as a substring are run. Negative filters are - those with a '-' prefix. VM args should have a @ prefix.""" - +def _run_tests(args, harnessName, harness): pos = [a for a in args if a[0] != '-' and a[0] != '@' ] neg = [a[1:] for a in args if a[0] == '-'] vmArgs = [a[1:] for a in args if a[0] == '@'] @@ -654,18 +635,30 @@ return True return False - for proj in _unittests.iterkeys(): - p = mx.project(proj) - classes = [] - for pkg in _unittests[proj]: - _find_classes_with_annotations(classes, p, pkg, ['@Test']) + for p in mx.projects(): + if getattr(p, 'testHarness', None) == harnessName: + classes = [] + _find_classes_with_annotations(classes, p, None, ['@Test']) + + if len(pos) != 0: + classes = [c for c in classes if containsAny(c, pos)] + if len(neg) != 0: + classes = [c for c in classes if not containsAny(c, neg)] + + if len(classes) != 0: + mx.log('running tests in ' + p.name) + harness(p, vmArgs, classes) + +def unittest(args): + """run the Graal Compiler Unit Tests in the GraalVM - if len(pos) != 0: - classes = [c for c in classes if containsAny(c, pos)] - if len(neg) != 0: - classes = [c for c in classes if not containsAny(c, neg)] - - vm(['-XX:-BootstrapGraal', '-esa'] + vmArgs + ['-cp', mx.classpath(proj), 'org.junit.runner.JUnitCore'] + classes) + If filters are supplied, only tests whose fully qualified name + include a filter as a substring are run. Negative filters are + those with a '-' prefix. VM args should have a @ prefix.""" + + def harness(p, vmArgs, classes): + vm(['-XX:-BootstrapGraal', '-esa'] + vmArgs + ['-cp', mx.classpath(p.name), 'org.junit.runner.JUnitCore'] + classes) + _run_tests(args, 'unittest', harness) def jtt(args): """run the Java Tester Tests in the GraalVM @@ -674,28 +667,9 @@ include a filter as a substring are run. Negative filters are those with a '-' prefix. VM args should have a @ prefix.""" - pos = [a for a in args if a[0] != '-' and a[0] != '@' ] - neg = [a[1:] for a in args if a[0] == '-'] - vmArgs = [a[1:] for a in args if a[0] == '@'] - - def containsAny(c, substrings): - for s in substrings: - if s in c: - return True - return False - - for proj in _jtttests.iterkeys(): - p = mx.project(proj) - classes = [] - for pkg in _jtttests[proj]: - _find_classes_with_annotations(classes, p, pkg, ['@Test']) - - if len(pos) != 0: - classes = [c for c in classes if containsAny(c, pos)] - if len(neg) != 0: - classes = [c for c in classes if not containsAny(c, neg)] - - vm(['-XX:-BootstrapGraal', '-XX:CompileOnly=com/oracle/graal/jtt', '-XX:CompileCommand=compileonly,java/lang/Object::', '-XX:CompileCommand=quiet', '-Xcomp', '-esa'] + vmArgs + ['-cp', mx.classpath(proj), 'org.junit.runner.JUnitCore'] + classes) + def harness(p, vmArgs, classes): + vm(['-XX:-BootstrapGraal', '-XX:CompileOnly=com/oracle/graal/jtt', '-XX:CompileCommand=compileonly,java/lang/Object::', '-XX:CompileCommand=quiet', '-Xcomp', '-esa'] + vmArgs + ['-cp', mx.classpath(p.name), 'org.junit.runner.JUnitCore'] + classes) + _run_tests(args, 'jtt', harness) def buildvms(args): """build one or more VMs in various configurations""" diff -r 1cfa35d467de -r 14505f3e6b4c mx/projects --- a/mx/projects Mon Jun 18 15:39:07 2012 +0200 +++ b/mx/projects Tue Jun 19 11:36:27 2012 +0200 @@ -119,9 +119,10 @@ # graal.snippets.test project@com.oracle.graal.snippets.test@subDir=graal project@com.oracle.graal.snippets.test@sourceDirs=src -project@com.oracle.graal.snippets.test@dependencies=com.oracle.graal.snippets +project@com.oracle.graal.snippets.test@dependencies=com.oracle.graal.snippets,com.oracle.graal.tests project@com.oracle.graal.snippets.test@checkstyle=com.oracle.graal.graph project@com.oracle.graal.snippets.test@javaCompliance=1.7 +project@com.oracle.graal.snippets.test@testHarness=unittest # graal.nodes project@com.oracle.graal.nodes@subDir=graal @@ -184,6 +185,7 @@ project@com.oracle.graal.tests@dependencies=JUNIT,com.oracle.graal.printer,com.oracle.graal.api project@com.oracle.graal.tests@checkstyle=com.oracle.graal.graph project@com.oracle.graal.tests@javaCompliance=1.7 +project@com.oracle.graal.tests@testHarness=unittest # graal.jtt project@com.oracle.graal.jtt@subDir=graal @@ -191,6 +193,7 @@ project@com.oracle.graal.jtt@dependencies=JUNIT project@com.oracle.graal.jtt@checkstyle=com.oracle.graal.graph project@com.oracle.graal.jtt@javaCompliance=1.7 +project@com.oracle.graal.jtt@testHarness=jtt # graal.examples project@com.oracle.graal.examples@subDir=graal