[hibernate-commits] Hibernate SVN: r16032 - validator/trunk/tck-utils/impl/src/main/java/org/hibernate/tck/report.

hibernate-commits at lists.jboss.org hibernate-commits at lists.jboss.org
Wed Feb 25 08:39:40 EST 2009


Author: pete.muir at jboss.org
Date: 2009-02-25 08:39:40 -0500 (Wed, 25 Feb 2009)
New Revision: 16032

Modified:
   validator/trunk/tck-utils/impl/src/main/java/org/hibernate/tck/report/CoverageProcessor.java
   validator/trunk/tck-utils/impl/src/main/java/org/hibernate/tck/report/CoverageReport.java
   validator/trunk/tck-utils/impl/src/main/java/org/hibernate/tck/report/SpecReference.java
Log:
Add support for skipped (stub and broken) tests through testng @Test(groups)

Modified: validator/trunk/tck-utils/impl/src/main/java/org/hibernate/tck/report/CoverageProcessor.java
===================================================================
--- validator/trunk/tck-utils/impl/src/main/java/org/hibernate/tck/report/CoverageProcessor.java	2009-02-25 13:09:51 UTC (rev 16031)
+++ validator/trunk/tck-utils/impl/src/main/java/org/hibernate/tck/report/CoverageProcessor.java	2009-02-25 13:39:40 UTC (rev 16032)
@@ -128,7 +128,7 @@
     public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnvironment) {
 
         if (auditParser == null) {
-            return true;
+            return false;
         }
 
         for (TypeElement type : annotations) {
@@ -138,7 +138,7 @@
         if (roundEnvironment.processingOver()) {
             new CoverageReport(references, auditParser).writeToFile(new File(baseDir, REPORT_FILE_NAME));
         }
-        return true;
+        return false;
     }
 
     private void processAnnotatedMethods(RoundEnvironment env, TypeElement annotation) {
@@ -184,6 +184,24 @@
                 ref.setAssertion((String) entry.getValue().getValue());
             }
         }
+        for (AnnotationMirror annotationMirror : processingEnv.getElementUtils().getAllAnnotationMirrors(methodElement))
+        {
+           if (annotationMirror.getAnnotationType().toString().equals("org.testng.annotations.Test"))
+           {
+              Map<? extends ExecutableElement, ? extends AnnotationValue> testAnnotationParameters =
+                 processingEnv.getElementUtils().getElementValuesWithDefaults(annotationMirror);
+              for (Map.Entry<? extends ExecutableElement, ? extends AnnotationValue> entry : testAnnotationParameters.entrySet()) {
+                 final String elementKey = entry.getKey().toString();
+                 
+                 if (elementKey.equals("groups()")) {
+                     for (AnnotationValue annotationValue : (List<? extends AnnotationValue>) entry.getValue().getValue())
+                     {
+                        ref.getGroups().add((String) annotationValue.getValue());
+                     }
+                 }
+             }
+           }
+        }
         references.add(ref);
     }    
     
