package org.robobinding.widgetaddon;
import static org.hamcrest.Matchers.is;
import static org.junit.Assert.assertThat;
import static org.mockito.Mockito.mock;
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.viewattribute.ViewTag;
import org.robobinding.viewattribute.ViewTags;
import android.view.View;
/**
* @since 1.0
* @author Cheng Wei
*
*/
@RunWith(MockitoJUnitRunner.class)
public class ViewTagsBasedViewAddOnsTest {
@Mock
private ViewAddOnFactories factories;
@Test
public void givenViewAddOnNotSetOnTag_whenGetMostSuitable_thenReturnNewViewAddOn() {
View view = mock(View.class);
ViewAddOn newViewAddOn = mock(ViewAddOn.class);
when(factories.createViewAddOn(view)).thenReturn(newViewAddOn);
ViewTag<ViewAddOn> viewTag = viewTagHasValue(false);
ViewTags<ViewAddOn> viewTags = viewTagsFor(view, viewTag);
ViewTagsBasedViewAddOns viewAddOns = new ViewTagsBasedViewAddOns(factories, viewTags);
ViewAddOn actual = viewAddOns.getMostSuitable(view);
assertThat(actual, is(newViewAddOn));
}
private ViewTag<ViewAddOn> viewTagHasValue(boolean hasValue) {
@SuppressWarnings("unchecked")
ViewTag<ViewAddOn> viewTag = mock(ViewTag.class);
when(viewTag.has()).thenReturn(hasValue);
return viewTag;
}
private ViewTags<ViewAddOn> viewTagsFor(View view, ViewTag<ViewAddOn> viewTag) {
@SuppressWarnings("unchecked")
ViewTags<ViewAddOn> viewTags = mock(ViewTags.class);
when(viewTags.tagFor(view)).thenReturn(viewTag);
return viewTags;
}
@Test
public void givenViewAddOnSetOnTag_whenGetMostSuitable_thenReturnOldViewAddOn() {
View view = mock(View.class);
ViewAddOn oldViewAddOn = mock(ViewAddOn.class);
ViewTag<ViewAddOn> viewTag = viewTagHasValue(true);
when(viewTag.get()).thenReturn(oldViewAddOn);
ViewTags<ViewAddOn> viewTags = viewTagsFor(view, viewTag);
ViewTagsBasedViewAddOns viewAddOns = new ViewTagsBasedViewAddOns(factories, viewTags);
ViewAddOn actual = viewAddOns.getMostSuitable(view);
assertThat(actual, is(oldViewAddOn));
}
@Test
public void givenViewNotSupportTag_whenGetMostSuitable_thenReturnNewViewAddOn() {
Object viewNotSupportTag = mock(Object.class);
ViewAddOn newViewAddOn = mock(ViewAddOn.class);
when(factories.createViewAddOn(viewNotSupportTag)).thenReturn(newViewAddOn);
ViewTagsBasedViewAddOns viewAddOns = new ViewTagsBasedViewAddOns(factories, null);
ViewAddOn actual = viewAddOns.getMostSuitable(viewNotSupportTag);
assertThat(actual, is(newViewAddOn));
}
}