]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-1784: Move AbstractSurefireParser to package org.sonar.plugins.surefire.api
authorGodin <mandrikov@gmail.com>
Mon, 18 Oct 2010 17:10:04 +0000 (17:10 +0000)
committerGodin <mandrikov@gmail.com>
Mon, 18 Oct 2010 17:10:04 +0000 (17:10 +0000)
plugins/sonar-surefire-plugin/src/main/java/org/sonar/plugins/surefire/AbstractSurefireParser.java [deleted file]
plugins/sonar-surefire-plugin/src/main/java/org/sonar/plugins/surefire/SurefireSensor.java
plugins/sonar-surefire-plugin/src/main/java/org/sonar/plugins/surefire/api/AbstractSurefireParser.java [new file with mode: 0644]

diff --git a/plugins/sonar-surefire-plugin/src/main/java/org/sonar/plugins/surefire/AbstractSurefireParser.java b/plugins/sonar-surefire-plugin/src/main/java/org/sonar/plugins/surefire/AbstractSurefireParser.java
deleted file mode 100644 (file)
index 56adade..0000000
+++ /dev/null
@@ -1,121 +0,0 @@
-package org.sonar.plugins.surefire;
-
-import org.apache.commons.lang.StringEscapeUtils;
-import org.apache.commons.lang.StringUtils;
-import org.sonar.api.batch.SensorContext;
-import org.sonar.api.measures.CoreMetrics;
-import org.sonar.api.measures.Measure;
-import org.sonar.api.measures.Metric;
-import org.sonar.api.resources.Project;
-import org.sonar.api.resources.Resource;
-import org.sonar.api.utils.ParsingUtils;
-import org.sonar.api.utils.StaxParser;
-import org.sonar.api.utils.XmlParserException;
-
-import java.io.File;
-import java.io.FilenameFilter;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-
-import javax.xml.transform.TransformerException;
-
-/**
- * @since 2.4
- */
-public abstract class AbstractSurefireParser {
-
-  protected void collect(Project project, SensorContext context, File reportsDir) {
-    File[] xmlFiles = getReports(reportsDir);
-
-    if (xmlFiles.length == 0) {
-      insertZeroWhenNoReports(project, context);
-    } else {
-      parseFiles(context, xmlFiles);
-    }
-  }
-
-  private File[] getReports(File dir) {
-    if (dir == null || !dir.isDirectory() || !dir.exists()) {
-      return new File[0];
-    }
-    return dir.listFiles(new FilenameFilter() {
-      public boolean accept(File dir, String name) {
-        return name.startsWith("TEST") && name.endsWith(".xml");
-      }
-    });
-  }
-
-  private void insertZeroWhenNoReports(Project pom, SensorContext context) {
-    if ( !StringUtils.equalsIgnoreCase("pom", pom.getPackaging())) {
-      context.saveMeasure(CoreMetrics.TESTS, 0.0);
-    }
-  }
-
-  private void parseFiles(SensorContext context, File[] reports) {
-    Set<TestSuiteReport> analyzedReports = new HashSet<TestSuiteReport>();
-    try {
-      for (File report : reports) {
-        TestSuiteParser parserHandler = new TestSuiteParser();
-        StaxParser parser = new StaxParser(parserHandler, false);
-        parser.parse(report);
-
-        for (TestSuiteReport fileReport : parserHandler.getParsedReports()) {
-          if ( !fileReport.isValid() || analyzedReports.contains(fileReport)) {
-            continue;
-          }
-          if (fileReport.getTests() > 0) {
-            double testsCount = fileReport.getTests() - fileReport.getSkipped();
-            saveClassMeasure(context, fileReport, CoreMetrics.SKIPPED_TESTS, fileReport.getSkipped());
-            saveClassMeasure(context, fileReport, CoreMetrics.TESTS, testsCount);
-            saveClassMeasure(context, fileReport, CoreMetrics.TEST_ERRORS, fileReport.getErrors());
-            saveClassMeasure(context, fileReport, CoreMetrics.TEST_FAILURES, fileReport.getFailures());
-            saveClassMeasure(context, fileReport, CoreMetrics.TEST_EXECUTION_TIME, fileReport.getTimeMS());
-            double passedTests = testsCount - fileReport.getErrors() - fileReport.getFailures();
-            if (testsCount > 0) {
-              double percentage = passedTests * 100d / testsCount;
-              saveClassMeasure(context, fileReport, CoreMetrics.TEST_SUCCESS_DENSITY, ParsingUtils.scaleValue(percentage));
-            }
-            saveTestsDetails(context, fileReport);
-            analyzedReports.add(fileReport);
-          }
-        }
-      }
-
-    } catch (Exception e) {
-      throw new XmlParserException("Can not parse surefire reports", e);
-    }
-  }
-
-  private void saveTestsDetails(SensorContext context, TestSuiteReport fileReport) throws TransformerException {
-    StringBuilder testCaseDetails = new StringBuilder(256);
-    testCaseDetails.append("<tests-details>");
-    List<TestCaseDetails> details = fileReport.getDetails();
-    for (TestCaseDetails detail : details) {
-      testCaseDetails.append("<testcase status=\"").append(detail.getStatus())
-          .append("\" time=\"").append(detail.getTimeMS())
-          .append("\" name=\"").append(detail.getName()).append("\"");
-      boolean isError = detail.getStatus().equals(TestCaseDetails.STATUS_ERROR);
-      if (isError || detail.getStatus().equals(TestCaseDetails.STATUS_FAILURE)) {
-        testCaseDetails.append(">")
-            .append(isError ? "<error message=\"" : "<failure message=\"")
-            .append(StringEscapeUtils.escapeXml(detail.getErrorMessage())).append("\">")
-            .append("<![CDATA[").append(StringEscapeUtils.escapeXml(detail.getStackTrace())).append("]]>")
-            .append(isError ? "</error>" : "</failure>").append("</testcase>");
-      } else {
-        testCaseDetails.append("/>");
-      }
-    }
-    testCaseDetails.append("</tests-details>");
-    context.saveMeasure(getUnitTestResource(fileReport), new Measure(CoreMetrics.TEST_DATA, testCaseDetails.toString()));
-  }
-
-  private void saveClassMeasure(SensorContext context, TestSuiteReport fileReport, Metric metric, double value) {
-    if ( !Double.isNaN(value)) {
-      context.saveMeasure(getUnitTestResource(fileReport), metric, value);
-    }
-  }
-
-  protected abstract Resource<?> getUnitTestResource(TestSuiteReport fileReport);
-
-}
index a4d4335d1d76a9e48c4fe71a09e197f1644dcd71..81cdd4279ce8c4d1bb01ec07b1c9a5103d67744a 100644 (file)
@@ -32,6 +32,7 @@ import org.sonar.api.resources.Java;
 import org.sonar.api.resources.JavaFile;
 import org.sonar.api.resources.Project;
 import org.sonar.api.resources.Resource;
