package com.nicewuerfel.blockown; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; import org.bukkit.World; import org.bukkit.entity.Entity; import org.bukkit.entity.EntityType; import org.junit.BeforeClass; import org.junit.Rule; import org.junit.Test; import org.junit.rules.ExpectedException; import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Set; import java.util.UUID; public class TestOwnedEntity { private static World world1; private static World world2; private static Entity[] entities; private static List<UUID> ids; @BeforeClass public static void init() { world1 = mock(World.class); when(world1.getName()).thenReturn("w1"); world2 = mock(World.class); when(world2.getName()).thenReturn("w2"); Set<UUID> idsSet = new HashSet<>(8); for (int i = 0; i < 4; i++) { if (!idsSet.add(UUID.randomUUID())) { i--; } } ids = new ArrayList<>(4); ids.addAll(idsSet); entities = new Entity[6]; entities[0] = createEntity(ids.get(0), world1); entities[1] = createEntity(ids.get(0), world1); entities[2] = createEntity(ids.get(1), world1); entities[3] = createEntity(ids.get(0), world2); entities[4] = createEntity(ids.get(2), world2); entities[5] = createEntity(ids.get(3), world2); } private static Entity createEntity(UUID id, World world) { Entity entity = mock(Entity.class); when(entity.getUniqueId()).thenReturn(id); when(entity.getWorld()).thenReturn(world); when(entity.getType()).thenReturn(EntityType.BOAT); return entity; } @Rule public ExpectedException expected = ExpectedException.none(); @Test public void testFactories() { assertEquals(0, OwnedEntity.class.getConstructors().length); OwnedEntity.newInstance(entities[0]); OwnedEntity.newInstance(ids.get(0), "w1"); OwnedEntity.newInstance(ids.get(0), "w1", null); expected.expect(NullPointerException.class); OwnedEntity.newInstance(null); OwnedEntity.newInstance(null, "w1"); OwnedEntity.newInstance(ids.get(0), null); OwnedEntity.newInstance(null, null); OwnedEntity.newInstance(null, "w1", null); OwnedEntity.newInstance(ids.get(0), null, null); OwnedEntity.newInstance(null, null, null); } @Test public void testEquals() { OwnedEntity[] oe = new OwnedEntity[8]; oe[0] = OwnedEntity.newInstance(entities[0]); oe[1] = OwnedEntity.newInstance(entities[1]); oe[2] = OwnedEntity.newInstance(entities[2]); oe[3] = OwnedEntity.newInstance(entities[3]); oe[4] = OwnedEntity.newInstance(entities[4]); oe[5] = OwnedEntity.newInstance(entities[5]); oe[6] = OwnedEntity.newInstance(ids.get(0), "w1"); oe[7] = OwnedEntity.newInstance(ids.get(2), "w1", new Material(EntityType.ARROW)); // Integrity assertFalse(oe[0].equals(oe[2])); assertFalse(oe[2].equals(oe[0])); // Reflexivity assertTrue(oe[0].equals(oe[0])); assertTrue(oe[6].equals(oe[6])); assertTrue(oe[7].equals(oe[7])); // Transitivity assertTrue(oe[0].equals(oe[1])); assertTrue(oe[1].equals(oe[6])); assertTrue(oe[0].equals(oe[6])); // Symmetry assertTrue(oe[0].equals(oe[1])); assertTrue(oe[1].equals(oe[0])); assertTrue(oe[0].equals(oe[6])); assertTrue(oe[6].equals(oe[0])); assertTrue(oe[7].equals(oe[4])); assertTrue(oe[4].equals(oe[7])); assertFalse(oe[7].equals(oe[5])); assertFalse(oe[5].equals(oe[7])); // Only UUID is important for equals assertTrue(oe[6].equals(oe[3])); assertTrue(oe[3].equals(oe[6])); } }