![JAR search and dependency download from the Maven repository](/logo.png)
info.novatec.testit.webtester.junit.runner.internal.TestClassPlausibilityChecker Maven / Gradle / Ivy
package info.novatec.testit.webtester.junit.runner.internal;
import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
import java.util.LinkedList;
import java.util.List;
import java.util.Set;
import javax.annotation.Resource;
import info.novatec.testit.webtester.api.browser.Browser;
import info.novatec.testit.webtester.internal.ReflectionUtils;
import info.novatec.testit.webtester.junit.annotations.ConfigurationValue;
import info.novatec.testit.webtester.junit.annotations.Primary;
import info.novatec.testit.webtester.junit.exceptions.NoManagedBrowserException;
import info.novatec.testit.webtester.junit.exceptions.NoPrimaryBrowserException;
import info.novatec.testit.webtester.junit.exceptions.NoStaticPrimaryBrowserException;
import info.novatec.testit.webtester.junit.exceptions.NoUniquePrimaryBrowserException;
import info.novatec.testit.webtester.junit.exceptions.NotOfInjectableFieldTypeException;
public class TestClassPlausibilityChecker {
private Set allFields;
public TestClassPlausibilityChecker(Class> testClass) {
this.allFields = ReflectionUtils.getAllFieldsOfClassHierarchy(testClass);
}
public void assertPlausibilityOfTestClass() {
assertThatNoMoreThenOnePrimaryBrowserIsDeclared();
List configurationValueFields = getConfigurationValueFields();
// TODO start page ticket - get all fields
if (!configurationValueFields.isEmpty()) {
Field primaryBrowserField = getRequiredPrimaryBrowserInstance();
assertPlausibilityOfConfigurationValueFields(configurationValueFields, primaryBrowserField);
// TODO start page ticket - assert plausibility
}
}
private void assertThatNoMoreThenOnePrimaryBrowserIsDeclared() {
List managedBrowserFields = getManagedBrowserFields();
List primaryBrowserFields = getPrimaryBrowserFields(managedBrowserFields);
if (primaryBrowserFields.size() > 1) {
throw new NoUniquePrimaryBrowserException();
}
}
private void assertPlausibilityOfConfigurationValueFields(List configurationValueFields,
Field primaryBrowserField) {
for (Field field : configurationValueFields) {
assertInjectableTypeForConfigurationValueField(field);
assertStaticPrimaryBrowserForStaticConfigurationValueField(field, primaryBrowserField);
}
}
/* details */
private Field getRequiredPrimaryBrowserInstance() {
List managedBrowserFields = getManagedBrowserFields();
if (managedBrowserFields.isEmpty()) {
throw new NoManagedBrowserException();
}
Field primaryBrowserField;
if (managedBrowserFields.size() == 1) {
primaryBrowserField = managedBrowserFields.get(0);
} else {
List primaryBrowserFields = getPrimaryBrowserFields(managedBrowserFields);
if (primaryBrowserFields.isEmpty()) {
throw new NoPrimaryBrowserException();
}
if (primaryBrowserFields.size() == 1) {
primaryBrowserField = primaryBrowserFields.get(0);
} else {
throw new NoUniquePrimaryBrowserException();
}
}
return primaryBrowserField;
}
private List getManagedBrowserFields() {
List managedBrowserFields = new LinkedList();
for (Field field : allFields) {
if (isBrowser(field) && isManaged(field)) {
managedBrowserFields.add(field);
}
}
return managedBrowserFields;
}
private boolean isBrowser(Field field) {
return Browser.class.isAssignableFrom(field.getType());
}
private boolean isManaged(Field field) {
return field.isAnnotationPresent(Resource.class);
}
private List getPrimaryBrowserFields(List managedBrowserFields) {
List primaryBowserFields = new LinkedList();
for (Field field : managedBrowserFields) {
if (field.isAnnotationPresent(Primary.class)) {
primaryBowserFields.add(field);
}
}
return primaryBowserFields;
}
private List getConfigurationValueFields() {
List configurationValueFields = new LinkedList();
for (Field field : allFields) {
if (field.isAnnotationPresent(ConfigurationValue.class)) {
configurationValueFields.add(field);
}
}
return configurationValueFields;
}
private void assertInjectableTypeForConfigurationValueField(Field field) {
if (!ConfigurationValueInjector.canInjectValue(field)) {
throw new NotOfInjectableFieldTypeException(field);
}
}
private void assertStaticPrimaryBrowserForStaticConfigurationValueField(Field field, Field primaryBrowserField) {
if (isStatic(field) && !isStatic(primaryBrowserField)) {
throw new NoStaticPrimaryBrowserException(
"the static configuration value field '" + field.getName() + "' needs a static primary browser!");
}
}
private boolean isStatic(Field field) {
return Modifier.isStatic(field.getModifiers());
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy