package org.testory.common;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import static org.testory.common.Classes.hasMethod;
import org.junit.Before;
import org.junit.Test;
public class TestClassesHasMethod {
private Class<?>[] parameters;
private String name;
private Class<?> type;
@Before
public void before() {
parameters = new Class[] { Object.class };
name = "method";
type = Type.class;
}
@Test
public void requires_same_name_and_parameters() {
assertTrue(hasMethod(name, parameters, type));
}
@Test
public void fails_for_different_type() {
assertFalse(hasMethod(name, parameters, OtherType.class));
}
@Test
public void fails_for_different_name() {
assertFalse(hasMethod("otherName", parameters, type));
}
@Test
public void fails_for_different_parameter_type() {
assertFalse(hasMethod(name, new Class[] { String.class }, type));
}
@Test
public void fails_for_more_parameters() {
assertFalse(hasMethod(name, new Class[] { Object.class, Object.class }, type));
}
@Test
public void fails_for_less_parameters() {
assertFalse(hasMethod(name, new Class[0], type));
}
@Test
public void name_cannot_be_null() {
name = null;
try {
hasMethod(name, parameters, type);
fail();
} catch (NullPointerException e) {}
}
@Test
public void parameters_cannot_be_null() {
parameters = null;
try {
hasMethod(name, parameters, type);
fail();
} catch (NullPointerException e) {}
}
@Test
public void parameters_cannot_contain_null() {
parameters = new Class[] { null };
try {
hasMethod(name, parameters, type);
fail();
} catch (IllegalArgumentException e) {}
}
private static class Type {
@SuppressWarnings("unused")
public void method(Object o) {}
}
private static class OtherType {}
}