Skip to content

Commit

Permalink
Revert "Load assets in flutter_test without turning event loop. (#115…
Browse files Browse the repository at this point in the history
…123)" (#115156)

This reverts commit 88e49ed.
  • Loading branch information
dnfield authored Nov 11, 2022
1 parent 229b39e commit 3895786
Show file tree
Hide file tree
Showing 4 changed files with 13 additions and 30 deletions.
4 changes: 2 additions & 2 deletions packages/flutter/lib/src/foundation/synchronous_future.dart
Original file line number Diff line number Diff line change
Expand Up @@ -38,11 +38,11 @@ class SynchronousFuture<T> implements Future<T> {

@override
Future<R> then<R>(FutureOr<R> Function(T value) onValue, { Function? onError }) {
final FutureOr<R> result = onValue(_value);
final dynamic result = onValue(_value);
if (result is Future<R>) {
return result;
}
return SynchronousFuture<R>(result);
return SynchronousFuture<R>(result as R);
}

@override
Expand Down
23 changes: 8 additions & 15 deletions packages/flutter/lib/src/services/asset_bundle.dart
Original file line number Diff line number Diff line change
Expand Up @@ -247,24 +247,17 @@ abstract class CachingAssetBundle extends AssetBundle {
/// An [AssetBundle] that loads resources using platform messages.
class PlatformAssetBundle extends CachingAssetBundle {
@override
Future<ByteData> load(String key) {
Future<ByteData> load(String key) async {
final Uint8List encoded = utf8.encoder.convert(Uri(path: Uri.encodeFull(key)).path);
final Future<ByteData>? future = ServicesBinding.instance.defaultBinaryMessenger.send('flutter/assets', encoded.buffer.asByteData())?.then((ByteData? asset) {
if (asset == null) {
throw FlutterError.fromParts(<DiagnosticsNode>[
_errorSummaryWithKey(key),
ErrorDescription('The asset does not exist or has empty data.'),
]);
}
return asset;
});
if (future == null) {
final ByteData? asset =
await ServicesBinding.instance.defaultBinaryMessenger.send('flutter/assets', encoded.buffer.asByteData());
if (asset == null) {
throw FlutterError.fromParts(<DiagnosticsNode>[
_errorSummaryWithKey(key),
ErrorDescription('The asset does not exist or has empty data.'),
]);
_errorSummaryWithKey(key),
ErrorDescription('The asset does not exist or has empty data.'),
]);
}
return future;
return asset;
}

@override
Expand Down
6 changes: 3 additions & 3 deletions packages/flutter_test/lib/src/_binding_io.dart
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,8 @@ import 'dart:async';
import 'dart:convert';
import 'dart:io';

import 'package:flutter/foundation.dart';
import 'package:flutter/services.dart';
import 'package:flutter/widgets.dart';
import 'package:path/path.dart' as path;
// ignore: deprecated_member_use
import 'package:test_api/test_api.dart' as test_package;
Expand Down Expand Up @@ -42,7 +42,7 @@ void mockFlutterAssets() {
/// platform messages.
SystemChannels.navigation.setMockMethodCallHandler((MethodCall methodCall) async {});

ServicesBinding.instance.defaultBinaryMessenger.setMockMessageHandler('flutter/assets', (ByteData? message) {
ServicesBinding.instance.defaultBinaryMessenger.setMockMessageHandler('flutter/assets', (ByteData? message) async {
assert(message != null);
String key = utf8.decode(message!.buffer.asUint8List());
File asset = File(path.join(assetFolderPath, key));
Expand All @@ -62,7 +62,7 @@ void mockFlutterAssets() {
}

final Uint8List encoded = Uint8List.fromList(asset.readAsBytesSync());
return SynchronousFuture<ByteData>(encoded.buffer.asByteData());
return Future<ByteData>.value(encoded.buffer.asByteData());
});
}

Expand Down
10 changes: 0 additions & 10 deletions packages/flutter_test/test/bindings_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@
import 'dart:async';
import 'dart:io';

import 'package:flutter/services.dart';
import 'package:flutter/widgets.dart';
import 'package:flutter_test/flutter_test.dart';

Expand Down Expand Up @@ -91,13 +90,4 @@ void main() {
binding.idle();
});
});

testWidgets('Assets in the tester can be loaded without turning event loop', (WidgetTester tester) async {
bool responded = false;
// The particular asset does not matter, as long as it exists.
rootBundle.load('AssetManifest.json').then((ByteData data) {
responded = true;
});
expect(responded, true);
});
}

0 comments on commit 3895786

Please sign in to comment.