changeset 13:8c9c61f17fd1

* src/ReportGenerator.java: * templates/all_classes_template.html: * templates/all_packages_template.html: * templates/class_report.js: * templates/package_template.html: * templates/style.css: Added new functionality of report generator: new filter can be applied to a class list based on test coverage for each class.
author Pavel Tisnovsky <ptisnovs@redhat.com>
date Fri, 16 Mar 2012 11:24:48 +0100
parents 5030a59cd546
children eec2474fdaaa
files ChangeLog src/ReportGenerator.java templates/all_classes_template.html templates/all_packages_template.html templates/class_report.js templates/package_template.html templates/style.css
diffstat 7 files changed, 103 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/ChangeLog	Fri Mar 02 16:51:17 2012 +0100
+++ b/ChangeLog	Fri Mar 16 11:24:48 2012 +0100
@@ -1,3 +1,15 @@
+2012-03-16  Pavel Tisnovsky  <ptisnovs@redhat.com>
+
+	* src/ReportGenerator.java:
+	* templates/all_classes_template.html:
+	* templates/all_packages_template.html:
+	* templates/class_report.js:
+	* templates/package_template.html:
+	* templates/style.css:
+	Added new functionality of report generator:
+	new filter can be applied to a class list
+	based on test coverage for each class.
+
 2012-03-02  Pavel Tisnovsky  <ptisnovs@redhat.com>
 
 	* src/ReportGenerator.java:
--- a/src/ReportGenerator.java	Fri Mar 02 16:51:17 2012 +0100
+++ b/src/ReportGenerator.java	Fri Mar 16 11:24:48 2012 +0100
@@ -225,6 +225,7 @@
             final int testedClassesCnt = numberOfClassesInPackage(packageName, testedClasses);
             // -> in percent
             final float percentage = 100.0f*testedClassesCnt / allClassesCnt;
+
             // table row background color is based on percentual test coverage ration
             String backgroundColor = generateTableRowBackground(percentage);
             String doc = DOC_BASE + "/" + packageName.replace('.', '/') + "/package-summary.html";
@@ -353,12 +354,17 @@
         final int testedMethodsCnt = testedMethods.size();
         // -> in percent
         final float percentage = 100.0f*testedMethodsCnt / allMethodsCnt;
+
+        // construct CSS class for given row based on a code coverage
+        final long coverage = Math.round(Math.ceil(percentage / 10.0f) * 10);
+        String cssClass = "coverage_" + coverage;
+
         // table row background color is based on percentual test coverage ration
         String backgroundColor = generateTableRowBackground(percentage);
         String doc = DOC_BASE + "/" + className.replace('.', '/') + ".html";
         // format output string
-        String outStr = String.format("<tr style='background-color:%s'><td><a target='ResultsFrame' href='%s.html'>%s</a></td><td style='text-align:right'>%d</td><td style='text-align:right'>%d</td><td style='text-align:right'>%5.1f %%</td><td style='text-align:right'><a href='%s' target='_blank'>ext</a></td></tr>",
-                backgroundColor, className, className,
+        String outStr = String.format("<tr class='%s' style='background-color:%s'><td><a target='ResultsFrame' href='%s.html'>%s</a></td><td style='text-align:right'>%d</td><td style='text-align:right'>%d</td><td style='text-align:right'>%5.1f %%</td><td style='text-align:right'><a href='%s' target='_blank'>ext</a></td></tr>",
+                cssClass, backgroundColor, className, className,
                 Integer.valueOf(allMethodsCnt), Integer.valueOf(testedMethodsCnt), Float.valueOf(percentage), doc);
         return outStr;
     }
--- a/templates/all_classes_template.html	Fri Mar 02 16:51:17 2012 +0100
+++ b/templates/all_classes_template.html	Fri Mar 16 11:24:48 2012 +0100
@@ -6,9 +6,22 @@
         <meta name="Generator" content="MauveTestCoverage" />
         <meta http-equiv="content-type" content="text/html; charset=utf-8" />
         <link type="text/css" rel="StyleSheet" href="style.css" />
+        <script language="JavaScript" type="text/javascript" src="class_report.js">
+        </script>
     </head>
     <body>
         <h1>Class list</h1>
+Filter:
+<a href="javascript:showPercent(10);">10</a>
+<a href="javascript:showPercent(20);">20</a>
+<a href="javascript:showPercent(30);">30</a>
+<a href="javascript:showPercent(40);">40</a>
+<a href="javascript:showPercent(50);">50</a>
+<a href="javascript:showPercent(60);">60</a>
+<a href="javascript:showPercent(70);">70</a>
+<a href="javascript:showPercent(80);">80</a>
+<a href="javascript:showPercent(90);">90</a>
+<a href="javascript:showPercent(100);">100%</a>
 ${PACKAGE_AND_CLASS_LIST}
     </body>
 </html>
--- a/templates/all_packages_template.html	Fri Mar 02 16:51:17 2012 +0100
+++ b/templates/all_packages_template.html	Fri Mar 16 11:24:48 2012 +0100
@@ -6,6 +6,8 @@
         <meta name="Generator" content="MauveTestCoverage" />
         <meta http-equiv="content-type" content="text/html; charset=utf-8" />
         <link type="text/css" rel="StyleSheet" href="style.css" />
+        <script language="JavaScript" type="text/javascript" src="class_report.js">
+        </script>
     </head>
     <body>
         <h1>Package list</h1>
--- a/templates/class_report.js	Fri Mar 02 16:51:17 2012 +0100
+++ b/templates/class_report.js	Fri Mar 16 11:24:48 2012 +0100
@@ -39,9 +39,10 @@
 
 
 /*
- * Script used to filter methods in a report generated for each API class.
+ * Script used to filter methods in a report generated for each API class and
+ * also for given package or set of packages.
  *
- * @author Pavel Tisnovsky
+ * @author Pavel Tisnovsky <ptisnovs@redhat.com>
  */
 
 
@@ -51,7 +52,9 @@
  */
 function setDisplayStyle(selectorText, displayStyle)
 {
+    // array containing all CSS rules
     var setOfCssRules = new Array();
+    // acquire the array depending on browser capabilities
     if (document.styleSheets[0].cssRules)
     {
         setOfCssRules = document.styleSheets[0].cssRules;
@@ -60,8 +63,10 @@
     {
         setOfCssRules = document.styleSheets[0].rules;
     }
+    // iterate through all rules
     for (i in setOfCssRules)
     {
+        // and select display style for selected rules
         if (setOfCssRules[i].selectorText == selectorText)
         {
             setOfCssRules[i].style.display = displayStyle;
@@ -86,3 +91,33 @@
     setDisplayStyle(".coveraged", "none");
 }
 
+/*
+ * Show only classes with the test coverage which is less or
+ * equal than given threshold (%).
+ */
+function showPercent(threshold)
+{
+    var percent;
+    for (percent = 0; percent <= 100; percent += 10)
+    {
+        // construct CSS class name
+        // it should look like as follows:
+        // ".coverage_0", ".coverage_10", ... ".coverage_100"
+        var cssClassName = ".coverage_" + percent;
+
+        //window.alert(cssClassName);
+
+        // when percent is lower than threshold
+        // then rows with such % should be displayed
+        if (percent <= threshold)
+        {
+            setDisplayStyle(cssClassName, "");
+        }
+        // otherwise the rows should be unvisible
+        else
+        {
+            setDisplayStyle(cssClassName, "none");
+        }
+    }
+}
+
--- a/templates/package_template.html	Fri Mar 02 16:51:17 2012 +0100
+++ b/templates/package_template.html	Fri Mar 16 11:24:48 2012 +0100
@@ -6,9 +6,22 @@
         <meta name="Generator" content="MauveTestCoverage" />
         <meta http-equiv="content-type" content="text/html; charset=utf-8" />
         <link type="text/css" rel="StyleSheet" href="style.css" />
+        <script language="JavaScript" type="text/javascript" src="class_report.js">
+        </script>
     </head>
     <body>
         <h1>Class list</h1>
+Filter:
+<a href="javascript:showPercent(10);">10</a>
+<a href="javascript:showPercent(20);">20</a>
+<a href="javascript:showPercent(30);">30</a>
+<a href="javascript:showPercent(40);">40</a>
+<a href="javascript:showPercent(50);">50</a>
+<a href="javascript:showPercent(60);">60</a>
+<a href="javascript:showPercent(70);">70</a>
+<a href="javascript:showPercent(80);">80</a>
+<a href="javascript:showPercent(90);">90</a>
+<a href="javascript:showPercent(100);">100%</a>
 <h2>
 ${PACKAGE_NAME}
 </h2>
--- a/templates/style.css	Fri Mar 02 16:51:17 2012 +0100
+++ b/templates/style.css	Fri Mar 16 11:24:48 2012 +0100
@@ -18,10 +18,24 @@
 
 .forms    {background-color: #f0f0dd; vertical-align: top; width: 720px; border-collapse: collapse; border-color:#808080; margin-left:32px}
 
+/* CSS classes used in class list */ 
 .present-method     {background-color:#006000}
 .absent-method      {background-color:#600000}
 .coveraged          {}
 
+/* CSS classes used in package list */
+.coverage_0         {}
+.coverage_10        {}
+.coverage_20        {}
+.coverage_30        {}
+.coverage_40        {}
+.coverage_50        {}
+.coverage_60        {}
+.coverage_70        {}
+.coverage_80        {}
+.coverage_90        {}
+.coverage_100       {}
+
 .method-return-type {}
 .method-name        {}
 .method-params      {}
@@ -35,6 +49,7 @@
         background-color: white;
         width: 100%;
 }
+
 table.package_list th {
         border-width: 1px;
         padding: 1px;
@@ -43,6 +58,7 @@
         background-color: #c0c0ff;
         /* -moz-border-radius: ; */
 }
+
 table.package_list td {
         border-width: 1px;
         padding: 1px;
@@ -60,6 +76,7 @@
         background-color: white;
         width: 100%;
 }
+
 table.classes_list th {
         border-width: 1px;
         padding: 1px;
@@ -68,6 +85,7 @@
         background-color: #c0c0ff;
         /* -moz-border-radius: ; */
 }
+
 table.classes_list td {
         border-width: 1px;
         padding: 1px;