blob: 3e62e29918aa4f5ca8873e6ac4cde399d7346951 [file] [log] [blame]
// Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
library test.package.map.provider;
import 'dart:convert';
import 'package:analysis_server/src/package_map_provider.dart';
import 'package:unittest/unittest.dart';
import 'package:analysis_server/src/resource.dart';
main() {
groupSep = ' | ';
group('PubPackageMapProvider', () {
group('parsePackageMap', () {
MemoryResourceProvider resourceProvider;
PubPackageMapProvider packageMapProvider;
const String projectPath = '/path/to/project';
Folder projectFolder;
setUp(() {
resourceProvider = new MemoryResourceProvider();
packageMapProvider = new PubPackageMapProvider(resourceProvider);
projectFolder = resourceProvider.newFolder(projectPath);
});
PackageMapInfo parsePackageMap(Object obj) {
return packageMapProvider.parsePackageMap(JSON.encode(obj), projectFolder);
}
test('normal folder', () {
String packageName = 'foo';
String folderPath = '/path/to/folder';
resourceProvider.newFolder(folderPath);
Map<String, List<Folder>> result = parsePackageMap(
{'packages': {packageName: folderPath}}).packageMap;
expect(result, hasLength(1));
expect(result.keys, contains(packageName));
expect(result[packageName], hasLength(1));
expect(result[packageName][0], new isInstanceOf<Folder>());
expect(result[packageName][0].path, equals(folderPath));
});
test('ignore nonexistent folder', () {
String packageName = 'foo';
String folderPath = '/path/to/folder';
Map<String, List<Folder>> result = parsePackageMap(
{'packages': {packageName: folderPath}}).packageMap;
expect(result, hasLength(0));
});
test('package maps to list', () {
String packageName = 'foo';
String folderPath1 = '/path/to/folder1';
String folderPath2 = '/path/to/folder2';
resourceProvider.newFolder(folderPath1);
resourceProvider.newFolder(folderPath2);
Map<String, List<Folder>> result = parsePackageMap(
{'packages': {packageName: [folderPath1, folderPath2]}}).packageMap;
expect(result, hasLength(1));
expect(result.keys, contains(packageName));
expect(result[packageName], hasLength(2));
for (int i = 0; i < 2; i++) {
expect(result[packageName][i], new isInstanceOf<Folder>());
expect(result[packageName][i].path, isIn([folderPath1, folderPath2]));
}
});
test('Handle dependencies', () {
String path1 = '/path/to/folder1/pubspec.lock';
String path2 = '/path/to/folder2/pubspec.lock';
resourceProvider.newFile(path1, '...');
resourceProvider.newFile(path2, '...');
Set<String> dependencies = parsePackageMap(
{'packages': {}, 'input_files': [path1, path2]}).dependencies;
expect(dependencies, hasLength(2));
expect(dependencies, contains(path1));
expect(dependencies, contains(path2));
});
test('Relative path in packages', () {
String packagePath = '/path/to/package';
String relativePackagePath = '../package';
String packageName = 'foo';
resourceProvider.newFolder(projectPath);
resourceProvider.newFolder(packagePath);
Map<String, List<Folder>> result = parsePackageMap(
{'packages': {packageName: [relativePackagePath]}}).packageMap;
expect(result[packageName][0].path, equals(packagePath));
});
test('Relative path in dependencies', () {
String dependencyPath = '/path/to/pubspec.lock';
String relativeDependencyPath = '../pubspec.lock';
resourceProvider.newFolder(projectPath);
resourceProvider.newFile(dependencyPath, 'contents');
Set<String> dependencies = parsePackageMap(
{'packages': {}, 'input_files': [relativeDependencyPath]}).dependencies;
expect(dependencies, hasLength(1));
expect(dependencies, contains(dependencyPath));
});
});
});
}