package ro.isdc.wro.util.provider;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import java.util.ArrayList;
import java.util.Iterator;
import org.junit.Test;
import ro.isdc.wro.WroRuntimeException;
import ro.isdc.wro.model.resource.processor.support.ProcessorProvider;
import ro.isdc.wro.model.resource.support.hash.HashStrategyProvider;
import ro.isdc.wro.model.resource.support.naming.NamingStrategyProvider;
/**
* @author Alex Objelean
*/
public class TestProviderFinder {
private ProviderFinder<?> victim;
@Test
public void shouldFindConfigurableProviders() {
victim = ProviderFinder.of(ConfigurableProvider.class);
assertEquals(2, victim.find().size());
}
@Test
public void shouldFindProcessorsProvider() {
victim = ProviderFinder.of(ProcessorProvider.class);
assertEquals(4, victim.find().size());
}
@Test
public void shouldFindNamingStrategyProviders() {
victim = ProviderFinder.of(NamingStrategyProvider.class);
assertEquals(2, victim.find().size());
}
@Test
public void shouldFindHashBuilderProviders() {
victim = ProviderFinder.of(HashStrategyProvider.class);
assertEquals(2, victim.find().size());
}
@Test
public void shouldNotFindProviderWhenNoneIsAvailable() {
victim = new ProviderFinder<ProcessorProvider>(ProcessorProvider.class) {
@Override
<F> Iterator<F> lookupProviders(final Class<F> clazz) {
return new ArrayList<F>().iterator();
}
};
assertTrue(victim.find().isEmpty());
}
@Test(expected = WroRuntimeException.class)
public void cannotFindAnyProviderWhenLookupFails() {
victim = new ProviderFinder<ProcessorProvider>(ProcessorProvider.class) {
@Override
<F> Iterator<F> lookupProviders(final Class<F> clazz) {
throw new IllegalStateException("BOOM!");
}
};
victim.find();
}
}