package org.jboss.tools.hibernate.runtime.v_5_0.internal; import java.lang.reflect.Method; import java.util.Hashtable; import java.util.Properties; import org.hibernate.tool.hbm2x.Hbm2DDLExporter; import org.jboss.tools.hibernate.runtime.common.AbstractHbm2DDLExporterFacade; import org.jboss.tools.hibernate.runtime.common.IFacadeFactory; import org.jboss.tools.hibernate.runtime.spi.IHbm2DDLExporter; import org.junit.Assert; import org.junit.Before; import org.junit.Test; import javassist.util.proxy.MethodHandler; import javassist.util.proxy.ProxyFactory; import javassist.util.proxy.ProxyObject; public class Hbm2DDLExporterFacadeTest { private static final IFacadeFactory FACADE_FACTORY = new FacadeFactoryImpl(); private IHbm2DDLExporter hbm2DDLExporterFacade = null; private Hbm2DDLExporter hbm2ddlExporter = null; private String methodName = null; private Object[] arguments = null; @Before public void setUp() throws Exception { ProxyFactory proxyFactory = new ProxyFactory(); proxyFactory.setSuperclass(Hbm2DDLExporter.class); Class<?> proxyClass = proxyFactory.createClass(); hbm2ddlExporter = (Hbm2DDLExporter)proxyClass.newInstance(); ((ProxyObject)hbm2ddlExporter).setHandler(new MethodHandler() { @Override public Object invoke( Object self, Method m, Method proceed, Object[] args) throws Throwable { if (methodName == null) { methodName = m.getName(); } if (arguments == null) { arguments = args; } return proceed.invoke(self, args); } }); hbm2DDLExporterFacade = new AbstractHbm2DDLExporterFacade(FACADE_FACTORY, hbm2ddlExporter) {}; reset(); } @Test public void testSetExport() { hbm2DDLExporterFacade.setExport(true); Assert.assertEquals("setExport", methodName); Assert.assertArrayEquals(new Object[] { true }, arguments); } @Test public void testGetProperties() { Hashtable<Object, Object> first = new Properties(); hbm2ddlExporter.setProperties((Properties)first); reset(); Hashtable<Object, Object> second = hbm2DDLExporterFacade.getProperties(); Assert.assertEquals("getProperties", methodName); Assert.assertArrayEquals(new Object[] {}, arguments); Assert.assertSame(first, second); } private void reset() { methodName = null; arguments = null; } }