package jalse.entities.functions;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import java.lang.reflect.Method;
import org.junit.After;
import org.junit.Test;
import jalse.entities.Entity;
import jalse.entities.annotations.EntityID;
import jalse.entities.annotations.KillEntities;
import jalse.entities.methods.KillEntitiesMethod;
public class KillEntitiesFunctionTest {
interface TestInvalidEntity extends Entity {
void killTest();
}
interface TestInvalidEntity2 extends Entity {
@KillEntities
String killTest();
}
interface TestInvalidEntity3 extends Entity {
@KillEntities
void killTest(String str);
}
interface TestInvalidEntity4 extends Entity {
@KillEntities
default void killTest() {}
}
interface TestValidEntity extends Entity {
@KillEntities
void killTest();
}
interface TestValidEntity2 extends Entity {
@EntityID
@KillEntities
void killTest();
}
KillEntitiesFunction function;
@After
public void after() {
function = null;
}
public Method killTestMethod(final Class<?> clazz, final Class<?>... params) {
Method m = null;
try {
m = clazz.getDeclaredMethod("killTest", params);
} catch (NoSuchMethodException | SecurityException e) {
fail("Could not get method reference");
}
return m;
}
@Test
public void testInvalid() {
function = new KillEntitiesFunction();
final Method m = killTestMethod(TestInvalidEntity.class);
final KillEntitiesMethod kem = function.apply(m);
assertNull(kem);
}
@Test(expected = IllegalArgumentException.class)
public void testInvalid2() {
function = new KillEntitiesFunction();
final Method m = killTestMethod(TestInvalidEntity2.class);
function.apply(m);
}
@Test(expected = IllegalArgumentException.class)
public void testInvalid3() {
function = new KillEntitiesFunction();
final Method m = killTestMethod(TestInvalidEntity3.class, String.class);
function.apply(m);
}
@Test(expected = IllegalArgumentException.class)
public void testInvalid4() {
function = new KillEntitiesFunction();
final Method m = killTestMethod(TestInvalidEntity4.class);
function.apply(m);
}
@Test
public void testValid() {
function = new KillEntitiesFunction();
final Method m = killTestMethod(TestValidEntity.class);
final KillEntitiesMethod kem = function.apply(m);
assertNotNull(kem);
assertTrue(kem.getIDSuppliers().size() == 0);
}
@Test
public void testValid2() {
function = new KillEntitiesFunction();
final Method m = killTestMethod(TestValidEntity2.class);
final KillEntitiesMethod kem = function.apply(m);
assertNotNull(kem);
assertTrue(kem.getIDSuppliers().size() == 1);
}
}