# HG changeset patch # User Stefan Anzinger # Date 1397914322 -7200 # Node ID 12f2b3baa163dc8dc035ad4a1eb7c9b69a741760 # Parent 66c7e50a9a32e8cbfb5e5f2f857a43e9e20cbc08 JUnit Reporting diff -r 66c7e50a9a32 -r 12f2b3baa163 mx/JUnitWrapper.java --- a/mx/JUnitWrapper.java Sat Apr 19 15:29:48 2014 +0200 +++ b/mx/JUnitWrapper.java Sat Apr 19 15:32:02 2014 +0200 @@ -21,24 +21,30 @@ * questions. */ - /* Execute testcases by reading names from a given file, due to limits of * the operating system regarding command line size (windows: 32k, * linux [depending on the settings]: ~2097k) * see http://msdn.microsoft.com/en-us/library/ms682425%28VS.85%29.aspx */ +import org.apache.tools.ant.*; +import org.apache.tools.ant.taskdefs.optional.junit.*; +import org.apache.tools.ant.taskdefs.optional.junit.FormatterElement.TypeAttribute; +import org.apache.tools.ant.taskdefs.optional.junit.JUnitTask.*; +import org.apache.tools.ant.types.*; +import org.apache.tools.ant.types.selectors.*; import org.junit.runner.*; + import java.io.*; import java.util.*; public class JUnitWrapper { /** - * @param args - * args[0] is the path where to read the names of the testclasses. + * @param args args[0] is the path where to read the names of the testclasses. + * @throws Exception */ - public static void main(String[] args) { + public static void main(String[] args) throws Exception { if (args.length == 0) { System.err.printf("wrong usage. provide a filename\n"); System.exit(1); @@ -72,6 +78,69 @@ } else { System.out.printf("executing junit tests now... (%d test classes)\n", strargs.length); } - JUnitCore.main(strargs); + + JUnitTask task = new JUnitTask(); + task.setCloneVm(true); + task.setProject(new Project()); + task.getProject().setSystemProperties(); + + task.getProject().setBasedir("."); + TypeAttribute ta = new TypeAttribute(); + ta.setValue("xml"); + FormatterElement fe = new FormatterElement(); + fe.setType(ta); + task.addFormatter(fe); + + File reportDir = new File("report"); + reportDir.mkdirs(); + File xmldir = new File(reportDir, "xml"); + xmldir.mkdirs(); + Set ignore = new HashSet<>(); + ignore.add("com.oracle.truffle.api.dsl.test.BinaryNodeTest"); + ignore.add("com.oracle.truffle.api.dsl.test.ExecuteEvaluatedTest"); + ignore.add("com.oracle.truffle.api.test.FrameTest"); + ignore.add("com.oracle.truffle.api.dsl.test.UnsupportedSpecializationTest"); + ignore.add("com.oracle.truffle.sl.test.SLSimpleTestSuite"); + ignore.add("com.oracle.graal.compiler.test.ea.UnsafeEATest"); + ignore.add("com.oracle.graal.hotspot.test.HotSpotNmethodTest"); + ignore.add("com.oracle.graal.hotspot.test.WriteBarrierAdditionTest"); + ignore.add("com.oracle.graal.hotspot.test.CompressedOopTest"); + ignore.add("com.oracle.graal.compiler.test.deopt.MonitorDeoptTest"); // Probably CString problem + for (String name : tests) { + JUnitTest t = new JUnitTest(); + t.setName(name); + t.setTodir(xmldir); + if (new File(xmldir, "TEST-" + name + ".xml").exists() || ignore.contains(name) + ) { + System.out.println("Ignoring testclass " + name); + t.setIf("run.all"); + } + t.setFork(false); + t.setHaltonerror(false); + t.setHaltonfailure(false); + task.addTest(t); + } + SummaryAttribute sa = new SummaryAttribute(); + sa.setValue("withOutAndErr"); + task.setPrintsummary(sa); + task.setFork(false); + task.setShowOutput(true); + task.setOutputToFormatters(true); + task.setHaltonerror(false); + + task.execute(); + XMLResultAggregator report = new XMLResultAggregator(); + report.setProject(task.getProject()); + report.setTofile(new File(reportDir, "unittest-report-merged.xml").getPath()); + FileSet resultFileSet = new FileSet(); + resultFileSet.setDir(xmldir); + resultFileSet.setIncludes("*"); + report.addFileSet(resultFileSet); + report.execute(); + AggregateTransformer at = report.createReport(); + File htmlDir = new File(reportDir, "html"); + htmlDir.mkdirs(); + at.setTodir(htmlDir); + at.transform(); } } diff -r 66c7e50a9a32 -r 12f2b3baa163 mx/mx_graal.py --- a/mx/mx_graal.py Sat Apr 19 15:29:48 2014 +0200 +++ b/mx/mx_graal.py Sat Apr 19 15:32:02 2014 +0200 @@ -852,7 +852,7 @@ for t in tests: found = False for c, p in candidates.iteritems(): - if t in c: + if t == c: found = True classes.append(c) projs.add(p.name) @@ -881,6 +881,7 @@ os.close(_) def harness(projectscp, vmArgs): + projectscp = mx.classpath("ant") + os.pathsep + projectscp if not exists(javaClass) or getmtime(javaClass) < getmtime(javaSource): subprocess.check_call([mx.java().javac, '-cp', projectscp, '-d', mxdir, javaSource]) if _get_vm() != 'graal': diff -r 66c7e50a9a32 -r 12f2b3baa163 mx/projects --- a/mx/projects Sat Apr 19 15:29:48 2014 +0200 +++ b/mx/projects Sat Apr 19 15:32:02 2014 +0200 @@ -14,6 +14,18 @@ library@JUNIT@sourceSha1=28e0ad201304e4a4abf999ca0570b7cffc352c3c library@JUNIT@dependencies=HAMCREST +library@ANT@path=lib/ant-1.9.3.jar +library@ANT@urls=jar:http://tweedo.com/mirror/apache//ant/binaries/apache-ant-1.9.3-bin.zip!/apache-ant-1.9.3/lib/ant.jar +library@ANT@sha1=311ac248030ff4f9f27e55561fadf3e99c646abb + +library@ANT_JUNIT@path=lib/ant-junit-1.9.3.jar +library@ANT_JUNIT@urls=jar:http://tweedo.com/mirror/apache//ant/binaries/apache-ant-1.9.3-bin.zip!/apache-ant-1.9.3/lib/ant-junit.jar +library@ANT_JUNIT@sha1=d1cafa6f9f174a6ca335b257e3b15c485d2c054a + +library@ANT_JUNIT4@path=lib/ant-junit4-1.9.3.jar +library@ANT_JUNIT4@urls=jar:http://tweedo.com/mirror/apache//ant/binaries/apache-ant-1.9.3-bin.zip!/apache-ant-1.9.3/lib/ant-junit4.jar +library@ANT_JUNIT4@sha1=a5443743a5b0abe9a1b4e40524ce6dee285cb99c + library@HAMCREST@path=lib/hamcrest-core-1.3.jar library@HAMCREST@urls=http://repo1.maven.org/maven2/org/hamcrest/hamcrest-core/1.3/hamcrest-core-1.3.jar library@HAMCREST@sha1=42a25dc3219429f0e5d060061f71acb49bf010a0 @@ -78,6 +90,9 @@ project@com.oracle.graal.api.runtime@javaCompliance=1.8 project@com.oracle.graal.api.runtime@workingSets=API,Graal +project@ant@dependencies=ANT,ANT_JUNIT,ANT_JUNIT4 +project@ant@javaCompliance=1.7 + # graal.api.test project@com.oracle.graal.api.test@subDir=graal project@com.oracle.graal.api.test@sourceDirs=src