package roboguice.inject;
import static org.hamcrest.core.IsEqual.equalTo;
import static org.junit.Assert.assertThat;
import java.util.concurrent.Callable;
import java.util.concurrent.Executors;
import java.util.concurrent.FutureTask;
import javax.inject.Inject;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.robolectric.Robolectric;
import org.robolectric.RobolectricTestRunner;
import roboguice.RoboGuice;
import roboguice.activity.RoboActivity;
import android.content.Context;
import android.os.Bundle;
@RunWith(RobolectricTestRunner.class)
public class ProviderTest {
@Test(expected = AssertionError.class)
public void shouldNotReturnProperContext() throws Exception {
final A a = Robolectric.buildActivity(A.class).create().get();
final B b = Robolectric.buildActivity(B.class).create().get();
final FutureTask<Context> future = new FutureTask<Context>(new Callable<Context>() {
@Override
public Context call() throws Exception {
return a.contextProvider.get(b);
}
});
Executors.newSingleThreadExecutor().execute(future);
assertThat(future.get(), equalTo((Context)a));
}
@Test
public void shouldReturnProperContext() throws Exception {
@SuppressWarnings("unused")
//noinspection UnusedDeclaration
final B b = Robolectric.buildActivity(B.class).create().get();
final C c = Robolectric.buildActivity(C.class).create().get();
final FutureTask<Context> future = new FutureTask<Context>(new Callable<Context>() {
@Override
public Context call() throws Exception {
return c.contextProvider.get(c);
}
});
Executors.newSingleThreadExecutor().execute(future);
assertThat(future.get(), equalTo((Context)c));
}
public static class A extends RoboActivity {
@Inject ContextScopedProvider<Context> contextProvider;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
}
public static class B extends RoboActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
}
public static class C extends RoboActivity {
@Inject ContextScopedProvider<Context> contextProvider;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
}
}