mirror of
https://github.com/flutter/flutter.git
synced 2025-06-03 00:51:18 +00:00
Enable widget load assets in its own package in test (#35991)
This commit is contained in:
parent
a8c4da22d9
commit
1166015931
@ -0,0 +1 @@
|
|||||||
|
[0-9]+:[0-9]+ [+]1: All tests passed!
|
20
dev/automated_tests/flutter_test/package_assets_test.dart
Normal file
20
dev/automated_tests/flutter_test/package_assets_test.dart
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
// Copyright 2019 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 'package:flutter/widgets.dart';
|
||||||
|
import 'package:flutter_test/flutter_test.dart';
|
||||||
|
|
||||||
|
void main() {
|
||||||
|
testWidgets('Rendering Error', (WidgetTester tester) async {
|
||||||
|
// Assets can load with its package name.
|
||||||
|
await tester.pumpWidget(
|
||||||
|
Image.asset('icon/test.png',
|
||||||
|
width: 54,
|
||||||
|
height: 54,
|
||||||
|
fit: BoxFit.none,
|
||||||
|
package: 'flutter_automated_tests'
|
||||||
|
),
|
||||||
|
);
|
||||||
|
});
|
||||||
|
}
|
BIN
dev/automated_tests/icon/test.png
Normal file
BIN
dev/automated_tests/icon/test.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 423 B |
@ -64,5 +64,6 @@ dependencies:
|
|||||||
|
|
||||||
flutter:
|
flutter:
|
||||||
uses-material-design: true
|
uses-material-design: true
|
||||||
|
assets:
|
||||||
|
- icon/
|
||||||
# PUBSPEC CHECKSUM: 4625
|
# PUBSPEC CHECKSUM: 4625
|
||||||
|
@ -811,15 +811,23 @@ class AutomatedTestWidgetsFlutterBinding extends TestWidgetsFlutterBinding {
|
|||||||
final String assetFolderPath = Platform.environment['UNIT_TEST_ASSETS'];
|
final String assetFolderPath = Platform.environment['UNIT_TEST_ASSETS'];
|
||||||
_ensureInitialized(assetFolderPath);
|
_ensureInitialized(assetFolderPath);
|
||||||
|
|
||||||
|
final String prefix = 'packages/${Platform.environment['APP_NAME']}/';
|
||||||
|
|
||||||
if (_allowedAssetKeys.isNotEmpty) {
|
if (_allowedAssetKeys.isNotEmpty) {
|
||||||
defaultBinaryMessenger.setMockMessageHandler('flutter/assets', (ByteData message) {
|
defaultBinaryMessenger.setMockMessageHandler('flutter/assets', (ByteData message) {
|
||||||
final String key = utf8.decode(message.buffer.asUint8List());
|
String key = utf8.decode(message.buffer.asUint8List());
|
||||||
if (_allowedAssetKeys.contains(key)) {
|
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 File asset = File(path.join(assetFolderPath, key));
|
||||||
final Uint8List encoded = Uint8List.fromList(asset.readAsBytesSync());
|
final Uint8List encoded = Uint8List.fromList(asset.readAsBytesSync());
|
||||||
return Future<ByteData>.value(encoded.buffer.asByteData());
|
return Future<ByteData>.value(encoded.buffer.asByteData());
|
||||||
}
|
|
||||||
return null;
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -866,6 +866,7 @@ class FlutterPlatform extends PlatformPlugin {
|
|||||||
'FLUTTER_TEST': flutterTest,
|
'FLUTTER_TEST': flutterTest,
|
||||||
'FONTCONFIG_FILE': _fontConfigFile.path,
|
'FONTCONFIG_FILE': _fontConfigFile.path,
|
||||||
'SERVER_PORT': serverPort.toString(),
|
'SERVER_PORT': serverPort.toString(),
|
||||||
|
'APP_NAME': flutterProject?.manifest?.appName ?? '',
|
||||||
};
|
};
|
||||||
if (buildTestAssets) {
|
if (buildTestAssets) {
|
||||||
environment['UNIT_TEST_ASSETS'] = fs.path.join(
|
environment['UNIT_TEST_ASSETS'] = fs.path.join(
|
||||||
|
@ -65,6 +65,11 @@ void main() {
|
|||||||
return _testFile('print_user_created_ancestor_no_flag', automatedTestsDirectory, flutterTestDirectory);
|
return _testFile('print_user_created_ancestor_no_flag', automatedTestsDirectory, flutterTestDirectory);
|
||||||
}, skip: io.Platform.isWindows); // TODO(chunhtai): Dart on Windows has trouble with unicode characters in output (#35425).
|
}, skip: io.Platform.isWindows); // TODO(chunhtai): Dart on Windows has trouble with unicode characters in output (#35425).
|
||||||
|
|
||||||
|
testUsingContext('can load assets within its own package', () async {
|
||||||
|
Cache.flutterRoot = '../..';
|
||||||
|
return _testFile('package_assets', automatedTestsDirectory, flutterTestDirectory, exitCode: isZero);
|
||||||
|
}, skip: io.Platform.isWindows);
|
||||||
|
|
||||||
testUsingContext('run a test when its name matches a regexp', () async {
|
testUsingContext('run a test when its name matches a regexp', () async {
|
||||||
Cache.flutterRoot = '../..';
|
Cache.flutterRoot = '../..';
|
||||||
final ProcessResult result = await _runFlutterTest('filtering', automatedTestsDirectory, flutterTestDirectory,
|
final ProcessResult result = await _runFlutterTest('filtering', automatedTestsDirectory, flutterTestDirectory,
|
||||||
|
Loading…
Reference in New Issue
Block a user