Modified: validator/trunk/tck-utils/impl/src/main/java/org/hibernate/tck/report/CoverageReport.java
===================================================================
--- validator/trunk/tck-utils/impl/src/main/java/org/hibernate/tck/report/CoverageReport.java	2009-02-25 13:09:51 UTC (rev 16031)
+++ validator/trunk/tck-utils/impl/src/main/java/org/hibernate/tck/report/CoverageReport.java	2009-02-25 13:39:40 UTC (rev 16032)
@@ -19,10 +19,14 @@
  */
 public class CoverageReport {
    
-   public static final String FISHEYE_BASE_URL_PROPERTY = "fisheye_base_url";
+    public enum TestStatus {
+        COVERED, UNCOVERED, UNIMPLEMENTED;
+    }
    
-   public static final String SVN_BASE_URL_PROPERTY = "svn_base_url";
+    public static final String FISHEYE_BASE_URL_PROPERTY = "fisheye_base_url";
    
+    public static final String SVN_BASE_URL_PROPERTY = "svn_base_url";
+   
     /*
     * References to the spec assertions made by the tck tests
     */
@@ -85,7 +89,7 @@
         calculateUnmatched();
         writeHeader(out);
         writeContents(out);
-        writeMasterSummary(out);
+        //writeMasterSummary(out);
         writeChapterSummary(out);
         writeSectionSummary(out);
         writeCoverage(out);
@@ -175,6 +179,12 @@
         sb.append("    padding-bottom: 1px;\n");
         sb.append("    margin-bottom: 2px;\n");
         sb.append("    background-color: #fdd; }\n");
+        sb.append("  .skip {\n");
+        sb.append("    border-top: 1px solid #ff9900;\n");
+        sb.append("    border-bottom: 1px solid #ff9900;\n");
+        sb.append("    padding-bottom: 1px;\n");
+        sb.append("    margin-bottom: 2px;\n");
+        sb.append("    background-color: #ffcc33; }\n");
         sb.append("  .untestable {\n");
         sb.append("    padding-bottom: 16px;\n");
         sb.append("    margin-bottom: 2px;\n");
@@ -297,11 +307,19 @@
        sb.append("<th align=\"left\">Chapter</th>");
        sb.append("<th>Assertions</th>");
        sb.append("<th>Testable</th>");
-       sb.append("<th>Tested</th>");
+       sb.append("<th>Tested<br /> (implemented and unimplemented)</th>");
+       sb.append("<th>Tested<br /> (unimplemented)</th>");
+       sb.append("<th>Tested<br /> (implemented)</th>");
        sb.append("<th>Coverage %</th>");
        sb.append("</tr>");
        
        boolean odd = true;
+       
+       int totalAssertions = 0;
+       int totalTestable = 0;
+       int totalTested = 0;
+       int totalUnimplemented = 0;
+       int totalImplemented = 0;
               
        for (String sectionId : auditParser.getSectionIds()) {
           
@@ -312,16 +330,22 @@
             
             int assertions = auditParser.getAssertionsForSection(sectionId).size();
             int testable = 0;
-            int coverage = 0;                     
+            int implemented = 0;
+            int unimplemented = 0;
             
             for (AuditAssertion assertion : auditParser.getAssertionsForSection(sectionId))
             {
                if (assertion.isTestable()) testable++;
                
-               if (!getCoverageForAssertion(sectionId, assertion.getId()).isEmpty())
+               TestStatus status = getStatus(getCoverageForAssertion(sectionId, assertion.getId()));
+               if (status.equals(TestStatus.COVERED))
                {
-                  coverage++;
+                  implemented++;
                }
+               else if (status.equals(TestStatus.UNIMPLEMENTED))
+               {
+                  unimplemented++;
+               }
             }             
             
             // Gather stats here
@@ -335,14 +359,29 @@
                   {
                      if (assertion.isTestable()) testable++;                     
                      
-                     if (!getCoverageForAssertion(subSectionId, assertion.getId()).isEmpty())
+                     TestStatus status = getStatus(getCoverageForAssertion(subSectionId, assertion.getId()));
+                     if (status.equals(TestStatus.COVERED))
                      {
-                        coverage++;
+                        implemented++;
                      }
+                     else if (status.equals(TestStatus.UNIMPLEMENTED))
+                     {
+                        unimplemented++;
+                     }
                   }                  
                }
             }
             
