package org.hotswap.agent.annotation.handler;
import org.hotswap.agent.annotation.OnClassLoadEvent;
import org.hotswap.agent.config.PluginManager;
import org.hotswap.agent.config.PluginRegistry;
import org.hotswap.agent.testData.SimplePlugin;
import org.hotswap.agent.util.HotswapTransformer;
import org.jmock.Expectations;
import org.jmock.Mockery;
import org.jmock.lib.legacy.ClassImposteriser;
import org.junit.Test;
import java.lang.instrument.ClassFileTransformer;
import java.lang.reflect.Method;
import static junit.framework.Assert.assertTrue;
/**
* @author Jiri Bubnik
*/
public class OnClassLoadEventHandlerTest {
Mockery context = new Mockery() {{
setImposteriser(ClassImposteriser.INSTANCE);
}};
PluginManager pluginManager = context.mock(PluginManager.class);
PluginRegistry pluginRegistry = context.mock(PluginRegistry.class);
HotswapTransformer hotswapTransformer = context.mock(HotswapTransformer.class);
@Test
public void testInitMethod() throws Exception {
final ClassLoader appClassLoader = getClass().getClassLoader();
context.checking(new Expectations() {{
allowing(pluginManager).getHotswapTransformer(); will(returnValue(hotswapTransformer));
allowing(pluginManager).getPluginRegistry(); will(returnValue(pluginRegistry));
allowing(pluginRegistry).getAppClassLoader(with(any(Object.class))); will(returnValue(appClassLoader));
oneOf(hotswapTransformer).registerTransformer(with(appClassLoader),
with("org.hotswap.example.type"), with(any(ClassFileTransformer.class)));
}});
OnClassLoadedHandler onClassLoadedHandler = new OnClassLoadedHandler(pluginManager);
SimplePlugin simplePlugin = new SimplePlugin();
Method method = SimplePlugin.class.getMethod("transform");
PluginAnnotation<OnClassLoadEvent> pluginAnnotation = new PluginAnnotation<OnClassLoadEvent>(SimplePlugin.class,
simplePlugin, method.getAnnotation(OnClassLoadEvent.class), method);
assertTrue("Init successful",
onClassLoadedHandler.initMethod(pluginAnnotation));
}
@Test
public void testTransform() throws Exception {
}
}