1 package com.android.overlaytest; 2 3 import android.content.res.Configuration; 4 import android.content.res.Resources; 5 import android.test.AndroidTestCase; 6 import java.io.InputStream; 7 import java.util.Locale; 8 9 public abstract class OverlayBaseTest extends AndroidTestCase { 10 private Resources mResources; 11 protected boolean mWithOverlay; // will be set by subclasses 12 setUp()13 protected void setUp() { 14 mResources = getContext().getResources(); 15 } 16 calculateRawResourceChecksum(int resId)17 private int calculateRawResourceChecksum(int resId) throws Throwable { 18 InputStream input = null; 19 try { 20 input = mResources.openRawResource(resId); 21 int ch, checksum = 0; 22 while ((ch = input.read()) != -1) { 23 checksum = (checksum + ch) % 0xffddbb00; 24 } 25 return checksum; 26 } finally { 27 input.close(); 28 } 29 } 30 setLocale(String code)31 private void setLocale(String code) { 32 Locale locale = new Locale(code); 33 Locale.setDefault(locale); 34 Configuration config = new Configuration(); 35 config.locale = locale; 36 mResources.updateConfiguration(config, mResources.getDisplayMetrics()); 37 } 38 assertResource(int resId, boolean ewo, boolean ew)39 private void assertResource(int resId, boolean ewo, boolean ew) throws Throwable { 40 boolean expected = mWithOverlay ? ew : ewo; 41 boolean actual = mResources.getBoolean(resId); 42 assertEquals(expected, actual); 43 } 44 assertResource(int resId, String ewo, String ew)45 private void assertResource(int resId, String ewo, String ew) throws Throwable { 46 String expected = mWithOverlay ? ew : ewo; 47 String actual = mResources.getString(resId); 48 assertEquals(expected, actual); 49 } 50 assertResource(int resId, int[] ewo, int[] ew)51 private void assertResource(int resId, int[] ewo, int[] ew) throws Throwable { 52 int[] expected = mWithOverlay ? ew : ewo; 53 int[] actual = mResources.getIntArray(resId); 54 assertEquals("length:", expected.length, actual.length); 55 for (int i = 0; i < actual.length; ++i) { 56 assertEquals("index " + i + ":", actual[i], expected[i]); 57 } 58 } 59 testBooleanOverlay()60 public void testBooleanOverlay() throws Throwable { 61 // config_automatic_brightness_available has overlay (default config) 62 final int resId = com.android.internal.R.bool.config_automatic_brightness_available; 63 assertResource(resId, false, true); 64 } 65 testBoolean()66 public void testBoolean() throws Throwable { 67 // config_annoy_dianne has no overlay 68 final int resId = com.android.internal.R.bool.config_annoy_dianne; 69 assertResource(resId, true, true); 70 } 71 testStringOverlay()72 public void testStringOverlay() throws Throwable { 73 // phoneTypeCar has an overlay (default config), which shouldn't shadow 74 // the Swedish translation 75 final int resId = com.android.internal.R.string.phoneTypeCar; 76 setLocale("sv_SE"); 77 assertResource(resId, "Bil", "Bil"); 78 } 79 testStringSwedishOverlay()80 public void testStringSwedishOverlay() throws Throwable { 81 // phoneTypeWork has overlay (no default config, only for lang=sv) 82 final int resId = com.android.internal.R.string.phoneTypeWork; 83 setLocale("en_US"); 84 assertResource(resId, "Work", "Work"); 85 setLocale("sv_SE"); 86 assertResource(resId, "Arbete", "Jobb"); 87 } 88 testString()89 public void testString() throws Throwable { 90 // phoneTypeHome has no overlay 91 final int resId = com.android.internal.R.string.phoneTypeHome; 92 setLocale("en_US"); 93 assertResource(resId, "Home", "Home"); 94 setLocale("sv_SE"); 95 assertResource(resId, "Hem", "Hem"); 96 } 97 testIntegerArrayOverlay()98 public void testIntegerArrayOverlay() throws Throwable { 99 // config_scrollBarrierVibePattern has overlay (default config) 100 final int resId = com.android.internal.R.array.config_scrollBarrierVibePattern; 101 assertResource(resId, new int[]{0, 15, 10, 10}, new int[]{100, 200, 300}); 102 } 103 testIntegerArray()104 public void testIntegerArray() throws Throwable { 105 // config_virtualKeyVibePattern has no overlay 106 final int resId = com.android.internal.R.array.config_virtualKeyVibePattern; 107 final int[] expected = {0, 10, 20, 30}; 108 assertResource(resId, expected, expected); 109 } 110 testAsset()111 public void testAsset() throws Throwable { 112 // drawable/default_background.jpg has overlay (default config) 113 final int resId = com.android.internal.R.drawable.default_wallpaper; 114 int actual = calculateRawResourceChecksum(resId); 115 int expected = mWithOverlay ? 0x000051da : 0x0014ebce; 116 assertEquals(expected, actual); 117 } 118 } 119