package org.hotswap.agent.plugin.javabeans; import static org.junit.Assert.assertTrue; import java.beans.BeanInfo; import java.beans.Introspector; import java.beans.MethodDescriptor; import org.hotswap.agent.plugin.hotswapper.HotSwapper; import org.hotswap.agent.util.test.WaitHelper; import org.junit.Test; /** * JavaBeans plugin test * * See maven setup for javaagent and autohotswap settings. * * @author Vladimir Dvorak */ public class JavaBeansPluginTest { /** * Switch method implementation (using bean definition or interface). */ @Test public void hotswapServiceTest() throws Exception { BeanInfo beanInfo1 = Introspector.getBeanInfo(TestBean1.class); assertTrue(containsMethod(beanInfo1, "helloWorld1")); swapClasses(TestBean1.class, TestBean2.class.getName()); BeanInfo beanInfo2 = Introspector.getBeanInfo(TestBean1.class); assertTrue(!containsMethod(beanInfo2, "helloWorld1")); assertTrue(containsMethod(beanInfo2, "helloWorld2")); } private boolean containsMethod(BeanInfo beanInfo, String methodName) { MethodDescriptor[] methodDescriptors = beanInfo.getMethodDescriptors(); for (MethodDescriptor md: methodDescriptors) { if (md.getName().equals(methodName)) return true; } return false; } private void swapClasses(Class original, String swap) throws Exception { JavaBeansPlugin.reloadFlag = true; HotSwapper.swapClasses(original, swap); assertTrue(WaitHelper.waitForCommand(new WaitHelper.Command() { @Override public boolean result() throws Exception { return !JavaBeansPlugin.reloadFlag; } })); // TODO do not know why sleep is needed, maybe a separate thread in weld refresh? Thread.sleep(100); } }