aboutsummaryrefslogtreecommitdiff
path: root/v1/src/test/java/com/xtremelabs/robolectric/RobolectricTestRunnerTest.java
blob: a7859d95a157cc99950317c3c0112d67159fe51b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
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 {
    	
    }

}