package com.arondor.common.reflection.gwt.client.presenter; import java.util.ArrayList; import java.util.Collection; import java.util.List; import org.apache.log4j.Logger; import org.junit.Assert; import org.junit.Test; import org.mockito.ArgumentCaptor; import org.mockito.Matchers; import org.mockito.Mockito; import org.mockito.invocation.InvocationOnMock; import org.mockito.stubbing.Answer; import com.arondor.common.reflection.bean.java.AccessibleClassBean; import com.arondor.common.reflection.gwt.client.service.GWTReflectionServiceAsync; import com.arondor.common.reflection.model.config.ObjectConfigurationMap; import com.arondor.common.reflection.model.java.AccessibleClass; import com.google.gwt.user.client.rpc.AsyncCallback; public class TestDefaultImplementingClassPresenter { private static final Logger LOG = Logger.getLogger(TestDefaultImplementingClassPresenter.class); @Test public void testAbstractClass() { GWTReflectionServiceAsync rpcService = Mockito.mock(GWTReflectionServiceAsync.class); Mockito.doAnswer(new Answer<Void>() { @Override public Void answer(InvocationOnMock invocation) throws Throwable { String accessibleClassName = (String) invocation.getArguments()[0]; AsyncCallback<AccessibleClass> callback = (AsyncCallback<AccessibleClass>) invocation.getArguments()[1]; LOG.info("getAccessibleClass(" + accessibleClassName + ")"); AccessibleClassBean bean = new AccessibleClassBean(); bean.setName(accessibleClassName); callback.onSuccess(bean); return null; } }).when(rpcService).getAccessibleClass(Matchers.anyString(), Matchers.any(AsyncCallback.class)); Mockito.doAnswer(new Answer<Void>() { @Override public Void answer(InvocationOnMock invocation) throws Throwable { String accessibleClass = (String) invocation.getArguments()[0]; AsyncCallback<Collection<AccessibleClass>> callback = (AsyncCallback<Collection<AccessibleClass>>) invocation .getArguments()[1]; LOG.info("getImplementingAccessibleClasses(" + accessibleClass + ")"); List<AccessibleClass> classes = new ArrayList<AccessibleClass>(); { AccessibleClassBean bean1 = new AccessibleClassBean(); bean1.setName("com.arondor.testing.SomeAbstractClass"); bean1.setAbstract(true); bean1.setSuperclass("java.lang.Object"); classes.add(bean1); } { AccessibleClassBean bean1 = new AccessibleClassBean(); bean1.setName("com.arondor.testing.SomeConcreteClass"); bean1.setAbstract(false); bean1.setSuperclass("java.lang.Object"); classes.add(bean1); } callback.onSuccess(classes); return null; } }).when(rpcService).getImplementingAccessibleClasses(Matchers.anyString(), Matchers.any(AsyncCallback.class)); ObjectConfigurationMap objectConfigurationMap = null; String baseClassName = "java.lang.Object"; ImplementingClassPresenter.Display display = Mockito.mock(ImplementingClassPresenter.Display.class); DefaultImplementingClassPresenter presenter = new DefaultImplementingClassPresenter(rpcService, objectConfigurationMap, baseClassName, display); ArgumentCaptor<Collection> captor = ArgumentCaptor.forClass(Collection.class); Mockito.verify(display, Mockito.atLeastOnce()).setImplementingClasses(captor.capture()); List<String> result = (List<String>) captor.getValue(); Assert.assertEquals("Invalid result : " + result, 2, result.size()); Assert.assertEquals(null, result.get(0)); Assert.assertEquals("com.arondor.testing.SomeConcreteClass", result.get(1)); } }