blob: a7859d95a157cc99950317c3c0112d67159fe51b [file] [log] [blame]
package com.xtremelabs.robolectric;
import static com.xtremelabs.robolectric.Robolectric.shadowOf;
import static org.junit.Assert.*;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.model.InitializationError;
import android.app.Activity;
import android.app.Application;
import android.widget.TextView;
import com.xtremelabs.robolectric.annotation.DisableStrictI18n;
import com.xtremelabs.robolectric.annotation.EnableStrictI18n;
import com.xtremelabs.robolectric.annotation.Values;
import com.xtremelabs.robolectric.res.ResourceLoader;
@RunWith(RobolectricTestRunnerTest.RunnerForTesting.class)
public class RobolectricTestRunnerTest {
@Test
public void shouldInitializeAndBindApplicationButNotCallOnCreate() throws Exception {
assertNotNull(Robolectric.application);
assertEquals(MyTestApplication.class, Robolectric.application.getClass());
assertFalse(((MyTestApplication) Robolectric.application).onCreateWasCalled);
assertNotNull(shadowOf(Robolectric.application).getResourceLoader());
}
@Test
public void setStaticValue_shouldIgnoreFinalModifier() {
RobolectricTestRunner.setStaticValue(android.os.Build.class, "MODEL", "expected value");
assertEquals("expected value", android.os.Build.MODEL);
}
@Test
@EnableStrictI18n
public void internalBeforeTest_setsI18nStrictModeFromProperty() {
assertTrue(RunnerForTesting.instance.robolectricConfig.getStrictI18n());
}
@Test
@DisableStrictI18n
public void internalBeforeTest_clearsI18nStrictModeFromProperty() {
assertFalse(RunnerForTesting.instance.robolectricConfig.getStrictI18n());
}
@Test
@Values( locale="fr")
public void internalBeforeTest_setLocale(){
assertEquals( RunnerForTesting.instance.robolectricConfig.getLocale(), "fr" );
}
@Test
public void internalBeforeTest_doesNotsetI18nStrictModeFromSystemIfPropertyAbsent() {
assertFalse(RunnerForTesting.instance.robolectricConfig.getStrictI18n());
}
@Test
@EnableStrictI18n
public void methodBlock_setsI18nStrictModeForClassHandler() {
TextView tv = new TextView(Robolectric.application);
try {
tv.setText("Foo");
fail("TextView#setText(String) should produce an i18nException");
} catch (Exception e) {
// Compare exception name because it was loaded in the instrumented classloader
assertEquals("com.xtremelabs.robolectric.util.I18nException", e.getClass().getName());
}
}
@Test
@EnableStrictI18n
public void createResourceLoader_setsI18nStrictModeForResourceLoader() {
ResourceLoader loader = Robolectric.shadowOf(Robolectric.application).getResourceLoader();
assertTrue(RunnerForTesting.instance.robolectricConfig.getStrictI18n());
assertTrue(loader.getStrictI18n());
try {
loader.inflateView(Robolectric.application, R.layout.text_views, null);
fail("ResourceLoader#inflateView should produce an i18nException");
} catch (Exception e) {
assertEquals("com.xtremelabs.robolectric.util.I18nException", e.getClass().getName());
}
}
public static class RunnerForTesting extends WithTestDefaultsRunner {
public static RunnerForTesting instance;
public RunnerForTesting(Class<?> testClass) throws InitializationError {
super(testClass);
instance = this;
}
@Override protected Application createApplication() {
return new MyTestApplication();
}
}
public static class MyTestApplication extends Application {
private boolean onCreateWasCalled;
@Override public void onCreate() {
this.onCreateWasCalled = true;
}
}
public static class MyTestActivity extends Activity {
}
}