package org.robobinding.viewattribute.event; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import org.junit.Before; import org.junit.Ignore; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.Mockito; import org.mockito.runners.MockitoJUnitRunner; import org.robobinding.BindingContext; import org.robobinding.attribute.Command; import org.robobinding.attribute.EventAttribute; import org.robobinding.viewattribute.ViewAttributeContractTest; import org.robobinding.widgetaddon.ViewAddOn; /** * * @since 1.0 * @version $Revision: 1.0 $ * @author Robert Taylor */ @RunWith(MockitoJUnitRunner.class) public final class EventViewAttributeBinderTest extends ViewAttributeContractTest<EventViewAttributeBinder> { @Mock private BindingContext bindingContext; @Mock private Object view; @Mock private ViewAddOn viewAddOn; @Mock private EventViewAttribute<Object, ViewAddOn> viewAttribute; @Mock private EventAttribute attribute; private EventViewAttributeBinder viewAttributeBinder; @Before public void setUp() { viewAttributeBinder = new EventViewAttributeBinder(view, viewAddOn, viewAttribute, attribute); } @Test public void givenAMatchingCommandWithArgs_whenBinding_thenBindWithTheCommand() { Command commandWithArgs = mock(Command.class); Mockito.<Class<?>> when(viewAttribute.getEventType()).thenReturn(EventType.class); when(attribute.findCommand(bindingContext, EventType.class)).thenReturn(commandWithArgs); viewAttributeBinder.bindTo(bindingContext); verify(viewAttribute).bind(viewAddOn, commandWithArgs, view); } @Test public void givenAMatchingCommandWithNoArgs_whenBinding_thenBindWithTheCommand() { Command commandWithNoArgs = mock(Command.class); when(attribute.findCommand(bindingContext)).thenReturn(commandWithNoArgs); viewAttributeBinder.bindTo(bindingContext); verify(viewAttribute).bind(viewAddOn, commandWithNoArgs, view); } @Override protected EventViewAttributeBinder throwsExceptionDuringBinding() { return new ExceptionDuringBinding(attribute); } private static class ExceptionDuringBinding extends EventViewAttributeBinder { public ExceptionDuringBinding(EventAttribute attribute) { super(null, null, null, attribute); } @Override void performBind(BindingContext context) { throw new RuntimeException(); } } @Test@Ignore("as PreInitializingView is not supported by event attribute") @Override public void whenAnExceptionIsThrownDuringPreInitializingView_thenCatchAndRethrowAsBindingException() { } @Override protected EventViewAttributeBinder throwsExceptionDuringPreInitializingView() { throw new UnsupportedOperationException(); } public static class EventType{} }