/*
* Copyright (c) MuleSoft, Inc. All rights reserved. http://www.mulesoft.com
* The software in this package is published under the terms of the CPAL v1.0
* license, a copy of which has been included with this distribution in the
* LICENSE.txt file.
*/
package org.mule.runtime.core.api.model.resolvers;
import static org.junit.Assert.assertEquals;
import static org.mockito.Mockito.mock;
import org.mule.runtime.core.api.Event;
import org.mule.runtime.core.api.MuleEventContext;
import org.mule.runtime.core.api.model.InvocationResult;
import org.mule.tck.junit4.AbstractMuleTestCase;
import java.lang.reflect.Method;
import junit.framework.AssertionFailedError;
import org.junit.Test;
public class EntryPointResolverMethodCacheTestCase extends AbstractMuleTestCase {
private static final String METHOD = "aMethod";
@Test
public void testMethodCaching() throws Exception {
Method method = this.getClass().getMethod(METHOD, new Class[] {String.class});
Method anotherMethod = AnotherClass.class.getMethod(METHOD, new Class[] {String.class});
MuleEventContext eventContext = mock(MuleEventContext.class);
MockEntryPointResolver epResolver = new MockEntryPointResolver();
epResolver.addMethodByName(this, method, eventContext);
Method method1 = epResolver.getMethodByName(this, METHOD, eventContext);
assertEquals(method, method1);
assertEquals(this.getClass(), method1.getDeclaringClass());
AnotherClass anotherObject = new AnotherClass();
epResolver.addMethodByName(anotherObject, anotherMethod, eventContext);
Method anotherMethod1 = epResolver.getMethodByName(anotherObject, METHOD, eventContext);
assertEquals(anotherMethod, anotherMethod1);
assertEquals(AnotherClass.class, anotherMethod.getDeclaringClass());
}
public void aMethod(String payload) {
// this method exists only for being cached in the test
}
private static class MockEntryPointResolver extends AbstractEntryPointResolver {
public InvocationResult invoke(Object component, MuleEventContext context, Event.Builder eventBuilder) throws Exception {
throw new AssertionFailedError("do not invoke this method");
}
}
private static class AnotherClass {
public void aMethod(String payload) {
// this method exists only for being cached in the test
}
}
}