Skip to content

Commit be7a301

Browse files
committed
test(firestore): fix JSpecify compatibility issues on Java 8
Update Mockito mocks in Firestore tests to ignore annotations, preventing ArrayStoreException when running tests on Java 8. Specifically, mock StreamController, BidiStreamObserver, and ClientStream classes with Mockito.withSettings().withoutAnnotations(). Refactor SilenceableBidiStreamTest to use programmatic mocks instead of @mock annotations to allow configuring settings. TAG=agy CONV=de3ef09d-a26c-4190-b578-4c993f807bdc
1 parent eb608db commit be7a301

3 files changed

Lines changed: 16 additions & 12 deletions

File tree

java-firestore/google-cloud-firestore/src/test/java/com/google/cloud/firestore/ConformanceTest.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,6 @@
8585
import org.junit.runners.AllTests;
8686
import org.mockito.ArgumentCaptor;
8787
import org.mockito.Captor;
88-
import org.mockito.Mock;
8988
import org.mockito.Mockito;
9089
import org.mockito.MockitoAnnotations;
9190

@@ -616,13 +615,15 @@ private static final class ConformanceListenTestRunner
616615
extends BaseConformanceTestRunner<ListenTest> {
617616

618617
@Captor private ArgumentCaptor<BidiStreamObserver<Message, Message>> streamObserverCapture;
619-
@Mock private ClientStream<ListenRequest> noOpRequestObserver;
618+
private final ClientStream<ListenRequest> noOpRequestObserver;
620619

621620
private final Query watchQuery;
622621

623622
private ConformanceListenTestRunner(
624623
String description, TestDefinition.ListenTest testParameters) {
625624
super(description, testParameters);
625+
noOpRequestObserver =
626+
Mockito.mock(ClientStream.class, Mockito.withSettings().withoutAnnotations());
626627
watchQuery = collection(ROOT_COLLECTION_PATH + "C").orderBy("a");
627628
}
628629

java-firestore/google-cloud-firestore/src/test/java/com/google/cloud/firestore/LocalFirestoreHelper.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
import static org.junit.Assert.assertEquals;
2121
import static org.mockito.Mockito.doAnswer;
2222
import static org.mockito.Mockito.mock;
23+
import static org.mockito.Mockito.withSettings;
2324

2425
import com.google.api.core.ApiFuture;
2526
import com.google.api.core.ApiFutures;
@@ -415,7 +416,7 @@ public static <T> Answer<T> streamingResponse(
415416
return invocation -> {
416417
Object[] args = invocation.getArguments();
417418
ResponseObserver<T> observer = (ResponseObserver<T>) args[1];
418-
observer.onStart(mock(StreamController.class));
419+
observer.onStart(mock(StreamController.class, withSettings().withoutAnnotations()));
419420
for (T resp : response) {
420421
observer.onResponse(resp);
421422
}
@@ -432,7 +433,7 @@ public static <T> Answer<T> streamingResponseWithoutOnComplete(final T[] respons
432433
return invocation -> {
433434
Object[] args = invocation.getArguments();
434435
ResponseObserver<T> observer = (ResponseObserver<T>) args[1];
435-
observer.onStart(mock(StreamController.class));
436+
observer.onStart(mock(StreamController.class, withSettings().withoutAnnotations()));
436437
for (T resp : response) {
437438
observer.onResponse(resp);
438439
}

java-firestore/google-cloud-firestore/src/test/java/com/google/cloud/firestore/SilenceableBidiStreamTest.java

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -24,22 +24,22 @@
2424
import java.util.function.Consumer;
2525
import org.junit.Before;
2626
import org.junit.Test;
27-
import org.junit.runner.RunWith;
28-
import org.mockito.Mock;
2927
import org.mockito.Mockito;
30-
import org.mockito.junit.MockitoJUnitRunner;
3128

32-
@RunWith(MockitoJUnitRunner.class)
3329
public class SilenceableBidiStreamTest {
3430

35-
@Mock BidiStreamObserver<Integer, String> mockObserver;
31+
BidiStreamObserver<Integer, String> mockObserver;
3632

37-
@Mock ClientStream<Integer> mockClientStream;
33+
ClientStream<Integer> mockClientStream;
3834

3935
SilenceableBidiStream<Integer, String> sut;
4036

4137
@Before
4238
public void before() {
39+
mockObserver =
40+
Mockito.mock(BidiStreamObserver.class, Mockito.withSettings().withoutAnnotations());
41+
mockClientStream =
42+
Mockito.mock(ClientStream.class, Mockito.withSettings().withoutAnnotations());
4343
Consumer captureCall = Mockito.mock(Consumer.class);
4444
sut =
4545
new SilenceableBidiStream<>(
@@ -76,15 +76,17 @@ public void byDefault_theStreamWillPassThroughData_onResponse() {
7676

7777
@Test
7878
public void byDefault_theStreamWillPassThroughData_onStart() {
79-
StreamController controller = Mockito.mock(StreamController.class);
79+
StreamController controller =
80+
Mockito.mock(StreamController.class, Mockito.withSettings().withoutAnnotations());
8081
sut.onStart(controller);
8182
Mockito.verify(mockObserver, Mockito.times(1)).onStart(controller);
8283
Mockito.verifyNoMoreInteractions(mockClientStream, mockObserver, controller);
8384
}
8485

8586
@Test
8687
public void byDefault_theStreamWillPassThroughData_onReady() {
87-
ClientStream<Integer> client = Mockito.mock(ClientStream.class);
88+
ClientStream<Integer> client =
89+
Mockito.mock(ClientStream.class, Mockito.withSettings().withoutAnnotations());
8890
sut.onReady(client);
8991
Mockito.verify(mockObserver, Mockito.times(1)).onReady(client);
9092
Mockito.verifyNoMoreInteractions(mockClientStream, mockObserver, client);

0 commit comments

Comments
 (0)