package jalse.attributes;
import org.junit.After;
import org.junit.Assert;
import org.junit.Test;
public class DefaultAttributeContainerTest {
public static class BuilderTest {
DefaultAttributeContainer container;
@After
public void after() {
container = null;
}
@Test
public void attributeBuildTest() {
container = new DefaultAttributeContainer.Builder()
.setAttribute(Attributes.newNamedBooleanType("scary"), true).build();
}
@Test
public void attributeBuildTest2() {
container = new DefaultAttributeContainer.Builder().setAttribute("scary", Attributes.BOOLEAN_TYPE, true)
.build();
}
@Test
public void buildTest() {
container = new DefaultAttributeContainer.Builder().build();
}
@Test
public void delegateBuildTest() {
container = new DefaultAttributeContainer.Builder().setDelegateContainer(new DefaultAttributeContainer())
.build();
}
@Test
public void listenerBuilderTest() {
container = new DefaultAttributeContainer.Builder()
.addListener(Attributes.newNamedIntegerType("score"), new TestAttributeListener()).build();
}
@Test
public void listenerBuilderTest2() {
container = new DefaultAttributeContainer.Builder()
.addListener("score", Attributes.INTEGER_TYPE, new TestAttributeListener()).build();
}
}
private static class TestAttributeListener implements AttributeListener<Integer> {
public boolean added;
public boolean changed;
public boolean removed;
@Override
public void attributeAdded(final AttributeEvent<Integer> event) {
added = true;
}
@Override
public void attributeChanged(final AttributeEvent<Integer> event) {
changed = true;
}
@Override
public void attributeRemoved(final AttributeEvent<Integer> event) {
removed = true;
}
}
DefaultAttributeContainer container;
@After
public void after() {
container = null;
}
@Test
public void attributeListenerTest() {
final TestAttributeListener attributeListener = new TestAttributeListener();
container = new DefaultAttributeContainer();
Assert.assertTrue(container.getAttributeListenerNames().isEmpty());
Assert.assertTrue(container.getAttributeListenerTypes("test").isEmpty());
Assert.assertTrue(container.getAttributeListeners("test", Attributes.INTEGER_TYPE).isEmpty());
container.addAttributeListener("test", Attributes.INTEGER_TYPE, attributeListener);
Assert.assertTrue(container.getAttributeListenerNames().contains("test"));
Assert.assertTrue(container.getAttributeListenerTypes("test").contains(Attributes.INTEGER_TYPE));
Assert.assertTrue(container.getAttributeListeners("test", Attributes.INTEGER_TYPE).contains(attributeListener));
Assert.assertFalse(attributeListener.added);
container.setAttribute("test", Attributes.INTEGER_TYPE, 10);
Assert.assertTrue(attributeListener.added);
Assert.assertFalse(attributeListener.changed);
container.fireAttributeChanged("test", Attributes.INTEGER_TYPE);
Assert.assertTrue(attributeListener.changed);
// Nothing happens.
container.fireAttributeChanged("test", Attributes.DOUBLE_TYPE);
// Nothing happens.
container.fireAttributeChanged("test2", Attributes.DOUBLE_TYPE);
// Nothing happens.
container.setAttribute("test2", Attributes.DOUBLE_TYPE, 3.14);
container.fireAttributeChanged("test2", Attributes.DOUBLE_TYPE);
Assert.assertFalse(attributeListener.removed);
container.removeAttribute("test", Attributes.INTEGER_TYPE);
Assert.assertTrue(attributeListener.removed);
Assert.assertTrue(container.getAttributeListenerTypes("test").contains(Attributes.INTEGER_TYPE));
Assert.assertTrue(container.removeAttributeListener("test", Attributes.INTEGER_TYPE, attributeListener));
Assert.assertTrue(container.getAttributeListenerTypes("test").isEmpty());
// Try to remove the same listener twice.
Assert.assertFalse(container.removeAttributeListener("test", Attributes.INTEGER_TYPE, attributeListener));
container.addAttributeListener("test", Attributes.INTEGER_TYPE, attributeListener);
container.removeAttributeListeners("test", Attributes.INTEGER_TYPE);
Assert.assertTrue(container.getAttributeListenerTypes("test").isEmpty());
container.addAttributeListener("test", Attributes.INTEGER_TYPE, attributeListener);
container.removeAttributeListeners();
Assert.assertTrue(container.getAttributeListenerTypes("test").isEmpty());
}
@Test
public void attributeTest() {
container = new DefaultAttributeContainer();
Assert.assertTrue(container.getAttributeTypes("test").isEmpty());
container.setAttribute("test", Attributes.INTEGER_TYPE, 10);
Assert.assertTrue(container.streamAttributes().findAny().isPresent());
Assert.assertTrue(container.getAttributeTypes("test").contains(Attributes.INTEGER_TYPE));
Assert.assertTrue(container.getAttributeNames().contains("test"));
Assert.assertEquals(10, (int) container.getAttribute("test", Attributes.INTEGER_TYPE));
container.removeAttribute("test", Attributes.INTEGER_TYPE);
Assert.assertTrue(container.getAttributeNames().isEmpty());
Assert.assertNull(container.removeAttribute("test", Attributes.INTEGER_TYPE));
container.setAttribute("test", Attributes.INTEGER_TYPE, 10);
container.removeAttributes();
Assert.assertTrue(container.getAttributeNames().isEmpty());
container.setAttribute("test", Attributes.INTEGER_TYPE, 10);
Assert.assertEquals(1, container.getAttributeCount());
container.setAttribute("test2", Attributes.DOUBLE_TYPE, 3.14);
Assert.assertEquals(2, container.getAttributeCount());
}
@Test
public void delegateTest() {
container = new DefaultAttributeContainer();
container.setAttribute("test", Attributes.INTEGER_TYPE, 10);
final DefaultAttributeContainer otherContainer = new DefaultAttributeContainer(container);
Assert.assertEquals(container, otherContainer.getDelegateContainer());
}
@Test
public void equalsTest() {
container = new DefaultAttributeContainer();
Assert.assertEquals(container, container);
container.setAttribute("test", Attributes.INTEGER_TYPE, 10);
final DefaultAttributeContainer otherContainer = new DefaultAttributeContainer();
Assert.assertNotEquals(container, otherContainer);
otherContainer.setAttribute("test", Attributes.INTEGER_TYPE, 10);
final TestAttributeListener attributeListener = new TestAttributeListener();
container.addAttributeListener("test", Attributes.INTEGER_TYPE, attributeListener);
Assert.assertNotEquals(container, otherContainer);
otherContainer.addAttributeListener("test", Attributes.INTEGER_TYPE, attributeListener);
Assert.assertEquals(container, otherContainer);
}
@Test
public void hashCodeTest() {
container = new DefaultAttributeContainer();
Assert.assertEquals(container.hashCode(), container.hashCode());
container.setAttribute("test", Attributes.INTEGER_TYPE, 10);
final DefaultAttributeContainer otherContainer = new DefaultAttributeContainer();
Assert.assertNotEquals(container.hashCode(), otherContainer.hashCode());
otherContainer.setAttribute("test", Attributes.INTEGER_TYPE, 10);
final TestAttributeListener attributeListener = new TestAttributeListener();
container.addAttributeListener("test", Attributes.INTEGER_TYPE, attributeListener);
Assert.assertNotEquals(container.hashCode(), otherContainer.hashCode());
otherContainer.addAttributeListener("test", Attributes.INTEGER_TYPE, attributeListener);
Assert.assertEquals(container.hashCode(), otherContainer.hashCode());
}
}