// Copyright 2017 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. import 'dart:async'; import 'dart:io'; import 'package:flutter/foundation.dart'; import 'package:mockito/mockito.dart'; import '../flutter_test_alternative.dart'; void main() { group(consolidateHttpClientResponseBytes, () { final List<int> chunkOne = <int>[0, 1, 2, 3, 4, 5]; final List<int> chunkTwo = <int>[6, 7, 8, 9, 10]; MockHttpClientResponse response; setUp(() { response = MockHttpClientResponse(); when(response.listen( any, onDone: anyNamed('onDone'), onError: anyNamed('onError'), cancelOnError: anyNamed('cancelOnError') )).thenAnswer((Invocation invocation) { final void Function(List<int>) onData = invocation.positionalArguments[0]; final void Function(Object) onError = invocation.namedArguments[#onError]; final void Function() onDone = invocation.namedArguments[#onDone]; final bool cancelOnError = invocation.namedArguments[#cancelOnError]; return Stream<List<int>>.fromIterable( <List<int>>[chunkOne, chunkTwo]).listen( onData, onDone: onDone, onError: onError, cancelOnError: cancelOnError, ); }); }); test('Converts an HttpClientResponse with contentLength to bytes', () async { when(response.contentLength) .thenReturn(chunkOne.length + chunkTwo.length); final List<int> bytes = await consolidateHttpClientResponseBytes(response); expect(bytes, <int>[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]); }); test('Converts a compressed HttpClientResponse with contentLength to bytes', () async { when(response.contentLength).thenReturn(chunkOne.length); final List<int> bytes = await consolidateHttpClientResponseBytes(response); expect(bytes, <int>[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]); }); test('Converts an HttpClientResponse without contentLength to bytes', () async { when(response.contentLength).thenReturn(-1); final List<int> bytes = await consolidateHttpClientResponseBytes(response); expect(bytes, <int>[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]); }); test('forwards errors from HttpClientResponse', () async { when(response.listen( any, onDone: anyNamed('onDone'), onError: anyNamed('onError'), cancelOnError: anyNamed('cancelOnError') )).thenAnswer((Invocation invocation) { final void Function(List<int>) onData = invocation.positionalArguments[0]; final void Function(Object) onError = invocation.namedArguments[#onError]; final void Function() onDone = invocation.namedArguments[#onDone]; final bool cancelOnError = invocation.namedArguments[#cancelOnError]; return Stream<List<int>>.fromFuture( Future<List<int>>.error(Exception('Test Error'))) .listen( onData, onDone: onDone, onError: onError, cancelOnError: cancelOnError, ); }); when(response.contentLength).thenReturn(-1); expect(consolidateHttpClientResponseBytes(response), throwsA(isInstanceOf<Exception>())); }); }); } class MockHttpClientResponse extends Mock implements HttpClientResponse {}