diff --git a/packages/flutter_tools/lib/src/asset.dart b/packages/flutter_tools/lib/src/asset.dart index 7374378fd5..b3dc4f3eb0 100644 --- a/packages/flutter_tools/lib/src/asset.dart +++ b/packages/flutter_tools/lib/src/asset.dart @@ -118,7 +118,7 @@ class AssetBundle { 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 0000000000..b9fb826f90 --- /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 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 0000000000..12120f966e --- /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 0000000000..2933b96bcf --- /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 0000000000..bcd4ecc162 --- /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 0000000000..2268b1908f --- /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