diff --git a/binder/build.gradle b/binder/build.gradle index 62613b00cb..494d3744b1 100644 --- a/binder/build.gradle +++ b/binder/build.gradle @@ -27,6 +27,7 @@ android { withJavadocJar() } } + testFixtures { enable true } } repositories { @@ -70,6 +71,8 @@ dependencies { androidTestImplementation libraries.androidx.lifecycle.service androidTestImplementation libraries.guava.testlib androidTestImplementation testFixtures(project(':grpc-core')) + + testFixturesImplementation libraries.guava.testlib } import net.ltgt.gradle.errorprone.CheckSeverity @@ -123,3 +126,8 @@ publishing { } } } + +afterEvaluate { + components.release.withVariantsFromConfiguration(configurations.releaseTestFixturesVariantReleaseApiPublication) { skip() } + components.release.withVariantsFromConfiguration(configurations.releaseTestFixturesVariantReleaseRuntimePublication) { skip() } +} diff --git a/binder/src/test/java/io/grpc/binder/RobolectricBinderSecurityTest.java b/binder/src/test/java/io/grpc/binder/RobolectricBinderSecurityTest.java index 44e863780c..d6a2296e98 100644 --- a/binder/src/test/java/io/grpc/binder/RobolectricBinderSecurityTest.java +++ b/binder/src/test/java/io/grpc/binder/RobolectricBinderSecurityTest.java @@ -21,6 +21,7 @@ import static com.google.common.truth.Truth.assertThat; import static com.google.common.util.concurrent.MoreExecutors.directExecutor; import static org.robolectric.Shadows.shadowOf; +import io.grpc.binder.internal.MainThreadScheduledExecutorService; import android.app.Application; import android.content.ComponentName; import android.content.Intent; diff --git a/binder/src/test/java/io/grpc/binder/internal/BinderServerTransportTest.java b/binder/src/test/java/io/grpc/binder/internal/BinderServerTransportTest.java index f1e5c5a955..c0b97b51b0 100644 --- a/binder/src/test/java/io/grpc/binder/internal/BinderServerTransportTest.java +++ b/binder/src/test/java/io/grpc/binder/internal/BinderServerTransportTest.java @@ -22,15 +22,17 @@ import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.ArgumentMatchers.isNull; import static org.mockito.Mockito.when; +import static org.robolectric.Shadows.shadowOf; import static org.robolectric.annotation.LooperMode.Mode.PAUSED; import android.os.IBinder; +import android.os.Looper; import android.os.Parcel; import com.google.common.collect.ImmutableList; -import com.google.common.util.concurrent.testing.TestingExecutors; import io.grpc.Attributes; import io.grpc.Metadata; import io.grpc.Status; +import io.grpc.binder.internal.MainThreadScheduledExecutorService; import io.grpc.internal.FixedObjectPool; import io.grpc.internal.ServerStream; import io.grpc.internal.ServerTransportListener; @@ -56,8 +58,7 @@ public final class BinderServerTransportTest { @Rule public MockitoRule mocks = MockitoJUnit.rule(); - private final ScheduledExecutorService executorService = - TestingExecutors.sameThreadScheduledExecutor(); + private final ScheduledExecutorService executorService = new MainThreadScheduledExecutorService(); private final TestTransportListener transportListener = new TestTransportListener(); @Mock IBinder mockBinder; @@ -83,6 +84,7 @@ public final class BinderServerTransportTest { // Now shut it down. transport.shutdownNow(Status.UNKNOWN.withDescription("reasons")); + shadowOf(Looper.getMainLooper()).idle(); assertThat(transportListener.terminated).isTrue(); } diff --git a/binder/src/test/java/io/grpc/binder/MainThreadScheduledExecutorService.java b/binder/src/testFixtures/java/io/grpc/binder/internal/MainThreadScheduledExecutorService.java similarity index 97% rename from binder/src/test/java/io/grpc/binder/MainThreadScheduledExecutorService.java rename to binder/src/testFixtures/java/io/grpc/binder/internal/MainThreadScheduledExecutorService.java index 9429a423ac..e513dbc72e 100644 --- a/binder/src/test/java/io/grpc/binder/MainThreadScheduledExecutorService.java +++ b/binder/src/testFixtures/java/io/grpc/binder/internal/MainThreadScheduledExecutorService.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package io.grpc.binder; +package io.grpc.binder.internal; import android.os.Handler; import android.os.Looper; @@ -37,7 +37,7 @@ import java.util.concurrent.TimeoutException; * *
Use {@link org.robolectric.shadows.ShadowLooper#idle()} to run queued work. */ -class MainThreadScheduledExecutorService extends AbstractExecutorService +public class MainThreadScheduledExecutorService extends AbstractExecutorService implements ScheduledExecutorService { private final Handler handler = new Handler(Looper.getMainLooper());