From 9189c4c2f05bc3f044f8a9c78339d0bfedb3dd8b Mon Sep 17 00:00:00 2001 From: Akos Ludanyi Date: Thu, 4 Sep 2014 14:08:49 +0200 Subject: Fix ProviderTestCase2 broken by ag/519661: Problem: 1. ProviderTestCase2 passes a null as a ProviderInfo to the ContentProvider 2. mAuthority and mAuthorities will be null during the test 3. ContentProvider.matchesOurAuthorities will throw an NPE. Fix: Supply a ProviderInfo with authority. Example bug: b/17379295 Change-Id: Ia533313c0994727ef81f337a4e31a57ae7ec3c15 --- test-runner/src/android/test/ProviderTestCase.java | 8 +++----- .../src/android/test/ProviderTestCase2.java | 22 ++++++++++++++++------ 2 files changed, 19 insertions(+), 11 deletions(-) (limited to 'test-runner') diff --git a/test-runner/src/android/test/ProviderTestCase.java b/test-runner/src/android/test/ProviderTestCase.java index 1b323cf..4108f34 100644 --- a/test-runner/src/android/test/ProviderTestCase.java +++ b/test-runner/src/android/test/ProviderTestCase.java @@ -67,9 +67,8 @@ public abstract class ProviderTestCase filenamePrefix); mProviderContext = new IsolatedContext(mResolver, targetContextWrapper); - mProvider = mProviderClass.newInstance(); - mProvider.attachInfoForTesting(mProviderContext, null); - assertNotNull(mProvider); + mProvider = ProviderTestCase2.createProviderForTest( + mProviderContext, mProviderClass, mProviderAuthority); mResolver.addProvider(mProviderAuthority, getProvider()); } @@ -107,8 +106,7 @@ public abstract class ProviderTestCase resolver, targetContextWrapper); DatabaseUtils.createDbFromSqlStatements(context, databaseName, databaseVersion, sql); - T provider = providerClass.newInstance(); - provider.attachInfoForTesting(context, null); + T provider = ProviderTestCase2.createProviderForTest(context, providerClass, authority); resolver.addProvider(authority, provider); return resolver; diff --git a/test-runner/src/android/test/ProviderTestCase2.java b/test-runner/src/android/test/ProviderTestCase2.java index dcd089d..1fa633e 100644 --- a/test-runner/src/android/test/ProviderTestCase2.java +++ b/test-runner/src/android/test/ProviderTestCase2.java @@ -19,6 +19,7 @@ package android.test; import android.content.ContentProvider; import android.content.ContentResolver; import android.content.Context; +import android.content.pm.ProviderInfo; import android.content.res.Resources; import android.test.mock.MockContext; import android.test.mock.MockContentResolver; @@ -138,14 +139,24 @@ public abstract class ProviderTestCase2 extends Andro getContext(), // The context that file methods are delegated to filenamePrefix); mProviderContext = new IsolatedContext(mResolver, targetContextWrapper); - - mProvider = mProviderClass.newInstance(); - mProvider.attachInfoForTesting(mProviderContext, null); - assertNotNull(mProvider); + mProvider = createProviderForTest(mProviderContext, mProviderClass, mProviderAuthority); mResolver.addProvider(mProviderAuthority, getProvider()); } /** + * Creates and sets up a new instance of the provider. + */ + static T createProviderForTest( + Context context, Class providerClass, String authority) + throws IllegalAccessException, InstantiationException { + T instance = providerClass.newInstance(); + ProviderInfo providerInfo = new ProviderInfo(); + providerInfo.authority = authority; + instance.attachInfoForTesting(context, providerInfo); + return instance; + } + + /** * Tears down the environment for the test fixture. *

* Calls {@link android.content.ContentProvider#shutdown()} on the @@ -218,8 +229,7 @@ public abstract class ProviderTestCase2 extends Andro Context context = new IsolatedContext(resolver, targetContextWrapper); DatabaseUtils.createDbFromSqlStatements(context, databaseName, databaseVersion, sql); - T provider = providerClass.newInstance(); - provider.attachInfoForTesting(context, null); + T provider = createProviderForTest(context, providerClass, authority); resolver.addProvider(authority, provider); return resolver; -- cgit v1.1