/*
* 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.app;
import android.content.Intent;
import android.os.Bundle;
import android.os.PersistableBundle;
import com.raycoarana.baindo.Baindo;
import com.raycoarana.baindo.BinderDelegate;
import com.raycoarana.baindo.test.UnitTestSuite;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.powermock.api.mockito.PowerMockito;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
@RunWith(PowerMockRunner.class)
@PrepareForTest({Baindo.class, BinderDelegate.class})
public class BaindoActivityTest extends UnitTestSuite {
@Mock
private BinderDelegate mBinderDelegate;
@Mock
private Intent mNewIntent;
@Mock
private Bundle mState;
private BaindoActivity mBaindoActivity;
@Test
public void shouldInstanceBaindoDelegateOnCreate() {
givenABinderDelegate();
givenABaindoActivity();
whenOnCreate();
thenANewBinderDelegateIsCreated();
}
@Test
public void shouldInstanceBaindoDelegateOnCreateWithPersistableBundle() {
givenABinderDelegate();
givenABaindoActivity();
whenOnCreateWithPersistableBundle();
thenANewBinderDelegateIsCreated();
}
@Test
public void shouldDelegateBind() {
givenABinderDelegate();
givenABaindoActivity();
whenOnCreate();
whenBind();
thenBindIsDelegated();
}
@Test
public void shouldDelegateUnbind() {
givenABinderDelegate();
givenABaindoActivity();
whenOnCreate();
whenUnbind();
thenUnbindIsDelegated();
}
@Test
public void shouldDelegateOnStart() {
givenABinderDelegate();
givenABaindoActivity();
whenOnCreate();
whenOnStart();
thenOnStartIsDelegated();
}
@Test
public void shouldDelegateOnResume() {
givenABinderDelegate();
givenABaindoActivity();
whenOnCreate();
whenOnResume();
thenOnResumeIsDelegated();
}
@Test
public void shouldDelegateOnPause() {
givenABinderDelegate();
givenABaindoActivity();
whenOnCreate();
whenOnPause();
thenOnPauseIsDelegated();
}
@Test
public void shouldDelegateOnStop() {
givenABinderDelegate();
givenABaindoActivity();
whenOnCreate();
whenOnStop();
thenOnStopIsDelegated();
}
@Test
public void shouldDelegateOnNewIntent() {
givenABinderDelegate();
givenABaindoActivity();
whenOnCreate();
whenOnNewIntent();
thenOnNewIntentIsDelegated();
}
@Test
public void shouldDelegateOnSaveInstanceState() {
givenABinderDelegate();
givenABaindoActivity();
whenOnCreate();
whenOnSaveInstanceState();
thenOnSaveInstanceStateIsDelegated();
}
@Test
public void shouldDestroyBaindoOnDestroy() {
givenABinderDelegate();
givenABaindoActivity();
whenOnCreate();
whenOnDestroy();
thenBinderDelegateIsDestroyed();
}
private void givenABinderDelegate() {
PowerMockito.mockStatic(Baindo.class);
PowerMockito.when(Baindo.buildBinderDelegate()).thenReturn(mBinderDelegate);
}
private void givenABaindoActivity() {
mBaindoActivity = new BaindoActivity();
}
private void whenOnCreate() {
mBaindoActivity.onCreate(mock(Bundle.class));
}
private void whenOnCreateWithPersistableBundle() {
mBaindoActivity.onCreate(mock(Bundle.class), mock(PersistableBundle.class));
}
private void whenOnStart() {
mBaindoActivity.onStart();
}
private void whenOnStop() {
mBaindoActivity.onStop();
}
private void whenOnPause() {
mBaindoActivity.onPause();
}
private void whenOnResume() {
mBaindoActivity.onResume();
}
private void whenOnNewIntent() {
mBaindoActivity.onNewIntent(mNewIntent);
}
private void whenOnSaveInstanceState() {
mBaindoActivity.onSaveInstanceState(mState);
}
private void whenOnDestroy() {
mBaindoActivity.onDestroy();
}
private void whenBind() {
mBaindoActivity.bind();
}
private void whenUnbind() {
mBaindoActivity.unbind();
}
private void thenANewBinderDelegateIsCreated() {
PowerMockito.verifyStatic();
Baindo.buildBinderDelegate();
}
private void thenBinderDelegateIsDestroyed() {
verify(mBinderDelegate).onDestroy();
}
private void thenBindIsDelegated() {
verify(mBinderDelegate).bind(mBaindoActivity);
}
private void thenUnbindIsDelegated() {
verify(mBinderDelegate).unbind();
}
private void thenOnStartIsDelegated() {
verify(mBinderDelegate).onStart();
}
private void thenOnStopIsDelegated() {
verify(mBinderDelegate).onStop();
}
private void thenOnResumeIsDelegated() {
verify(mBinderDelegate).onResume();
}
private void thenOnPauseIsDelegated() {
verify(mBinderDelegate).onPause();
}
private void thenOnNewIntentIsDelegated() {
verify(mBinderDelegate).onNewIntent(mNewIntent);
}
private void thenOnSaveInstanceStateIsDelegated() {
verify(mBinderDelegate).onSaveInstanceState(mState);
}
}