changeset 16304:12f2b3baa163

JUnit Reporting
author Stefan Anzinger <stefan.anzinger@gmail.com>
date Sat, 19 Apr 2014 15:32:02 +0200
parents 66c7e50a9a32
children 18c8ef7df8b5
files mx/JUnitWrapper.java mx/mx_graal.py mx/projects
diffstat 3 files changed, 91 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
--- 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<String> 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();
     }
 }
--- 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':
--- 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