/*
* Copyright 2015 Rayco AraƱa
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.raycoarana.baindo;
import com.raycoarana.baindo.binding.BindToTarget;
import com.raycoarana.baindo.binding.FinalBindTarget;
import com.raycoarana.baindo.binding.UIAction;
import com.raycoarana.baindo.binding.ViewToBindSelector;
import com.raycoarana.baindo.events.OnCreateEventBind;
import com.raycoarana.baindo.events.OnDestroyEventBind;
import com.raycoarana.baindo.events.OnPauseEventBind;
import com.raycoarana.baindo.events.OnResumeEventBind;
import com.raycoarana.baindo.events.OnStartEventBind;
import com.raycoarana.baindo.events.OnStopEventBind;
import com.raycoarana.baindo.intent.IntentActionBind;
import com.raycoarana.baindo.intent.IntentBind;
import com.raycoarana.baindo.intent.IntentDataBind;
import com.raycoarana.baindo.intent.IntentExtraBind;
import com.raycoarana.baindo.intent.IntentTypeBind;
import com.raycoarana.baindo.properties.CheckedBind;
import com.raycoarana.baindo.properties.ClickToCommandBind;
import com.raycoarana.baindo.properties.EnabledBind;
import com.raycoarana.baindo.properties.InvisibilityBind;
import com.raycoarana.baindo.properties.LongClickToCommandBind;
import com.raycoarana.baindo.properties.ProgressBind;
import com.raycoarana.baindo.properties.SelectedIndexBind;
import com.raycoarana.baindo.properties.TextBind;
import com.raycoarana.baindo.properties.UIActionBind;
import com.raycoarana.baindo.properties.VisibilityBind;
import com.raycoarana.baindo.renderer.AdapterBind;
import com.raycoarana.baindo.renderer.AdapterFactory;
import com.raycoarana.baindo.state.StateBind;
import com.raycoarana.baindo.test.UnitTestSuite;
import org.junit.Test;
import org.mockito.Mock;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.core.IsInstanceOf.instanceOf;
import static org.mockito.Matchers.any;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
public class BaindoBinderTest extends UnitTestSuite {
private static final String SOME_KEY = "some_key";
@Mock
private BinderDelegate mBinderDelegate;
@Mock
private WorkDispatcher mWorkDispatcher;
@Mock
private BindableSource mBindableSource;
@Mock
private Unbindable mSourceOfBind;
@Mock
private UnbindableCollector mUnbindableCollector;
@Mock
private UnbindableCollectorProvider mUnbindableCollectorProvider;
@Mock
private LifecycleBinderCollector mLifecycleBinderCollector;
private BaindoBinder mBaindoBinder;
private ViewToBindSelector<?, ?> mViewToBindSelector;
private BindToTarget<?, ?> mBindToTarget;
private FinalBindTarget<?> mFinalBindTarget;
@Test
public void shouldBuildAnIsCheckedBind() {
givenABaindoBinder();
whenIsChecked();
thenAnIsCheckedBindIsBuilt();
}
@Test
public void shouldBuildAnEnabledBind() {
givenABaindoBinder();
whenEnabled();
thenAnEnabledBindIsBuilt();
}
@Test
public void shouldBuildAnVisibilityBind() {
givenABaindoBinder();
whenVisibility();
thenAVisibilityBindIsBuilt();
}
@Test
public void shouldBuildAnInvisibilityBind() {
givenABaindoBinder();
whenInvisibility();
thenAnInvisibilityBindIsBuilt();
}
@Test
public void shouldBuildAClickBind() {
givenABaindoBinder();
whenClick();
thenAClickBindIsBuilt();
}
@Test
public void shouldBuildALongClickBind() {
givenABaindoBinder();
whenLongClick();
thenALongClickBindIsBuilt();
}
@Test
public void shouldBuildAProgressBind() {
givenABaindoBinder();
whenProgress();
thenAProgressBindIsBuilt();
}
@Test
public void shouldBuildATextBind() {
givenABaindoBinder();
whenText();
thenATextBindIsBuilt();
}
@Test
public void shouldBuildAnUIActionBind() {
givenABaindoBinder();
whenUIAction();
thenAnUIActionBindIsBuilt();
}
@Test
public void shouldBuildAnAdapterWithFactoryBind() {
givenABaindoBinder();
whenAdapterWithFactory();
thenAnAdapterWithFactoryBindIsBuilt();
}
@Test
public void shouldBuildASelectedIndexBind() {
givenABaindoBinder();
whenSelectedIndex();
thenASelectedIndexBindIsBuilt();
}
@Test
public void shouldBuildAIntentActionBind() {
givenABaindoBinder();
whenIntentActionBind();
thenAnIntentActionBindIsBuilt();
}
@Test
public void shouldBuildAIntentDataBind() {
givenABaindoBinder();
whenIntentDataBind();
thenAnIntentDataBindIsBuilt();
}
@Test
public void shouldBuildAIntentTypeBind() {
givenABaindoBinder();
whenIntentTypeBind();
thenAnIntentTypeBindIsBuilt();
}
@Test
public void shouldBuildAIntentExtraBind() {
givenABaindoBinder();
whenIntentExtraBind();
thenAnIntentExtraBindIsBuilt();
}
@Test
public void shouldBuildAStateBind() {
givenABaindoBinder();
whenStateBind();
thenAStateBindIsBuilt();
}
@Test
public void shouldBuildOnCreateBind() {
givenABaindoBinder();
whenOnCreateBind();
thenAnOnCreateBindIsBuilt();
}
@Test
public void shouldBuildOnDestroyBind() {
givenABaindoBinder();
whenOnDestroyBind();
thenAnOnDestroyBindIsBuilt();
}
@Test
public void shouldBuildOnStartBind() {
givenABaindoBinder();
whenOnStartBind();
thenAnOnStartBindIsBuilt();
}
@Test
public void shouldBuildOnStopBind() {
givenABaindoBinder();
whenOnStopBind();
thenAnOnStopBindIsBuilt();
}
@Test
public void shouldBuildOnResumeBind() {
givenABaindoBinder();
whenOnResumeBind();
thenAnOnResumeBindIsBuilt();
}
@Test
public void shouldBuildOnPauseBind() {
givenABaindoBinder();
whenOnPauseBind();
thenAnOnPauseBindIsBuilt();
}
@SuppressWarnings("unchecked")
private void givenABaindoBinder() {
when(mUnbindableCollector.collect(any(Unbindable.class))).thenAnswer(answerWithFirstArgument());
when(mLifecycleBinderCollector.collect(any(IntentBind.class))).thenAnswer(answerWithFirstArgument());
when(mLifecycleBinderCollector.collect(any(StateBind.class))).thenAnswer(answerWithFirstArgument());
when(mLifecycleBinderCollector.collect(any(OnCreateEventBind.class))).thenAnswer(answerWithFirstArgument());
when(mLifecycleBinderCollector.collect(any(OnDestroyEventBind.class))).thenAnswer(answerWithFirstArgument());
when(mLifecycleBinderCollector.collect(any(OnStartEventBind.class))).thenAnswer(answerWithFirstArgument());
when(mLifecycleBinderCollector.collect(any(OnStopEventBind.class))).thenAnswer(answerWithFirstArgument());
when(mLifecycleBinderCollector.collect(any(OnResumeEventBind.class))).thenAnswer(answerWithFirstArgument());
when(mLifecycleBinderCollector.collect(any(OnPauseEventBind.class))).thenAnswer(answerWithFirstArgument());
mBaindoBinder = new BaindoBinder(mBindableSource,
mWorkDispatcher,
mBinderDelegate,
mUnbindableCollector,
mUnbindableCollectorProvider,
mLifecycleBinderCollector);
}
private void whenIsChecked() {
mViewToBindSelector = mBaindoBinder.isChecked();
}
private void whenEnabled() {
mViewToBindSelector = mBaindoBinder.enabled();
}
private void whenVisibility() {
mViewToBindSelector = mBaindoBinder.visibility();
}
private void whenInvisibility() {
mViewToBindSelector = mBaindoBinder.invisibility();
}
private void whenClick() {
mViewToBindSelector = mBaindoBinder.click();
}
private void whenLongClick() {
mViewToBindSelector = mBaindoBinder.longClick();
}
private void whenProgress() {
mViewToBindSelector = mBaindoBinder.progress();
}
private void whenText() {
mViewToBindSelector = mBaindoBinder.text();
}
@SuppressWarnings("unchecked")
private void whenUIAction() {
mBindToTarget = mBaindoBinder.uiAction(mock(UIAction.class));
}
@SuppressWarnings("unchecked")
private void whenAdapterWithFactory() {
mViewToBindSelector = mBaindoBinder.adapterWithFactory(mock(AdapterFactory.class));
}
private void whenSelectedIndex() {
mViewToBindSelector = mBaindoBinder.selectedIndex();
}
private void whenIntentActionBind() {
mFinalBindTarget = mBaindoBinder.intentAction();
}
private void whenIntentDataBind() {
mFinalBindTarget = mBaindoBinder.intentData();
}
private void whenIntentTypeBind() {
mFinalBindTarget = mBaindoBinder.intentType();
}
private void whenIntentExtraBind() {
mFinalBindTarget = mBaindoBinder.intentExtraWithKey(SOME_KEY);
}
private void whenStateBind() {
mFinalBindTarget = mBaindoBinder.stateWithKey(SOME_KEY);
}
private void whenOnCreateBind() {
mFinalBindTarget = mBaindoBinder.onCreate();
}
private void whenOnDestroyBind() {
mFinalBindTarget = mBaindoBinder.onDestroy();
}
private void whenOnStartBind() {
mFinalBindTarget = mBaindoBinder.onStart();
}
private void whenOnStopBind() {
mFinalBindTarget = mBaindoBinder.onStop();
}
private void whenOnResumeBind() {
mFinalBindTarget = mBaindoBinder.onResume();
}
private void whenOnPauseBind() {
mFinalBindTarget = mBaindoBinder.onPause();
}
private void thenAnIsCheckedBindIsBuilt() {
verifyViewToBindSelectorIsCollected();
assertThat(mViewToBindSelector, instanceOf(CheckedBind.class));
}
private void thenAnEnabledBindIsBuilt() {
verifyViewToBindSelectorIsCollected();
assertThat(mViewToBindSelector, instanceOf(EnabledBind.class));
}
private void thenAVisibilityBindIsBuilt() {
verifyViewToBindSelectorIsCollected();
assertThat(mViewToBindSelector, instanceOf(VisibilityBind.class));
}
private void thenAnInvisibilityBindIsBuilt() {
verifyViewToBindSelectorIsCollected();
assertThat(mViewToBindSelector, instanceOf(InvisibilityBind.class));
}
private void thenAClickBindIsBuilt() {
verifyViewToBindSelectorIsCollected();
assertThat(mViewToBindSelector, instanceOf(ClickToCommandBind.class));
}
private void thenALongClickBindIsBuilt() {
verifyViewToBindSelectorIsCollected();
assertThat(mViewToBindSelector, instanceOf(LongClickToCommandBind.class));
}
private void thenAProgressBindIsBuilt() {
verifyViewToBindSelectorIsCollected();
assertThat(mViewToBindSelector, instanceOf(ProgressBind.class));
}
private void thenATextBindIsBuilt() {
verifyViewToBindSelectorIsCollected();
assertThat(mViewToBindSelector, instanceOf(TextBind.class));
}
private void thenAnUIActionBindIsBuilt() {
verifyBindTargetIsCollected();
assertThat(mBindToTarget, instanceOf(UIActionBind.class));
}
private void thenAnAdapterWithFactoryBindIsBuilt() {
verifyViewToBindSelectorIsCollected();
assertThat(mViewToBindSelector, instanceOf(AdapterBind.class));
}
private void thenASelectedIndexBindIsBuilt() {
verifyViewToBindSelectorIsCollected();
assertThat(mViewToBindSelector, instanceOf(SelectedIndexBind.class));
}
private void thenAnIntentActionBindIsBuilt() {
verifyFinalBindTargetIsCollected();
assertThat(mFinalBindTarget, instanceOf(IntentActionBind.class));
}
private void thenAnIntentDataBindIsBuilt() {
verifyFinalBindTargetIsCollected();
assertThat(mFinalBindTarget, instanceOf(IntentDataBind.class));
}
private void thenAnIntentTypeBindIsBuilt() {
verifyFinalBindTargetIsCollected();
assertThat(mFinalBindTarget, instanceOf(IntentTypeBind.class));
}
private void thenAnIntentExtraBindIsBuilt() {
verifyFinalBindTargetIsCollected();
assertThat(mFinalBindTarget, instanceOf(IntentExtraBind.class));
}
private void verifyFinalBindTargetIsCollected() {
if(mBindToTarget instanceof Unbindable) {
verify(mUnbindableCollector).collect((Unbindable) mFinalBindTarget);
}
}
private void verifyBindTargetIsCollected() {
if(mBindToTarget instanceof Unbindable) {
verify(mUnbindableCollector).collect((Unbindable) mBindToTarget);
}
}
private void verifyViewToBindSelectorIsCollected() {
if(mViewToBindSelector instanceof Unbindable) {
verify(mUnbindableCollector).collect((Unbindable) mViewToBindSelector);
}
}
private void thenAStateBindIsBuilt() {
verifyFinalBindTargetIsCollected();
assertThat(mFinalBindTarget, instanceOf(StateBind.class));
}
private void thenAnOnCreateBindIsBuilt() {
verifyFinalBindTargetIsCollected();
assertThat(mFinalBindTarget, instanceOf(OnCreateEventBind.class));
}
private void thenAnOnDestroyBindIsBuilt() {
verifyFinalBindTargetIsCollected();
assertThat(mFinalBindTarget, instanceOf(OnDestroyEventBind.class));
}
private void thenAnOnStartBindIsBuilt() {
verifyFinalBindTargetIsCollected();
assertThat(mFinalBindTarget, instanceOf(OnStartEventBind.class));
}
private void thenAnOnStopBindIsBuilt() {
verifyFinalBindTargetIsCollected();
assertThat(mFinalBindTarget, instanceOf(OnStopEventBind.class));
}
private void thenAnOnResumeBindIsBuilt() {
verifyFinalBindTargetIsCollected();
assertThat(mFinalBindTarget, instanceOf(OnResumeEventBind.class));
}
private void thenAnOnPauseBindIsBuilt() {
verifyFinalBindTargetIsCollected();
assertThat(mFinalBindTarget, instanceOf(OnPauseEventBind.class));
}
}