package jalse.entities;
import java.util.Objects;
import org.junit.Assert;
import org.junit.Test;
import jalse.attributes.AttributeListener;
import jalse.attributes.Attributes;
import jalse.attributes.NamedAttributeType;
public class EntitiesTest {
private EntitiesTest() {}
public static class RecursiveAttributeListenerTest {
private class TestAttributeListener implements AttributeListener<Integer> {}
@Test
public void createRecursiveAttributeListenerTest() {
final EntityListener listener = Entities
.newRecursiveAttributeListener(Attributes.newNamedIntegerType("Test"), TestAttributeListener::new);
final EntityListener depthLimitedListener = Entities.newRecursiveAttributeListener(
Attributes.newNamedIntegerType("Test"), TestAttributeListener::new, 3);
Assert.assertTrue(Objects.nonNull(listener));
Assert.assertTrue(Objects.nonNull(depthLimitedListener));
}
@Test
public void recursionTest() {
final NamedAttributeType<Integer> testType = Attributes.newNamedIntegerType("Test");
final EntityContainer container = new DefaultEntityContainer.Builder().build();
final EntityListener listener = Entities.newRecursiveAttributeListener(testType, TestAttributeListener::new,
2);
container.addEntityListener(listener);
final Entity entityDepth1 = container.newEntity();
Assert.assertEquals(1, entityDepth1.getEntityListeners().size());
Assert.assertEquals(1, entityDepth1.getAttributeListeners(testType).size());
final Entity entityDepth2 = entityDepth1.newEntity();
Assert.assertEquals(1, entityDepth2.getEntityListeners().size());
Assert.assertEquals(1, entityDepth2.getAttributeListeners(testType).size());
final Entity entityDepth3 = entityDepth2.newEntity();
Assert.assertTrue(entityDepth3.getEntityListeners().isEmpty());
Assert.assertTrue(entityDepth3.getAttributeListeners(testType).isEmpty());
}
}
public static class RecursiveEntityListenerTest {
private class TestEntityListener implements EntityListener {}
@Test
public void createRecursiveEntityListenerTest() {
final EntityListener listener = Entities.newRecursiveEntityListener(TestEntityListener::new);
final EntityListener depthLimitedListener = Entities.newRecursiveEntityListener(TestEntityListener::new, 3);
Assert.assertTrue(Objects.nonNull(listener));
Assert.assertTrue(Objects.nonNull(depthLimitedListener));
}
@Test
public void recursionTest() {
final EntityContainer container = new DefaultEntityContainer.Builder().build();
final EntityListener listener = Entities.newRecursiveEntityListener(TestEntityListener::new, 2);
container.addEntityListener(listener);
final Entity entityDepth1 = container.newEntity();
Assert.assertEquals(2, entityDepth1.getEntityListeners().size());
final Entity entityDepth2 = entityDepth1.newEntity();
Assert.assertEquals(2, entityDepth2.getEntityListeners().size());
final Entity entityDepth3 = entityDepth2.newEntity();
Assert.assertTrue(entityDepth3.getEntityListeners().isEmpty());
}
}
}