/* $Revision: 6707 $ $Author: egonw $ $Date: 2006-07-30 16:38:18 -0400 (Sun, 30 Jul 2006) $ * * Copyright (C) 2008 Egon Willighagen <egonw@users.sf.net> * * Contact: cdk-devel@lists.sourceforge.net * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License * as published by the Free Software Foundation; either version 2.1 * of the License, or (at your option) any later version. * All we ask is that proper credit is given for our work, which includes * - but is not limited to - adding the above copyright notice to the beginning * of your source code files, and to any copyright notice that you may distribute * with programs based on this work. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. */ package net.sf.cdk.tools.coverage; import java.io.BufferedReader; import java.io.File; import java.io.FileFilter; import java.io.FileReader; import java.util.ArrayList; import java.util.List; public class CheckModuleCoverage { /** Modules that do no need to have a test suite */ List<String> blackList = new ArrayList<String>(); List<String> modules = new ArrayList<String>(); private CheckModuleCoverage() { blackList.add("builder3dtools"); blackList.add("interfaces"); blackList.add("jchempaint"); blackList.add("controlold"); blackList.add("experimental"); blackList.add("applications"); } private void findModules() { // construct a list of modules, assuming runDoclet has been run File dir = new File("build"); File[] files = dir.listFiles(new JavaFilesFilter()); for (int i=0; i<files.length; i++) { String name = files[i].getName(); if (!name.startsWith("test")) { String module = name.substring(0, name.indexOf('.')); if (!blackList.contains(module)) { modules.add(module); } } } System.out.println("Number of modules found: " + modules.size()); } private void checkModuleSuites() { int missingSuites = 0; for (String module : modules) { String expectedSuite = "src/test/org/openscience/cdk/modulesuites/M" + module + "Tests.java"; if (!new File(expectedSuite).exists()) { System.out.println("No test suite found for: " + module); missingSuites++; } } if (missingSuites > 0) { System.out.println("Missing test suites: " + missingSuites); } } private void checkModuleSuiteContainsCoverageTest() { int missingCoverages = 0; for (String module : modules) { String expectedSuite = "src/test/org/openscience/cdk/modulesuites/M" + module + "Tests.java"; File file = new File(expectedSuite); boolean coverageTestFound = false; if (file.exists()) { try { BufferedReader reader = new BufferedReader( new FileReader(file) ); String line = reader.readLine(); while (line != null && !coverageTestFound) { if (line.contains(module.substring(0,1).toUpperCase() + module.substring(1) + "CoverageTest")) { coverageTestFound = true; } line = reader.readLine(); } if (!coverageTestFound) { System.out.println("Missing coverage test in suite: " + module); missingCoverages++; } reader.close(); } catch (Exception e) { e.printStackTrace(); } } } if (missingCoverages > 0) { System.out.println("Missing coverage tests in suite: " + missingCoverages); } } private void checkCoverageTesting() { int missingCoverage = 0; for (String module : modules) { String expectedSuite = "src/test/org/openscience/cdk/coverage/" + module.substring(0,1).toUpperCase() + module.substring(1) + "CoverageTest.java"; if (!new File(expectedSuite).exists()) { System.out.println("No code coverage checking found for: " + module); missingCoverage++; } } if (missingCoverage > 0) { System.out.println("Missing coverage checkers: " + missingCoverage); } } public static void main(String[] args) { CheckModuleCoverage checker = new CheckModuleCoverage(); checker.findModules(); checker.checkModuleSuites(); checker.checkCoverageTesting(); checker.checkModuleSuiteContainsCoverageTest(); } class JavaFilesFilter implements FileFilter { public boolean accept(File file) { return file.getName().endsWith(".javafiles"); } } }