package com.wealthfront.magellan;
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.view.ViewGroup;
import org.junit.Before;
import org.junit.Test;
import org.mockito.Mock;
import static com.google.common.truth.Truth.assertThat;
import static java.util.Arrays.asList;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
import static org.mockito.MockitoAnnotations.initMocks;
public class ScreenGroupTest {
private DummyScreen screen1;
private DummyScreen screen2;
private DummyScreen screen3;
@Mock BaseScreenView<DummyScreen> view1;
@Mock BaseScreenView<DummyScreen> view2;
@Mock BaseScreenView<DummyScreen> view3;
@Mock BaseScreenView<ScreenGroup> screenGroupView;
@Mock Bundle bundle;
@Mock Context context;
@Mock Navigator navigator;
private ScreenGroup screenGroup;
@Before
public void setUp() {
initMocks(this);
screen1 = spy(new DummyScreen(view1));
screen2 = spy(new DummyScreen(view2));
screen3 = spy(new DummyScreen(view3));
screenGroup = new ScreenGroup(asList(screen1, screen2)) {
@Override
protected ViewGroup createView(Context context) {
return screenGroupView;
}
};
}
@Test
public void addScreen() {
screenGroup.addScreen(screen3);
assertThat(screenGroup.getScreens().size()).isEqualTo(3);
}
@Test
public void addScreen_emptyConstructor() {
screenGroup = new ScreenGroup() {
@Override
protected ViewGroup createView(Context context) {
return null;
}
};
screenGroup.addScreen(screen1);
}
@Test(expected = IllegalStateException.class)
public void addScreen_onCreateCalled() {
screen3.recreateView(new Activity(), navigator);
screenGroup.addScreen(screen3);
}
@Test(expected = IllegalStateException.class)
public void addScreen_thisOnCreateCalled() {
screenGroup.recreateView(new Activity(), navigator);
screenGroup.addScreen(screen3);
}
@Test
public void addScreens() {
screenGroup = new ScreenGroup() {
@Override
protected ViewGroup createView(Context context) {
return null;
}
};
screenGroup.addScreens(asList(screen1, screen2));
}
@Test(expected = IllegalStateException.class)
public void addScreens_thisOnCreateCalled() {
screenGroup.recreateView(new Activity(), navigator);
screenGroup.addScreens(asList(screen3));
}
@Test(expected = IllegalStateException.class)
public void addScreens_onCreateCalled() {
screen3.recreateView(new Activity(), navigator);
screenGroup.addScreens(asList(screen3));
}
@Test
public void onShow() {
screenGroup.onShow(context);
verify(screen1).onShow(context);
verify(screen2).onShow(context);
}
@Test
public void onRestore() {
screenGroup.onRestore(bundle);
verify(screen1).onRestore(bundle);
verify(screen2).onRestore(bundle);
}
@Test
public void onResume() {
screenGroup.onResume(context);
verify(screen1).onResume(context);
verify(screen2).onResume(context);
}
@Test
public void onPause() {
screenGroup.onPause(context);
verify(screen1).onPause(context);
verify(screen2).onPause(context);
}
@Test
public void onSave() {
screenGroup.onSave(bundle);
verify(screen1).onSave(bundle);
verify(screen2).onSave(bundle);
}
@Test
public void onHide() {
screenGroup.onHide(context);
verify(screen1).onHide(context);
verify(screen2).onHide(context);
assertThat(screen1.getDialog()).isNull();
assertThat(screen1.getView()).isNull();
assertThat(screen2.getDialog()).isNull();
assertThat(screen2.getView()).isNull();
}
private static class DummyScreen extends Screen<BaseScreenView<DummyScreen>> {
private BaseScreenView<DummyScreen> view;
DummyScreen(BaseScreenView<DummyScreen> view) {
this.view = view;
setView(view);
}
@Override
protected BaseScreenView<DummyScreen> createView(Context context) {
return view;
}
}
}