package org.robobinding.binder;
import static com.google.common.collect.Lists.newArrayList;
import static org.mockito.Matchers.any;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never;
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.PendingAttributesForView;
import android.view.View;
/**
*
* @since 1.0
* @version $Revision: 1.0 $
* @author Robert Taylor
* @author Cheng Wei
*/
@RunWith(MockitoJUnitRunner.class)
public class BindingAttributeResolverTest {
@Mock
private ByBindingAttributeMappingsResolverFinder byBindingAttributeMappingsResolverFinder;
@Test
public void givenTwoCandidateResolvers_whenResolve_thenBothResolversShouldInvolveResolving() {
ByBindingAttributeMappingsResolver candidateResolver1 = mock(ByBindingAttributeMappingsResolver.class);
ByBindingAttributeMappingsResolver candidateResolver2 = mock(ByBindingAttributeMappingsResolver.class);
when(byBindingAttributeMappingsResolverFinder.findCandidates(any(View.class))).thenReturn(newArrayList(candidateResolver1, candidateResolver2));
BindingAttributeResolver bindingAttributeResolver = new BindingAttributeResolver(byBindingAttributeMappingsResolverFinder);
PendingAttributesForView pendingAttributesForView = mock(PendingAttributesForView.class);
when(pendingAttributesForView.isEmpty()).thenReturn(false);
bindingAttributeResolver.resolve(pendingAttributesForView);
verify(candidateResolver1).resolve(pendingAttributesForView);
verify(candidateResolver2).resolve(pendingAttributesForView);
}
@Test
public void givenTwoCandidateResolvers_whenResolveCompletedAtFirstResolver_thenSecondResolverShouldBeSkipped() {
ByBindingAttributeMappingsResolver candidateResolver1 = mock(ByBindingAttributeMappingsResolver.class);
ByBindingAttributeMappingsResolver candidateResolver2 = mock(ByBindingAttributeMappingsResolver.class);
when(byBindingAttributeMappingsResolverFinder.findCandidates(any(View.class))).thenReturn(newArrayList(candidateResolver1, candidateResolver2));
BindingAttributeResolver bindingAttributeResolver = new BindingAttributeResolver(byBindingAttributeMappingsResolverFinder);
PendingAttributesForView pendingAttributesForView = mock(PendingAttributesForView.class);
when(pendingAttributesForView.isEmpty()).thenReturn(true);
bindingAttributeResolver.resolve(pendingAttributesForView);
verify(candidateResolver1).resolve(pendingAttributesForView);
verify(candidateResolver2, never()).resolve(pendingAttributesForView);
}
}