package roboguice.application; import static org.hamcrest.CoreMatchers.equalTo; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertThat; import java.util.Random; import org.junit.Test; import org.junit.runner.RunWith; import org.robolectric.Robolectric; import org.robolectric.RobolectricTestRunner; import org.robolectric.res.builder.RobolectricPackageManager; import roboguice.RoboGuice; import com.google.inject.Inject; import android.app.Application; import android.content.Context; import android.content.pm.ApplicationInfo; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.os.Bundle; @RunWith(RobolectricTestRunner.class) public class ApplicationInjectionTest { private static final String TEST_PACKAGE_NAME = "org.robolectric.default"; @Test public void shouldBeAbleToInjectIntoApplication() { Robolectric.application = new AppA(); Robolectric.application.onCreate(); final AppA a = (AppA)Robolectric.application; assertNotNull(a.random); } @Test public void shouldBeAbleToInjectContextScopedItemsIntoApplication() { Robolectric.application = new AppB(); Robolectric.application.onCreate(); final AppB a = (AppB)Robolectric.application; assertThat( a.context, equalTo((Context)a) ); } public static class AppA extends Application { @Inject Random random; @Override public void onCreate() { super.onCreate(); RoboGuice.getInjector(this).injectMembers(this); } @Override public String getPackageName() { return TEST_PACKAGE_NAME; } @Override public PackageManager getPackageManager() { return new TestRobolectricPackageManager(); } } public static class AppB extends Application { @Inject Context context; @Override public void onCreate() { super.onCreate(); RoboGuice.getInjector(this).injectMembers(this); } @Override public String getPackageName() { return TEST_PACKAGE_NAME; } @Override public PackageManager getPackageManager() { return new TestRobolectricPackageManager(); } } public static class TestRobolectricPackageManager extends RobolectricPackageManager { @Override public ApplicationInfo getApplicationInfo(String packageName, int flags) throws NameNotFoundException { ApplicationInfo applicationInfo = new ApplicationInfo(); Bundle bundle = new Bundle(); bundle.putString("roboguice.annotations.packages", "roboguice,testroboguice"); applicationInfo.metaData = bundle ; return applicationInfo; } @Override public PackageInfo getPackageInfo(String packageName, int flags) throws NameNotFoundException { PackageInfo packageInfo = new PackageInfo(); packageInfo.packageName = TEST_PACKAGE_NAME; return packageInfo; } } }