package org.jboss.tools.hibernate.runtime.v_3_6.internal; import java.lang.reflect.Method; import org.hibernate.tool.hbm2x.GenericExporter; import org.jboss.tools.hibernate.runtime.common.AbstractGenericExporterFacade; import org.jboss.tools.hibernate.runtime.common.IFacadeFactory; import org.jboss.tools.hibernate.runtime.spi.IGenericExporter; import org.junit.Assert; import org.junit.Before; import org.junit.Test; import net.sf.cglib.proxy.Enhancer; import net.sf.cglib.proxy.MethodInterceptor; import net.sf.cglib.proxy.MethodProxy; public class GenericExporterFacadeTest { private static final IFacadeFactory FACADE_FACTORY = new FacadeFactoryImpl(); private IGenericExporter genericExporterFacade = null; private GenericExporter genericExporter = null; private String methodName = null; private Object[] arguments = null; @Before public void setUp() throws Exception { Enhancer enhancer = new Enhancer(); enhancer.setSuperclass(GenericExporter.class); enhancer.setCallback(new MethodInterceptor() { @Override public Object intercept( Object obj, Method method, Object[] args, MethodProxy proxy) throws Throwable { if (methodName == null) { methodName = method.getName(); } if (arguments == null) { arguments = args; } return proxy.invokeSuper(obj, args); } }); genericExporter = (GenericExporter)enhancer.create(); genericExporterFacade = new AbstractGenericExporterFacade(FACADE_FACTORY, genericExporter) {}; reset(); } @Test public void testSetFilePattern() { genericExporter.setFilePattern("barfoo"); Assert.assertEquals("barfoo", genericExporter.getFilePattern()); reset(); genericExporterFacade.setFilePattern("foobar"); Assert.assertEquals("setFilePattern", methodName); Assert.assertArrayEquals(new Object[] { "foobar" }, arguments); Assert.assertEquals("foobar", genericExporter.getFilePattern()); } @Test public void testSetTemplate() { genericExporter.setTemplateName("barfoo"); Assert.assertEquals("barfoo", genericExporter.getTemplateName()); reset(); genericExporterFacade.setTemplateName("foobar"); Assert.assertEquals("setTemplateName", methodName); Assert.assertArrayEquals(new Object[] { "foobar" }, arguments); Assert.assertEquals("foobar", genericExporter.getTemplateName()); } @Test public void testSetForEach() { genericExporterFacade.setForEach("foobar"); Assert.assertEquals("setForEach", methodName); Assert.assertArrayEquals(new Object[] { "foobar" }, arguments); } @Test public void testGetFilePattern() { genericExporter.setFilePattern("foobar"); reset(); Assert.assertEquals("foobar", genericExporterFacade.getFilePattern()); Assert.assertEquals("getFilePattern", methodName); Assert.assertArrayEquals(new Object[] {}, arguments); } @Test public void testGetTemplateName() { genericExporter.setTemplateName("foobar"); reset(); Assert.assertEquals("foobar", genericExporterFacade.getTemplateName()); Assert.assertEquals("getTemplateName", methodName); Assert.assertArrayEquals(new Object[] {}, arguments); } private void reset() { methodName = null; arguments = null; } }