+            int tested = implemented + unimplemented;
+            
+            double coveragePercent = testable > 0 ? ((implemented * 1.0) / testable) * 100 : -1;
+            
+            totalAssertions += assertions;
+            totalTestable += testable;
+            totalImplemented += implemented;
+            totalTested += tested;
+            totalUnimplemented += unimplemented;
+            
             if (odd)
             {
                sb.append("<tr style=\"background-color:#f7f7f7\">");
@@ -364,8 +403,6 @@
             sb.append("</a>");
             sb.append("</td>");
                         
-            double coveragePercent = assertions > 0 ? ((coverage * 1.0) / assertions) * 100 : -1;
-            
             sb.append("<td align=\"center\">");
             sb.append(assertions);
             sb.append("</td>");
@@ -375,9 +412,17 @@
             sb.append("</td>");
             
             sb.append("<td align=\"center\">");
-            sb.append(coverage);
+            sb.append(tested);
             sb.append("</td>");
             
+            sb.append("<td align=\"center\">");
+            sb.append(unimplemented);
+            sb.append("</td>");
+            
+            sb.append("<td align=\"center\">");
+            sb.append(implemented);
+            sb.append("</td>");
+            
             if (coveragePercent >= 0)
             {
                String bgColor = coveragePercent < 60 ? "#ffaaaa" : coveragePercent < 80 ? "#ffffaa" : "#aaffaa" ;
@@ -396,7 +441,57 @@
          }
           
        }
+       
+       if (odd)
+       {
+          sb.append("<tr style=\"background-color:#f7f7f7\">");
+       }
+       else
+       {
+          sb.append("<tr style=\"font-weight: bold\">");
+       } 
+       
+       sb.append("<td>");
+       sb.append("Total");
+       sb.append("</td>");
+                   
+       sb.append("<td align=\"center\">");
+       sb.append(totalAssertions);
+       sb.append("</td>");
+       
+       sb.append("<td align=\"center\">");
+       sb.append(totalTestable);
+       sb.append("</td>");
+       
+       sb.append("<td align=\"center\">");
+       sb.append(totalTested);
+       sb.append("</td>");
+       
+       sb.append("<td align=\"center\">");
+       sb.append(totalUnimplemented);
+       sb.append("</td>");
+       
+       sb.append("<td align=\"center\">");
+       sb.append(totalImplemented);
+       sb.append("</td>");
+       
+       double totalCoveragePercent = totalTestable > 0 ? ((totalImplemented * 1.0) / totalTestable) * 100 : -1;
+       
+       if (totalCoveragePercent >= 0)
+       {
+          String bgColor = totalCoveragePercent < 60 ? "#ffaaaa" : totalCoveragePercent < 80 ? "#ffffaa" : "#aaffaa" ;
+       
+          sb.append("<td align=\"center\" style=\"background-color:" + bgColor + "\">");
+          sb.append(String.format("%.2f%%", totalCoveragePercent));
+          sb.append("</td>");
+       }
+       else
+       {
+          sb.append("<td />");
+       }
 
+       sb.append("</tr>");      
+
        sb.append("</table>");       
        out.write(sb.toString().getBytes());        
     }
@@ -412,7 +507,9 @@
        sb.append("<th align=\"left\">Section</th>");
        sb.append("<th>Assertions</th>");
        sb.append("<th>Testable</th>");
-       sb.append("<th>Tested</th>");
+       sb.append("<th>Tested<br /> (implemented and unimplemented)</th>");
+       sb.append("<th>Tested<br /> (unimplemented)</th>");
+       sb.append("<th>Tested<br /> (implemented)</th>");
        sb.append("<th>Coverage %</th>");
        sb.append("</tr>");
        
@@ -443,21 +540,27 @@
          
          int assertions = auditParser.getAssertionsForSection(sectionId).size();
          int testable = 0;         
-         int coverage = 0;
+         int implemented = 0;
+         int unimplemented = 0;
          
          for (AuditAssertion assertion : auditParser.getAssertionsForSection(sectionId))
          {
             if (assertion.isTestable()) testable++;
             
-            if (!getCoverageForAssertion(sectionId, assertion.getId()).isEmpty())
+            TestStatus status = getStatus(getCoverageForAssertion(sectionId, assertion.getId()));
+            if (status.equals(TestStatus.COVERED))
             {
-               coverage++;
+               implemented++;
             }
+            else if (status.equals(TestStatus.UNIMPLEMENTED))
+            {
+               unimplemented++;
+            }
          }
          
-         int coveredAndUnTestable = coverage + (assertions - testable);
+         int tested = implemented + unimplemented;
          
