package com.celements.model.classes.fields;
import static org.hamcrest.CoreMatchers.*;
import static org.junit.Assert.*;
import static org.mutabilitydetector.unittesting.AllowedReason.*;
import static org.mutabilitydetector.unittesting.MutabilityAssert.*;
import static org.mutabilitydetector.unittesting.MutabilityMatchers.*;
import org.junit.Before;
import org.junit.Test;
import org.xwiki.model.reference.DocumentReference;
import com.celements.common.test.AbstractComponentTest;
import com.xpn.xwiki.objects.classes.StringClass;
public class ClassFieldTest extends AbstractComponentTest {
private TestClassField field;
DocumentReference classRef;
String name = "name";
String prettyName = "prettyName";
String validationRegExp = "validationRegExp";
String validationMessage = "validationMessage";
@Override
@Before
public void setUp() throws Exception {
super.setUp();
classRef = new DocumentReference("wiki", "class", "any");
field = new TestClassField.Builder(classRef, name).size(5).prettyName(
prettyName).validationRegExp(validationRegExp).validationMessage(validationMessage).build();
}
@Test
public void test_immutability() {
assertInstancesOf(AbstractClassField.class, areImmutable(), allowingForSubclassing(),
assumingFields("classRef").areNotModifiedAndDoNotEscape());
assertImmutable(TestClassField.class);
}
@Test
public void test_immutability_classRef_isNotModifiedAndDoesNotEscape() throws Exception {
DocumentReference intClassRef = field.getClassRef();
assertThat(field.getClassRef(), not(sameInstance(intClassRef)));
assertThat(field.getClassRef(), is(intClassRef));
intClassRef.setName("asdf");
assertThat(field.getClassRef(), not(equalTo(intClassRef)));
classRef.setName("asdf");
assertThat(field.getClassRef(), not(equalTo(classRef)));
}
@Test
public void test_constr_null_classRef() throws Exception {
try {
new TestClassField.Builder(null, field.getName()).build();
fail("expecting NullPointerException");
} catch (NullPointerException npe) {
// expected
}
}
@Test
public void test_constr_null_name() throws Exception {
try {
new TestClassField.Builder(field.getClassRef(), null).build();
fail("expecting NullPointerException");
} catch (NullPointerException npe) {
// expected
}
}
@Test
public void test_getters() throws Exception {
assertEquals(classRef, field.getClassRef());
assertEquals(name, field.getName());
assertEquals(TestClassField.class, field.getType());
assertEquals(prettyName, field.getPrettyName());
assertEquals(validationRegExp, field.getValidationRegExp());
assertEquals(validationMessage, field.getValidationMessage());
}
@Test
public void test_getXField() throws Exception {
assertTrue(field.getXField() instanceof StringClass);
StringClass xField = (StringClass) field.getXField();
assertEquals(field.getName(), xField.getName());
assertEquals(prettyName, xField.getPrettyName());
assertEquals(validationRegExp, xField.getValidationRegExp());
assertEquals(validationMessage, xField.getValidationMessage());
}
@Test
public void test_equals() throws Exception {
assertTrue(field.equals(new TestClassField.Builder(field.getClassRef(),
field.getName()).build()));
assertTrue(field.equals(new StringField.Builder(field.getClassRef(), field.getName()).build()));
assertTrue(field.equals(new TestClassField.Builder(field.getClassRef(),
field.getName()).prettyName("asdf").validationRegExp("asdf").validationMessage(
"asdf").build()));
assertFalse(field.equals(new TestClassField.Builder(field.getClassRef(), "name2").build()));
DocumentReference classRefOther = new DocumentReference(field.getClassRef());
classRefOther.setName("other");
assertFalse(field.equals(new TestClassField.Builder(classRefOther, field.getName()).build()));
assertFalse(field.equals(null));
}
@Test
public void test_hashCode() throws Exception {
assertTrue(field.hashCode() == new TestClassField.Builder(field.getClassRef(),
field.getName()).build().hashCode());
assertTrue(field.hashCode() == new StringField.Builder(field.getClassRef(),
field.getName()).build().hashCode());
assertTrue(field.hashCode() == new TestClassField.Builder(field.getClassRef(),
field.getName()).prettyName("asdf").validationRegExp("asdf").validationMessage(
"asdf").build().hashCode());
assertFalse(field.hashCode() == new TestClassField.Builder(field.getClassRef(),
"name2").build().hashCode());
DocumentReference classRefOther = new DocumentReference(field.getClassRef());
classRefOther.setName("other");
assertFalse(field.hashCode() == new TestClassField.Builder(classRefOther,
field.getName()).build().hashCode());
}
@Test
public void test_toString() throws Exception {
assertEquals("class.any.name", field.toString());
}
}