/hg/MauveTestCoverage: 2012-01-27 Pavel Tisnovsky <ptisnovs at re...
ptisnovs at icedtea.classpath.org
ptisnovs at icedtea.classpath.org
Fri Jan 27 08:25:59 PST 2012
changeset a929d697c161 in /hg/MauveTestCoverage
details: http://icedtea.classpath.org/hg/MauveTestCoverage?cmd=changeset;node=a929d697c161
author: Pavel Tisnovsky <ptisnovs at redhat.com>
date: Fri Jan 27 17:28:22 2012 +0100
2012-01-27 Pavel Tisnovsky <ptisnovs at redhat.com>
* src/ReportGenerator.java:
* templates/all_packages_template.html: Added new
functionality: table with number of all classes and classes
coveraged by the test are used in the page with all
packages list.
diffstat:
ChangeLog | 8 +++
src/ReportGenerator.java | 95 ++++++++++++++++++++++++++++++-----
templates/all_packages_template.html | 3 +
3 files changed, 91 insertions(+), 15 deletions(-)
diffs (203 lines):
diff -r 342d366654ce -r a929d697c161 ChangeLog
--- a/ChangeLog Fri Jan 27 16:35:26 2012 +0100
+++ b/ChangeLog Fri Jan 27 17:28:22 2012 +0100
@@ -1,3 +1,11 @@
+2012-01-27 Pavel Tisnovsky <ptisnovs at redhat.com>
+
+ * src/ReportGenerator.java:
+ * templates/all_packages_template.html:
+ Added new functionality: table with number of all classes
+ and classes coveraged by the test are used in the
+ page with all packages list.
+
2012-01-27 Pavel Tisnovsky <ptisnovs at redhat.com>
* templates/style.css:
diff -r 342d366654ce -r a929d697c161 src/ReportGenerator.java
--- a/src/ReportGenerator.java Fri Jan 27 16:35:26 2012 +0100
+++ b/src/ReportGenerator.java Fri Jan 27 17:28:22 2012 +0100
@@ -82,10 +82,13 @@
* directory where report is generated
* @param allClasses
* set of all classes
+ * @param testedClasses
+ * set of tested classes
* @param packageNames
* set of package names
*/
- private static void printPackageListToFile(String reportDirectory, Set<String> allClasses, Set<String> packageNames)
+ private static void printPackageListToFile(String reportDirectory, Set<String> allClasses,
+ Set<String> testedClasses, Set<String> packageNames)
{
List<String> template = FileUtils.readTextFile("templates/all_packages_template.html");
List<String> out = new LinkedList<String>();
@@ -95,7 +98,7 @@
// replace text in template where needed
if ("${PACKAGE_LIST}".equals(templateLine))
{
- addPackageList(packageNames, out);
+ addPackageList(allClasses, testedClasses, packageNames, out);
}
// normal line
else
@@ -119,7 +122,8 @@
* @param testedClasses
* set of tested classes
*/
- private static void printReportForPackageToFile(String reportDirectory, String packageName, Set<String> testedClasses)
+ private static void printReportForPackageToFile(String reportDirectory, String packageName,
+ Set<String> testedClasses)
{
List<String> template = FileUtils.readTextFile("templates/package_template.html");
List<String> out = new LinkedList<String>();
@@ -178,22 +182,82 @@
/**
* Add list of all packages to a list of string which represents generated
- * report.
+ * report. Number of all classes and classes covered by tests are also
+ * calculated and printed. Background of table rows are changed according
+ * to test coverage ratio.
*
+ * @param allClasses
+ * set of all classes
+ * @param testedClasses
+ * set of tested classes
* @param packageNames
* set of package names
* @param out
* list of string which represents generated report
*/
- private static void addPackageList(Set<String> packageNames, List<String> out)
+ @SuppressWarnings("boxing")
+ private static void addPackageList(Set<String> allClasses, Set<String> testedClasses, Set<String> packageNames,
+ List<String> out)
{
+ // iterate through all package names
for (String packageName : packageNames)
{
- out.add("<a target='ClassesListFrame' href='" + packageName + ".html'>" + packageName + "</a><br />");
+ // compute number of all classes in a package
+ final int allClassesCnt = numberOfClassesInPackage(packageName, allClasses);
+ // compute number of classes coveraged by tests
+ 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 str = String.format("<tr style='background-color:%s'><td><a target='ClassesListFrame' 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></tr>",
+ backgroundColor, packageName, packageName, allClassesCnt, testedClassesCnt, percentage);
+ out.add(str);
}
}
/**
+ * Generate table row background according to test coverage percentual
+ * ratio.
+ *
+ * @param percentage
+ * test coverage percentual ratio
+ * @return string representing HTML color
+ */
+ private static String generateTableRowBackground(final float percentage)
+ {
+ String backgroundColor = percentage < 10.0f ? "#ffc0c0" :
+ percentage == 100.0f ? "#c0ffc0" :
+ percentage >= 50.0f ? "#ffffc0" :
+ "#ffffff";
+ return backgroundColor;
+ }
+
+ /**
+ * Calculate number of classes in given package.
+ *
+ * @param packageName
+ * name of package
+ * @param classes
+ * set of class names
+ * @return number of classes in given package
+ */
+ private static int numberOfClassesInPackage(String packageName, Set<String> classes)
+ {
+ int cnt = 0;
+ // iterate through all class names
+ for (String className : classes)
+ {
+ // count only classes in given package
+ if (className.startsWith(packageName))
+ {
+ cnt++;
+ }
+ }
+ return cnt;
+ }
+
+ /**
* Add list of all classes to a list of string which represents generated
* report.
*
@@ -259,7 +323,8 @@
* @param testedMethods
* methods called from tests
*/
- private static void createFileForClass(String reportDirectory, String testClass, Set<String> allMethods, Set<String> apiMethods, Set<String> testedMethods)
+ private static void createFileForClass(String reportDirectory, String testClass, Set<String> allMethods,
+ Set<String> apiMethods, Set<String> testedMethods)
{
List<String> template = FileUtils.readTextFile("templates/class_template.html");
List<String> out = new LinkedList<String>();
@@ -343,11 +408,9 @@
String returnType = printedMethodName.substring(0, printedMethodName.indexOf(' '));
String name = printedMethodName.substring(returnTypeEnds, parametersBegin);
String params = printedMethodName.substring(parametersBegin);
-
- return String.format(
- "<span style='color:#000080'>%s</span>" +
- "<span style='color:#008000'>%s</span>" +
- "<span style='color:#804000'>%s</span>", returnType, name, params);
+
+ return String.format("<span style='color:#000080'>%s</span>" + "<span style='color:#008000'>%s</span>"
+ + "<span style='color:#804000'>%s</span>", returnType, name, params);
}
private static String printMethodCoverage(String methodName, Set<String> methodSet)
@@ -484,12 +547,14 @@
// replace text in template where needed
else if (templateLine.contains("${TESTED_PACKAGES_RATIO}"))
{
- out.add(templateLine.replace("${TESTED_PACKAGES_RATIO}", "" + calcRatio(numberOfUsedPackages, numberOfAllPackages)));
+ out.add(templateLine.replace("${TESTED_PACKAGES_RATIO}", ""
+ + calcRatio(numberOfUsedPackages, numberOfAllPackages)));
}
// replace text in template where needed
else if (templateLine.contains("${TESTED_CLASSES_RATIO}"))
{
- out.add(templateLine.replace("${TESTED_CLASSES_RATIO}", "" + calcRatio(numberOfTestedClasses, numberOfAllClasses)));
+ out.add(templateLine.replace("${TESTED_CLASSES_RATIO}", ""
+ + calcRatio(numberOfTestedClasses, numberOfAllClasses)));
}
// normal output
else
@@ -537,7 +602,7 @@
System.out.println("Report directory: " + reportDirectory);
- printPackageListToFile(reportDirectory, allClasses, usedPackageNames);
+ printPackageListToFile(reportDirectory, allClasses, testedClasses, usedPackageNames);
printReportForAllClassesInOneFile(reportDirectory, usedPackageNames, testedClasses);
printReportForAllPackages(reportDirectory, usedPackageNames, testedClasses);
printReportForAllClasses(reportDirectory, testedClasses);
diff -r 342d366654ce -r a929d697c161 templates/all_packages_template.html
--- a/templates/all_packages_template.html Fri Jan 27 16:35:26 2012 +0100
+++ b/templates/all_packages_template.html Fri Jan 27 17:28:22 2012 +0100
@@ -10,7 +10,10 @@
<body>
<h1>Package list</h1>
<a target='ClassesListFrame' href='all_classes.html'>all classes</a><br /><br />
+<table class='package_list'>
+<tr><th>Package</th><th>Classes</th><th>Covered</th><th>Ratio</th></tr>
${PACKAGE_LIST}
+</table>
</body>
</html>
More information about the distro-pkg-dev
mailing list