package org.jboss.jsfunit.analysis.el; import java.io.File; import java.util.Collection; import java.util.HashMap; import java.util.List; import java.util.Map; import junit.framework.TestSuite; import org.apache.commons.digester.Digester; import org.apache.commons.io.filefilter.IOFileFilter; /** * * @author Jason * @since 1.0 */ public class ELTestSuiteBuilder { public static TestSuite getTestSuite(final File baseDir, final IOFileFilter fileFilter, final Collection<SkipExpressionSpec> toSkip, final Map<String, Class<?>> beanMap) { return getTestSuite(ELIterFactory.getIterable(baseDir, fileFilter, toSkip), beanMap); } public static TestSuite getTestSuite(final File baseDir, final IOFileFilter fileFilter, final IOFileFilter dirFilter, final Collection<SkipExpressionSpec> toSkip, final Map<String, Class<?>> beanMap) { return getTestSuite(ELIterFactory.getIterable(baseDir, fileFilter, dirFilter, toSkip), beanMap); } public static TestSuite getTestSuite(final Iterable<ELBundle> elIter, final Map<String, Class<?>> beanMap) { final TestSuite out = new TestSuite(); for(final ELBundle bundle: elIter) { out.addTest(new ELTestCase(bundle, beanMap)); } return out; } //TODO: these should probably live somewhere else public static Map<String, Class<?>> getBeanMap(final List<File> beanConfigs) { final Map<String, Class<?>> out = new HashMap<String, Class<?>>(); for(final File config: beanConfigs) { out.putAll(getBeanMap(config)); } return out; } public static Map<String, Class<?>> getBeanMap(final File config) { final Map<String, String> tmp = new HashMap<String, String>(); final Digester configdigester = new Digester(); configdigester.push(tmp); final String base = "faces-config/managed-bean"; configdigester.addCallMethod(base, "put", 2); configdigester.addCallParam(base + "/managed-bean-name", 0); configdigester.addCallParam(base + "/managed-bean-class", 1); try { configdigester.parse(config.toURL()); } catch(final Exception e) { throw new RuntimeException(e); } final Map<String, Class<?>> out = new HashMap<String, Class<?>>(); for(final Map.Entry<String, String> e: tmp.entrySet()) { final Class<?> clazz; try { clazz = Class.forName(e.getValue()); } catch(final ClassNotFoundException cnfe) { //TODO: log or warn somehow? continue; } out.put(e.getKey(), clazz); } return out; } }