package org.hotswap.agent; import org.hotswap.agent.annotation.handler.AnnotationProcessor; import org.hotswap.agent.config.PluginManager; import org.hotswap.agent.config.PluginRegistry; import org.hotswap.agent.testData.SimplePlugin; import org.hotswap.agent.util.scanner.ClassPathAnnotationScanner; 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.instrument.Instrumentation; import java.util.Collections; import static junit.framework.Assert.assertEquals; import static junit.framework.Assert.assertTrue; /** * @author Jiri Bubnik */ public class PluginManagerTest { Mockery context = new Mockery() {{ setImposteriser(ClassImposteriser.INSTANCE); }}; ClassPathAnnotationScanner annotationScanner = context.mock(ClassPathAnnotationScanner.class); AnnotationProcessor annotationProcessor = context.mock(AnnotationProcessor.class); Instrumentation instrumentation = context.mock(Instrumentation.class); @Test public void testInit() throws Exception { PluginManager pluginManager = PluginManager.getInstance(); context.checking(new Expectations() {{ allowing(instrumentation).addTransformer(with(any(ClassFileTransformer.class))); allowing(annotationScanner).scanPlugins(with(any(ClassLoader.class)), with(any(String.class))); will(returnValue(Collections.singletonList(SimplePlugin.class.getName()))); allowing(annotationProcessor).processAnnotations(with(any(Class.class)), with(any(Class.class))); will(returnValue(true)); }}); PluginRegistry pluginRegistry = pluginManager.getPluginRegistry(); pluginRegistry.setAnnotationScanner(annotationScanner); pluginRegistry.setAnnotationProcessor(annotationProcessor); pluginManager.init(instrumentation); assertEquals("Plugin registered", pluginRegistry.getRegisteredPlugins().size(), 1); assertTrue("Plugin correct class", pluginRegistry.getRegisteredPlugins().keySet().iterator().next().equals(SimplePlugin.class)); } }