package net.rdrei.android.scdl2.test; import android.app.Activity; import android.view.View; import android.view.ViewGroup; import android.widget.LinearLayout; import com.google.inject.AbstractModule; import com.google.inject.Inject; import net.rdrei.android.scdl2.ApplicationPreferences; import net.rdrei.android.scdl2.guice.ActivityLayoutInflater; import net.rdrei.android.scdl2.ui.AdViewManager; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.robolectric.Robolectric; import org.robolectric.RobolectricTestRunner; import roboguice.inject.ContextScope; import static org.hamcrest.CoreMatchers.is; import static org.junit.Assert.assertThat; @RunWith(RobolectricTestRunner.class) public class AdViewManagerTest { private boolean mAdFree = false; @Inject private AdViewManager mManager; private Activity mActivity; @Before public void setUp() { mActivity = Robolectric.buildActivity(Activity.class).create().get(); final ApplicationPreferences preferences = new ApplicationPreferences() { @Override public boolean isAdFree() { return mAdFree; } }; AbstractModule module = new AbstractModule() { @Override protected void configure() { bind(ApplicationPreferences.class).toInstance(preferences); bind(ActivityLayoutInflater.class).toInstance( new TestLayoutInflater(mActivity)); } }; final ContextScope contextScope = new ContextScope(Robolectric.application); contextScope.enter(mActivity); try { TestHelper.overridenInjector(this, module); } finally { contextScope.exit(mActivity); } } @Test public void doesntInjectWithAdFree() { mAdFree = true; assertThat(mManager.addToViewIfRequired(null), is(false)); } @Test public void doesInjectWithoutAdFree() { mAdFree = false; final LinearLayout layout = new LinearLayout(mActivity); assertThat(mManager.addToViewIfRequired(layout), is(true)); } private class TestLayoutInflater extends ActivityLayoutInflater { public TestLayoutInflater(Activity activity) { super(activity); } @Override public View inflate(int resource, ViewGroup root, boolean attachToRoot) { return new View(mActivity); } } }