Load assets during test from file system instead of manifest. (#36553)
diff --git a/packages/flutter_test/lib/src/binding.dart b/packages/flutter_test/lib/src/binding.dart
index abd96cd..dbe67e9 100644
--- a/packages/flutter_test/lib/src/binding.dart
+++ b/packages/flutter_test/lib/src/binding.dart
@@ -798,9 +798,6 @@
@override
int get microtaskCount => _currentFakeAsync.microtaskCount;
- /// A whitelist [Set] that is used in mocking the asset message channel.
- static Set<String> _allowedAssetKeys;
-
void _mockFlutterAssets() {
if (isBrowser) {
return;
@@ -809,46 +806,29 @@
return;
}
final String assetFolderPath = Platform.environment['UNIT_TEST_ASSETS'];
- _ensureInitialized(assetFolderPath);
-
final String prefix = 'packages/${Platform.environment['APP_NAME']}/';
- if (_allowedAssetKeys.isNotEmpty) {
- defaultBinaryMessenger.setMockMessageHandler('flutter/assets', (ByteData message) {
- String key = utf8.decode(message.buffer.asUint8List());
- if (!_allowedAssetKeys.contains(key)) {
- // For tests in package, it will load assets with its own package prefix.
- // In this case, we do a best-effort look up.
- if (!key.startsWith(prefix))
- return null;
- key = key.replaceFirst(prefix, '');
- if (!_allowedAssetKeys.contains(key))
- return null;
- }
- final File asset = File(path.join(assetFolderPath, key));
- final Uint8List encoded = Uint8List.fromList(asset.readAsBytesSync());
- return Future<ByteData>.value(encoded.buffer.asByteData());
- });
- }
- }
+ defaultBinaryMessenger.setMockMessageHandler('flutter/assets', (ByteData message) {
+ String key = utf8.decode(message.buffer.asUint8List());
+ File asset = File(path.join(assetFolderPath, key));
- void _ensureInitialized(String assetFolderPath) {
- if (_allowedAssetKeys != null) {
- return;
- }
- final File manifestFile = File(
- path.join(assetFolderPath, 'AssetManifest.json'));
- // If the file does not exist, it means there is no asset declared in
- // the project.
- if (!manifestFile.existsSync()) {
- _allowedAssetKeys = <String>{};
- return;
- }
- final Map<String, dynamic> manifest = json.decode(manifestFile.readAsStringSync());
- _allowedAssetKeys = <String>{
- 'AssetManifest.json',
- ...manifest.values.cast<List<dynamic>>().expand<dynamic>((List<dynamic> e) => e).cast<String>(),
- };
+ if (!asset.existsSync()) {
+ // For tests in package, it will load assets with its own package prefix.
+ // In this case, we do a best-effort look up.
+ if (!key.startsWith(prefix)) {
+ return null;
+ }
+
+ key = key.replaceFirst(prefix, '');
+ asset = File(path.join(assetFolderPath, key));
+ if (!asset.existsSync()) {
+ return null;
+ }
+ }
+
+ final Uint8List encoded = Uint8List.fromList(asset.readAsBytesSync());
+ return Future<ByteData>.value(encoded.buffer.asByteData());
+ });
}
@override