blob: 9d9e1663c32b53457dafb2374530ff864f0ddc5b [file] [log] [blame]
The Android Open Source Projectf8057102009-03-15 16:47:16 -07001/*
2 * Copyright (C) 2008 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 android.content.cts;
18
Chenjie Luo045a6fa2014-09-12 11:54:47 -070019import com.android.cts.content.R;
Phil Dubachb59283e2009-07-21 14:45:09 -070020
The Android Open Source Projectf8057102009-03-15 16:47:16 -070021import android.content.ActivityNotFoundException;
22import android.content.BroadcastReceiver;
23import android.content.ComponentName;
24import android.content.Context;
25import android.content.ContextWrapper;
26import android.content.Intent;
27import android.content.IntentFilter;
28import android.content.ServiceConnection;
29import android.content.SharedPreferences;
Brett Chabot621b1bf2009-08-24 17:45:54 -070030import android.content.pm.PackageInfo;
The Android Open Source Projectf8057102009-03-15 16:47:16 -070031import android.content.pm.PackageManager;
Kristian Monsen01625472011-11-02 11:38:23 +000032import android.cts.util.PollingCheck;
The Android Open Source Projectf8057102009-03-15 16:47:16 -070033import android.database.Cursor;
34import android.database.sqlite.SQLiteCursorDriver;
35import android.database.sqlite.SQLiteDatabase;
36import android.database.sqlite.SQLiteQuery;
The Android Open Source Projectf8057102009-03-15 16:47:16 -070037import android.graphics.Bitmap;
Phil Dubachb59283e2009-07-21 14:45:09 -070038import android.graphics.drawable.BitmapDrawable;
The Android Open Source Projectf8057102009-03-15 16:47:16 -070039import android.graphics.drawable.Drawable;
40import android.net.Uri;
41import android.os.Binder;
42import android.os.Bundle;
The Android Open Source Projectf8057102009-03-15 16:47:16 -070043import android.os.IBinder;
44import android.preference.PreferenceManager;
45import android.test.AndroidTestCase;
Jeff Brown7aea52d2015-02-25 14:04:26 -080046import android.view.WindowManager;
The Android Open Source Projectf8057102009-03-15 16:47:16 -070047
Phil Dubachb59283e2009-07-21 14:45:09 -070048import java.io.File;
Phil Dubachb59283e2009-07-21 14:45:09 -070049import java.io.IOException;
50import java.io.InputStream;
51import java.util.ArrayList;
Brian Muramatsud4c3a6d2012-05-08 12:38:01 -070052import java.util.Arrays;
Phil Dubachb59283e2009-07-21 14:45:09 -070053import java.util.List;
The Android Open Source Projectf8057102009-03-15 16:47:16 -070054
55/**
56 * Test {@link ContextWrapper}.
57 */
The Android Open Source Projectf8057102009-03-15 16:47:16 -070058public class ContextWrapperTest extends AndroidTestCase {
Phil Dubachb59283e2009-07-21 14:45:09 -070059 private static final String PERMISSION_HARDWARE_TEST = "android.permission.HARDWARE_TEST";
60
The Android Open Source Projectf8057102009-03-15 16:47:16 -070061 private static final String ACTUAL_RESULT = "ResultSetByReceiver";
62
63 private static final String INTIAL_RESULT = "IntialResult";
64
65 private static final String VALUE_ADDED = "ValueAdded";
The Android Open Source Projectf8057102009-03-15 16:47:16 -070066 private static final String KEY_ADDED = "AddedByReceiver";
67
68 private static final String VALUE_REMOVED = "ValueWillBeRemove";
The Android Open Source Projectf8057102009-03-15 16:47:16 -070069 private static final String KEY_REMOVED = "ToBeRemoved";
70
71 private static final String VALUE_KEPT = "ValueKept";
The Android Open Source Projectf8057102009-03-15 16:47:16 -070072 private static final String KEY_KEPT = "ToBeKept";
73
74 private static final String MOCK_STICKY_ACTION = "android.content.cts.ContextWrapperTest."
75 + "STICKY_BROADCAST_RESULT";
76
Phil Dubachb59283e2009-07-21 14:45:09 -070077 private static final String ACTION_BROADCAST_TESTORDER =
78 "android.content.cts.ContextWrapperTest.BROADCAST_TESTORDER";
79 private final static String MOCK_ACTION1 = ACTION_BROADCAST_TESTORDER + "1";
80 private final static String MOCK_ACTION2 = ACTION_BROADCAST_TESTORDER + "2";
The Android Open Source Projectf8057102009-03-15 16:47:16 -070081
Chenjie Luo045a6fa2014-09-12 11:54:47 -070082 public static final String PERMISSION_GRANTED = "android.content.cts.permission.TEST_GRANTED";
83 public static final String PERMISSION_DENIED = "android.content.cts.permission.TEST_DENIED";
The Android Open Source Projectf8057102009-03-15 16:47:16 -070084
Fyodor Kupolovd476b032015-10-26 12:40:24 -070085 private static final int BROADCAST_TIMEOUT = 15000;
The Android Open Source Projectf8057102009-03-15 16:47:16 -070086
87 private Context mContext;
Phil Dubachb59283e2009-07-21 14:45:09 -070088
89 private ContextWrapper mContextWrapper;
90 private Object mLockObj;
91
92 private ArrayList<BroadcastReceiver> mRegisteredReceiverList;
93
94 private boolean mWallpaperChanged;
95 private BitmapDrawable mOriginalWallpaper;
The Android Open Source Projectf8057102009-03-15 16:47:16 -070096
97 @Override
98 protected void setUp() throws Exception {
99 super.setUp();
Phil Dubachb59283e2009-07-21 14:45:09 -0700100
101 mLockObj = new Object();
The Android Open Source Projectf8057102009-03-15 16:47:16 -0700102 mContext = getContext();
Phil Dubachb59283e2009-07-21 14:45:09 -0700103 mContextWrapper = new ContextWrapper(mContext);
104
105 mRegisteredReceiverList = new ArrayList<BroadcastReceiver>();
106
107 mOriginalWallpaper = (BitmapDrawable) mContextWrapper.getWallpaper();
108 }
109
110 @Override
111 protected void tearDown() throws Exception {
112 if (mWallpaperChanged) {
113 mContextWrapper.setWallpaper(mOriginalWallpaper.getBitmap());
114 }
115
116 for (BroadcastReceiver receiver : mRegisteredReceiverList) {
117 mContextWrapper.unregisterReceiver(receiver);
118 }
119
120 super.tearDown();
121 }
122
123 private void registerBroadcastReceiver(BroadcastReceiver receiver, IntentFilter filter) {
124 mContextWrapper.registerReceiver(receiver, filter);
125
126 mRegisteredReceiverList.add(receiver);
The Android Open Source Projectf8057102009-03-15 16:47:16 -0700127 }
128
The Android Open Source Projectf8057102009-03-15 16:47:16 -0700129 public void testConstructor() {
The Android Open Source Projectf8057102009-03-15 16:47:16 -0700130 new ContextWrapper(mContext);
131
Phil Dubachb59283e2009-07-21 14:45:09 -0700132 // null param is allowed
The Android Open Source Projectf8057102009-03-15 16:47:16 -0700133 new ContextWrapper(null);
134 }
135
The Android Open Source Projectf8057102009-03-15 16:47:16 -0700136 public void testEnforceCallingPermission() {
The Android Open Source Projectf8057102009-03-15 16:47:16 -0700137 try {
Phil Dubachb59283e2009-07-21 14:45:09 -0700138 mContextWrapper.enforceCallingPermission(
The Android Open Source Projectf8057102009-03-15 16:47:16 -0700139 PERMISSION_HARDWARE_TEST,
140 "enforceCallingPermission is not working without possessing an IPC.");
141 fail("enforceCallingPermission is not working without possessing an IPC.");
142 } catch (SecurityException e) {
Phil Dubachb59283e2009-07-21 14:45:09 -0700143 // Currently no IPC is handled by this process, this exception is expected
The Android Open Source Projectf8057102009-03-15 16:47:16 -0700144 }
145 }
146
The Android Open Source Projectf8057102009-03-15 16:47:16 -0700147 public void testSendOrderedBroadcast1() throws InterruptedException {
Phil Dubachb59283e2009-07-21 14:45:09 -0700148 final HighPriorityBroadcastReceiver highPriorityReceiver =
149 new HighPriorityBroadcastReceiver();
150 final LowPriorityBroadcastReceiver lowPriorityReceiver =
151 new LowPriorityBroadcastReceiver();
The Android Open Source Projectf8057102009-03-15 16:47:16 -0700152
Keun young Park9085d9c2012-07-02 21:15:14 -0700153 final IntentFilter filterHighPriority = new IntentFilter(ResultReceiver.MOCK_ACTION);
154 filterHighPriority.setPriority(1);
155 final IntentFilter filterLowPriority = new IntentFilter(ResultReceiver.MOCK_ACTION);
156 registerBroadcastReceiver(highPriorityReceiver, filterHighPriority);
157 registerBroadcastReceiver(lowPriorityReceiver, filterLowPriority);
The Android Open Source Projectf8057102009-03-15 16:47:16 -0700158
Phil Dubachb59283e2009-07-21 14:45:09 -0700159 final Intent broadcastIntent = new Intent(ResultReceiver.MOCK_ACTION);
160 mContextWrapper.sendOrderedBroadcast(broadcastIntent, null);
Kristian Monsen01625472011-11-02 11:38:23 +0000161 new PollingCheck(BROADCAST_TIMEOUT) {
Phil Dubachb59283e2009-07-21 14:45:09 -0700162 @Override
163 protected boolean check() {
164 return highPriorityReceiver.hasReceivedBroadCast()
165 && !lowPriorityReceiver.hasReceivedBroadCast();
166 }
167 }.run();
The Android Open Source Projectf8057102009-03-15 16:47:16 -0700168
Phil Dubachb59283e2009-07-21 14:45:09 -0700169 synchronized (highPriorityReceiver) {
170 highPriorityReceiver.notify();
171 }
172
Kristian Monsen01625472011-11-02 11:38:23 +0000173 new PollingCheck(BROADCAST_TIMEOUT) {
Phil Dubachb59283e2009-07-21 14:45:09 -0700174 @Override
175 protected boolean check() {
176 return highPriorityReceiver.hasReceivedBroadCast()
177 && lowPriorityReceiver.hasReceivedBroadCast();
178 }
179 }.run();
The Android Open Source Projectf8057102009-03-15 16:47:16 -0700180 }
181
The Android Open Source Projectf8057102009-03-15 16:47:16 -0700182 public void testSendOrderedBroadcast2() throws InterruptedException {
The Android Open Source Projectf8057102009-03-15 16:47:16 -0700183 final TestBroadcastReceiver broadcastReceiver = new TestBroadcastReceiver();
Phil Dubachb59283e2009-07-21 14:45:09 -0700184 broadcastReceiver.mIsOrderedBroadcasts = true;
The Android Open Source Projectf8057102009-03-15 16:47:16 -0700185
186 Bundle bundle = new Bundle();
187 bundle.putString(KEY_KEPT, VALUE_KEPT);
188 bundle.putString(KEY_REMOVED, VALUE_REMOVED);
Phil Dubachb59283e2009-07-21 14:45:09 -0700189 mContextWrapper.sendOrderedBroadcast(new Intent(ResultReceiver.MOCK_ACTION),
The Android Open Source Projectf8057102009-03-15 16:47:16 -0700190 null, broadcastReceiver, null, 1, INTIAL_RESULT, bundle);
191
192 synchronized (mLockObj) {
193 try {
Phil Dubachb59283e2009-07-21 14:45:09 -0700194 mLockObj.wait(BROADCAST_TIMEOUT);
The Android Open Source Projectf8057102009-03-15 16:47:16 -0700195 } catch (InterruptedException e) {
196 fail("unexpected InterruptedException.");
197 }
198 }
199
200 assertTrue("Receiver didn't make any response.", broadcastReceiver.hadReceivedBroadCast());
201 assertEquals("Incorrect code: " + broadcastReceiver.getResultCode(), 3,
202 broadcastReceiver.getResultCode());
203 assertEquals(ACTUAL_RESULT, broadcastReceiver.getResultData());
204 Bundle resultExtras = broadcastReceiver.getResultExtras(false);
205 assertEquals(VALUE_ADDED, resultExtras.getString(KEY_ADDED));
206 assertEquals(VALUE_KEPT, resultExtras.getString(KEY_KEPT));
207 assertNull(resultExtras.getString(KEY_REMOVED));
208 }
209
The Android Open Source Projectf8057102009-03-15 16:47:16 -0700210 public void testRegisterReceiver1() throws InterruptedException {
Phil Dubachb59283e2009-07-21 14:45:09 -0700211 final FilteredReceiver broadcastReceiver = new FilteredReceiver();
212 final IntentFilter filter = new IntentFilter(MOCK_ACTION1);
The Android Open Source Projectf8057102009-03-15 16:47:16 -0700213
214 // Test registerReceiver
Phil Dubachb59283e2009-07-21 14:45:09 -0700215 mContextWrapper.registerReceiver(broadcastReceiver, filter);
The Android Open Source Projectf8057102009-03-15 16:47:16 -0700216
217 // Test unwanted intent(action = MOCK_ACTION2)
218 broadcastReceiver.reset();
Fyodor Kupolovd476b032015-10-26 12:40:24 -0700219 waitForFilteredIntent(mContextWrapper, MOCK_ACTION2);
The Android Open Source Projectf8057102009-03-15 16:47:16 -0700220 assertFalse(broadcastReceiver.hadReceivedBroadCast1());
221 assertFalse(broadcastReceiver.hadReceivedBroadCast2());
222
223 // Send wanted intent(action = MOCK_ACTION1)
224 broadcastReceiver.reset();
Fyodor Kupolovd476b032015-10-26 12:40:24 -0700225 waitForFilteredIntent(mContextWrapper, MOCK_ACTION1);
The Android Open Source Projectf8057102009-03-15 16:47:16 -0700226 assertTrue(broadcastReceiver.hadReceivedBroadCast1());
227 assertFalse(broadcastReceiver.hadReceivedBroadCast2());
228
Phil Dubachb59283e2009-07-21 14:45:09 -0700229 mContextWrapper.unregisterReceiver(broadcastReceiver);
The Android Open Source Projectf8057102009-03-15 16:47:16 -0700230
231 // Test unregisterReceiver
232 FilteredReceiver broadcastReceiver2 = new FilteredReceiver();
Phil Dubachb59283e2009-07-21 14:45:09 -0700233 mContextWrapper.registerReceiver(broadcastReceiver2, filter);
234 mContextWrapper.unregisterReceiver(broadcastReceiver2);
The Android Open Source Projectf8057102009-03-15 16:47:16 -0700235
236 // Test unwanted intent(action = MOCK_ACTION2)
237 broadcastReceiver2.reset();
Fyodor Kupolovd476b032015-10-26 12:40:24 -0700238 waitForFilteredIntent(mContextWrapper, MOCK_ACTION2);
The Android Open Source Projectf8057102009-03-15 16:47:16 -0700239 assertFalse(broadcastReceiver2.hadReceivedBroadCast1());
240 assertFalse(broadcastReceiver2.hadReceivedBroadCast2());
241
242 // Send wanted intent(action = MOCK_ACTION1), but the receiver is unregistered.
243 broadcastReceiver2.reset();
Fyodor Kupolovd476b032015-10-26 12:40:24 -0700244 waitForFilteredIntent(mContextWrapper, MOCK_ACTION1);
The Android Open Source Projectf8057102009-03-15 16:47:16 -0700245 assertFalse(broadcastReceiver2.hadReceivedBroadCast1());
246 assertFalse(broadcastReceiver2.hadReceivedBroadCast2());
247 }
248
The Android Open Source Projectf8057102009-03-15 16:47:16 -0700249 public void testRegisterReceiver2() throws InterruptedException {
The Android Open Source Projectf8057102009-03-15 16:47:16 -0700250 FilteredReceiver broadcastReceiver = new FilteredReceiver();
251 IntentFilter filter = new IntentFilter();
252 filter.addAction(MOCK_ACTION1);
253
254 // Test registerReceiver
Phil Dubachb59283e2009-07-21 14:45:09 -0700255 mContextWrapper.registerReceiver(broadcastReceiver, filter, null, null);
The Android Open Source Projectf8057102009-03-15 16:47:16 -0700256
257 // Test unwanted intent(action = MOCK_ACTION2)
258 broadcastReceiver.reset();
Fyodor Kupolovd476b032015-10-26 12:40:24 -0700259 waitForFilteredIntent(mContextWrapper, MOCK_ACTION2);
The Android Open Source Projectf8057102009-03-15 16:47:16 -0700260 assertFalse(broadcastReceiver.hadReceivedBroadCast1());
261 assertFalse(broadcastReceiver.hadReceivedBroadCast2());
262
263 // Send wanted intent(action = MOCK_ACTION1)
264 broadcastReceiver.reset();
Fyodor Kupolovd476b032015-10-26 12:40:24 -0700265 waitForFilteredIntent(mContextWrapper, MOCK_ACTION1);
The Android Open Source Projectf8057102009-03-15 16:47:16 -0700266 assertTrue(broadcastReceiver.hadReceivedBroadCast1());
267 assertFalse(broadcastReceiver.hadReceivedBroadCast2());
268
Phil Dubachb59283e2009-07-21 14:45:09 -0700269 mContextWrapper.unregisterReceiver(broadcastReceiver);
The Android Open Source Projectf8057102009-03-15 16:47:16 -0700270 }
271
The Android Open Source Projectf8057102009-03-15 16:47:16 -0700272 public void testEnforceCallingOrSelfPermission() {
The Android Open Source Projectf8057102009-03-15 16:47:16 -0700273 try {
Phil Dubachb59283e2009-07-21 14:45:09 -0700274 mContextWrapper.enforceCallingOrSelfPermission(PERMISSION_HARDWARE_TEST,
The Android Open Source Projectf8057102009-03-15 16:47:16 -0700275 "enforceCallingOrSelfPermission is not working without possessing an IPC.");
276 fail("enforceCallingOrSelfPermission is not working without possessing an IPC.");
277 } catch (SecurityException e) {
278 // If the function is OK, it should throw a SecurityException here because currently no
279 // IPC is handled by this process.
280 }
281 }
282
The Android Open Source Projectf8057102009-03-15 16:47:16 -0700283 public void testAccessWallpaper() throws IOException, InterruptedException {
The Android Open Source Projectf8057102009-03-15 16:47:16 -0700284 // set Wallpaper by contextWrapper#setWallpaper(Bitmap)
285 Bitmap bitmap = Bitmap.createBitmap(20, 30, Bitmap.Config.RGB_565);
286 // Test getWallpaper
Phil Dubachb59283e2009-07-21 14:45:09 -0700287 Drawable testDrawable = mContextWrapper.getWallpaper();
The Android Open Source Projectf8057102009-03-15 16:47:16 -0700288 // Test peekWallpaper
Phil Dubachb59283e2009-07-21 14:45:09 -0700289 Drawable testDrawable2 = mContextWrapper.peekWallpaper();
The Android Open Source Projectf8057102009-03-15 16:47:16 -0700290
Phil Dubachb59283e2009-07-21 14:45:09 -0700291 mContextWrapper.setWallpaper(bitmap);
292 mWallpaperChanged = true;
The Android Open Source Projectf8057102009-03-15 16:47:16 -0700293 synchronized(this) {
294 wait(500);
295 }
296
Phil Dubachb59283e2009-07-21 14:45:09 -0700297 assertNotSame(testDrawable, mContextWrapper.peekWallpaper());
298 assertNotNull(mContextWrapper.getWallpaper());
299 assertNotSame(testDrawable2, mContextWrapper.peekWallpaper());
300 assertNotNull(mContextWrapper.peekWallpaper());
The Android Open Source Projectf8057102009-03-15 16:47:16 -0700301
302 // set Wallpaper by contextWrapper#setWallpaper(InputStream)
Phil Dubachb59283e2009-07-21 14:45:09 -0700303 mContextWrapper.clearWallpaper();
The Android Open Source Projectf8057102009-03-15 16:47:16 -0700304
Phil Dubachb59283e2009-07-21 14:45:09 -0700305 testDrawable = mContextWrapper.getWallpaper();
306 InputStream stream = mContextWrapper.getResources().openRawResource(R.drawable.scenery);
The Android Open Source Projectf8057102009-03-15 16:47:16 -0700307
Phil Dubachb59283e2009-07-21 14:45:09 -0700308 mContextWrapper.setWallpaper(stream);
The Android Open Source Projectf8057102009-03-15 16:47:16 -0700309 synchronized (this) {
310 wait(1000);
311 }
312
Phil Dubachb59283e2009-07-21 14:45:09 -0700313 assertNotSame(testDrawable, mContextWrapper.peekWallpaper());
The Android Open Source Projectf8057102009-03-15 16:47:16 -0700314 }
315
The Android Open Source Projectf8057102009-03-15 16:47:16 -0700316 public void testAccessDatabase() {
317 String DATABASE_NAME = "databasetest";
318 String DATABASE_NAME1 = DATABASE_NAME + "1";
319 String DATABASE_NAME2 = DATABASE_NAME + "2";
320 SQLiteDatabase mDatabase;
321 File mDatabaseFile;
The Android Open Source Projectf8057102009-03-15 16:47:16 -0700322
323 SQLiteDatabase.CursorFactory factory = new SQLiteDatabase.CursorFactory() {
324 public Cursor newCursor(SQLiteDatabase db, SQLiteCursorDriver masterQuery,
325 String editTable, SQLiteQuery query) {
326 return new android.database.sqlite.SQLiteCursor(db, masterQuery, editTable, query) {
327 @Override
328 public boolean requery() {
329 setSelectionArguments(new String[] { "2" });
330 return super.requery();
331 }
332 };
333 }
334 };
335
The Android Open Source Projectf8057102009-03-15 16:47:16 -0700336 // FIXME: Move cleanup into tearDown()
Phil Dubachb59283e2009-07-21 14:45:09 -0700337 for (String db : mContextWrapper.databaseList()) {
338 File f = mContextWrapper.getDatabasePath(db);
The Android Open Source Projectf8057102009-03-15 16:47:16 -0700339 if (f.exists()) {
Phil Dubachb59283e2009-07-21 14:45:09 -0700340 mContextWrapper.deleteDatabase(db);
The Android Open Source Projectf8057102009-03-15 16:47:16 -0700341 }
342 }
343
344 // Test openOrCreateDatabase with null and actual factory
Phil Dubachb59283e2009-07-21 14:45:09 -0700345 mDatabase = mContextWrapper.openOrCreateDatabase(DATABASE_NAME1,
The Android Open Source Projectf8057102009-03-15 16:47:16 -0700346 ContextWrapper.MODE_WORLD_READABLE | ContextWrapper.MODE_WORLD_WRITEABLE, factory);
347 assertNotNull(mDatabase);
348 mDatabase.close();
Phil Dubachb59283e2009-07-21 14:45:09 -0700349 mDatabase = mContextWrapper.openOrCreateDatabase(DATABASE_NAME2,
The Android Open Source Projectf8057102009-03-15 16:47:16 -0700350 ContextWrapper.MODE_WORLD_READABLE | ContextWrapper.MODE_WORLD_WRITEABLE, factory);
351 assertNotNull(mDatabase);
352 mDatabase.close();
353
354 // Test getDatabasePath
Phil Dubachb59283e2009-07-21 14:45:09 -0700355 File actualDBPath = mContextWrapper.getDatabasePath(DATABASE_NAME1);
The Android Open Source Projectf8057102009-03-15 16:47:16 -0700356
357 // Test databaseList()
Brian Muramatsud4c3a6d2012-05-08 12:38:01 -0700358 List<String> list = Arrays.asList(mContextWrapper.databaseList());
359 assertEquals(4, list.size()); // Each database has a journal
360 assertTrue("1) database list: " + list, list.contains(DATABASE_NAME1));
361 assertTrue("2) database list: " + list, list.contains(DATABASE_NAME2));
The Android Open Source Projectf8057102009-03-15 16:47:16 -0700362
Phil Dubachb59283e2009-07-21 14:45:09 -0700363 // Test deleteDatabase()
The Android Open Source Projectf8057102009-03-15 16:47:16 -0700364 for (int i = 1; i < 3; i++) {
Phil Dubachb59283e2009-07-21 14:45:09 -0700365 mDatabaseFile = mContextWrapper.getDatabasePath(DATABASE_NAME + i);
The Android Open Source Projectf8057102009-03-15 16:47:16 -0700366 assertTrue(mDatabaseFile.exists());
Phil Dubachb59283e2009-07-21 14:45:09 -0700367 mContextWrapper.deleteDatabase(DATABASE_NAME + i);
The Android Open Source Projectf8057102009-03-15 16:47:16 -0700368 mDatabaseFile = new File(actualDBPath, DATABASE_NAME + i);
369 assertFalse(mDatabaseFile.exists());
370 }
The Android Open Source Projectf8057102009-03-15 16:47:16 -0700371 }
372
The Android Open Source Projectf8057102009-03-15 16:47:16 -0700373 public void testEnforceUriPermission1() {
The Android Open Source Projectf8057102009-03-15 16:47:16 -0700374 try {
375 Uri uri = Uri.parse("content://ctstest");
Phil Dubachb59283e2009-07-21 14:45:09 -0700376 mContextWrapper.enforceUriPermission(uri, Binder.getCallingPid(),
The Android Open Source Projectf8057102009-03-15 16:47:16 -0700377 Binder.getCallingUid(), Intent.FLAG_GRANT_WRITE_URI_PERMISSION,
378 "enforceUriPermission is not working without possessing an IPC.");
379 fail("enforceUriPermission is not working without possessing an IPC.");
380 } catch (SecurityException e) {
381 // If the function is OK, it should throw a SecurityException here because currently no
382 // IPC is handled by this process.
383 }
384 }
385
The Android Open Source Projectf8057102009-03-15 16:47:16 -0700386 public void testEnforceUriPermission2() {
The Android Open Source Projectf8057102009-03-15 16:47:16 -0700387 Uri uri = Uri.parse("content://ctstest");
388 try {
Phil Dubachb59283e2009-07-21 14:45:09 -0700389 mContextWrapper.enforceUriPermission(uri, PERMISSION_HARDWARE_TEST,
The Android Open Source Projectf8057102009-03-15 16:47:16 -0700390 PERMISSION_HARDWARE_TEST, Binder.getCallingPid(), Binder.getCallingUid(),
391 Intent.FLAG_GRANT_WRITE_URI_PERMISSION,
392 "enforceUriPermission is not working without possessing an IPC.");
393 fail("enforceUriPermission is not working without possessing an IPC.");
394 } catch (SecurityException e) {
395 // If the function is ok, it should throw a SecurityException here because currently no
396 // IPC is handled by this process.
397 }
398 }
399
The Android Open Source Projectf8057102009-03-15 16:47:16 -0700400 public void testGetPackageResourcePath() {
Phil Dubachb59283e2009-07-21 14:45:09 -0700401 assertNotNull(mContextWrapper.getPackageResourcePath());
The Android Open Source Projectf8057102009-03-15 16:47:16 -0700402 }
403
The Android Open Source Projectf8057102009-03-15 16:47:16 -0700404 public void testStartActivity() {
Chenjie Luo045a6fa2014-09-12 11:54:47 -0700405 Intent intent = new Intent(mContext, ContextWrapperCtsActivity.class);
The Android Open Source Projectf8057102009-03-15 16:47:16 -0700406 intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
407 try {
Phil Dubachb59283e2009-07-21 14:45:09 -0700408 mContextWrapper.startActivity(intent);
The Android Open Source Projectf8057102009-03-15 16:47:16 -0700409 fail("Test startActivity should thow a ActivityNotFoundException here.");
410 } catch (ActivityNotFoundException e) {
411 // Because ContextWrapper is a wrapper class, so no need to test
412 // the details of the function's performance. Getting a result
413 // from the wrapped class is enough for testing.
414 }
415 }
416
The Android Open Source Projectf8057102009-03-15 16:47:16 -0700417 public void testCreatePackageContext() throws PackageManager.NameNotFoundException {
Brett Chabot621b1bf2009-08-24 17:45:54 -0700418 Context actualContext = mContextWrapper.createPackageContext(getValidPackageName(),
The Android Open Source Projectf8057102009-03-15 16:47:16 -0700419 Context.CONTEXT_IGNORE_SECURITY);
420
421 assertNotNull(actualContext);
422 }
423
Brett Chabot621b1bf2009-08-24 17:45:54 -0700424 /**
425 * Helper method to retrieve a valid application package name to use for tests.
426 */
427 private String getValidPackageName() {
428 List<PackageInfo> packages = mContextWrapper.getPackageManager().getInstalledPackages(
429 PackageManager.GET_ACTIVITIES);
430 assertTrue(packages.size() >= 1);
431 return packages.get(0).packageName;
432 }
433
The Android Open Source Projectf8057102009-03-15 16:47:16 -0700434 public void testGetMainLooper() {
Phil Dubachb59283e2009-07-21 14:45:09 -0700435 assertNotNull(mContextWrapper.getMainLooper());
The Android Open Source Projectf8057102009-03-15 16:47:16 -0700436 }
437
The Android Open Source Projectf8057102009-03-15 16:47:16 -0700438 public void testGetApplicationContext() {
Phil Dubachb59283e2009-07-21 14:45:09 -0700439 assertSame(mContext.getApplicationContext(), mContextWrapper.getApplicationContext());
The Android Open Source Projectf8057102009-03-15 16:47:16 -0700440 }
441
The Android Open Source Projectf8057102009-03-15 16:47:16 -0700442 public void testGetSharedPreferences() {
443 SharedPreferences sp;
444 SharedPreferences localSP;
445
The Android Open Source Projectf8057102009-03-15 16:47:16 -0700446 sp = PreferenceManager.getDefaultSharedPreferences(mContext);
Phil Dubachb59283e2009-07-21 14:45:09 -0700447 String packageName = mContextWrapper.getPackageName();
448 localSP = mContextWrapper.getSharedPreferences(packageName + "_preferences",
The Android Open Source Projectf8057102009-03-15 16:47:16 -0700449 Context.MODE_PRIVATE);
450 assertSame(sp, localSP);
451 }
452
The Android Open Source Projectf8057102009-03-15 16:47:16 -0700453 public void testRevokeUriPermission() {
The Android Open Source Projectf8057102009-03-15 16:47:16 -0700454 Uri uri = Uri.parse("contents://ctstest");
Phil Dubachb59283e2009-07-21 14:45:09 -0700455 mContextWrapper.revokeUriPermission(uri, Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
The Android Open Source Projectf8057102009-03-15 16:47:16 -0700456 }
457
The Android Open Source Projectf8057102009-03-15 16:47:16 -0700458 public void testAccessService() throws InterruptedException {
The Android Open Source Projectf8057102009-03-15 16:47:16 -0700459 MockContextWrapperService.reset();
Phil Dubachb59283e2009-07-21 14:45:09 -0700460 bindExpectResult(mContextWrapper, new Intent(mContext, MockContextWrapperService.class));
The Android Open Source Projectf8057102009-03-15 16:47:16 -0700461
462 // Check startService
463 assertTrue(MockContextWrapperService.hadCalledOnStart());
464 // Check bindService
465 assertTrue(MockContextWrapperService.hadCalledOnBind());
466
467 assertTrue(MockContextWrapperService.hadCalledOnDestory());
468 // Check unbinService
469 assertTrue(MockContextWrapperService.hadCalledOnUnbind());
470 }
471
The Android Open Source Projectf8057102009-03-15 16:47:16 -0700472 public void testGetPackageCodePath() {
Phil Dubachb59283e2009-07-21 14:45:09 -0700473 assertNotNull(mContextWrapper.getPackageCodePath());
The Android Open Source Projectf8057102009-03-15 16:47:16 -0700474 }
475
The Android Open Source Projectf8057102009-03-15 16:47:16 -0700476 public void testGetPackageName() {
Chenjie Luo045a6fa2014-09-12 11:54:47 -0700477 assertEquals("com.android.cts.content", mContextWrapper.getPackageName());
The Android Open Source Projectf8057102009-03-15 16:47:16 -0700478 }
479
The Android Open Source Projectf8057102009-03-15 16:47:16 -0700480 public void testGetCacheDir() {
Phil Dubachb59283e2009-07-21 14:45:09 -0700481 assertNotNull(mContextWrapper.getCacheDir());
The Android Open Source Projectf8057102009-03-15 16:47:16 -0700482 }
483
The Android Open Source Projectf8057102009-03-15 16:47:16 -0700484 public void testGetContentResolver() {
Phil Dubachb59283e2009-07-21 14:45:09 -0700485 assertSame(mContext.getContentResolver(), mContextWrapper.getContentResolver());
The Android Open Source Projectf8057102009-03-15 16:47:16 -0700486 }
487
The Android Open Source Projectf8057102009-03-15 16:47:16 -0700488 public void testAccessBaseContext() throws PackageManager.NameNotFoundException {
489 MockContextWrapper testContextWrapper = new MockContextWrapper(mContext);
490
491 // Test getBaseContext()
492 assertSame(mContext, testContextWrapper.getBaseContext());
493
Brett Chabot621b1bf2009-08-24 17:45:54 -0700494 Context secondContext = testContextWrapper.createPackageContext(getValidPackageName(),
The Android Open Source Projectf8057102009-03-15 16:47:16 -0700495 Context.CONTEXT_IGNORE_SECURITY);
496 assertNotNull(secondContext);
497
498 // Test attachBaseContext
499 try {
500 testContextWrapper.attachBaseContext(secondContext);
501 fail("If base context has already been set, it should throw a IllegalStateException.");
502 } catch (IllegalStateException e) {
503 }
504 }
505
The Android Open Source Projectf8057102009-03-15 16:47:16 -0700506 public void testGetFileStreamPath() {
507 String TEST_FILENAME = "TestGetFileStreamPath";
The Android Open Source Projectf8057102009-03-15 16:47:16 -0700508
509 // Test the path including the input filename
Phil Dubachb59283e2009-07-21 14:45:09 -0700510 String fileStreamPath = mContextWrapper.getFileStreamPath(TEST_FILENAME).toString();
The Android Open Source Projectf8057102009-03-15 16:47:16 -0700511 assertTrue(fileStreamPath.indexOf(TEST_FILENAME) >= 0);
512 }
513
The Android Open Source Projectf8057102009-03-15 16:47:16 -0700514 public void testGetClassLoader() {
Phil Dubachb59283e2009-07-21 14:45:09 -0700515 assertSame(mContext.getClassLoader(), mContextWrapper.getClassLoader());
The Android Open Source Projectf8057102009-03-15 16:47:16 -0700516 }
517
The Android Open Source Projectf8057102009-03-15 16:47:16 -0700518 public void testGetWallpaperDesiredMinimumHeightAndWidth() {
Phil Dubachb59283e2009-07-21 14:45:09 -0700519 int height = mContextWrapper.getWallpaperDesiredMinimumHeight();
520 int width = mContextWrapper.getWallpaperDesiredMinimumWidth();
The Android Open Source Projectf8057102009-03-15 16:47:16 -0700521
522 // returned value is <= 0, the caller should use the height of the
523 // default display instead.
524 // That is to say, the return values of desired minimumHeight and
525 // minimunWidth are at the same side of 0-dividing line.
526 assertTrue((height > 0 && width > 0) || (height <= 0 && width <= 0));
527 }
528
The Android Open Source Projectf8057102009-03-15 16:47:16 -0700529 public void testAccessStickyBroadcast() throws InterruptedException {
Phil Dubachb59283e2009-07-21 14:45:09 -0700530 ResultReceiver resultReceiver = new ResultReceiver();
The Android Open Source Projectf8057102009-03-15 16:47:16 -0700531
The Android Open Source Projectf8057102009-03-15 16:47:16 -0700532 Intent intent = new Intent(MOCK_STICKY_ACTION);
533 TestBroadcastReceiver stickyReceiver = new TestBroadcastReceiver();
534
Phil Dubachb59283e2009-07-21 14:45:09 -0700535 mContextWrapper.sendStickyBroadcast(intent);
The Android Open Source Projectf8057102009-03-15 16:47:16 -0700536
Phil Dubachb59283e2009-07-21 14:45:09 -0700537 waitForReceiveBroadCast(resultReceiver);
The Android Open Source Projectf8057102009-03-15 16:47:16 -0700538
Phil Dubachb59283e2009-07-21 14:45:09 -0700539 assertEquals(intent.getAction(), mContextWrapper.registerReceiver(stickyReceiver,
The Android Open Source Projectf8057102009-03-15 16:47:16 -0700540 new IntentFilter(MOCK_STICKY_ACTION)).getAction());
541
Phil Dubachb59283e2009-07-21 14:45:09 -0700542 synchronized (mLockObj) {
543 mLockObj.wait(BROADCAST_TIMEOUT);
544 }
The Android Open Source Projectf8057102009-03-15 16:47:16 -0700545
Phil Dubachb59283e2009-07-21 14:45:09 -0700546 assertTrue("Receiver didn't make any response.", stickyReceiver.hadReceivedBroadCast());
547
548 mContextWrapper.unregisterReceiver(stickyReceiver);
549 mContextWrapper.removeStickyBroadcast(intent);
550
551 assertNull(mContextWrapper.registerReceiver(stickyReceiver,
The Android Open Source Projectf8057102009-03-15 16:47:16 -0700552 new IntentFilter(MOCK_STICKY_ACTION)));
Phil Dubachb59283e2009-07-21 14:45:09 -0700553 mContextWrapper.unregisterReceiver(stickyReceiver);
The Android Open Source Projectf8057102009-03-15 16:47:16 -0700554 }
555
The Android Open Source Projectf8057102009-03-15 16:47:16 -0700556 public void testCheckCallingOrSelfUriPermission() {
557 Uri uri = Uri.parse("content://ctstest");
The Android Open Source Projectf8057102009-03-15 16:47:16 -0700558
Phil Dubachb59283e2009-07-21 14:45:09 -0700559 int retValue = mContextWrapper.checkCallingOrSelfUriPermission(uri,
The Android Open Source Projectf8057102009-03-15 16:47:16 -0700560 Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
561 assertEquals(PackageManager.PERMISSION_DENIED, retValue);
562 }
563
The Android Open Source Projectf8057102009-03-15 16:47:16 -0700564 public void testGrantUriPermission() {
Phil Dubachb59283e2009-07-21 14:45:09 -0700565 mContextWrapper.grantUriPermission("com.android.mms", Uri.parse("contents://ctstest"),
The Android Open Source Projectf8057102009-03-15 16:47:16 -0700566 Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
567 }
568
The Android Open Source Projectf8057102009-03-15 16:47:16 -0700569 public void testEnforcePermission() {
The Android Open Source Projectf8057102009-03-15 16:47:16 -0700570 try {
Phil Dubachb59283e2009-07-21 14:45:09 -0700571 mContextWrapper.enforcePermission(
The Android Open Source Projectf8057102009-03-15 16:47:16 -0700572 PERMISSION_HARDWARE_TEST, Binder.getCallingPid(),
573 Binder.getCallingUid(),
574 "enforcePermission is not working without possessing an IPC.");
575 fail("enforcePermission is not working without possessing an IPC.");
576 } catch (SecurityException e) {
577 // If the function is ok, it should throw a SecurityException here
578 // because currently no IPC is handled by this process.
579 }
580 }
581
The Android Open Source Projectf8057102009-03-15 16:47:16 -0700582 public void testCheckUriPermission1() {
583 Uri uri = Uri.parse("content://ctstest");
The Android Open Source Projectf8057102009-03-15 16:47:16 -0700584
Phil Dubachb59283e2009-07-21 14:45:09 -0700585 int retValue = mContextWrapper.checkUriPermission(uri, Binder.getCallingPid(), 0,
The Android Open Source Projectf8057102009-03-15 16:47:16 -0700586 Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
587 assertEquals(PackageManager.PERMISSION_GRANTED, retValue);
588
Phil Dubachb59283e2009-07-21 14:45:09 -0700589 retValue = mContextWrapper.checkUriPermission(uri, Binder.getCallingPid(),
The Android Open Source Projectf8057102009-03-15 16:47:16 -0700590 Binder.getCallingUid(), Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
591 assertEquals(PackageManager.PERMISSION_DENIED, retValue);
592 }
593
The Android Open Source Projectf8057102009-03-15 16:47:16 -0700594 public void testCheckUriPermission2() {
595 Uri uri = Uri.parse("content://ctstest");
The Android Open Source Projectf8057102009-03-15 16:47:16 -0700596
Phil Dubachb59283e2009-07-21 14:45:09 -0700597 int retValue = mContextWrapper.checkUriPermission(uri, PERMISSION_HARDWARE_TEST,
The Android Open Source Projectf8057102009-03-15 16:47:16 -0700598 PERMISSION_HARDWARE_TEST, Binder.getCallingPid(), 0,
599 Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
600 assertEquals(PackageManager.PERMISSION_GRANTED, retValue);
601
Phil Dubachb59283e2009-07-21 14:45:09 -0700602 retValue = mContextWrapper.checkUriPermission(uri, PERMISSION_HARDWARE_TEST,
The Android Open Source Projectf8057102009-03-15 16:47:16 -0700603 PERMISSION_HARDWARE_TEST, Binder.getCallingPid(), Binder.getCallingUid(),
604 Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
605 assertEquals(PackageManager.PERMISSION_DENIED, retValue);
606 }
607
The Android Open Source Projectf8057102009-03-15 16:47:16 -0700608 public void testCheckCallingPermission() {
Phil Dubachb59283e2009-07-21 14:45:09 -0700609 int retValue = mContextWrapper.checkCallingPermission(PERMISSION_HARDWARE_TEST);
The Android Open Source Projectf8057102009-03-15 16:47:16 -0700610 assertEquals(PackageManager.PERMISSION_DENIED, retValue);
611 }
612
The Android Open Source Projectf8057102009-03-15 16:47:16 -0700613 public void testCheckCallingUriPermission() {
614 Uri uri = Uri.parse("content://ctstest");
The Android Open Source Projectf8057102009-03-15 16:47:16 -0700615
Phil Dubachb59283e2009-07-21 14:45:09 -0700616 int retValue = mContextWrapper.checkCallingUriPermission(uri,
The Android Open Source Projectf8057102009-03-15 16:47:16 -0700617 Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
618 assertEquals(PackageManager.PERMISSION_DENIED, retValue);
619 }
620
The Android Open Source Projectf8057102009-03-15 16:47:16 -0700621 public void testEnforceCallingUriPermission() {
The Android Open Source Projectf8057102009-03-15 16:47:16 -0700622 try {
623 Uri uri = Uri.parse("content://ctstest");
Phil Dubachb59283e2009-07-21 14:45:09 -0700624 mContextWrapper.enforceCallingUriPermission(uri, Intent.FLAG_GRANT_WRITE_URI_PERMISSION,
The Android Open Source Projectf8057102009-03-15 16:47:16 -0700625 "enforceCallingUriPermission is not working without possessing an IPC.");
626 fail("enforceCallingUriPermission is not working without possessing an IPC.");
627 } catch (SecurityException e) {
628 // If the function is OK, it should throw a SecurityException here because currently no
629 // IPC is handled by this process.
630 }
631 }
632
The Android Open Source Projectf8057102009-03-15 16:47:16 -0700633 public void testGetDir() {
Brett Chabotc9728b32009-12-17 12:26:56 -0800634 File dir = mContextWrapper.getDir("testpath", Context.MODE_WORLD_WRITEABLE);
635 assertNotNull(dir);
636 dir.delete();
The Android Open Source Projectf8057102009-03-15 16:47:16 -0700637 }
638
The Android Open Source Projectf8057102009-03-15 16:47:16 -0700639 public void testGetPackageManager() {
Phil Dubachb59283e2009-07-21 14:45:09 -0700640 assertSame(mContext.getPackageManager(), mContextWrapper.getPackageManager());
The Android Open Source Projectf8057102009-03-15 16:47:16 -0700641 }
642
The Android Open Source Projectf8057102009-03-15 16:47:16 -0700643 public void testCheckCallingOrSelfPermission() {
Amith Yamasani83d90102014-10-01 17:12:43 -0700644 int retValue = mContextWrapper.checkCallingOrSelfPermission(
645 "android.permission.SET_WALLPAPER");
The Android Open Source Projectf8057102009-03-15 16:47:16 -0700646 assertEquals(PackageManager.PERMISSION_GRANTED, retValue);
647 }
648
The Android Open Source Projectf8057102009-03-15 16:47:16 -0700649 public void testSendBroadcast1() throws InterruptedException {
Phil Dubachb59283e2009-07-21 14:45:09 -0700650 final ResultReceiver receiver = new ResultReceiver();
The Android Open Source Projectf8057102009-03-15 16:47:16 -0700651
Phil Dubachb59283e2009-07-21 14:45:09 -0700652 registerBroadcastReceiver(receiver, new IntentFilter(ResultReceiver.MOCK_ACTION));
The Android Open Source Projectf8057102009-03-15 16:47:16 -0700653
Phil Dubachb59283e2009-07-21 14:45:09 -0700654 mContextWrapper.sendBroadcast(new Intent(ResultReceiver.MOCK_ACTION));
The Android Open Source Projectf8057102009-03-15 16:47:16 -0700655
Kristian Monsen01625472011-11-02 11:38:23 +0000656 new PollingCheck(BROADCAST_TIMEOUT){
Phil Dubachb59283e2009-07-21 14:45:09 -0700657 @Override
658 protected boolean check() {
659 return receiver.hasReceivedBroadCast();
660 }
661 }.run();
The Android Open Source Projectf8057102009-03-15 16:47:16 -0700662 }
663
The Android Open Source Projectf8057102009-03-15 16:47:16 -0700664 public void testSendBroadcast2() throws InterruptedException {
Phil Dubachb59283e2009-07-21 14:45:09 -0700665 final ResultReceiver receiver = new ResultReceiver();
The Android Open Source Projectf8057102009-03-15 16:47:16 -0700666
Phil Dubachb59283e2009-07-21 14:45:09 -0700667 registerBroadcastReceiver(receiver, new IntentFilter(ResultReceiver.MOCK_ACTION));
The Android Open Source Projectf8057102009-03-15 16:47:16 -0700668
Phil Dubachb59283e2009-07-21 14:45:09 -0700669 mContextWrapper.sendBroadcast(new Intent(ResultReceiver.MOCK_ACTION), null);
The Android Open Source Projectf8057102009-03-15 16:47:16 -0700670
Kristian Monsen01625472011-11-02 11:38:23 +0000671 new PollingCheck(BROADCAST_TIMEOUT){
Phil Dubachb59283e2009-07-21 14:45:09 -0700672 @Override
673 protected boolean check() {
674 return receiver.hasReceivedBroadCast();
675 }
676 }.run();
The Android Open Source Projectf8057102009-03-15 16:47:16 -0700677 }
678
The Android Open Source Projectf8057102009-03-15 16:47:16 -0700679 public void testEnforceCallingOrSelfUriPermission() {
The Android Open Source Projectf8057102009-03-15 16:47:16 -0700680 try {
681 Uri uri = Uri.parse("content://ctstest");
Phil Dubachb59283e2009-07-21 14:45:09 -0700682 mContextWrapper.enforceCallingOrSelfUriPermission(uri,
The Android Open Source Projectf8057102009-03-15 16:47:16 -0700683 Intent.FLAG_GRANT_WRITE_URI_PERMISSION,
684 "enforceCallingOrSelfUriPermission is not working without possessing an IPC.");
685 fail("enforceCallingOrSelfUriPermission is not working without possessing an IPC.");
686 } catch (SecurityException e) {
687 // If the function is OK, it should throw a SecurityException here because currently no
688 // IPC is handled by this process.
689 }
690 }
691
The Android Open Source Projectf8057102009-03-15 16:47:16 -0700692 public void testCheckPermission() {
The Android Open Source Projectf8057102009-03-15 16:47:16 -0700693 // Test with root user, everything will be granted.
Phil Dubachb59283e2009-07-21 14:45:09 -0700694 int returnValue = mContextWrapper.checkPermission(PERMISSION_HARDWARE_TEST, 1, 0);
The Android Open Source Projectf8057102009-03-15 16:47:16 -0700695 assertEquals(PackageManager.PERMISSION_GRANTED, returnValue);
696
697 // Test with non-root user, only included granted permission.
Phil Dubachb59283e2009-07-21 14:45:09 -0700698 returnValue = mContextWrapper.checkPermission(PERMISSION_HARDWARE_TEST, 1, 1);
The Android Open Source Projectf8057102009-03-15 16:47:16 -0700699 assertEquals(PackageManager.PERMISSION_DENIED, returnValue);
700
701 // Test with null permission.
702 try {
Phil Dubachb59283e2009-07-21 14:45:09 -0700703 returnValue = mContextWrapper.checkPermission(null, 0, 0);
The Android Open Source Projectf8057102009-03-15 16:47:16 -0700704 fail("checkPermission should not accept null permission");
705 } catch (IllegalArgumentException e) {
706 }
707
708 // Test with invalid uid and included granted permission.
Amith Yamasani83d90102014-10-01 17:12:43 -0700709 returnValue = mContextWrapper.checkPermission("android.permission.SET_WALLPAPER", 1, -11);
The Android Open Source Projectf8057102009-03-15 16:47:16 -0700710 assertEquals(PackageManager.PERMISSION_DENIED, returnValue);
711 }
712
The Android Open Source Projectf8057102009-03-15 16:47:16 -0700713 public void testGetSystemService() {
The Android Open Source Projectf8057102009-03-15 16:47:16 -0700714 // Test invalid service name
Phil Dubachb59283e2009-07-21 14:45:09 -0700715 assertNull(mContextWrapper.getSystemService("invalid"));
The Android Open Source Projectf8057102009-03-15 16:47:16 -0700716
717 // Test valid service name
Christian Mehlmauer9ff90a32010-06-01 23:06:29 +0200718 assertNotNull(mContextWrapper.getSystemService(Context.WINDOW_SERVICE));
The Android Open Source Projectf8057102009-03-15 16:47:16 -0700719 }
720
Jeff Brown7aea52d2015-02-25 14:04:26 -0800721 public void testGetSystemServiceByClass() {
722 // Test invalid service class
723 assertNull(mContextWrapper.getSystemService(Object.class));
724
725 // Test valid service name
726 assertNotNull(mContextWrapper.getSystemService(WindowManager.class));
727 assertEquals(mContextWrapper.getSystemService(Context.WINDOW_SERVICE),
728 mContextWrapper.getSystemService(WindowManager.class));
729 }
730
The Android Open Source Projectf8057102009-03-15 16:47:16 -0700731 public void testGetAssets() {
Phil Dubachb59283e2009-07-21 14:45:09 -0700732 assertSame(mContext.getAssets(), mContextWrapper.getAssets());
The Android Open Source Projectf8057102009-03-15 16:47:16 -0700733 }
734
The Android Open Source Projectf8057102009-03-15 16:47:16 -0700735 public void testGetResources() {
Phil Dubachb59283e2009-07-21 14:45:09 -0700736 assertSame(mContext.getResources(), mContextWrapper.getResources());
The Android Open Source Projectf8057102009-03-15 16:47:16 -0700737 }
738
The Android Open Source Projectf8057102009-03-15 16:47:16 -0700739 public void testStartInstrumentation() {
The Android Open Source Projectf8057102009-03-15 16:47:16 -0700740 // Use wrong name
741 ComponentName cn = new ComponentName("com.android",
742 "com.android.content.FalseLocalSampleInstrumentation");
743 assertNotNull(cn);
Phil Dubachb59283e2009-07-21 14:45:09 -0700744 assertNotNull(mContextWrapper);
The Android Open Source Projectf8057102009-03-15 16:47:16 -0700745 // If the target instrumentation is wrong, the function should return false.
Phil Dubachb59283e2009-07-21 14:45:09 -0700746 assertFalse(mContextWrapper.startInstrumentation(cn, null, null));
The Android Open Source Projectf8057102009-03-15 16:47:16 -0700747 }
748
749 private void bindExpectResult(Context contextWrapper, Intent service)
750 throws InterruptedException {
751 if (service == null) {
752 fail("No service created!");
753 }
754 TestConnection conn = new TestConnection(true, false);
755
756 contextWrapper.bindService(service, conn, Context.BIND_AUTO_CREATE);
757 contextWrapper.startService(service);
758
759 // Wait for a short time, so the service related operations could be
760 // working.
761 synchronized (this) {
762 wait(2500);
763 }
764 // Test stop Service
765 assertTrue(contextWrapper.stopService(service));
766 contextWrapper.unbindService(conn);
767
768 synchronized (this) {
769 wait(1000);
770 }
771 }
772
The Android Open Source Projectf8057102009-03-15 16:47:16 -0700773 private interface Condition {
774 public boolean onCondition();
775 }
776
Phil Dubachb59283e2009-07-21 14:45:09 -0700777 private synchronized void waitForCondition(Condition con) throws InterruptedException {
The Android Open Source Projectf8057102009-03-15 16:47:16 -0700778 // check the condition every 1 second until the condition is fulfilled
779 // and wait for 3 seconds at most
Phil Dubachb59283e2009-07-21 14:45:09 -0700780 for (int i = 0; !con.onCondition() && i <= 3; i++) {
781 wait(1000);
The Android Open Source Projectf8057102009-03-15 16:47:16 -0700782 }
783 }
784
Phil Dubachb59283e2009-07-21 14:45:09 -0700785 private void waitForReceiveBroadCast(final ResultReceiver receiver)
786 throws InterruptedException {
The Android Open Source Projectf8057102009-03-15 16:47:16 -0700787 Condition con = new Condition() {
788 public boolean onCondition() {
Phil Dubachb59283e2009-07-21 14:45:09 -0700789 return receiver.hasReceivedBroadCast();
The Android Open Source Projectf8057102009-03-15 16:47:16 -0700790 }
791 };
792 waitForCondition(con);
793 }
794
Fyodor Kupolovd476b032015-10-26 12:40:24 -0700795 private void waitForFilteredIntent(ContextWrapper contextWrapper, final String action)
796 throws InterruptedException {
Phil Dubachb59283e2009-07-21 14:45:09 -0700797 contextWrapper.sendOrderedBroadcast(new Intent(action), null);
The Android Open Source Projectf8057102009-03-15 16:47:16 -0700798
799 synchronized (mLockObj) {
Phil Dubachb59283e2009-07-21 14:45:09 -0700800 mLockObj.wait(BROADCAST_TIMEOUT);
The Android Open Source Projectf8057102009-03-15 16:47:16 -0700801 }
802 }
803
Phil Dubachb59283e2009-07-21 14:45:09 -0700804 private static final class MockContextWrapper extends ContextWrapper {
The Android Open Source Projectf8057102009-03-15 16:47:16 -0700805 public MockContextWrapper(Context base) {
806 super(base);
807 }
808
809 @Override
810 public void attachBaseContext(Context base) {
811 super.attachBaseContext(base);
812 }
813 }
814
Phil Dubachb59283e2009-07-21 14:45:09 -0700815 private final class TestBroadcastReceiver extends BroadcastReceiver {
816 boolean mHadReceivedBroadCast;
817 boolean mIsOrderedBroadcasts;
The Android Open Source Projectf8057102009-03-15 16:47:16 -0700818
819 @Override
820 public void onReceive(Context context, Intent intent) {
821 synchronized (this) {
Phil Dubachb59283e2009-07-21 14:45:09 -0700822 if (mIsOrderedBroadcasts) {
823 setResultCode(3);
824 setResultData(ACTUAL_RESULT);
825 }
826
The Android Open Source Projectf8057102009-03-15 16:47:16 -0700827 Bundle map = getResultExtras(false);
828 if (map != null) {
829 map.remove(KEY_REMOVED);
830 map.putString(KEY_ADDED, VALUE_ADDED);
831 }
832 mHadReceivedBroadCast = true;
833 this.notifyAll();
834 }
835
836 synchronized (mLockObj) {
837 mLockObj.notify();
838 }
839 }
840
Phil Dubachb59283e2009-07-21 14:45:09 -0700841 boolean hadReceivedBroadCast() {
The Android Open Source Projectf8057102009-03-15 16:47:16 -0700842 return mHadReceivedBroadCast;
843 }
844
Phil Dubachb59283e2009-07-21 14:45:09 -0700845 void reset(){
The Android Open Source Projectf8057102009-03-15 16:47:16 -0700846 mHadReceivedBroadCast = false;
847 }
848 }
849
850 private class FilteredReceiver extends BroadcastReceiver {
851 private boolean mHadReceivedBroadCast1 = false;
852
853 private boolean mHadReceivedBroadCast2 = false;
854
855 public void onReceive(Context context, Intent intent) {
856 String action = intent.getAction();
857 if (MOCK_ACTION1.equals(action)) {
858 mHadReceivedBroadCast1 = true;
859 } else if (MOCK_ACTION2.equals(action)) {
860 mHadReceivedBroadCast2 = true;
861 }
862
863 synchronized (mLockObj) {
864 mLockObj.notify();
865 }
866 }
867
868 public boolean hadReceivedBroadCast1() {
869 return mHadReceivedBroadCast1;
870 }
871
872 public boolean hadReceivedBroadCast2() {
873 return mHadReceivedBroadCast2;
874 }
875
876 public void reset(){
877 mHadReceivedBroadCast1 = false;
878 mHadReceivedBroadCast2 = false;
879 }
880 }
881
882 private class TestConnection implements ServiceConnection {
883 public TestConnection(boolean expectDisconnect, boolean setReporter) {
884 }
885
886 void setMonitor(boolean v) {
887 }
888
889 public void onServiceConnected(ComponentName name, IBinder service) {
890 }
891
892 public void onServiceDisconnected(ComponentName name) {
893 }
894 }
895}