blob: f2dbd3f85da78672a69650b61dababea41214f19 [file] [log] [blame]
// Copyright (c) 2019, 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.
import 'package:analyzer/file_system/file_system.dart';
import 'package:analyzer/file_system/memory_file_system.dart';
import 'package:analyzer/file_system/physical_file_system.dart';
import 'package:analyzer_utilities/package_root.dart' as package_root;
void _cacheFiles(Map<String, String> cachedFiles) {
var resourceProvider = PhysicalResourceProvider.INSTANCE;
var pathContext = resourceProvider.pathContext;
var packageRoot = pathContext.normalize(package_root.packageRoot);
var mockPath = pathContext.join(
packageRoot,
'analysis_server',
'test',
'mock_packages',
);
void addFiles(Resource resource) {
if (resource is Folder) {
resource.getChildren().forEach(addFiles);
} else if (resource is File) {
var relativePath = pathContext.relative(
resource.path,
from: mockPath,
);
var relativePathComponents = pathContext.split(relativePath);
var relativePosixPath = relativePathComponents.join('/');
cachedFiles[relativePosixPath] = resource.readAsStringSync();
}
}
addFiles(
resourceProvider.getFolder(mockPath),
);
}
/// Helper for copying files from "tests/mock_packages" to memory file system
/// for Blaze.
class BlazeMockPackages {
static final BlazeMockPackages instance = BlazeMockPackages._();
/// The mapping from relative Posix paths of files to the file contents.
final Map<String, String> _cachedFiles = {};
BlazeMockPackages._() {
_cacheFiles(_cachedFiles);
}
void addFlutter(MemoryResourceProvider provider) {
_addFiles(provider, 'flutter');
}
void addMeta(MemoryResourceProvider provider) {
_addFiles(provider, 'meta');
}
/// Add files of the given [packageName] to the [provider].
Folder _addFiles(MemoryResourceProvider provider, String packageName) {
var packagesPath = provider.convertPath('/workspace/third_party/dart');
for (var entry in _cachedFiles.entries) {
var relativePosixPath = entry.key;
var relativePathComponents = relativePosixPath.split('/');
if (relativePathComponents[0] == packageName) {
var relativePath = provider.pathContext.joinAll(relativePathComponents);
var path = provider.pathContext.join(packagesPath, relativePath);
provider.newFile(path, entry.value);
}
}
var packagesFolder = provider.getFolder(packagesPath);
return packagesFolder.getChildAssumingFolder(packageName);
}
}
/// Helper for copying files from "tests/mock_packages" to memory file system.
class MockPackages {
static final MockPackages instance = MockPackages._();
/// The mapping from relative Posix paths of files to the file contents.
final Map<String, String> _cachedFiles = {};
MockPackages._() {
_cacheFiles(_cachedFiles);
}
Folder addFlutter(MemoryResourceProvider provider) {
var packageFolder = _addFiles(provider, 'flutter');
return packageFolder.getChildAssumingFolder('lib');
}
Folder addMeta(MemoryResourceProvider provider) {
var packageFolder = _addFiles(provider, 'meta');
return packageFolder.getChildAssumingFolder('lib');
}
Folder addPedantic(MemoryResourceProvider provider) {
var packageFolder = _addFiles(provider, 'pedantic');
return packageFolder.getChildAssumingFolder('lib');
}
Folder addUI(MemoryResourceProvider provider) {
var packageFolder = _addFiles(provider, 'ui');
return packageFolder.getChildAssumingFolder('lib');
}
Folder addVectorMath(MemoryResourceProvider provider) {
var packageFolder = _addFiles(provider, 'vector_math');
return packageFolder.getChildAssumingFolder('lib');
}
/// Add files of the given [packageName] to the [provider].
Folder _addFiles(MemoryResourceProvider provider, String packageName) {
var packagesPath = provider.convertPath('/packages');
for (var entry in _cachedFiles.entries) {
var relativePosixPath = entry.key;
var relativePathComponents = relativePosixPath.split('/');
if (relativePathComponents[0] == packageName) {
var relativePath = provider.pathContext.joinAll(relativePathComponents);
var path = provider.pathContext.join(packagesPath, relativePath);
provider.newFile(path, entry.value);
}
}
var packagesFolder = provider.getFolder(packagesPath);
return packagesFolder.getChildAssumingFolder(packageName);
}
}