1d617ee5e12914b052682ee6f1bdf3ece28392f54Maurice Lam/* 2d617ee5e12914b052682ee6f1bdf3ece28392f54Maurice Lam * Copyright (C) 2015 The Android Open Source Project 3d617ee5e12914b052682ee6f1bdf3ece28392f54Maurice Lam * 4d617ee5e12914b052682ee6f1bdf3ece28392f54Maurice Lam * Licensed under the Apache License, Version 2.0 (the "License"); 5d617ee5e12914b052682ee6f1bdf3ece28392f54Maurice Lam * you may not use this file except in compliance with the License. 6d617ee5e12914b052682ee6f1bdf3ece28392f54Maurice Lam * You may obtain a copy of the License at 7d617ee5e12914b052682ee6f1bdf3ece28392f54Maurice Lam * 8d617ee5e12914b052682ee6f1bdf3ece28392f54Maurice Lam * http://www.apache.org/licenses/LICENSE-2.0 9d617ee5e12914b052682ee6f1bdf3ece28392f54Maurice Lam * 10d617ee5e12914b052682ee6f1bdf3ece28392f54Maurice Lam * Unless required by applicable law or agreed to in writing, software 11d617ee5e12914b052682ee6f1bdf3ece28392f54Maurice Lam * distributed under the License is distributed on an "AS IS" BASIS, 12d617ee5e12914b052682ee6f1bdf3ece28392f54Maurice Lam * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13d617ee5e12914b052682ee6f1bdf3ece28392f54Maurice Lam * See the License for the specific language governing permissions and 14d617ee5e12914b052682ee6f1bdf3ece28392f54Maurice Lam * limitations under the License. 15d617ee5e12914b052682ee6f1bdf3ece28392f54Maurice Lam */ 16d617ee5e12914b052682ee6f1bdf3ece28392f54Maurice Lam 17d617ee5e12914b052682ee6f1bdf3ece28392f54Maurice Lampackage com.android.setupwizardlib.test; 18d617ee5e12914b052682ee6f1bdf3ece28392f54Maurice Lam 19d617ee5e12914b052682ee6f1bdf3ece28392f54Maurice Lamimport android.content.Context; 20d617ee5e12914b052682ee6f1bdf3ece28392f54Maurice Lamimport android.content.ContextWrapper; 21d617ee5e12914b052682ee6f1bdf3ece28392f54Maurice Lamimport android.content.Intent; 22d617ee5e12914b052682ee6f1bdf3ece28392f54Maurice Lamimport android.content.pm.ActivityInfo; 23d617ee5e12914b052682ee6f1bdf3ece28392f54Maurice Lamimport android.content.pm.ApplicationInfo; 24d617ee5e12914b052682ee6f1bdf3ece28392f54Maurice Lamimport android.content.pm.PackageManager; 25d617ee5e12914b052682ee6f1bdf3ece28392f54Maurice Lamimport android.content.pm.ResolveInfo; 26d617ee5e12914b052682ee6f1bdf3ece28392f54Maurice Lamimport android.content.res.Resources; 27d617ee5e12914b052682ee6f1bdf3ece28392f54Maurice Lamimport android.test.InstrumentationTestCase; 28d617ee5e12914b052682ee6f1bdf3ece28392f54Maurice Lamimport android.test.mock.MockPackageManager; 2964158e33c3ad618ed0eecef71fd20dd8e3c02568Maurice Lamimport android.test.mock.MockResources; 30d617ee5e12914b052682ee6f1bdf3ece28392f54Maurice Lamimport android.test.suitebuilder.annotation.SmallTest; 3164158e33c3ad618ed0eecef71fd20dd8e3c02568Maurice Lamimport android.util.SparseArray; 32d617ee5e12914b052682ee6f1bdf3ece28392f54Maurice Lam 33d617ee5e12914b052682ee6f1bdf3ece28392f54Maurice Lamimport com.android.setupwizardlib.util.Partner; 34d617ee5e12914b052682ee6f1bdf3ece28392f54Maurice Lamimport com.android.setupwizardlib.util.Partner.ResourceEntry; 35d617ee5e12914b052682ee6f1bdf3ece28392f54Maurice Lam 36d617ee5e12914b052682ee6f1bdf3ece28392f54Maurice Lamimport java.util.ArrayList; 37d617ee5e12914b052682ee6f1bdf3ece28392f54Maurice Lamimport java.util.Arrays; 3864158e33c3ad618ed0eecef71fd20dd8e3c02568Maurice Lamimport java.util.HashMap; 39d617ee5e12914b052682ee6f1bdf3ece28392f54Maurice Lamimport java.util.List; 4064158e33c3ad618ed0eecef71fd20dd8e3c02568Maurice Lamimport java.util.Map; 41d617ee5e12914b052682ee6f1bdf3ece28392f54Maurice Lam 42d617ee5e12914b052682ee6f1bdf3ece28392f54Maurice Lampublic class PartnerTest extends InstrumentationTestCase { 43d617ee5e12914b052682ee6f1bdf3ece28392f54Maurice Lam 44d617ee5e12914b052682ee6f1bdf3ece28392f54Maurice Lam private TestContext mTestContext; 45d617ee5e12914b052682ee6f1bdf3ece28392f54Maurice Lam 46d617ee5e12914b052682ee6f1bdf3ece28392f54Maurice Lam @Override 47d617ee5e12914b052682ee6f1bdf3ece28392f54Maurice Lam protected void setUp() throws Exception { 48d617ee5e12914b052682ee6f1bdf3ece28392f54Maurice Lam super.setUp(); 49d617ee5e12914b052682ee6f1bdf3ece28392f54Maurice Lam mTestContext = new TestContext(getInstrumentation().getTargetContext()); 50d617ee5e12914b052682ee6f1bdf3ece28392f54Maurice Lam Partner.resetForTesting(); 51d617ee5e12914b052682ee6f1bdf3ece28392f54Maurice Lam } 52d617ee5e12914b052682ee6f1bdf3ece28392f54Maurice Lam 53d617ee5e12914b052682ee6f1bdf3ece28392f54Maurice Lam @SmallTest 54d617ee5e12914b052682ee6f1bdf3ece28392f54Maurice Lam public void testLoadPartner() { 55d617ee5e12914b052682ee6f1bdf3ece28392f54Maurice Lam mTestContext.partnerList = Arrays.asList( 56d617ee5e12914b052682ee6f1bdf3ece28392f54Maurice Lam createResolveInfo("hocus.pocus", false), 57d617ee5e12914b052682ee6f1bdf3ece28392f54Maurice Lam createResolveInfo("com.android.setupwizardlib.test", true) 58d617ee5e12914b052682ee6f1bdf3ece28392f54Maurice Lam ); 59d617ee5e12914b052682ee6f1bdf3ece28392f54Maurice Lam 60d617ee5e12914b052682ee6f1bdf3ece28392f54Maurice Lam Partner partner = Partner.get(mTestContext); 61d617ee5e12914b052682ee6f1bdf3ece28392f54Maurice Lam assertNotNull("Partner should not be null", partner); 62d617ee5e12914b052682ee6f1bdf3ece28392f54Maurice Lam } 63d617ee5e12914b052682ee6f1bdf3ece28392f54Maurice Lam 64d617ee5e12914b052682ee6f1bdf3ece28392f54Maurice Lam @SmallTest 65d617ee5e12914b052682ee6f1bdf3ece28392f54Maurice Lam public void testLoadNoPartner() { 66d617ee5e12914b052682ee6f1bdf3ece28392f54Maurice Lam mTestContext.partnerList = new ArrayList<>(); 67d617ee5e12914b052682ee6f1bdf3ece28392f54Maurice Lam 68d617ee5e12914b052682ee6f1bdf3ece28392f54Maurice Lam Partner partner = Partner.get(mTestContext); 69d617ee5e12914b052682ee6f1bdf3ece28392f54Maurice Lam assertNull("Partner should be null", partner); 70d617ee5e12914b052682ee6f1bdf3ece28392f54Maurice Lam } 71d617ee5e12914b052682ee6f1bdf3ece28392f54Maurice Lam 72d617ee5e12914b052682ee6f1bdf3ece28392f54Maurice Lam @SmallTest 73d617ee5e12914b052682ee6f1bdf3ece28392f54Maurice Lam public void testLoadNonSystemPartner() { 74d617ee5e12914b052682ee6f1bdf3ece28392f54Maurice Lam mTestContext.partnerList = Arrays.asList( 75d617ee5e12914b052682ee6f1bdf3ece28392f54Maurice Lam createResolveInfo("hocus.pocus", false), 76d617ee5e12914b052682ee6f1bdf3ece28392f54Maurice Lam createResolveInfo("com.android.setupwizardlib.test", false) 77d617ee5e12914b052682ee6f1bdf3ece28392f54Maurice Lam ); 78d617ee5e12914b052682ee6f1bdf3ece28392f54Maurice Lam 79d617ee5e12914b052682ee6f1bdf3ece28392f54Maurice Lam Partner partner = Partner.get(mTestContext); 80d617ee5e12914b052682ee6f1bdf3ece28392f54Maurice Lam assertNull("Partner should be null", partner); 81d617ee5e12914b052682ee6f1bdf3ece28392f54Maurice Lam } 82d617ee5e12914b052682ee6f1bdf3ece28392f54Maurice Lam 8364158e33c3ad618ed0eecef71fd20dd8e3c02568Maurice Lam @SmallTest 84d617ee5e12914b052682ee6f1bdf3ece28392f54Maurice Lam public void testLoadPartnerValue() { 85d617ee5e12914b052682ee6f1bdf3ece28392f54Maurice Lam mTestContext.partnerList = Arrays.asList( 86d617ee5e12914b052682ee6f1bdf3ece28392f54Maurice Lam createResolveInfo("hocus.pocus", false), 87d617ee5e12914b052682ee6f1bdf3ece28392f54Maurice Lam createResolveInfo("com.android.setupwizardlib.test", true) 88d617ee5e12914b052682ee6f1bdf3ece28392f54Maurice Lam ); 89d617ee5e12914b052682ee6f1bdf3ece28392f54Maurice Lam 90d617ee5e12914b052682ee6f1bdf3ece28392f54Maurice Lam ResourceEntry entry = 91d617ee5e12914b052682ee6f1bdf3ece28392f54Maurice Lam Partner.getResourceEntry(mTestContext, R.integer.suwTransitionDuration); 92d617ee5e12914b052682ee6f1bdf3ece28392f54Maurice Lam int partnerValue = entry.resources.getInteger(entry.id); 93d617ee5e12914b052682ee6f1bdf3ece28392f54Maurice Lam assertEquals("Partner value should be overlaid to 5000", 5000, partnerValue); 9464158e33c3ad618ed0eecef71fd20dd8e3c02568Maurice Lam assertTrue("Partner value should come from overlay", entry.isOverlay); 95d617ee5e12914b052682ee6f1bdf3ece28392f54Maurice Lam } 96d617ee5e12914b052682ee6f1bdf3ece28392f54Maurice Lam 9764158e33c3ad618ed0eecef71fd20dd8e3c02568Maurice Lam @SmallTest 98d617ee5e12914b052682ee6f1bdf3ece28392f54Maurice Lam public void testLoadDefaultValue() { 99d617ee5e12914b052682ee6f1bdf3ece28392f54Maurice Lam mTestContext.partnerList = Arrays.asList( 100d617ee5e12914b052682ee6f1bdf3ece28392f54Maurice Lam createResolveInfo("hocus.pocus", false), 101d617ee5e12914b052682ee6f1bdf3ece28392f54Maurice Lam createResolveInfo("com.android.setupwizardlib.test", true) 102d617ee5e12914b052682ee6f1bdf3ece28392f54Maurice Lam ); 103d617ee5e12914b052682ee6f1bdf3ece28392f54Maurice Lam 104d617ee5e12914b052682ee6f1bdf3ece28392f54Maurice Lam ResourceEntry entry = 105d617ee5e12914b052682ee6f1bdf3ece28392f54Maurice Lam Partner.getResourceEntry(mTestContext, R.color.suw_navbar_text_dark); 106d617ee5e12914b052682ee6f1bdf3ece28392f54Maurice Lam int partnerValue = entry.resources.getColor(entry.id); 107d617ee5e12914b052682ee6f1bdf3ece28392f54Maurice Lam assertEquals("Partner value should default to 0xdeffffff", 0xdeffffff, partnerValue); 10864158e33c3ad618ed0eecef71fd20dd8e3c02568Maurice Lam assertFalse("Partner value should come from fallback", entry.isOverlay); 109d617ee5e12914b052682ee6f1bdf3ece28392f54Maurice Lam } 110d617ee5e12914b052682ee6f1bdf3ece28392f54Maurice Lam 111d617ee5e12914b052682ee6f1bdf3ece28392f54Maurice Lam private ResolveInfo createResolveInfo(String packageName, boolean isSystem) { 112d617ee5e12914b052682ee6f1bdf3ece28392f54Maurice Lam ResolveInfo info = new ResolveInfo(); 113d617ee5e12914b052682ee6f1bdf3ece28392f54Maurice Lam info.resolvePackageName = packageName; 114d617ee5e12914b052682ee6f1bdf3ece28392f54Maurice Lam ActivityInfo activityInfo = new ActivityInfo(); 115d617ee5e12914b052682ee6f1bdf3ece28392f54Maurice Lam ApplicationInfo appInfo = new ApplicationInfo(); 116d617ee5e12914b052682ee6f1bdf3ece28392f54Maurice Lam appInfo.flags = isSystem ? ApplicationInfo.FLAG_SYSTEM : 0; 117d617ee5e12914b052682ee6f1bdf3ece28392f54Maurice Lam appInfo.packageName = packageName; 118d617ee5e12914b052682ee6f1bdf3ece28392f54Maurice Lam activityInfo.applicationInfo = appInfo; 119d617ee5e12914b052682ee6f1bdf3ece28392f54Maurice Lam activityInfo.packageName = packageName; 120d617ee5e12914b052682ee6f1bdf3ece28392f54Maurice Lam activityInfo.name = packageName; 121d617ee5e12914b052682ee6f1bdf3ece28392f54Maurice Lam info.activityInfo = activityInfo; 122d617ee5e12914b052682ee6f1bdf3ece28392f54Maurice Lam return info; 123d617ee5e12914b052682ee6f1bdf3ece28392f54Maurice Lam } 124d617ee5e12914b052682ee6f1bdf3ece28392f54Maurice Lam 12564158e33c3ad618ed0eecef71fd20dd8e3c02568Maurice Lam private static class TestResources extends MockResources { 12664158e33c3ad618ed0eecef71fd20dd8e3c02568Maurice Lam 12764158e33c3ad618ed0eecef71fd20dd8e3c02568Maurice Lam private static final Map<String, Integer> TEST_RESOURCE_IDS = new HashMap<>(); 12864158e33c3ad618ed0eecef71fd20dd8e3c02568Maurice Lam private static final SparseArray<Object> TEST_RESOURCES = new SparseArray<>(); 12964158e33c3ad618ed0eecef71fd20dd8e3c02568Maurice Lam 13064158e33c3ad618ed0eecef71fd20dd8e3c02568Maurice Lam private static void addItem(String name, int id, Object value) { 13164158e33c3ad618ed0eecef71fd20dd8e3c02568Maurice Lam TEST_RESOURCE_IDS.put(name, id); 13264158e33c3ad618ed0eecef71fd20dd8e3c02568Maurice Lam TEST_RESOURCES.put(id, value); 13364158e33c3ad618ed0eecef71fd20dd8e3c02568Maurice Lam } 13464158e33c3ad618ed0eecef71fd20dd8e3c02568Maurice Lam 13564158e33c3ad618ed0eecef71fd20dd8e3c02568Maurice Lam static { 13664158e33c3ad618ed0eecef71fd20dd8e3c02568Maurice Lam addItem("integer/suwTransitionDuration", 0x7f010000, 5000); 13764158e33c3ad618ed0eecef71fd20dd8e3c02568Maurice Lam } 13864158e33c3ad618ed0eecef71fd20dd8e3c02568Maurice Lam 13964158e33c3ad618ed0eecef71fd20dd8e3c02568Maurice Lam @Override 14064158e33c3ad618ed0eecef71fd20dd8e3c02568Maurice Lam public int getIdentifier(String name, String defType, String defPackage) { 14164158e33c3ad618ed0eecef71fd20dd8e3c02568Maurice Lam String key = defType + "/" + name; 14264158e33c3ad618ed0eecef71fd20dd8e3c02568Maurice Lam if (TEST_RESOURCE_IDS.containsKey(key)) { 14364158e33c3ad618ed0eecef71fd20dd8e3c02568Maurice Lam return TEST_RESOURCE_IDS.get(key); 14464158e33c3ad618ed0eecef71fd20dd8e3c02568Maurice Lam } 14564158e33c3ad618ed0eecef71fd20dd8e3c02568Maurice Lam return 0; 14664158e33c3ad618ed0eecef71fd20dd8e3c02568Maurice Lam } 14764158e33c3ad618ed0eecef71fd20dd8e3c02568Maurice Lam 14864158e33c3ad618ed0eecef71fd20dd8e3c02568Maurice Lam @Override 14964158e33c3ad618ed0eecef71fd20dd8e3c02568Maurice Lam public int getInteger(int id) throws NotFoundException { 15064158e33c3ad618ed0eecef71fd20dd8e3c02568Maurice Lam if (TEST_RESOURCES.indexOfKey(id) >= 0) { 15164158e33c3ad618ed0eecef71fd20dd8e3c02568Maurice Lam return (int) TEST_RESOURCES.get(id); 15264158e33c3ad618ed0eecef71fd20dd8e3c02568Maurice Lam } else { 15364158e33c3ad618ed0eecef71fd20dd8e3c02568Maurice Lam throw new NotFoundException(); 15464158e33c3ad618ed0eecef71fd20dd8e3c02568Maurice Lam } 15564158e33c3ad618ed0eecef71fd20dd8e3c02568Maurice Lam } 15664158e33c3ad618ed0eecef71fd20dd8e3c02568Maurice Lam 15764158e33c3ad618ed0eecef71fd20dd8e3c02568Maurice Lam @Override 15864158e33c3ad618ed0eecef71fd20dd8e3c02568Maurice Lam public int getColor(int id) throws NotFoundException { 15964158e33c3ad618ed0eecef71fd20dd8e3c02568Maurice Lam if (TEST_RESOURCES.indexOfKey(id) >= 0) { 16064158e33c3ad618ed0eecef71fd20dd8e3c02568Maurice Lam return (int) TEST_RESOURCES.get(id); 16164158e33c3ad618ed0eecef71fd20dd8e3c02568Maurice Lam } else { 16264158e33c3ad618ed0eecef71fd20dd8e3c02568Maurice Lam throw new NotFoundException(); 16364158e33c3ad618ed0eecef71fd20dd8e3c02568Maurice Lam } 16464158e33c3ad618ed0eecef71fd20dd8e3c02568Maurice Lam } 16564158e33c3ad618ed0eecef71fd20dd8e3c02568Maurice Lam } 16664158e33c3ad618ed0eecef71fd20dd8e3c02568Maurice Lam 167d617ee5e12914b052682ee6f1bdf3ece28392f54Maurice Lam private static class TestPackageManager extends MockPackageManager { 168d617ee5e12914b052682ee6f1bdf3ece28392f54Maurice Lam 169d617ee5e12914b052682ee6f1bdf3ece28392f54Maurice Lam private Context mTestContext; 17064158e33c3ad618ed0eecef71fd20dd8e3c02568Maurice Lam private Resources mTestResources; 171d617ee5e12914b052682ee6f1bdf3ece28392f54Maurice Lam 172d617ee5e12914b052682ee6f1bdf3ece28392f54Maurice Lam public TestPackageManager(Context testContext) { 173d617ee5e12914b052682ee6f1bdf3ece28392f54Maurice Lam mTestContext = testContext; 17464158e33c3ad618ed0eecef71fd20dd8e3c02568Maurice Lam mTestResources = new TestResources(); 175d617ee5e12914b052682ee6f1bdf3ece28392f54Maurice Lam } 176d617ee5e12914b052682ee6f1bdf3ece28392f54Maurice Lam 177d617ee5e12914b052682ee6f1bdf3ece28392f54Maurice Lam @Override 178d617ee5e12914b052682ee6f1bdf3ece28392f54Maurice Lam public Resources getResourcesForApplication(ApplicationInfo app) { 179d617ee5e12914b052682ee6f1bdf3ece28392f54Maurice Lam if (app != null && "com.android.setupwizardlib.test".equals(app.packageName)) { 18064158e33c3ad618ed0eecef71fd20dd8e3c02568Maurice Lam return mTestResources; 181d617ee5e12914b052682ee6f1bdf3ece28392f54Maurice Lam } else { 182d617ee5e12914b052682ee6f1bdf3ece28392f54Maurice Lam return super.getResourcesForApplication(app); 183d617ee5e12914b052682ee6f1bdf3ece28392f54Maurice Lam } 184d617ee5e12914b052682ee6f1bdf3ece28392f54Maurice Lam } 185d617ee5e12914b052682ee6f1bdf3ece28392f54Maurice Lam 186d617ee5e12914b052682ee6f1bdf3ece28392f54Maurice Lam @Override 187d617ee5e12914b052682ee6f1bdf3ece28392f54Maurice Lam public List<ResolveInfo> queryBroadcastReceivers(Intent intent, int flags) { 188d617ee5e12914b052682ee6f1bdf3ece28392f54Maurice Lam if ("com.android.setupwizard.action.PARTNER_CUSTOMIZATION".equals(intent.getAction())) { 189d617ee5e12914b052682ee6f1bdf3ece28392f54Maurice Lam return ((TestContext) mTestContext).partnerList; 190d617ee5e12914b052682ee6f1bdf3ece28392f54Maurice Lam } else { 191d617ee5e12914b052682ee6f1bdf3ece28392f54Maurice Lam return super.queryBroadcastReceivers(intent, flags); 192d617ee5e12914b052682ee6f1bdf3ece28392f54Maurice Lam } 193d617ee5e12914b052682ee6f1bdf3ece28392f54Maurice Lam } 194d617ee5e12914b052682ee6f1bdf3ece28392f54Maurice Lam } 195d617ee5e12914b052682ee6f1bdf3ece28392f54Maurice Lam 196d617ee5e12914b052682ee6f1bdf3ece28392f54Maurice Lam private static class TestContext extends ContextWrapper { 197d617ee5e12914b052682ee6f1bdf3ece28392f54Maurice Lam 198d617ee5e12914b052682ee6f1bdf3ece28392f54Maurice Lam public List<ResolveInfo> partnerList; 199d617ee5e12914b052682ee6f1bdf3ece28392f54Maurice Lam 200d617ee5e12914b052682ee6f1bdf3ece28392f54Maurice Lam public TestContext(Context context) { 201d617ee5e12914b052682ee6f1bdf3ece28392f54Maurice Lam super(context); 202d617ee5e12914b052682ee6f1bdf3ece28392f54Maurice Lam } 203d617ee5e12914b052682ee6f1bdf3ece28392f54Maurice Lam 204d617ee5e12914b052682ee6f1bdf3ece28392f54Maurice Lam @Override 205d617ee5e12914b052682ee6f1bdf3ece28392f54Maurice Lam public PackageManager getPackageManager() { 206d617ee5e12914b052682ee6f1bdf3ece28392f54Maurice Lam return new TestPackageManager(this); 207d617ee5e12914b052682ee6f1bdf3ece28392f54Maurice Lam } 208d617ee5e12914b052682ee6f1bdf3ece28392f54Maurice Lam } 209d617ee5e12914b052682ee6f1bdf3ece28392f54Maurice Lam} 210