+import org.sonar.plugins.surefire.api.AbstractSurefireParser;
 
 import java.io.File;
 
diff --git a/plugins/sonar-surefire-plugin/src/main/java/org/sonar/plugins/surefire/api/AbstractSurefireParser.java b/plugins/sonar-surefire-plugin/src/main/java/org/sonar/plugins/surefire/api/AbstractSurefireParser.java
new file mode 100644 (file)
index 0000000..bc2e18d
--- /dev/null
@@ -0,0 +1,124 @@
+package org.sonar.plugins.surefire.api;
+
+import org.apache.commons.lang.StringEscapeUtils;
+import org.apache.commons.lang.StringUtils;
+import org.sonar.api.batch.SensorContext;
+import org.sonar.api.measures.CoreMetrics;
+import org.sonar.api.measures.Measure;
+import org.sonar.api.measures.Metric;
+import org.sonar.api.resources.Project;
+import org.sonar.api.resources.Resource;
+import org.sonar.api.utils.ParsingUtils;
+import org.sonar.api.utils.StaxParser;
+import org.sonar.api.utils.XmlParserException;
+import org.sonar.plugins.surefire.TestCaseDetails;
+import org.sonar.plugins.surefire.TestSuiteParser;
+import org.sonar.plugins.surefire.TestSuiteReport;
+
+import java.io.File;
+import java.io.FilenameFilter;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+import javax.xml.transform.TransformerException;
+
+/**
+ * @since 2.4
+ */
+public abstract class AbstractSurefireParser {
+
+  public void collect(Project project, SensorContext context, File reportsDir) {
+    File[] xmlFiles = getReports(reportsDir);
+
+    if (xmlFiles.length == 0) {
+      insertZeroWhenNoReports(project, context);
+    } else {
+      parseFiles(context, xmlFiles);
+    }
+  }
+
+  private File[] getReports(File dir) {
+    if (dir == null || !dir.isDirectory() || !dir.exists()) {
+      return new File[0];
+    }
+    return dir.listFiles(new FilenameFilter() {
+      public boolean accept(File dir, String name) {
+        return name.startsWith("TEST") && name.endsWith(".xml");
+      }
+    });
+  }
+
+  private void insertZeroWhenNoReports(Project pom, SensorContext context) {
+    if ( !StringUtils.equalsIgnoreCase("pom", pom.getPackaging())) {
+      context.saveMeasure(CoreMetrics.TESTS, 0.0);
+    }
+  }
+
+  private void parseFiles(SensorContext context, File[] reports) {
+    Set<TestSuiteReport> analyzedReports = new HashSet<TestSuiteReport>();
+    try {
+      for (File report : reports) {
+        TestSuiteParser parserHandler = new TestSuiteParser();
+        StaxParser parser = new StaxParser(parserHandler, false);
+        parser.parse(report);
+
+        for (TestSuiteReport fileReport : parserHandler.getParsedReports()) {
+          if ( !fileReport.isValid() || analyzedReports.contains(fileReport)) {
+            continue;
+          }
+          if (fileReport.getTests() > 0) {
+            double testsCount = fileReport.getTests() - fileReport.getSkipped();
+            saveClassMeasure(context, fileReport, CoreMetrics.SKIPPED_TESTS, fileReport.getSkipped());
+            saveClassMeasure(context, fileReport, CoreMetrics.TESTS, testsCount);
+            saveClassMeasure(context, fileReport, CoreMetrics.TEST_ERRORS, fileReport.getErrors());
+            saveClassMeasure(context, fileReport, CoreMetrics.TEST_FAILURES, fileReport.getFailures());
+            saveClassMeasure(context, fileReport, CoreMetrics.TEST_EXECUTION_TIME, fileReport.getTimeMS());
+            double passedTests = testsCount - fileReport.getErrors() - fileReport.getFailures();
+            if (testsCount > 0) {
+              double percentage = passedTests * 100d / testsCount;
+              saveClassMeasure(context, fileReport, CoreMetrics.TEST_SUCCESS_DENSITY, ParsingUtils.scaleValue(percentage));
+            }
+            saveTestsDetails(context, fileReport);
+            analyzedReports.add(fileReport);
+          }
+        }
+      }
+
+    } catch (Exception e) {
+      throw new XmlParserException("Can not parse surefire reports", e);
+    }
+  }
+
+  private void saveTestsDetails(SensorContext context, TestSuiteReport fileReport) throws TransformerException {
+    StringBuilder testCaseDetails = new StringBuilder(256);
+    testCaseDetails.append("<tests-details>");
+    List<TestCaseDetails> details = fileReport.getDetails();
+    for (TestCaseDetails detail : details) {
+      testCaseDetails.append("<testcase status=\"").append(detail.getStatus())
+          .append("\" time=\"").append(detail.getTimeMS())
+          .append("\" name=\"").append(detail.getName()).append("\"");
+      boolean isError = detail.getStatus().equals(TestCaseDetails.STATUS_ERROR);
+      if (isError || detail.getStatus().equals(TestCaseDetails.STATUS_FAILURE)) {
+        testCaseDetails.append(">")
+            .append(isError ? "<error message=\"" : "<failure message=\"")
+            .append(StringEscapeUtils.escapeXml(detail.getErrorMessage())).append("\">")
+            .append("<![CDATA[").append(StringEscapeUtils.escapeXml(detail.getStackTrace())).append("]]>")
+            .append(isError ? "</error>" : "</failure>").append("</testcase>");
+      } else {
+        testCaseDetails.append("/>");
+      }
+    }
+    testCaseDetails.append("</tests-details>");
+    context.saveMeasure(getUnitTestResource(fileReport), new Measure(CoreMetrics.TEST_DATA, testCaseDetails.toString()));
+  }
+
+  private void saveClassMeasure(SensorContext context, TestSuiteReport fileReport, Metric metric, double value) {
+    if ( !Double.isNaN(value)) {
+      context.saveMeasure(getUnitTestResource(fileReport), metric, value);
+    }
+  }
+
+  protected abstract Resource<?> getUnitTestResource(TestSuiteReport fileReport);
+
+}