PartnerTest.java revision d617ee5e12914b052682ee6f1bdf3ece28392f54
1/*
2 * Copyright (C) 2015 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *      http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17package com.android.setupwizardlib.test;
18
19import android.content.Context;
20import android.content.ContextWrapper;
21import android.content.Intent;
22import android.content.pm.ActivityInfo;
23import android.content.pm.ApplicationInfo;
24import android.content.pm.PackageManager;
25import android.content.pm.ResolveInfo;
26import android.content.res.Resources;
27import android.test.InstrumentationTestCase;
28import android.test.mock.MockPackageManager;
29import android.test.suitebuilder.annotation.SmallTest;
30
31import com.android.setupwizardlib.util.Partner;
32import com.android.setupwizardlib.util.Partner.ResourceEntry;
33
34import java.util.ArrayList;
35import java.util.Arrays;
36import java.util.List;
37
38public class PartnerTest extends InstrumentationTestCase {
39
40    private TestContext mTestContext;
41
42    @Override
43    protected void setUp() throws Exception {
44        super.setUp();
45        mTestContext = new TestContext(getInstrumentation().getTargetContext());
46        Partner.resetForTesting();
47    }
48
49    @SmallTest
50    public void testLoadPartner() {
51        mTestContext.partnerList = Arrays.asList(
52                createResolveInfo("hocus.pocus", false),
53                createResolveInfo("com.android.setupwizardlib.test", true)
54        );
55
56        Partner partner = Partner.get(mTestContext);
57        assertNotNull("Partner should not be null", partner);
58    }
59
60    @SmallTest
61    public void testLoadNoPartner() {
62        mTestContext.partnerList = new ArrayList<>();
63
64        Partner partner = Partner.get(mTestContext);
65        assertNull("Partner should be null", partner);
66    }
67
68    @SmallTest
69    public void testLoadNonSystemPartner() {
70        mTestContext.partnerList = Arrays.asList(
71                createResolveInfo("hocus.pocus", false),
72                createResolveInfo("com.android.setupwizardlib.test", false)
73        );
74
75        Partner partner = Partner.get(mTestContext);
76        assertNull("Partner should be null", partner);
77    }
78
79    public void testLoadPartnerValue() {
80        mTestContext.partnerList = Arrays.asList(
81                createResolveInfo("hocus.pocus", false),
82                createResolveInfo("com.android.setupwizardlib.test", true)
83        );
84
85        ResourceEntry entry =
86                Partner.getResourceEntry(mTestContext, R.integer.suwTransitionDuration);
87        int partnerValue = entry.resources.getInteger(entry.id);
88        assertEquals("Partner value should be overlaid to 5000", 5000, partnerValue);
89    }
90
91    public void testLoadDefaultValue() {
92        mTestContext.partnerList = Arrays.asList(
93                createResolveInfo("hocus.pocus", false),
94                createResolveInfo("com.android.setupwizardlib.test", true)
95        );
96
97        ResourceEntry entry =
98                Partner.getResourceEntry(mTestContext, R.color.suw_navbar_text_dark);
99        int partnerValue = entry.resources.getColor(entry.id);
100        assertEquals("Partner value should default to 0xdeffffff", 0xdeffffff, partnerValue);
101    }
102
103    private ResolveInfo createResolveInfo(String packageName, boolean isSystem) {
104        ResolveInfo info = new ResolveInfo();
105        info.resolvePackageName = packageName;
106        ActivityInfo activityInfo = new ActivityInfo();
107        ApplicationInfo appInfo = new ApplicationInfo();
108        appInfo.flags = isSystem ? ApplicationInfo.FLAG_SYSTEM : 0;
109        appInfo.packageName = packageName;
110        activityInfo.applicationInfo = appInfo;
111        activityInfo.packageName = packageName;
112        activityInfo.name = packageName;
113        info.activityInfo = activityInfo;
114        return info;
115    }
116
117    private static class TestPackageManager extends MockPackageManager {
118
119        private Context mTestContext;
120
121        public TestPackageManager(Context testContext) {
122            mTestContext = testContext;
123        }
124
125        @Override
126        public Resources getResourcesForApplication(ApplicationInfo app) {
127            if (app != null && "com.android.setupwizardlib.test".equals(app.packageName)) {
128                return mTestContext.getResources();
129            } else {
130                return super.getResourcesForApplication(app);
131            }
132        }
133
134        @Override
135        public List<ResolveInfo> queryBroadcastReceivers(Intent intent, int flags) {
136            if ("com.android.setupwizard.action.PARTNER_CUSTOMIZATION".equals(intent.getAction())) {
137                return ((TestContext) mTestContext).partnerList;
138            } else {
139                return super.queryBroadcastReceivers(intent, flags);
140            }
141        }
142    }
143
144    private static class TestContext extends ContextWrapper {
145
146        public List<ResolveInfo> partnerList;
147
148        public TestContext(Context context) {
149            super(context);
150        }
151
152        @Override
153        public PackageManager getPackageManager() {
154            return new TestPackageManager(this);
155        }
156    }
157}
158