150 lines
4.7 KiB
Dart
150 lines
4.7 KiB
Dart
// Copyright (c) 2017, 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 analyzer.test.generated.gn_test;
|
|
|
|
import 'package:analyzer/file_system/memory_file_system.dart';
|
|
import 'package:analyzer/src/generated/gn.dart';
|
|
import 'package:analyzer/src/generated/source.dart';
|
|
import 'package:test/test.dart';
|
|
import 'package:test_reflective_loader/test_reflective_loader.dart';
|
|
|
|
main() {
|
|
defineReflectiveSuite(() {
|
|
defineReflectiveTests(GnPackageUriResolverTest);
|
|
defineReflectiveTests(GnWorkspaceTest);
|
|
});
|
|
}
|
|
|
|
@reflectiveTest
|
|
class GnPackageUriResolverTest extends _BaseTest {
|
|
GnWorkspace workspace;
|
|
GnPackageUriResolver resolver;
|
|
|
|
void test_resolve() {
|
|
_addResources([
|
|
'/workspace/.jiri_root/',
|
|
'/workspace/out/debug-x87_128/gen/dart.sources/',
|
|
'/workspace/some/code/',
|
|
'/workspace/a/source/code.dart',
|
|
]);
|
|
provider.newFile(
|
|
_p('/workspace/out/debug-x87_128/gen/dart.sources/flutter'),
|
|
_p('/workspace/a/source'));
|
|
_setUp();
|
|
_assertResolve(
|
|
'package:flutter/code.dart', _p('/workspace/a/source/code.dart'));
|
|
}
|
|
|
|
void test_resolveDoesNotExist() {
|
|
_addResources([
|
|
'/workspace/.jiri_root/',
|
|
'/workspace/out/debug-x87_128/gen/dart.sources/',
|
|
'/workspace/some/code/',
|
|
'/workspace/a/source/code.dart',
|
|
]);
|
|
provider.newFile(
|
|
_p('/workspace/out/debug-x87_128/gen/dart.sources/flutter'),
|
|
_p('/workspace/a/source'));
|
|
_setUp();
|
|
expect(
|
|
resolver.resolveAbsolute(Uri.parse('package:bogus/code.dart')), null);
|
|
}
|
|
|
|
void test_resolveAddToCache() {
|
|
_addResources([
|
|
'/workspace/.jiri_root/',
|
|
'/workspace/out/debug-x87_128/gen/dart.sources/',
|
|
'/workspace/some/code/',
|
|
'/workspace/a/source/code.dart',
|
|
]);
|
|
_setUp();
|
|
expect(
|
|
resolver.resolveAbsolute(Uri.parse('package:flutter/code.dart')), null);
|
|
provider.newFile(
|
|
_p('/workspace/out/debug-x87_128/gen/dart.sources/flutter'),
|
|
_p('/workspace/a/source'));
|
|
_assertResolve(
|
|
'package:flutter/code.dart', _p('/workspace/a/source/code.dart'));
|
|
}
|
|
|
|
void _addResources(List<String> paths) {
|
|
for (String path in paths) {
|
|
if (path.endsWith('/')) {
|
|
provider.newFolder(_p(path.substring(0, path.length - 1)));
|
|
} else {
|
|
provider.newFile(_p(path), '');
|
|
}
|
|
}
|
|
}
|
|
|
|
void _setUp() {
|
|
workspace = GnWorkspace.find(provider, _p('/workspace'));
|
|
resolver = new GnPackageUriResolver(workspace);
|
|
}
|
|
|
|
void _assertResolve(String uriStr, String posixPath,
|
|
{bool exists: true, bool restore: true}) {
|
|
Uri uri = Uri.parse(uriStr);
|
|
Source source = resolver.resolveAbsolute(uri);
|
|
expect(source, isNotNull);
|
|
expect(source.fullName, _p(posixPath));
|
|
expect(source.uri, uri);
|
|
expect(source.exists(), exists);
|
|
// If enabled, test also "restoreAbsolute".
|
|
if (restore) {
|
|
Uri uri = resolver.restoreAbsolute(source);
|
|
expect(uri.toString(), uriStr);
|
|
}
|
|
}
|
|
}
|
|
|
|
@reflectiveTest
|
|
class GnWorkspaceTest extends _BaseTest {
|
|
void test_find_notAbsolute() {
|
|
expect(() => GnWorkspace.find(provider, _p('not_absolute')),
|
|
throwsArgumentError);
|
|
}
|
|
|
|
void test_find_noJiriRoot() {
|
|
provider.newFolder(_p('/workspace'));
|
|
GnWorkspace workspace = GnWorkspace.find(provider, _p('/workspace'));
|
|
expect(workspace, isNull);
|
|
}
|
|
|
|
void test_find_withRoot() {
|
|
provider.newFolder(_p('/workspace/.jiri_root'));
|
|
provider.newFolder(_p('/workspace/out/debug-x87_128/gen/dart.sources'));
|
|
provider.newFolder(_p('/workspace/some/code'));
|
|
GnWorkspace workspace =
|
|
GnWorkspace.find(provider, _p('/workspace/some/code'));
|
|
expect(workspace, isNotNull);
|
|
expect(workspace.root, _p('/workspace'));
|
|
}
|
|
|
|
void test_packages() {
|
|
provider.newFolder(_p('/workspace/.jiri_root'));
|
|
provider.newFolder(_p('/workspace/out/debug-x87_128/gen/dart.sources'));
|
|
provider.newFile(
|
|
_p('/workspace/out/debug-x87_128/gen/dart.sources/flutter'),
|
|
_p('/path/to/source'));
|
|
provider.newFolder(_p('/workspace/some/code'));
|
|
GnWorkspace workspace =
|
|
GnWorkspace.find(provider, _p('/workspace/some/code'));
|
|
expect(workspace, isNotNull);
|
|
expect(workspace.root, _p('/workspace'));
|
|
expect(workspace.packageMap.length, 1);
|
|
expect(workspace.packageMap['flutter'][0].path, _p('/path/to/source'));
|
|
}
|
|
}
|
|
|
|
class _BaseTest {
|
|
final MemoryResourceProvider provider = new MemoryResourceProvider();
|
|
|
|
/**
|
|
* Return the [provider] specific path for the given Posix [path].
|
|
*/
|
|
String _p(String path) => provider.convertPath(path);
|
|
}
|