Modify android.test.runner to use new mock APIs

Previous change added some new public APIs to allow the
android.test.runner classes to be built against the public API stubs
rather than the internal classes. This change updates the
android.test.runner classes to use that new API.

This in turn is preparation for building an android.test.legacy library
that can be safely statically included in APKs.

Bug: 30188076
Test: make checkbuild

(cherry picked from commit 20af1df63f)

Merged-In: I302626abb7e048ef0c3169e9a5209b85f2f87d34
Change-Id: Ie05a17598fcabc1189cacc912c01a25782ebd29c
This commit is contained in:
Paul Duffin
2018-01-05 13:52:17 +00:00
parent 0aa3b20a66
commit 4ea70a23ea
4 changed files with 10 additions and 86 deletions

View File

@@ -17,12 +17,6 @@
package android.test;
import android.accounts.AccountManager;
import android.accounts.AccountManagerCallback;
import android.accounts.AccountManagerFuture;
import android.accounts.AuthenticatorException;
import android.accounts.OnAccountsUpdateListener;
import android.accounts.OperationCanceledException;
import android.accounts.Account;
import android.content.ContextWrapper;
import android.content.ContentResolver;
import android.content.Intent;
@@ -32,12 +26,10 @@ import android.content.BroadcastReceiver;
import android.content.IntentFilter;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.os.Handler;
import android.test.mock.MockAccountManager;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.concurrent.TimeUnit;
import java.util.List;
@@ -52,7 +44,7 @@ import java.util.List;
public class IsolatedContext extends ContextWrapper {
private ContentResolver mResolver;
private final MockAccountManager mMockAccountManager;
private final AccountManager mMockAccountManager;
private List<Intent> mBroadcastIntents = new ArrayList<>();
@@ -60,7 +52,7 @@ public class IsolatedContext extends ContextWrapper {
ContentResolver resolver, Context targetContext) {
super(targetContext);
mResolver = resolver;
mMockAccountManager = new MockAccountManager();
mMockAccountManager = MockAccountManager.newMockAccountManager(IsolatedContext.this);
}
/** Returns the list of intents that were broadcast since the last call to this method. */
@@ -123,71 +115,6 @@ public class IsolatedContext extends ContextWrapper {
return null;
}
private class MockAccountManager extends AccountManager {
public MockAccountManager() {
super(IsolatedContext.this, null /* IAccountManager */, null /* handler */);
}
public void addOnAccountsUpdatedListener(OnAccountsUpdateListener listener,
Handler handler, boolean updateImmediately) {
// do nothing
}
public Account[] getAccounts() {
return new Account[]{};
}
public AccountManagerFuture<Account[]> getAccountsByTypeAndFeatures(
final String type, final String[] features,
AccountManagerCallback<Account[]> callback, Handler handler) {
return new MockAccountManagerFuture<Account[]>(new Account[0]);
}
public String blockingGetAuthToken(Account account, String authTokenType,
boolean notifyAuthFailure)
throws OperationCanceledException, IOException, AuthenticatorException {
return null;
}
/**
* A very simple AccountManagerFuture class
* that returns what ever was passed in
*/
private class MockAccountManagerFuture<T>
implements AccountManagerFuture<T> {
T mResult;
public MockAccountManagerFuture(T result) {
mResult = result;
}
public boolean cancel(boolean mayInterruptIfRunning) {
return false;
}
public boolean isCancelled() {
return false;
}
public boolean isDone() {
return true;
}
public T getResult()
throws OperationCanceledException, IOException, AuthenticatorException {
return mResult;
}
public T getResult(long timeout, TimeUnit unit)
throws OperationCanceledException, IOException, AuthenticatorException {
return getResult();
}
}
}
@Override
public File getFilesDir() {
return new File("/dev/null");

View File

@@ -21,6 +21,7 @@ import android.content.ContentResolver;
import android.content.Context;
import android.content.pm.ProviderInfo;
import android.content.res.Resources;
import android.test.mock.MockContentProvider;
import android.test.mock.MockContext;
import android.test.mock.MockContentResolver;
import android.database.DatabaseUtils;
@@ -152,7 +153,7 @@ public abstract class ProviderTestCase2<T extends ContentProvider> extends Andro
T instance = providerClass.newInstance();
ProviderInfo providerInfo = new ProviderInfo();
providerInfo.authority = authority;
instance.attachInfoForTesting(context, providerInfo);
MockContentProvider.attachInfoForTesting(instance, context, providerInfo);
return instance;
}

View File

@@ -21,6 +21,7 @@ import android.content.ContextWrapper;
import android.content.ContentProvider;
import android.database.DatabaseErrorHandler;
import android.database.sqlite.SQLiteDatabase;
import android.test.mock.MockContentProvider;
import android.util.Log;
import java.io.File;
@@ -71,7 +72,7 @@ public class RenamingDelegatingContext extends ContextWrapper {
if (allowAccessToExistingFilesAndDbs) {
mContext.makeExistingFilesAndDbsAccessible();
}
mProvider.attachInfoForTesting(mContext, null);
MockContentProvider.attachInfoForTesting(mProvider, mContext, null);
return mProvider;
}

View File

@@ -23,6 +23,7 @@ import android.content.Intent;
import android.os.IBinder;
import android.test.mock.MockApplication;
import android.test.mock.MockService;
import java.util.Random;
/**
@@ -163,14 +164,8 @@ public abstract class ServiceTestCase<T extends Service> extends AndroidTestCase
if (getApplication() == null) {
setApplication(new MockApplication());
}
mService.attach(
getContext(),
null, // ActivityThread not actually used in Service
mServiceClass.getName(),
null, // token not needed when not talking with the activity manager
getApplication(),
null // mocked services don't talk with the activity manager
);
MockService.attachForTesting(
mService, getContext(), mServiceClass.getName(), getApplication());
assertNotNull(mService);