OverlayBaseTest.java revision 57f4b77c89bafedf9468f9a636561c0c193405c9
157f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstadpackage com.android.overlaytest;
257f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad
357f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstadimport android.content.res.Configuration;
457f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstadimport android.content.res.Resources;
557f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstadimport android.test.AndroidTestCase;
657f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstadimport java.io.InputStream;
757f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstadimport java.util.Locale;
857f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad
957f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstadpublic abstract class OverlayBaseTest extends AndroidTestCase {
1057f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad    private Resources mResources;
1157f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad    protected boolean mWithOverlay; // will be set by subclasses
1257f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad
1357f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad    protected void setUp() {
1457f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad        mResources = getContext().getResources();
1557f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad    }
1657f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad
1757f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad    private int calculateRawResourceChecksum(int resId) throws Throwable {
1857f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad        InputStream input = null;
1957f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad        try {
2057f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad            input = mResources.openRawResource(resId);
2157f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad            int ch, checksum = 0;
2257f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad            while ((ch = input.read()) != -1) {
2357f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad                checksum = (checksum + ch) % 0xffddbb00;
2457f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad            }
2557f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad            return checksum;
2657f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad        } finally {
2757f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad            input.close();
2857f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad        }
2957f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad    }
3057f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad
3157f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad    private void setLocale(String code) {
3257f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad        Locale locale = new Locale(code);
3357f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad        Locale.setDefault(locale);
3457f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad        Configuration config = new Configuration();
3557f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad        config.locale = locale;
3657f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad        mResources.updateConfiguration(config, mResources.getDisplayMetrics());
3757f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad    }
3857f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad
3957f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad    private void assertResource(int resId, boolean ewo, boolean ew) throws Throwable {
4057f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad        boolean expected = mWithOverlay ? ew : ewo;
4157f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad        boolean actual = mResources.getBoolean(resId);
4257f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad        assertEquals(expected, actual);
4357f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad    }
4457f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad
4557f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad    private void assertResource(int resId, String ewo, String ew) throws Throwable {
4657f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad        String expected = mWithOverlay ? ew : ewo;
4757f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad        String actual = mResources.getString(resId);
4857f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad        assertEquals(expected, actual);
4957f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad    }
5057f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad
5157f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad    private void assertResource(int resId, int[] ewo, int[] ew) throws Throwable {
5257f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad        int[] expected = mWithOverlay ? ew : ewo;
5357f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad        int[] actual = mResources.getIntArray(resId);
5457f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad        assertEquals("length:", expected.length, actual.length);
5557f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad        for (int i = 0; i < actual.length; ++i) {
5657f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad            assertEquals("index " + i + ":", actual[i], expected[i]);
5757f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad        }
5857f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad    }
5957f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad
6057f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad    public void testBooleanOverlay() throws Throwable {
6157f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad        // config_automatic_brightness_available has overlay (default config)
6257f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad        final int resId = com.android.internal.R.bool.config_automatic_brightness_available;
6357f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad        assertResource(resId, false, true);
6457f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad    }
6557f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad
6657f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad    public void testBoolean() throws Throwable {
6757f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad        // config_bypass_keyguard_if_slider_open has no overlay
6857f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad        final int resId = com.android.internal.R.bool.config_bypass_keyguard_if_slider_open;
6957f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad        assertResource(resId, true, true);
7057f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad    }
7157f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad
7257f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad    public void testStringOverlay() throws Throwable {
7357f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad        // phoneTypeCar has an overlay (default config), which shouldn't shadow
7457f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad        // the Swedish translation
7557f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad        final int resId = com.android.internal.R.string.phoneTypeCar;
7657f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad        setLocale("sv_SE");
7757f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad        assertResource(resId, "Bil", "Bil");
7857f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad    }
7957f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad
8057f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad    public void testStringSwedishOverlay() throws Throwable {
8157f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad        // phoneTypeWork has overlay (no default config, only for lang=sv)
8257f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad        final int resId = com.android.internal.R.string.phoneTypeWork;
8357f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad        setLocale("en_US");
8457f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad        assertResource(resId, "Work", "Work");
8557f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad        setLocale("sv_SE");
8657f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad        assertResource(resId, "Arbete", "Jobb");
8757f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad    }
8857f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad
8957f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad    public void testString() throws Throwable {
9057f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad        // phoneTypeHome has no overlay
9157f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad        final int resId = com.android.internal.R.string.phoneTypeHome;
9257f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad        setLocale("en_US");
9357f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad        assertResource(resId, "Home", "Home");
9457f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad        setLocale("sv_SE");
9557f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad        assertResource(resId, "Hem", "Hem");
9657f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad    }
9757f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad
9857f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad    public void testIntegerArrayOverlay() throws Throwable {
9957f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad        // config_scrollBarrierVibePattern has overlay (default config)
10057f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad        final int resId = com.android.internal.R.array.config_scrollBarrierVibePattern;
10157f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad        assertResource(resId, new int[]{0, 15, 10, 10}, new int[]{100, 200, 300});
10257f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad    }
10357f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad
10457f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad    public void testIntegerArray() throws Throwable {
10557f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad        // config_virtualKeyVibePattern has no overlay
10657f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad        final int resId = com.android.internal.R.array.config_virtualKeyVibePattern;
10757f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad        final int[] expected = {0, 10, 20, 30};
10857f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad        assertResource(resId, expected, expected);
10957f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad    }
11057f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad
11157f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad    public void testAsset() throws Throwable {
11257f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad        // drawable/default_background.jpg has overlay (default config)
11357f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad        final int resId = com.android.internal.R.drawable.default_wallpaper;
11457f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad        int actual = calculateRawResourceChecksum(resId);
11557f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad        int expected = mWithOverlay ? 0x000051da : 0x0014ebce;
11657f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad        assertEquals(expected, actual);
11757f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad    }
11857f4b77c89bafedf9468f9a636561c0c193405c9Mårten Kongstad}
119