23
23
import com .bumptech .glide .load .model .LazyHeaders ;
24
24
import com .bumptech .glide .load .model .LazyHeaders .Builder ;
25
25
import com .google .common .collect .ImmutableList ;
26
+ import com .google .common .collect .ImmutableMap ;
26
27
import com .google .common .util .concurrent .MoreExecutors ;
27
28
import java .net .HttpURLConnection ;
28
29
import java .nio .ByteBuffer ;
29
30
import java .util .AbstractMap .SimpleImmutableEntry ;
31
+ import java .util .List ;
30
32
import java .util .Map ;
31
- import java .util .Map .Entry ;
32
33
import java .util .concurrent .Executor ;
33
34
import org .chromium .net .CronetEngine ;
34
35
import org .chromium .net .CronetException ;
35
36
import org .chromium .net .UrlRequest ;
36
37
import org .chromium .net .UrlRequest .Callback ;
37
38
import org .chromium .net .UrlResponseInfo ;
38
- import org .chromium .net .impl .UrlResponseInfoImpl ;
39
39
import org .junit .Before ;
40
+ import org .junit .Rule ;
40
41
import org .junit .Test ;
41
42
import org .junit .runner .RunWith ;
42
43
import org .mockito .ArgumentCaptor ;
44
+ import org .mockito .ArgumentMatchers ;
43
45
import org .mockito .Matchers ;
44
46
import org .mockito .Mock ;
45
- import org .mockito .MockitoAnnotations ;
46
47
import org .mockito .invocation .InvocationOnMock ;
48
+ import org .mockito .junit .MockitoJUnit ;
49
+ import org .mockito .junit .MockitoRule ;
47
50
import org .mockito .stubbing .Answer ;
48
51
import org .robolectric .RobolectricTestRunner ;
49
52
50
53
/** Tests for {@link ChromiumUrlFetcher}. */
51
54
@ RunWith (RobolectricTestRunner .class )
52
55
public class ChromiumUrlFetcherTest {
56
+
57
+ @ Rule public final MockitoRule mocks = MockitoJUnit .rule ();
53
58
@ Mock private DataCallback <ByteBuffer > callback ;
54
59
@ Mock private CronetEngine cronetEngine ;
55
60
@ Mock private UrlRequest request ;
56
61
@ Mock private UrlRequest .Builder mockUrlRequestBuilder ;
57
62
@ Mock private ByteBufferParser <ByteBuffer > parser ;
58
63
@ Mock private CronetRequestFactory cronetRequestFactory ;
64
+ @ Mock private DataCallback <ByteBuffer > firstCallback ;
65
+ @ Mock private DataCallback <ByteBuffer > secondCallback ;
59
66
60
67
private UrlRequest .Builder builder ;
61
68
private GlideUrl glideUrl ;
@@ -65,7 +72,6 @@ public class ChromiumUrlFetcherTest {
65
72
66
73
@ Before
67
74
public void setUp () {
68
- MockitoAnnotations .initMocks (this );
69
75
when (parser .getDataClass ()).thenReturn (ByteBuffer .class );
70
76
when (parser .parse (any (ByteBuffer .class )))
71
77
.thenAnswer (
@@ -144,7 +150,7 @@ public void testLoadData_withInProgressRequest_doesNotStartNewRequest() {
144
150
.newRequest (
145
151
Matchers .eq (glideUrl .toStringUrl ()),
146
152
anyInt (),
147
- anyMap (),
153
+ ArgumentMatchers .< String , String > anyMap (),
148
154
any (UrlRequest .Callback .class ));
149
155
}
150
156
@@ -155,28 +161,74 @@ public void testLoadData_withInProgressRequest_isNotifiedWhenRequestCompletes()
155
161
ChromiumUrlFetcher <ByteBuffer > secondFetcher =
156
162
new ChromiumUrlFetcher <>(serializer , parser , glideUrl );
157
163
158
- DataCallback <ByteBuffer > firstCb = mock (DataCallback .class );
159
- DataCallback <ByteBuffer > secondCb = mock (DataCallback .class );
160
- firstFetcher .loadData (Priority .LOW , firstCb );
161
- secondFetcher .loadData (Priority .HIGH , secondCb );
164
+ firstFetcher .loadData (Priority .LOW , firstCallback );
165
+ secondFetcher .loadData (Priority .HIGH , secondCallback );
162
166
163
167
succeed (getInfo (10 , 200 ), urlRequestListenerCaptor .getValue (), ByteBuffer .allocateDirect (10 ));
164
168
165
- verify (firstCb , timeout (1000 )).onDataReady (isA (ByteBuffer .class ));
166
- verify (secondCb , timeout (1000 )).onDataReady (isA (ByteBuffer .class ));
169
+ verify (firstCallback , timeout (1000 )).onDataReady (isA (ByteBuffer .class ));
170
+ verify (secondCallback , timeout (1000 )).onDataReady (isA (ByteBuffer .class ));
167
171
}
168
172
169
173
@ NonNull
170
- private UrlResponseInfo getInfo (int contentLength , int statusCode ) {
171
- return new UrlResponseInfoImpl (
172
- ImmutableList .of (glideUrl .toStringUrl ()),
173
- statusCode ,
174
- "OK" ,
175
- ImmutableList .<Entry <String , String >>of (
176
- new SimpleImmutableEntry <>("Content-Length" , Integer .toString (contentLength ))),
177
- false ,
178
- "" ,
179
- "" );
174
+ private UrlResponseInfo getInfo (final int contentLength , final int statusCode ) {
175
+ return new UrlResponseInfo () {
176
+
177
+ @ Override
178
+ public String getUrl () {
179
+ return glideUrl .toStringUrl ();
180
+ }
181
+
182
+ @ Override
183
+ public List <String > getUrlChain () {
184
+ return ImmutableList .of (getUrl ());
185
+ }
186
+
187
+ @ Override
188
+ public int getHttpStatusCode () {
189
+ return statusCode ;
190
+ }
191
+
192
+ @ Override
193
+ public String getHttpStatusText () {
194
+ return "OK" ;
195
+ }
196
+
197
+ @ Override
198
+ public List <Map .Entry <String , String >> getAllHeadersAsList () {
199
+ return ImmutableList .<Map .Entry <String , String >>of (
200
+ new SimpleImmutableEntry <>("Content-Length" , Integer .toString (contentLength )));
201
+ }
202
+
203
+ @ Override
204
+ public Map <String , List <String >> getAllHeaders () {
205
+ ImmutableMap .Builder <String , List <String >> builder = ImmutableMap .builder ();
206
+ for (Map .Entry <String , String > entry : getAllHeadersAsList ()) {
207
+ builder .put (entry .getKey (), ImmutableList .copyOf (entry .getValue ().split ("," )));
208
+ }
209
+ return builder .build ();
210
+ }
211
+
212
+ @ Override
213
+ public boolean wasCached () {
214
+ return false ;
215
+ }
216
+
217
+ @ Override
218
+ public String getNegotiatedProtocol () {
219
+ return "" ;
220
+ }
221
+
222
+ @ Override
223
+ public String getProxyServer () {
224
+ return "" ;
225
+ }
226
+
227
+ @ Override
228
+ public long getReceivedByteCount () {
229
+ return 0 ;
230
+ }
231
+ };
180
232
}
181
233
182
234
@ Test
@@ -226,7 +278,10 @@ public void testCancel_withStartedRequest_cancelsRequest() {
226
278
227
279
@ Test
228
280
public void testRequestComplete_withNonNullException_callsCallbackWithException () {
229
- CronetException expected = new CronetException ("test" , /*cause=*/ null ) {};
281
+ CronetException expected =
282
+ new CronetException ("test" , /*cause=*/ null ) {
283
+ static final long serialVersionUID = 1 ;
284
+ };
230
285
fetcher .loadData (Priority .LOW , callback );
231
286
urlRequestListenerCaptor .getValue ().onFailed (request , null , expected );
232
287
0 commit comments