package jalse.entities;
import static jalse.entities.Entities.asType;
import java.util.HashSet;
import java.util.Optional;
import java.util.UUID;
import java.util.stream.Stream;
import org.junit.After;
import org.junit.Assert;
import org.junit.Test;
public class EntityContainerTest {
private interface TestEntity extends Entity {}
private class TestEntityListener implements EntityListener {
@Override
public void entityCreated(final EntityEvent event) {}
@Override
public void entityKilled(final EntityEvent event) {}
@Override
public void entityReceived(final EntityEvent event) {}
@Override
public void entityTransferred(final EntityEvent event) {}
}
EntityContainer container;
@Test
public void addEntityTest() {
container = new DefaultEntityContainer();
Assert.assertFalse(container.hasEntities());
container.newEntity();
container.newEntity(new UUID(0, 0));
Assert.assertEquals(2, container.getEntityCount());
Assert.assertTrue(container.hasEntities());
Assert.assertNotNull(container.getEntities());
Assert.assertTrue(container.hasEntity(new UUID(0, 0)));
Assert.assertFalse(container.hasEntity(new UUID(0, 100)));
Optional<Entity> optEntity = container.getOptEntity(new UUID(0, 100));
Assert.assertFalse(optEntity.isPresent());
optEntity = container.getOptEntity(new UUID(0, 0));
Assert.assertTrue(optEntity.isPresent());
}
@After
public void after() {
container = null;
}
@Test
public void entityClassTest() {
container = new DefaultEntityContainer();
container.newEntity();
container.newEntity(new UUID(0, 0));
container.newEntity(TestEntity.class);
container.newEntity(new UUID(0, 1), TestEntity.class);
final HashSet<DefaultEntity> entities = (HashSet<DefaultEntity>) container
.getEntitiesOfType(DefaultEntity.class);
for (final Entity entity : entities) {
Assert.assertEquals(DefaultEntity.class, entity.getClass());
}
final Stream<DefaultEntity> entityStream = container.streamEntitiesOfType(DefaultEntity.class);
entityStream.forEach(e -> Assert.assertEquals(DefaultEntity.class, e.getClass()));
final Class<? extends TestEntity> type = asType(container.getEntity(new UUID(0, 0)), TestEntity.class)
.getClass();
Assert.assertEquals(type, container.getEntityAsType(new UUID(0, 0), TestEntity.class).getClass());
Assert.assertNull(container.getEntityAsType(new UUID(0, 100), TestEntity.class));
final HashSet<TestEntity> testEntities = (HashSet<TestEntity>) container.getEntitiesAsType(TestEntity.class);
for (final Entity entity : testEntities) {
Assert.assertEquals(type, entity.getClass());
}
final Stream<TestEntity> testEntityStream = container.streamEntitiesAsType(TestEntity.class);
testEntityStream.forEach(e -> Assert.assertEquals(type, e.getClass()));
final Optional<TestEntity> optEntity = container.getOptEntityAsType(new UUID(0, 0), TestEntity.class);
Assert.assertTrue(optEntity.isPresent());
Assert.assertEquals(type, optEntity.get().getClass());
}
@Test
public void entityListenerTest() {
container = new DefaultEntityContainer();
final UUID id = new UUID(0, 0);
container.newEntity(id);
final TestEntityListener entityListener = new TestEntityListener();
Assert.assertFalse(container.hasEntityListener(entityListener));
container.addEntityListener(entityListener);
Assert.assertTrue(container.hasEntityListener(entityListener));
}
@Test
public void transferTest() {
container = new DefaultEntityContainer();
final UUID id = new UUID(0, 0);
container.newEntity(id);
final DefaultEntityContainer otherContainer = new DefaultEntityContainer();
Assert.assertTrue(container.transferAllEntities(otherContainer).isEmpty());
Assert.assertFalse(container.hasEntities());
final HashSet<UUID> idSet = new HashSet<UUID>();
idSet.add(new UUID(0, 1));
idSet.add(new UUID(0, 2));
container.newEntity(new UUID(0, 1));
container.newEntity(new UUID(0, 2));
container.transferEntities(idSet, otherContainer).isEmpty();
Assert.assertFalse(container.hasEntities());
otherContainer.transferEntities(p -> !p.getID().equals(new UUID(0, 0)), container);
Assert.assertTrue(otherContainer.getEntityIDs().contains(new UUID(0, 0)));
Assert.assertFalse(otherContainer.getEntityIDs().contains(new UUID(0, 1)));
Assert.assertFalse(container.getEntityIDs().contains(new UUID(0, 0)));
Assert.assertTrue(container.getEntityIDs().contains(new UUID(0, 1)));
}
}