/*
* FacetDefinitionTest.java
* Copyright 2013 (C) James Dempsey <jdempsey@users.sourceforge.net>
*
* This library 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.
*
* This library 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 library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
* Created on Nov 12, 2013
*
* $Id$
*
*/
package plugin;
import static org.junit.Assert.assertTrue;
import java.io.File;
import java.io.IOException;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
import org.apache.commons.io.FileUtils;
import org.junit.Ignore;
import org.junit.Test;
/**
* <code>FacetDefinitionTest</code> verifies that all facets are registered in the
* applicationContext.xml file. As a result this unit test is a bit different in
* structure to a normal test.
*
* Note: pcgen.cdom.facet.base only contains abstract base classes for facets
* so is not itself checked.
*
*
* @author James Dempsey <jdempsey@users.sourceforge.net>
*/
public class FacetDefinitionTest
{
/** The file in which we expect all facets to be defined. */
final static String appContextFile = "code/src/java/applicationContext.xml";
/**
* Array of exceptions to normal names. Each entry is a pair of
* Java source file name and JAR file name.
*/
private final List<String> exceptions = Arrays.asList("AssociationChangeEvent", "AssociationChangeListener",
"DataFacetChangeEvent", "DataFacetChangeListener",
"ScopeFacetChangeEvent", "ScopeFacetChangeListener",
"SubScopeFacetChangeEvent", "SubScopeFacetChangeListener",
"CategorizedDataFacetChangeEvent", "FacetInitialization",
"FacetLibrary");
/**
* Check for the presence of all 'general' facets in the spring definition.
* @throws Exception
*/
@Test
public void testGeneralFacets() throws Exception
{
File sourceFolder = new File("code/src/java/pcgen/cdom/facet");
checkFacetsDefined(sourceFolder);
}
/**
* Check for the presence of all 'analysis' facets in the spring definition.
* @throws Exception
*/
@Test
public void testAnalysisFacets() throws Exception
{
File sourceFolder = new File("code/src/java/pcgen/cdom/facet/analysis");
checkFacetsDefined(sourceFolder);
}
/**
* Check for the presence of all 'event' facets in the spring definition.
* @throws Exception
*/
@Test
public void testEventFacets() throws Exception
{
File sourceFolder = new File("code/src/java/pcgen/cdom/facet/event");
checkFacetsDefined(sourceFolder);
}
/**
* Check for the presence of all 'fact' facets in the spring definition.
* @throws Exception
*/
@Test
public void testFactFacets() throws Exception
{
File sourceFolder = new File("code/src/java/pcgen/cdom/facet/fact");
checkFacetsDefined(sourceFolder);
}
/**
* Check for the presence of all 'filter' facets in the spring definition.
* NB: These do not exist yet so the test is disabled.
* @throws Exception
*/
@Ignore
@Test
public void testFilterFacets() throws Exception
{
File sourceFolder = new File("code/src/java/pcgen/cdom/facet/filter");
checkFacetsDefined(sourceFolder);
}
/**
* Check for the presence of all 'input' facets in the spring definition.
* @throws Exception
*/
@Test
public void testInputFacets() throws Exception
{
File sourceFolder = new File("code/src/java/pcgen/cdom/facet/input");
checkFacetsDefined(sourceFolder);
}
/**
* Check for the presence of all 'link' facets in the spring definition.
* NB: These do not exist yet so the test is disabled.
* @throws Exception
*/
@Ignore
@Test
public void testLinkFacets() throws Exception
{
File sourceFolder = new File("code/src/java/pcgen/cdom/facet/link");
checkFacetsDefined(sourceFolder);
}
/**
* Check for the presence of all 'list' facets in the spring definition.
* NB: These do not exist yet so the test is disabled.
* @throws Exception
*/
@Ignore
@Test
public void testListFacets() throws Exception
{
File sourceFolder = new File("code/src/java/pcgen/cdom/facet/list");
checkFacetsDefined(sourceFolder);
}
/**
* Check for the presence of all 'model' facets in the spring definition.
* @throws Exception
*/
@Test
public void testModelFacets() throws Exception
{
File sourceFolder = new File("code/src/java/pcgen/cdom/facet/model");
checkFacetsDefined(sourceFolder);
}
/**
* Check for the presence of all 'utility' facets in the spring definition.
* NB: These do not exist yet so the test is disabled.
* @throws Exception
*/
@Ignore
@Test
public void testUtilityFacets() throws Exception
{
File sourceFolder = new File("code/src/java/pcgen/cdom/facet/utility");
checkFacetsDefined(sourceFolder);
}
/**
* Verify that all non-excluded java files are represented by an entry
* in the applicationContext file. An exceptions list is used to track
* classes which are not facets.
*
* @param sourceFolder The folder containing the source files.
* @throws IOException
*/
private void checkFacetsDefined(File sourceFolder) throws IOException
{
assertTrue("Source folder " + sourceFolder.getAbsolutePath()
+ " should be a directory", sourceFolder.isDirectory());
String packageName =
sourceFolder.getPath().replace(File.separatorChar, '.')
.replace("code.src.java.", "");
String contextData =
FileUtils.readFileToString(new File(appContextFile), "UTF-8");
for (Iterator<File> facetSourceFileIter =
FileUtils.iterateFiles(sourceFolder, new String[]{"java"},
false); facetSourceFileIter.hasNext();)
{
File srcFile = facetSourceFileIter.next();
String testString = srcFile.getName();
testString = testString.replaceAll(".java", "");
if (exceptions.contains(testString))
{
//System.out.println("Skipping " + srcFile);
continue;
}
testString = "class=\"" + packageName + "." + testString + "\"";
assertTrue("Unable to find Spring definition for " + srcFile,
contextData.indexOf(testString) >= 0);
}
}
}