package net.sourceforge.stripes.util;
import net.sourceforge.stripes.validation.BooleanTypeConverter;
import net.sourceforge.stripes.validation.DateTypeConverter;
import net.sourceforge.stripes.validation.LocalizableError;
import net.sourceforge.stripes.validation.ScopedLocalizableError;
import net.sourceforge.stripes.validation.SimpleError;
import net.sourceforge.stripes.validation.TypeConverter;
import org.testng.Assert;
import org.testng.annotations.Test;
import java.util.Set;
/**
* Simple test case that tets out the basic functionality of the Resolver Util class.
*
* @author Tim Fennell
*/
public class ResolverUtilTest {
@Test(groups="slow")
public void testSimpleFind() throws Exception {
// Because the tests package depends on stripes, it's safe to assume that
// there will be some TypeConverter subclasses in the classpath
ResolverUtil<TypeConverter<?>> resolver = new ResolverUtil<TypeConverter<?>>();
resolver.findImplementations(TypeConverter.class, "net");
Set<Class<? extends TypeConverter<?>>> impls = resolver.getClasses();
// Check on a few random converters
Assert.assertTrue(impls.contains(BooleanTypeConverter.class),
"BooleanTypeConverter went missing.");
Assert.assertTrue(impls.contains(DateTypeConverter.class),
"DateTypeConverter went missing.");
Assert.assertTrue(impls.contains(BooleanTypeConverter.class),
"ShortTypeConverter went missing.");
Assert.assertTrue(impls.size() >= 10,
"Did not find all the built in TypeConverters.");
}
@Test(groups="fast")
public void testMoreSpecificFind() throws Exception {
// Because the tests package depends on stripes, it's safe to assume that
// there will be some TypeConverter subclasses in the classpath
ResolverUtil<TypeConverter<?>> resolver = new ResolverUtil<TypeConverter<?>>();
resolver.findImplementations(TypeConverter.class, "net.sourceforge.stripes.validation");
Set<Class<? extends TypeConverter<?>>> impls = resolver.getClasses();
// Check on a few random converters
Assert.assertTrue(impls.contains(BooleanTypeConverter.class),
"BooleanTypeConverter went missing.");
Assert.assertTrue(impls.contains(DateTypeConverter.class),
"DateTypeConverter went missing.");
Assert.assertTrue(impls.contains(BooleanTypeConverter.class),
"ShortTypeConverter went missing.");
Assert.assertTrue(impls.size() >= 10,
"Did not find all the built in TypeConverters.");
}
@Test(groups="fast")
public void testFindExtensionsOfClass() throws Exception {
ResolverUtil<SimpleError> resolver = new ResolverUtil<SimpleError>();
resolver.findImplementations(SimpleError.class, "net.sourceforge.stripes");
Set<Class<? extends SimpleError>> impls = resolver.getClasses();
Assert.assertTrue(impls.contains(LocalizableError.class),
"LocalizableError should have been found.");
Assert.assertTrue(impls.contains(ScopedLocalizableError.class),
"ScopedLocalizableError should have been found.");
Assert.assertTrue(impls.contains(SimpleError.class),
"SimpleError itself should have been found.");
}
/** Test interface used with the testFindZeroImplementatios() method. */
private static interface ZeroImplementations {}
@Test(groups="fast")
public void testFindZeroImplementations() throws Exception {
ResolverUtil<ZeroImplementations> resolver = new ResolverUtil<ZeroImplementations>();
resolver.findImplementations(ZeroImplementations.class, "net.sourceforge.stripes");
Set<Class<? extends ZeroImplementations>> impls = resolver.getClasses();
Assert.assertTrue(impls.size() == 1 && impls.contains(ZeroImplementations.class),
"There should not have been any implementations besides the interface itself.");
}
}