package cucumber.runtime.java.needle.config;
import static cucumber.runtime.java.needle.config.CucumberNeedleConfiguration.RESOURCE_CUCUMBER_NEEDLE;
import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.core.IsCollectionContaining.hasItems;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertThat;
import java.util.ResourceBundle;
import java.util.Set;
import org.junit.Test;
import cucumber.runtime.java.needle.test.injectionprovider.SimpleNameGetterProvider;
public class ReadInjectionProviderClassNamesTest {
private final ReadInjectionProviderClassNames function = ReadInjectionProviderClassNames.INSTANCE;
@Test
public void shouldReturnProviderFromCucumberNeedleProperties() throws Exception {
final Set<String> classNames = function.apply(loadBundle(RESOURCE_CUCUMBER_NEEDLE));
assertNotNull(classNames);
assertThat(classNames.size(), is(1));
assertThat(classNames.iterator().next(), is(SimpleNameGetterProvider.class.getCanonicalName()));
}
@Test
public void shouldReturnEmptySetWhenResourceBundleIsNull() {
final Set<String> classNames = function.apply(null);
assertNotNull(classNames);
assertThat(classNames.isEmpty(), is(true));
}
@Test
public void shouldReturnEmptySetWhenPropertyIsNotSet() {
final Set<String> classNames = function.apply(loadBundle("resource-bundles/empty"));
assertNotNull(classNames);
assertThat(classNames.isEmpty(), is(true));
}
@Test
public void shouldReturnEmptySetWhenPropertyIsEmpty() {
final Set<String> classNames = function.apply(loadBundle("resource-bundles/no-classname"));
assertNotNull(classNames);
assertThat(classNames.isEmpty(), is(true));
}
@Test
public void shouldReturnOneTrimmedClassName() throws Exception {
final Set<String> classNames = function.apply(loadBundle("resource-bundles/one-classname"));
assertThat(classNames.size(), is(1));
final String first = classNames.iterator().next();
assertThat(first, is("java.lang.String"));
}
@Test
public void shouldReturnTwoTrimmedClassNames() throws Exception {
final Set<String> classNames = function.apply(loadBundle("resource-bundles/two-classname"));
assertThat(classNames.size(), is(2));
assertThat(classNames, hasItems("java.lang.String", "java.util.Set"));
}
private ResourceBundle loadBundle(final String resourceName) {
return LoadResourceBundle.INSTANCE.apply(resourceName);
}
}