LCOV - code coverage report
Current view: top level - Users/duwen/Documents/code/dio/dio/test - mock_adapter.dart (source / functions) Hit Total Coverage
Test: lcov.info Lines: 33 42 78.6 %
Date: 2021-11-28 14:37:50 Functions: 0 0 -

          Line data    Source code
       1             : import 'dart:async';
       2             : import 'dart:convert';
       3             : import 'dart:io';
       4             : import 'dart:typed_data';
       5             : import 'package:dio/dio.dart';
       6             : import 'package:dio/adapter.dart';
       7             : 
       8             : class MockAdapter extends HttpClientAdapter {
       9             :   static const mockHost = 'mockserver';
      10             :   static const mockBase = 'http://$mockHost';
      11             :   final _adapter = DefaultHttpClientAdapter();
      12             : 
      13             :   @override
      14           1 :   Future<ResponseBody> fetch(RequestOptions options,
      15             :       Stream<Uint8List>? requestStream, Future? cancelFuture) async {
      16           1 :     final uri = options.uri;
      17           2 :     if (uri.host == mockHost) {
      18           1 :       switch (uri.path) {
      19           1 :         case '/test':
      20           1 :           return ResponseBody.fromString(
      21           2 :             jsonEncode({
      22             :               'errCode': 0,
      23           2 :               'data': {'path': uri.path}
      24             :             }),
      25             :             200,
      26           1 :             headers: {
      27           1 :               Headers.contentTypeHeader: [Headers.jsonContentType],
      28             :             },
      29             :           );
      30           1 :         case '/test-auth':
      31             :           {
      32           3 :             return Future.delayed(Duration(milliseconds: 300), () {
      33           2 :               if (options.headers['csrfToken'] == null) {
      34           1 :                 return ResponseBody.fromString(
      35           2 :                   jsonEncode({
      36           1 :                     'errCode': -1,
      37           2 :                     'data': {'path': uri.path}
      38             :                   }),
      39             :                   401,
      40           1 :                   headers: {
      41           1 :                     Headers.contentTypeHeader: [Headers.jsonContentType],
      42             :                   },
      43             :                 );
      44             :               }
      45           1 :               return ResponseBody.fromString(
      46           2 :                 jsonEncode({
      47             :                   'errCode': 0,
      48           2 :                   'data': {'path': uri.path}
      49             :                 }),
      50             :                 200,
      51           1 :                 headers: {
      52           1 :                   Headers.contentTypeHeader: [Headers.jsonContentType],
      53             :                 },
      54             :               );
      55             :             });
      56             :           }
      57           1 :         case '/download':
      58           0 :           return Future.delayed(Duration(milliseconds: 300), () {
      59           0 :             return ResponseBody(
      60           0 :               File('./README.md').openRead().cast<Uint8List>(),
      61             :               200,
      62           0 :               headers: {
      63           0 :                 Headers.contentLengthHeader: [
      64           0 :                   File('./README.md').lengthSync().toString()
      65             :                 ],
      66             :               },
      67             :             );
      68             :           });
      69             : 
      70           1 :         case '/token':
      71             :           {
      72           2 :             var t = 'ABCDEFGHIJKLMN'.split('')..shuffle();
      73           1 :             return ResponseBody.fromBytes(
      74           3 :               utf8.encode(jsonEncode({
      75             :                 'errCode': 0,
      76           2 :                 'data': {'token': t.join()}
      77             :               })),
      78             :               200,
      79           1 :               headers: {
      80           1 :                 Headers.contentTypeHeader: [Headers.jsonContentType],
      81             :               },
      82             :             );
      83             :           }
      84             :         default:
      85           1 :           return ResponseBody.fromString('', 404);
      86             :       }
      87             :     }
      88           0 :     return _adapter.fetch(options, requestStream, cancelFuture);
      89             :   }
      90             : 
      91           0 :   @override
      92             :   void close({bool force = false}) {
      93           0 :     _adapter.close(force: force);
      94             :   }
      95             : }

Generated by: LCOV version 1.14