From 116601593157c2eb71a616601bb51c53f54a855c Mon Sep 17 00:00:00 2001 From: chunhtai <47866232+chunhtai@users.noreply.github.com> Date: Tue, 16 Jul 2019 09:47:42 -0700 Subject: [PATCH] Enable widget load assets in its own package in test (#35991) --- .../package_assets_expectation.txt | 1 + .../flutter_test/package_assets_test.dart | 20 ++++++++++++++++++ dev/automated_tests/icon/test.png | Bin 0 -> 423 bytes dev/automated_tests/pubspec.yaml | 3 ++- packages/flutter_test/lib/src/binding.dart | 20 ++++++++++++------ .../lib/src/test/flutter_platform.dart | 1 + .../general.shard/commands/test_test.dart | 5 +++++ 7 files changed, 43 insertions(+), 7 deletions(-) create mode 100644 dev/automated_tests/flutter_test/package_assets_expectation.txt create mode 100644 dev/automated_tests/flutter_test/package_assets_test.dart create mode 100644 dev/automated_tests/icon/test.png diff --git a/dev/automated_tests/flutter_test/package_assets_expectation.txt b/dev/automated_tests/flutter_test/package_assets_expectation.txt new file mode 100644 index 0000000000..cda62d712c --- /dev/null +++ b/dev/automated_tests/flutter_test/package_assets_expectation.txt @@ -0,0 +1 @@ +[0-9]+:[0-9]+ [+]1: All tests passed! diff --git a/dev/automated_tests/flutter_test/package_assets_test.dart b/dev/automated_tests/flutter_test/package_assets_test.dart new file mode 100644 index 0000000000..8e1c5745a7 --- /dev/null +++ b/dev/automated_tests/flutter_test/package_assets_test.dart @@ -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' + ), + ); + }); +} diff --git a/dev/automated_tests/icon/test.png b/dev/automated_tests/icon/test.png new file mode 100644 index 0000000000000000000000000000000000000000..3277025d93bc9e4b2b766d18a2e5cd60dce896bb GIT binary patch literal 423 zcmeAS@N?(olHy`uVBq!ia0y~yV31&7V36ZrW?*1o{GfLoL=^|QJ29*~C-ahlfuTLX zC&ZP3f#Lrk09h0N3o6.value(encoded.buffer.asByteData()); + 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; } - return null; + final File asset = File(path.join(assetFolderPath, key)); + final Uint8List encoded = Uint8List.fromList(asset.readAsBytesSync()); + return Future.value(encoded.buffer.asByteData()); }); } } diff --git a/packages/flutter_tools/lib/src/test/flutter_platform.dart b/packages/flutter_tools/lib/src/test/flutter_platform.dart index 76000478e0..77a7b4efe4 100644 --- a/packages/flutter_tools/lib/src/test/flutter_platform.dart +++ b/packages/flutter_tools/lib/src/test/flutter_platform.dart @@ -866,6 +866,7 @@ class FlutterPlatform extends PlatformPlugin { 'FLUTTER_TEST': flutterTest, 'FONTCONFIG_FILE': _fontConfigFile.path, 'SERVER_PORT': serverPort.toString(), + 'APP_NAME': flutterProject?.manifest?.appName ?? '', }; if (buildTestAssets) { environment['UNIT_TEST_ASSETS'] = fs.path.join( diff --git a/packages/flutter_tools/test/general.shard/commands/test_test.dart b/packages/flutter_tools/test/general.shard/commands/test_test.dart index 348ce999ad..4217fa1f24 100644 --- a/packages/flutter_tools/test/general.shard/commands/test_test.dart +++ b/packages/flutter_tools/test/general.shard/commands/test_test.dart @@ -65,6 +65,11 @@ void main() { 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). + 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 { Cache.flutterRoot = '../..'; final ProcessResult result = await _runFlutterTest('filtering', automatedTestsDirectory, flutterTestDirectory,