package bsh;
import bsh.ast.BSHBlock;
import junit.framework.Assert;
import org.junit.Test;
public class BshMethodTest {
/**
* Verifies that subclasses are not considered equal to superclass interfaces
* with a (potential) subset of the subclasses fields.
*/
@SuppressWarnings("serial")
@Test
public void testEqualsObject_subclassEquality() {
// define a simple subclass of BshMethod:
class SubMethod extends BshMethod {
public SubMethod(String name, Class returnType, String[] paramNames,
Class[] paramTypes, BSHBlock methodBody,
NameSpace declaringNameSpace, Modifiers modifiers) {
super(name, returnType, paramNames, paramTypes, methodBody,
declaringNameSpace, modifiers);
}
}
final String name = "testMethod";
final BshMethod subInst =
new SubMethod(name, Integer.class, new String[] {}, new Class[] {},
null, null, null);
final BshMethod supInst =
new BshMethod(name, Integer.class, new String[] {}, new Class[] {},
null, null, null);
Assert.assertFalse("Subclasses should not be equal to super classes",
supInst.equals(subInst));
}
/**
* Very simple test to verify hashcode contract.
*/
@Test
public void testHashCode_contract() {
final String name = "testMethod";
final BshMethod method1 = new BshMethod(name,
Integer.class, new String[]{}, new Class[]{}, null, null, null);
final BshMethod method2 = new BshMethod(name,
Integer.class, new String[]{}, new Class[]{}, null, null, null);
Assert.assertTrue("precondition check for test failed.",
method2.equals(method1));
Assert.assertEquals("Equal classes should have equal hashcodes",
method2.hashCode(), method1.hashCode());
}
}