| // Copyright 2014 The Flutter 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:typed_data'; |
| |
| import 'package:flutter_tools/src/base/file_system.dart'; |
| import 'package:flutter_tools/src/compile.dart'; |
| import 'package:flutter_tools/src/convert.dart'; |
| import 'package:flutter_tools/src/globals.dart' as globals; |
| import 'package:mockito/mockito.dart'; |
| |
| import '../src/common.dart'; |
| import '../src/context.dart'; |
| |
| const String packagesContents = r''' |
| xml:file:///Users/flutter_user/.pub-cache/hosted/pub.dartlang.org/xml-3.2.3/lib/ |
| yaml:file:///Users/flutter_user/.pub-cache/hosted/pub.dartlang.org/yaml-2.1.15/lib/ |
| example:file:///example/lib/ |
| '''; |
| |
| const String multiRootPackagesContents = r''' |
| xml:file:///Users/flutter_user/.pub-cache/hosted/pub.dartlang.org/xml-3.2.3/lib/ |
| yaml:file:///Users/flutter_user/.pub-cache/hosted/pub.dartlang.org/yaml-2.1.15/lib/ |
| example:org-dartlang-app:/ |
| '''; |
| |
| void main() { |
| MockFileSystem mockFileSystem; |
| MockFile mockFile; |
| |
| setUp(() { |
| mockFileSystem = MockFileSystem(); |
| mockFile = MockFile(); |
| when(mockFileSystem.path).thenReturn(globals.fs.path); |
| when(mockFileSystem.file(any)).thenReturn(mockFile); |
| when(mockFile.readAsBytesSync()).thenReturn(utf8.encode(packagesContents) as Uint8List); |
| }); |
| |
| testUsingContext('Can map main.dart to correct package', () async { |
| final PackageUriMapper packageUriMapper = PackageUriMapper('/example/lib/main.dart', '.packages', null, null); |
| expect(packageUriMapper.map('/example/lib/main.dart').toString(), |
| 'package:example/main.dart'); |
| }, overrides: <Type, Generator>{ |
| FileSystem: () => mockFileSystem, |
| ProcessManager: () => FakeProcessManager.any(), |
| }); |
| |
| testUsingContext('single-root maps file from other package to null', () async { |
| final PackageUriMapper packageUriMapper = PackageUriMapper('/example/lib/main.dart', '.packages', null, null); |
| expect(packageUriMapper.map('/xml/lib/xml.dart'), null); |
| }, overrides: <Type, Generator>{ |
| FileSystem: () => mockFileSystem, |
| ProcessManager: () => FakeProcessManager.any(), |
| }); |
| |
| testUsingContext('single-root maps non-main file from same package', () async { |
| final PackageUriMapper packageUriMapper = PackageUriMapper('/example/lib/main.dart', '.packages', null, null); |
| expect(packageUriMapper.map('/example/lib/src/foo.dart').toString(), |
| 'package:example/src/foo.dart'); |
| }, overrides: <Type, Generator>{ |
| FileSystem: () => mockFileSystem, |
| ProcessManager: () => FakeProcessManager.any(), |
| }); |
| |
| testUsingContext('multi-root maps main file from same package on multiroot scheme', () async { |
| final MockFileSystem mockFileSystem = MockFileSystem(); |
| final MockFile mockFile = MockFile(); |
| when(mockFileSystem.path).thenReturn(globals.fs.path); |
| when(mockFileSystem.file(any)).thenReturn(mockFile); |
| when(mockFile.readAsBytesSync()) |
| .thenReturn(utf8.encode(multiRootPackagesContents) as Uint8List); |
| final PackageUriMapper packageUriMapper = PackageUriMapper( |
| '/example/lib/main.dart', |
| '.packages', |
| 'org-dartlang-app', |
| <String>['/example/lib/', '/gen/lib/']); |
| expect(packageUriMapper.map('/example/lib/main.dart').toString(), |
| 'package:example/main.dart'); |
| }, overrides: <Type, Generator>{ |
| FileSystem: () => mockFileSystem, |
| ProcessManager: () => FakeProcessManager.any(), |
| }); |
| } |
| |
| class MockFileSystem extends Mock implements FileSystem {} |
| class MockFile extends Mock implements File {} |