package org.robobinding.viewattribute.property; import static org.mockito.Matchers.any; import static org.mockito.Mockito.doThrow; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.runners.MockitoJUnitRunner; import org.robobinding.BindingContext; import org.robobinding.viewattribute.ViewAttributeContractTest; /** * * @since 1.0 * @version $Revision: 1.0 $ * @author Robert Taylor */ @RunWith(MockitoJUnitRunner.class) public final class PropertyViewAttributeBinderTest extends ViewAttributeContractTest<PropertyViewAttributeBinder> { @Mock BindingContext bindingContext; @Mock AbstractBindingProperty bindingProperty; private PropertyViewAttributeBinder viewAttributeBinder; public void whenBindTo_thenBindingIsPerformed() { viewAttributeBinder = new PropertyViewAttributeBinder(bindingProperty, null); viewAttributeBinder.bindTo(bindingContext); verify(bindingProperty).performBind(bindingContext); } @Test public void givenAlwaysPreInitializingView_whenBindTo_thenPreInitializeTheViewToReflectTheValueModel() { when(bindingProperty.isAlwaysPreInitializingView()).thenReturn(true); viewAttributeBinder = new PropertyViewAttributeBinder(bindingProperty, null); viewAttributeBinder.bindTo(bindingContext); verify(bindingProperty).preInitializeView(bindingContext); } @Test public void givenAlwaysPreInitializingView_whenPreInitializeViewAfterBindTo_thenPreInitializingViewHappensOnceOnly() { when(bindingProperty.isAlwaysPreInitializingView()).thenReturn(true); viewAttributeBinder = new PropertyViewAttributeBinder(bindingProperty, null); viewAttributeBinder.bindTo(bindingContext); viewAttributeBinder.preInitializeView(bindingContext); verify(bindingProperty, times(1)).preInitializeView(bindingContext); } @Override protected PropertyViewAttributeBinder throwsExceptionDuringPreInitializingView() { doThrow(new RuntimeException()).when(bindingProperty).preInitializeView(any(BindingContext.class)); return new PropertyViewAttributeBinder(bindingProperty, null); } @Override protected PropertyViewAttributeBinder throwsExceptionDuringBinding() { doThrow(new RuntimeException()).when(bindingProperty).performBind(any(BindingContext.class)); return new PropertyViewAttributeBinder(bindingProperty, null); } }