1
- import 'dart:async' ;
2
1
import 'dart:convert' ;
3
- import 'dart:io' ;
4
2
5
3
import 'package:flutter/foundation.dart' ;
6
4
import 'package:flutter/widgets.dart' ;
7
5
import 'package:flutter_svg/flutter_svg.dart' ;
8
6
9
7
import 'package:flutter_test/flutter_test.dart' ;
8
+ import 'package:http/http.dart' as http;
10
9
11
10
class _TolerantComparator extends LocalFileComparator {
12
11
_TolerantComparator (Uri testFile) : super (testFile);
@@ -39,9 +38,6 @@ Future<void> _checkWidgetAndGolden(Key key, String filename) async {
39
38
}
40
39
41
40
void main () {
42
- late FakeHttpClientResponse fakeResponse;
43
- late FakeHttpClientRequest fakeRequest;
44
- late FakeHttpClient fakeHttpClient;
45
41
final MediaQueryData mediaQueryData =
46
42
MediaQueryData .fromView (PlatformDispatcher .instance.implicitView! );
47
43
@@ -54,12 +50,6 @@ void main() {
54
50
goldenFileComparator = newComparator;
55
51
});
56
52
57
- setUp (() {
58
- fakeResponse = FakeHttpClientResponse ();
59
- fakeRequest = FakeHttpClientRequest (fakeResponse);
60
- fakeHttpClient = FakeHttpClient (fakeRequest);
61
- });
62
-
63
53
testWidgets (
64
54
'SvgPicture does not use a color filtering widget when no color specified' ,
65
55
(WidgetTester tester) async {
@@ -306,40 +296,41 @@ void main() {
306
296
});
307
297
308
298
testWidgets ('SvgPicture.network' , (WidgetTester tester) async {
309
- await HttpOverrides .runZoned (() async {
310
- final GlobalKey key = GlobalKey ();
311
- await tester.pumpWidget (
312
- MediaQuery (
313
- data: mediaQueryData,
314
- child: RepaintBoundary (
315
- key: key,
316
- child: SvgPicture .network (
317
- 'test.svg' ,
318
- ),
299
+ final GlobalKey key = GlobalKey ();
300
+ await tester.pumpWidget (
301
+ MediaQuery (
302
+ data: mediaQueryData,
303
+ child: RepaintBoundary (
304
+ key: key,
305
+ child: SvgPicture .network (
306
+ 'test.svg' ,
307
+ httpClient: FakeHttpClient (),
319
308
),
320
309
),
321
- );
322
- await tester. pumpAndSettle ( );
323
- await _checkWidgetAndGolden (key, 'flutter_logo.network.png' );
324
- }, createHttpClient : ( SecurityContext ? c) => fakeHttpClient );
310
+ ),
311
+ );
312
+ await tester. pumpAndSettle ( );
313
+ await _checkWidgetAndGolden (key, 'flutter_logo.network.png' );
325
314
});
326
315
327
316
testWidgets ('SvgPicture.network with headers' , (WidgetTester tester) async {
328
- await HttpOverrides .runZoned (() async {
329
- final GlobalKey key = GlobalKey ();
330
- await tester.pumpWidget (
331
- MediaQuery (
332
- data: mediaQueryData,
333
- child: RepaintBoundary (
334
- key: key,
335
- child: SvgPicture .network ('test.svg' ,
336
- headers: const < String , String > {'a' : 'b' }),
317
+ final GlobalKey key = GlobalKey ();
318
+ final FakeHttpClient client = FakeHttpClient ();
319
+ await tester.pumpWidget (
320
+ MediaQuery (
321
+ data: mediaQueryData,
322
+ child: RepaintBoundary (
323
+ key: key,
324
+ child: SvgPicture .network (
325
+ 'test.svg' ,
326
+ headers: const < String , String > {'a' : 'b' },
327
+ httpClient: client,
337
328
),
338
329
),
339
- );
340
- await tester. pumpAndSettle ( );
341
- expect (fakeRequest.headers[ 'a' ] ! .single, 'b' );
342
- }, createHttpClient : ( SecurityContext ? c) => fakeHttpClient );
330
+ ),
331
+ );
332
+ await tester. pumpAndSettle ( );
333
+ expect (client.headers[ 'a' ], 'b' );
343
334
});
344
335
345
336
testWidgets ('SvgPicture can be created without a MediaQuery' ,
@@ -361,19 +352,18 @@ void main() {
361
352
});
362
353
363
354
testWidgets ('SvgPicture.network HTTP exception' , (WidgetTester tester) async {
364
- await HttpOverrides .runZoned (() async {
365
- expect (() async {
366
- fakeResponse.statusCode = 400 ;
367
- await tester.pumpWidget (
368
- MediaQuery (
369
- data: mediaQueryData,
370
- child: SvgPicture .network (
371
- 'notFound.svg' ,
372
- ),
355
+ expect (() async {
356
+ final http.Client client = FakeHttpClient (400 );
357
+ await tester.pumpWidget (
358
+ MediaQuery (
359
+ data: mediaQueryData,
360
+ child: SvgPicture .network (
361
+ 'notFound.svg' ,
362
+ httpClient: client,
373
363
),
374
- );
375
- }, isNotNull );
376
- }, createHttpClient : ( SecurityContext ? c) => fakeHttpClient );
364
+ ),
365
+ );
366
+ }, isNotNull );
377
367
});
378
368
379
369
testWidgets ('SvgPicture semantics' , (WidgetTester tester) async {
@@ -791,65 +781,19 @@ class FakeAssetBundle extends Fake implements AssetBundle {
791
781
}
792
782
}
793
783
794
- class FakeHttpClient extends Fake implements HttpClient {
795
- FakeHttpClient (this .request );
784
+ class FakeHttpClient extends Fake implements http. Client {
785
+ FakeHttpClient ([ this .statusCode = 200 ] );
796
786
797
- FakeHttpClientRequest request ;
787
+ final int statusCode ;
798
788
799
- @override
800
- Future <HttpClientRequest > getUrl (Uri url) async => request;
801
- }
802
-
803
- class FakeHttpHeaders extends Fake implements HttpHeaders {
804
- final Map <String , String ?> values = < String , String ? > {};
805
-
806
- @override
807
- void add (String name, Object value, {bool preserveHeaderCase = false }) {
808
- values[name] = value.toString ();
809
- }
789
+ final Map <String , String > headers = < String , String > {};
810
790
811
791
@override
812
- List <String >? operator [](String key) {
813
- return < String > [values[key]! ];
814
- }
815
- }
816
-
817
- class FakeHttpClientRequest extends Fake implements HttpClientRequest {
818
- FakeHttpClientRequest (this .response);
819
-
820
- FakeHttpClientResponse response;
821
-
822
- @override
823
- final HttpHeaders headers = FakeHttpHeaders ();
824
-
825
- @override
826
- Future <HttpClientResponse > close () async => response;
827
- }
828
-
829
- class FakeHttpClientResponse extends Fake implements HttpClientResponse {
830
- @override
831
- int statusCode = 200 ;
832
-
833
- @override
834
- int contentLength = svgStr.length;
835
-
836
- @override
837
- HttpClientResponseCompressionState get compressionState =>
838
- HttpClientResponseCompressionState .notCompressed;
839
-
840
- @override
841
- StreamSubscription <List <int >> listen (
842
- void Function (List <int > event)? onData, {
843
- Function ? onError,
844
- void Function ()? onDone,
845
- bool ? cancelOnError,
846
- }) {
847
- return Stream <Uint8List >.fromIterable (< Uint8List > [svgBytes]).listen (
848
- onData,
849
- onDone: onDone,
850
- onError: onError,
851
- cancelOnError: cancelOnError,
852
- );
792
+ Future <http.Response > get (Uri url, {Map <String , String >? headers}) async {
793
+ if (headers != null ) {
794
+ this .headers.addAll (headers);
795
+ }
796
+ return http.Response (svgStr, statusCode);
853
797
}
854
798
}
855
799
0 commit comments