Fix custom fonts on Windows (#14191)
Fixes https://github.com/flutter/flutter/issues/13870.
diff --git a/packages/flutter_tools/lib/src/asset.dart b/packages/flutter_tools/lib/src/asset.dart
index 7374378..b3dc4f3 100644
--- a/packages/flutter_tools/lib/src/asset.dart
+++ b/packages/flutter_tools/lib/src/asset.dart
@@ -118,7 +118,7 @@
for (String packageName in packageMap.map.keys) {
final Uri package = packageMap.map[packageName];
if (package != null && package.scheme == 'file') {
- final String packageManifestPath = package.resolve('../pubspec.yaml').path;
+ final String packageManifestPath = fs.path.fromUri(package.resolve('../pubspec.yaml'));
final FlutterManifest packageFlutterManifest = await FlutterManifest.createFromPath(packageManifestPath);
if (packageFlutterManifest == null)
continue;
diff --git a/packages/flutter_tools/test/asset_test.dart b/packages/flutter_tools/test/asset_test.dart
new file mode 100644
index 0000000..b9fb826
--- /dev/null
+++ b/packages/flutter_tools/test/asset_test.dart
@@ -0,0 +1,51 @@
+// 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 'package:flutter_tools/src/asset.dart';
+import 'package:flutter_tools/src/base/file_system.dart';
+import 'package:flutter_tools/src/cache.dart';
+import 'package:test/test.dart';
+import 'src/common.dart';
+import 'src/context.dart';
+
+void main() {
+ group('Assets', () {
+ final String dataPath = fs.path.join(
+ getFlutterRoot(),
+ 'packages',
+ 'flutter_tools',
+ 'test',
+ 'data',
+ 'asset_test',
+ );
+
+ setUpAll(() {
+ Cache.disableLocking();
+ });
+
+ // This test intentionally does not use a memory file system to ensure
+ // that AssetBundle with fonts also works on Windows.
+ testUsingContext('app font uses local font file', () async {
+ final AssetBundle asset = new AssetBundle();
+ await asset.build(
+ manifestPath : fs.path.join(dataPath, 'main', 'pubspec.yaml'),
+ packagesPath: fs.path.join(dataPath, 'main', '.packages'),
+ includeDefaultFonts: false,
+ );
+
+ expect(asset.entries.containsKey('FontManifest.json'), isTrue);
+ expect(
+ await getValueAsString('FontManifest.json', asset),
+ '[{"family":"packages/font/test_font","fonts":[{"asset":"packages/font/test_font_file"}]}]',
+ );
+ });
+
+ });
+}
+
+Future<String> getValueAsString(String key, AssetBundle asset) async {
+ return new String.fromCharCodes(await asset.entries[key].contentsAsBytes());
+}
diff --git a/packages/flutter_tools/test/data/asset_test/font/pubspec.yaml b/packages/flutter_tools/test/data/asset_test/font/pubspec.yaml
new file mode 100644
index 0000000..12120f9
--- /dev/null
+++ b/packages/flutter_tools/test/data/asset_test/font/pubspec.yaml
@@ -0,0 +1,8 @@
+name: font
+description: A test project that contains a font.
+flutter:
+ uses-material-design: true
+ fonts:
+ - family: test_font
+ fonts:
+ - asset: test_font_file
diff --git a/packages/flutter_tools/test/data/asset_test/font/test_font_file b/packages/flutter_tools/test/data/asset_test/font/test_font_file
new file mode 100644
index 0000000..2933b96
--- /dev/null
+++ b/packages/flutter_tools/test/data/asset_test/font/test_font_file
@@ -0,0 +1 @@
+This is a fake font.
diff --git a/packages/flutter_tools/test/data/asset_test/main/.packages b/packages/flutter_tools/test/data/asset_test/main/.packages
new file mode 100644
index 0000000..bcd4ecc
--- /dev/null
+++ b/packages/flutter_tools/test/data/asset_test/main/.packages
@@ -0,0 +1 @@
+font:../font/lib/
diff --git a/packages/flutter_tools/test/data/asset_test/main/pubspec.yaml b/packages/flutter_tools/test/data/asset_test/main/pubspec.yaml
new file mode 100644
index 0000000..2268b19
--- /dev/null
+++ b/packages/flutter_tools/test/data/asset_test/main/pubspec.yaml
@@ -0,0 +1,6 @@
+name: main
+description: A test project that has a package with a font as a dependency.
+
+dependencies:
+ font:
+ path: ../font