110362ab9d67d87c0c3217e804e64d3e7038211dfKenny Root/* 210362ab9d67d87c0c3217e804e64d3e7038211dfKenny Root * Copyright (C) 2008 The Android Open Source Project 310362ab9d67d87c0c3217e804e64d3e7038211dfKenny Root * 410362ab9d67d87c0c3217e804e64d3e7038211dfKenny Root * Licensed under the Apache License, Version 2.0 (the "License"); 510362ab9d67d87c0c3217e804e64d3e7038211dfKenny Root * you may not use this file except in compliance with the License. 610362ab9d67d87c0c3217e804e64d3e7038211dfKenny Root * You may obtain a copy of the License at 710362ab9d67d87c0c3217e804e64d3e7038211dfKenny Root * 810362ab9d67d87c0c3217e804e64d3e7038211dfKenny Root * http://www.apache.org/licenses/LICENSE-2.0 910362ab9d67d87c0c3217e804e64d3e7038211dfKenny Root * 1010362ab9d67d87c0c3217e804e64d3e7038211dfKenny Root * Unless required by applicable law or agreed to in writing, software 1110362ab9d67d87c0c3217e804e64d3e7038211dfKenny Root * distributed under the License is distributed on an "AS IS" BASIS, 1210362ab9d67d87c0c3217e804e64d3e7038211dfKenny Root * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1310362ab9d67d87c0c3217e804e64d3e7038211dfKenny Root * See the License for the specific language governing permissions and 1410362ab9d67d87c0c3217e804e64d3e7038211dfKenny Root * limitations under the License. 1510362ab9d67d87c0c3217e804e64d3e7038211dfKenny Root */ 1610362ab9d67d87c0c3217e804e64d3e7038211dfKenny Root 179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpackage android.test; 189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport com.google.android.collect.Lists; 209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 210eabf0228a17e07ef831bc1ee1951c9697d2a079Fred Quintanaimport android.accounts.AccountManager; 2269120a73d0f7a1862d51e0a95ebd5e507fee8cd2Paul Westbrookimport android.accounts.AccountManagerCallback; 2369120a73d0f7a1862d51e0a95ebd5e507fee8cd2Paul Westbrookimport android.accounts.AccountManagerFuture; 2469120a73d0f7a1862d51e0a95ebd5e507fee8cd2Paul Westbrookimport android.accounts.AuthenticatorException; 25f7ae77cd67f1a3993b8e56c1af4720a7adf4e69dFred Quintanaimport android.accounts.OnAccountsUpdateListener; 2669120a73d0f7a1862d51e0a95ebd5e507fee8cd2Paul Westbrookimport android.accounts.OperationCanceledException; 27904de61465abff8dba6fcc768d6bf5586f86ed0fCynthia Wongimport android.accounts.Account; 289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.ContextWrapper; 299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.ContentResolver; 309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.Intent; 319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.Context; 329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.ServiceConnection; 339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.BroadcastReceiver; 349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.IntentFilter; 359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.pm.PackageManager; 369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.net.Uri; 370eabf0228a17e07ef831bc1ee1951c9697d2a079Fred Quintanaimport android.os.Handler; 389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 393b95f5378957c4e985429dfefda3975416c1a039Ken Shirriffimport java.io.File; 4069120a73d0f7a1862d51e0a95ebd5e507fee8cd2Paul Westbrookimport java.io.IOException; 4169120a73d0f7a1862d51e0a95ebd5e507fee8cd2Paul Westbrookimport java.util.concurrent.TimeUnit; 4269120a73d0f7a1862d51e0a95ebd5e507fee8cd2Paul Westbrookimport java.util.List; 4369120a73d0f7a1862d51e0a95ebd5e507fee8cd2Paul Westbrook 449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/** 46b51617f4668ef8cf0e6d8d0fc3284eae51dbd8caStephan Linzner * A mock context which prevents its users from talking to the rest of the device while 479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * stubbing enough methods to satify code that tries to talk to other packages. 48b51617f4668ef8cf0e6d8d0fc3284eae51dbd8caStephan Linzner * 49b51617f4668ef8cf0e6d8d0fc3284eae51dbd8caStephan Linzner * @deprecated New tests should be written using the 50b51617f4668ef8cf0e6d8d0fc3284eae51dbd8caStephan Linzner * <a href="{@docRoot}tools/testing-support-library/index.html">Android Testing Support Library</a>. 519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 52b51617f4668ef8cf0e6d8d0fc3284eae51dbd8caStephan Linzner@Deprecated 539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic class IsolatedContext extends ContextWrapper { 549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private ContentResolver mResolver; 560eabf0228a17e07ef831bc1ee1951c9697d2a079Fred Quintana private final MockAccountManager mMockAccountManager; 579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private List<Intent> mBroadcastIntents = Lists.newArrayList(); 599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public IsolatedContext( 619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ContentResolver resolver, Context targetContext) { 629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project super(targetContext); 639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mResolver = resolver; 640eabf0228a17e07ef831bc1ee1951c9697d2a079Fred Quintana mMockAccountManager = new MockAccountManager(); 659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** Returns the list of intents that were broadcast since the last call to this method. */ 689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public List<Intent> getAndClearBroadcastIntents() { 699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project List<Intent> intents = mBroadcastIntents; 709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mBroadcastIntents = Lists.newArrayList(); 719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return intents; 729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public ContentResolver getContentResolver() { 769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // We need to return the real resolver so that MailEngine.makeRight can get to the 779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // subscribed feeds provider. TODO: mock out subscribed feeds too. 789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mResolver; 799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean bindService(Intent service, ServiceConnection conn, int flags) { 839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return false; 849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Intent registerReceiver(BroadcastReceiver receiver, IntentFilter filter) { 889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return null; 899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 92d672475753af1feff1c0f81bba72637ec0b536cdJonas Schwertfeger public void unregisterReceiver(BroadcastReceiver receiver) { 93d672475753af1feff1c0f81bba72637ec0b536cdJonas Schwertfeger // Ignore 94d672475753af1feff1c0f81bba72637ec0b536cdJonas Schwertfeger } 95d672475753af1feff1c0f81bba72637ec0b536cdJonas Schwertfeger 96d672475753af1feff1c0f81bba72637ec0b536cdJonas Schwertfeger @Override 979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void sendBroadcast(Intent intent) { 989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mBroadcastIntents.add(intent); 999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void sendOrderedBroadcast(Intent intent, String receiverPermission) { 1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mBroadcastIntents.add(intent); 1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int checkUriPermission( 1089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Uri uri, String readPermission, String writePermission, int pid, 1099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int uid, int modeFlags) { 1109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return PackageManager.PERMISSION_GRANTED; 1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 1149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int checkUriPermission(Uri uri, int pid, int uid, int modeFlags) { 1159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return PackageManager.PERMISSION_GRANTED; 1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 1199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Object getSystemService(String name) { 1200eabf0228a17e07ef831bc1ee1951c9697d2a079Fred Quintana if (Context.ACCOUNT_SERVICE.equals(name)) { 1210eabf0228a17e07ef831bc1ee1951c9697d2a079Fred Quintana return mMockAccountManager; 1220eabf0228a17e07ef831bc1ee1951c9697d2a079Fred Quintana } 1230eabf0228a17e07ef831bc1ee1951c9697d2a079Fred Quintana // No other services exist in this context. 1249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return null; 1259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1270eabf0228a17e07ef831bc1ee1951c9697d2a079Fred Quintana private class MockAccountManager extends AccountManager { 1280eabf0228a17e07ef831bc1ee1951c9697d2a079Fred Quintana public MockAccountManager() { 1290eabf0228a17e07ef831bc1ee1951c9697d2a079Fred Quintana super(IsolatedContext.this, null /* IAccountManager */, null /* handler */); 1300eabf0228a17e07ef831bc1ee1951c9697d2a079Fred Quintana } 1310eabf0228a17e07ef831bc1ee1951c9697d2a079Fred Quintana 132f7ae77cd67f1a3993b8e56c1af4720a7adf4e69dFred Quintana public void addOnAccountsUpdatedListener(OnAccountsUpdateListener listener, 1330eabf0228a17e07ef831bc1ee1951c9697d2a079Fred Quintana Handler handler, boolean updateImmediately) { 1340eabf0228a17e07ef831bc1ee1951c9697d2a079Fred Quintana // do nothing 1350eabf0228a17e07ef831bc1ee1951c9697d2a079Fred Quintana } 136904de61465abff8dba6fcc768d6bf5586f86ed0fCynthia Wong 137904de61465abff8dba6fcc768d6bf5586f86ed0fCynthia Wong public Account[] getAccounts() { 138904de61465abff8dba6fcc768d6bf5586f86ed0fCynthia Wong return new Account[]{}; 139904de61465abff8dba6fcc768d6bf5586f86ed0fCynthia Wong } 14069120a73d0f7a1862d51e0a95ebd5e507fee8cd2Paul Westbrook 14169120a73d0f7a1862d51e0a95ebd5e507fee8cd2Paul Westbrook public AccountManagerFuture<Account[]> getAccountsByTypeAndFeatures( 14269120a73d0f7a1862d51e0a95ebd5e507fee8cd2Paul Westbrook final String type, final String[] features, 14369120a73d0f7a1862d51e0a95ebd5e507fee8cd2Paul Westbrook AccountManagerCallback<Account[]> callback, Handler handler) { 14469120a73d0f7a1862d51e0a95ebd5e507fee8cd2Paul Westbrook return new MockAccountManagerFuture<Account[]>(new Account[0]); 14569120a73d0f7a1862d51e0a95ebd5e507fee8cd2Paul Westbrook } 14669120a73d0f7a1862d51e0a95ebd5e507fee8cd2Paul Westbrook 14769120a73d0f7a1862d51e0a95ebd5e507fee8cd2Paul Westbrook public String blockingGetAuthToken(Account account, String authTokenType, 14869120a73d0f7a1862d51e0a95ebd5e507fee8cd2Paul Westbrook boolean notifyAuthFailure) 14969120a73d0f7a1862d51e0a95ebd5e507fee8cd2Paul Westbrook throws OperationCanceledException, IOException, AuthenticatorException { 15069120a73d0f7a1862d51e0a95ebd5e507fee8cd2Paul Westbrook return null; 15169120a73d0f7a1862d51e0a95ebd5e507fee8cd2Paul Westbrook } 15269120a73d0f7a1862d51e0a95ebd5e507fee8cd2Paul Westbrook 15369120a73d0f7a1862d51e0a95ebd5e507fee8cd2Paul Westbrook 15469120a73d0f7a1862d51e0a95ebd5e507fee8cd2Paul Westbrook /** 15569120a73d0f7a1862d51e0a95ebd5e507fee8cd2Paul Westbrook * A very simple AccountManagerFuture class 15669120a73d0f7a1862d51e0a95ebd5e507fee8cd2Paul Westbrook * that returns what ever was passed in 15769120a73d0f7a1862d51e0a95ebd5e507fee8cd2Paul Westbrook */ 15869120a73d0f7a1862d51e0a95ebd5e507fee8cd2Paul Westbrook private class MockAccountManagerFuture<T> 15969120a73d0f7a1862d51e0a95ebd5e507fee8cd2Paul Westbrook implements AccountManagerFuture<T> { 16069120a73d0f7a1862d51e0a95ebd5e507fee8cd2Paul Westbrook 16169120a73d0f7a1862d51e0a95ebd5e507fee8cd2Paul Westbrook T mResult; 16269120a73d0f7a1862d51e0a95ebd5e507fee8cd2Paul Westbrook 16369120a73d0f7a1862d51e0a95ebd5e507fee8cd2Paul Westbrook public MockAccountManagerFuture(T result) { 16469120a73d0f7a1862d51e0a95ebd5e507fee8cd2Paul Westbrook mResult = result; 16569120a73d0f7a1862d51e0a95ebd5e507fee8cd2Paul Westbrook } 16669120a73d0f7a1862d51e0a95ebd5e507fee8cd2Paul Westbrook 16769120a73d0f7a1862d51e0a95ebd5e507fee8cd2Paul Westbrook public boolean cancel(boolean mayInterruptIfRunning) { 16869120a73d0f7a1862d51e0a95ebd5e507fee8cd2Paul Westbrook return false; 16969120a73d0f7a1862d51e0a95ebd5e507fee8cd2Paul Westbrook } 17069120a73d0f7a1862d51e0a95ebd5e507fee8cd2Paul Westbrook 17169120a73d0f7a1862d51e0a95ebd5e507fee8cd2Paul Westbrook public boolean isCancelled() { 17269120a73d0f7a1862d51e0a95ebd5e507fee8cd2Paul Westbrook return false; 17369120a73d0f7a1862d51e0a95ebd5e507fee8cd2Paul Westbrook } 17469120a73d0f7a1862d51e0a95ebd5e507fee8cd2Paul Westbrook 17569120a73d0f7a1862d51e0a95ebd5e507fee8cd2Paul Westbrook public boolean isDone() { 17669120a73d0f7a1862d51e0a95ebd5e507fee8cd2Paul Westbrook return true; 17769120a73d0f7a1862d51e0a95ebd5e507fee8cd2Paul Westbrook } 17869120a73d0f7a1862d51e0a95ebd5e507fee8cd2Paul Westbrook 17969120a73d0f7a1862d51e0a95ebd5e507fee8cd2Paul Westbrook public T getResult() 18069120a73d0f7a1862d51e0a95ebd5e507fee8cd2Paul Westbrook throws OperationCanceledException, IOException, AuthenticatorException { 18169120a73d0f7a1862d51e0a95ebd5e507fee8cd2Paul Westbrook return mResult; 18269120a73d0f7a1862d51e0a95ebd5e507fee8cd2Paul Westbrook } 18369120a73d0f7a1862d51e0a95ebd5e507fee8cd2Paul Westbrook 18469120a73d0f7a1862d51e0a95ebd5e507fee8cd2Paul Westbrook public T getResult(long timeout, TimeUnit unit) 18569120a73d0f7a1862d51e0a95ebd5e507fee8cd2Paul Westbrook throws OperationCanceledException, IOException, AuthenticatorException { 18669120a73d0f7a1862d51e0a95ebd5e507fee8cd2Paul Westbrook return getResult(); 18769120a73d0f7a1862d51e0a95ebd5e507fee8cd2Paul Westbrook } 18869120a73d0f7a1862d51e0a95ebd5e507fee8cd2Paul Westbrook } 18969120a73d0f7a1862d51e0a95ebd5e507fee8cd2Paul Westbrook 1900eabf0228a17e07ef831bc1ee1951c9697d2a079Fred Quintana } 19169120a73d0f7a1862d51e0a95ebd5e507fee8cd2Paul Westbrook 1923b95f5378957c4e985429dfefda3975416c1a039Ken Shirriff @Override 1933b95f5378957c4e985429dfefda3975416c1a039Ken Shirriff public File getFilesDir() { 1943b95f5378957c4e985429dfefda3975416c1a039Ken Shirriff return new File("/dev/null"); 1953b95f5378957c4e985429dfefda3975416c1a039Ken Shirriff } 1969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 197