Skip to content

Commit

Permalink
Fix remaining CloseGuard warnings in Robolectric tests
Browse files Browse the repository at this point in the history
CloseGuard warnings and stack traces accounted for ~40% of log
lines during Robolectric tests.

This will remove around ~3.5k CloseGuard errors and stack traces in the
Robolectric test suite.

PiperOrigin-RevId: 413781118
  • Loading branch information
hoisie committed Dec 6, 2021
1 parent bcb31db commit dae9bb1
Show file tree
Hide file tree
Showing 22 changed files with 282 additions and 106 deletions.
@@ -1,19 +1,22 @@
package org.robolectric.android.controller;

import static com.google.common.truth.Truth.assertThat;
import static org.junit.Assert.assertThrows;

import android.app.Application;
import android.content.ContentProviderClient;
import android.content.ContentResolver;
import android.content.pm.PathPermission;
import android.content.pm.ProviderInfo;
import android.net.Uri;
import android.os.Build;
import androidx.test.core.app.ApplicationProvider;
import androidx.test.ext.junit.runners.AndroidJUnit4;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.robolectric.Robolectric;
import org.robolectric.RuntimeEnvironment;
import org.robolectric.shadows.testing.TestContentProvider1;
import org.robolectric.shadows.testing.TestContentProvider3And4;

Expand Down Expand Up @@ -42,7 +45,7 @@ public void shouldInitializeFromManifestProviderInfo() throws Exception {
assertThat(myContentProvider.getReadPermission()).isEqualTo("READ_PERMISSION");
assertThat(myContentProvider.getWritePermission()).isEqualTo("WRITE_PERMISSION");

assertThat(myContentProvider.getPathPermissions()).asList().hasSize(1);
assertThat(myContentProvider.getPathPermissions()).hasLength(1);
PathPermission pathPermission = myContentProvider.getPathPermissions()[0];
assertThat(pathPermission.getPath()).isEqualTo("/path/*");
assertThat(pathPermission.getType()).isEqualTo(PathPermission.PATTERN_SIMPLE_GLOB);
Expand All @@ -55,10 +58,10 @@ public void shouldRegisterWithContentResolver() throws Exception {
controller.create().get();

ContentProviderClient client =
contentResolver.acquireContentProviderClient(
"org.robolectric.authority1");
client.query(Uri.parse("something"), new String[]{"title"}, "*", new String[]{}, "created");
contentResolver.acquireContentProviderClient("org.robolectric.authority1");
client.query(Uri.parse("something"), new String[] {"title"}, "*", new String[] {}, "created");
assertThat(controller.get().transcript).containsExactly("onCreate", "query for something");
close(client);
}

@Test
Expand All @@ -70,6 +73,7 @@ public void shouldResolveProvidersWithMultipleAuthorities() throws Exception {
contentResolver.acquireContentProviderClient("org.robolectric.authority3");
client.query(Uri.parse("something"), new String[] {"title"}, "*", new String[] {}, "created");
assertThat(contentProvider.transcript).containsExactly("onCreate", "query for something");
close(client);
}

@Test
Expand Down Expand Up @@ -98,9 +102,11 @@ public void withoutManifest_shouldRegisterWithContentResolver() throws Exception
providerInfo.authority = "some-authority";
controller.create(providerInfo);

ContentProviderClient client = contentResolver.acquireContentProviderClient(providerInfo.authority);
client.query(Uri.parse("something"), new String[]{"title"}, "*", new String[]{}, "created");
ContentProviderClient client =
contentResolver.acquireContentProviderClient(providerInfo.authority);
client.query(Uri.parse("something"), new String[] {"title"}, "*", new String[] {}, "created");
assertThat(controller.get().transcript).containsExactly("onCreate", "query for something");
close(client);
}

@Test
Expand All @@ -111,11 +117,17 @@ public void contentProviderShouldBeCreatedBeforeBeingRegistered() throws Excepti
ContentProviderClient contentProviderClient =
contentResolver.acquireContentProviderClient("x-authority");
assertThat(contentProviderClient.getLocalContentProvider()).isSameInstanceAs(xContentProvider);
close(contentProviderClient);
}

@Test(expected = IllegalArgumentException.class)
@Test
public void createContentProvider_nullAuthority() throws Exception {
Robolectric.buildContentProvider(XContentProvider.class).create(new ProviderInfo()).get();
assertThrows(
IllegalArgumentException.class,
() ->
Robolectric.buildContentProvider(XContentProvider.class)
.create(new ProviderInfo())
.get());
}

static class XContentProvider extends TestContentProvider1 {
Expand All @@ -129,9 +141,20 @@ public boolean onCreate() {
contentProviderClient == null
? "x-authority" + " not registered" + " yet"
: "x-authority" + " is registered");
if (contentProviderClient != null) {
close(contentProviderClient);
}
return false;
}
}

static class NotInManifestContentProvider extends TestContentProvider1 {}

private static void close(ContentProviderClient client) {
if (RuntimeEnvironment.getApiLevel() > Build.VERSION_CODES.M) {
client.close();
} else {
client.release();
}
}
}
Expand Up @@ -39,6 +39,7 @@ public void setUp() throws Exception {
@After
public void tearDown() {
database.close();
cursor.close();
}

@Test
Expand Down Expand Up @@ -482,6 +483,7 @@ private Cursor createCursor() {

private void setupEmptyResult() {
database.execSQL("DELETE FROM table_name;");
cursor.close();
cursor = createCursor();
}

Expand Down

0 comments on commit dae9bb1

Please sign in to comment.