-         double coveragePercent = assertions > 0 ? ((coveredAndUnTestable * 1.0) / (assertions)) * 100 : -1;
+         double coveragePercent = testable > 0 ? ((implemented * 1.0) / testable) * 100 : -1;
          
          sb.append("<td align=\"center\">");
          sb.append(assertions);
@@ -468,9 +571,17 @@
          sb.append("</td>");
          
          sb.append("<td align=\"center\">");
-         sb.append(coverage);
+         sb.append(tested);
          sb.append("</td>");
          
+         sb.append("<td align=\"center\">");
+         sb.append(unimplemented);
+         sb.append("</td>");
+         
+         sb.append("<td align=\"center\">");
+         sb.append(implemented);
+         sb.append("</td>");
+         
          if (coveragePercent >= 0)
          {
             String bgColor = coveragePercent < 60 ? "#ffaaaa" : coveragePercent < 80 ? "#ffffaa" : "#aaffaa" ;
@@ -508,15 +619,20 @@
                 
                 for (AuditAssertion assertion : sectionAssertions) {
                     List<SpecReference> coverage = getCoverageForAssertion(sectionId, assertion.getId());
+                    TestStatus status = getStatus(coverage);
 
                     String divClass = null;
                     
                     if (assertion.isTestable())
                     {
-                       if (coverage.isEmpty())
+                       if (status.equals(TestStatus.UNCOVERED))
                        {
                           divClass = "fail";
                        }
+                       else if (status.equals(TestStatus.UNIMPLEMENTED))
+                       {
+                          divClass = "skip";
+                       }
                        else
                        {
                           divClass = "pass";
@@ -558,7 +674,7 @@
                        
                        String currentPackageName = null;                    
    
-                       if (coverage.isEmpty()) {
+                       if (status.equals(TestStatus.UNCOVERED)) {
                            sb.append("        <p class=\"noCoverage\">No tests exist for this assertion</p>\n");
                        } else {
                            for (SpecReference ref : coverage) {
@@ -674,6 +790,27 @@
 
         return refs;
     }
+    
+    private TestStatus getStatus(List<SpecReference> references)
+    {
+       if (references.isEmpty())
+       {
+          return TestStatus.UNCOVERED;
+       }
+       for (SpecReference reference : references)
+       {
+          if (isImplemented(reference.getGroups()))
+          {
+             return TestStatus.COVERED;
+          }
+       }
+       return TestStatus.UNIMPLEMENTED;
+    }
+    
+    private boolean isImplemented(List<String> groups)
+    {
+       return !groups.contains("stub") && !groups.contains("broken"); 
+    }
 
     private void writeFooter(OutputStream out) throws IOException {
         out.write("</table>".getBytes());

Modified: validator/trunk/tck-utils/impl/src/main/java/org/hibernate/tck/report/SpecReference.java
===================================================================
--- validator/trunk/tck-utils/impl/src/main/java/org/hibernate/tck/report/SpecReference.java	2009-02-25 13:09:51 UTC (rev 16031)
+++ validator/trunk/tck-utils/impl/src/main/java/org/hibernate/tck/report/SpecReference.java	2009-02-25 13:39:40 UTC (rev 16032)
@@ -1,16 +1,26 @@
 package org.hibernate.tck.report;
 
+import java.util.ArrayList;
+import java.util.List;
+
 /**
  * Represents the metadata for a single instance of @SpecAssertion
  *
  * @author Shane Bryzak
  */
 public class SpecReference {
+   
     private String section;
     private String assertion;
     private String packageName;
     private String className;
     private String methodName;
+    private List<String> groups;
+    
+    public SpecReference()
+    {
+        this.groups = new ArrayList<String>();
+    }
 
     public void setSection(String section) {
         this.section = section;
@@ -52,6 +62,11 @@
         return methodName;
     }
     
+    public List<String> getGroups()
+   {
+      return groups;
+   }
+    
     @Override
     public String toString()
     {




More information about the hibernate-commits mailing list