Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(243)

Unified Diff: packages/analyzer/test/generated/source_factory_test.dart

Issue 1400473008: Roll Observatory packages and add a roll script (Closed) Base URL: git@github.com:dart-lang/observatory_pub_packages.git@master
Patch Set: Created 5 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: packages/analyzer/test/generated/source_factory_test.dart
diff --git a/packages/analyzer/test/generated/source_factory_test.dart b/packages/analyzer/test/generated/source_factory_test.dart
new file mode 100644
index 0000000000000000000000000000000000000000..c16f1f8f6e31aea1429bf116fc35cd25d3c503db
--- /dev/null
+++ b/packages/analyzer/test/generated/source_factory_test.dart
@@ -0,0 +1,352 @@
+// Copyright (c) 2015, 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.source_factory;
+
+import 'dart:convert';
+
+import 'package:analyzer/file_system/file_system.dart';
+import 'package:analyzer/file_system/memory_file_system.dart';
+import 'package:analyzer/source/package_map_resolver.dart';
+import 'package:analyzer/src/generated/java_core.dart';
+import 'package:analyzer/src/generated/java_engine_io.dart';
+import 'package:analyzer/src/generated/java_io.dart';
+import 'package:analyzer/src/generated/source.dart';
+import 'package:analyzer/src/generated/source_io.dart';
+import 'package:analyzer/src/generated/utilities_dart.dart' as utils;
+import 'package:package_config/packages.dart';
+import 'package:package_config/packages_file.dart' as pkgfile show parse;
+import 'package:package_config/src/packages_impl.dart';
+import 'package:path/path.dart';
+import 'package:unittest/unittest.dart';
+
+import '../reflective_tests.dart';
+import '../utils.dart';
+import 'test_support.dart';
+
+main() {
+ initializeTestEnvironment();
+ runReflectiveTests(SourceFactoryTest);
+ runPackageMapTests();
+}
+
+Source createSource({String path, String uri}) =>
+ //TODO(pquitslund): find some way to pass an actual URI into source creation
+ new MemoryResourceProvider()
+ .getFile(path)
+ .createSource(uri != null ? Uri.parse(uri) : null);
+
+void runPackageMapTests() {
+ final Uri baseUri = new Uri.file('test/base');
+ final List<UriResolver> testResolvers = [new FileUriResolver()];
+
+ Packages createPackageMap(Uri base, String configFileContents) {
+ List<int> bytes = UTF8.encode(configFileContents);
+ Map<String, Uri> map = pkgfile.parse(bytes, base);
+ return new MapPackages(map);
+ }
+
+ Map<String, List<Folder>> getPackageMap(String config) {
+ Packages packages = createPackageMap(baseUri, config);
+ SourceFactory factory = new SourceFactory(testResolvers, packages);
+ return factory.packageMap;
+ }
+
+ String resolvePackageUri(
+ {String uri,
+ String config,
+ Source containingSource,
+ UriResolver customResolver}) {
+ Packages packages = createPackageMap(baseUri, config);
+ List<UriResolver> resolvers = testResolvers.toList();
+ if (customResolver != null) {
+ resolvers.add(customResolver);
+ }
+ SourceFactory factory = new SourceFactory(resolvers, packages);
+ Source source = factory.resolveUri(containingSource, uri);
+ return source != null ? source.fullName : null;
+ }
+
+ Uri restorePackageUri(
+ {Source source, String config, UriResolver customResolver}) {
+ Packages packages = createPackageMap(baseUri, config);
+ List<UriResolver> resolvers = testResolvers.toList();
+ if (customResolver != null) {
+ resolvers.add(customResolver);
+ }
+ SourceFactory factory = new SourceFactory(resolvers, packages);
+ return factory.restoreUri(source);
+ }
+
+ group('SourceFactoryTest', () {
+ group('package mapping', () {
+ group('resolveUri', () {
+ test('URI in mapping', () {
+ String uri = resolvePackageUri(
+ config: '''
+unittest:file:///home/somebody/.pub/cache/unittest-0.9.9/lib/
+async:file:///home/somebody/.pub/cache/async-1.1.0/lib/
+quiver:file:///home/somebody/.pub/cache/quiver-1.2.1/lib
+''',
+ uri: 'package:unittest/unittest.dart');
+ expect(
+ uri,
+ equals(
+ '/home/somebody/.pub/cache/unittest-0.9.9/lib/unittest.dart'));
+ });
+ test('URI in mapping (no scheme)', () {
+ String uri = resolvePackageUri(
+ config: '''
+unittest:/home/somebody/.pub/cache/unittest-0.9.9/lib/
+async:/home/somebody/.pub/cache/async-1.1.0/lib/
+quiver:/home/somebody/.pub/cache/quiver-1.2.1/lib
+''',
+ uri: 'package:unittest/unittest.dart');
+ expect(
+ uri,
+ equals(
+ '/home/somebody/.pub/cache/unittest-0.9.9/lib/unittest.dart'));
+ });
+ test('URI not in mapping', () {
+ String uri = resolvePackageUri(
+ config: 'unittest:/home/somebody/.pub/cache/unittest-0.9.9/lib/',
+ uri: 'package:foo/foo.dart');
+ expect(uri, isNull);
+ });
+ test('Non-package URI', () {
+ var testResolver = new CustomUriResolver(uriPath: 'test_uri');
+ String uri = resolvePackageUri(
+ config: 'unittest:/home/somebody/.pub/cache/unittest-0.9.9/lib/',
+ uri: 'custom:custom.dart',
+ customResolver: testResolver);
+ expect(uri, testResolver.uriPath);
+ });
+ test('Invalid URI', () {
+ // TODO(pquitslund): fix clients to handle errors appropriately
+ // CLI: print message 'invalid package file format'
+ // SERVER: best case tell user somehow and recover...
+ expect(
+ () => resolvePackageUri(
+ config: 'foo:<:&%>', uri: 'package:foo/bar.dart'),
+ throwsA(new isInstanceOf('FormatException')));
+ });
+ test('Valid URI that cannot be further resolved', () {
+ String uri = resolvePackageUri(
+ config: 'foo:http://www.google.com', uri: 'package:foo/bar.dart');
+ expect(uri, isNull);
+ });
+ test('Relative URIs', () {
+ Source containingSource = createSource(
+ path: '/foo/bar/baz/foo.dart', uri: 'package:foo/foo.dart');
+ String uri = resolvePackageUri(
+ config: 'foo:/foo/bar/baz',
+ uri: 'bar.dart',
+ containingSource: containingSource);
+ expect(uri, isNotNull);
+ expect(uri, equals('/foo/bar/baz/bar.dart'));
+ });
+ });
+ group('restoreUri', () {
+ test('URI in mapping', () {
+ Uri uri = restorePackageUri(
+ config: '''
+unittest:/home/somebody/.pub/cache/unittest-0.9.9/lib/
+async:/home/somebody/.pub/cache/async-1.1.0/lib/
+quiver:/home/somebody/.pub/cache/quiver-1.2.1/lib
+''',
+ source: new FileBasedSource(FileUtilities2.createFile(
+ '/home/somebody/.pub/cache/unittest-0.9.9/lib/unittest.dart')));
+ expect(uri, isNotNull);
+ expect(uri.toString(), equals('package:unittest/unittest.dart'));
+ });
+ });
+ group('packageMap', () {
+ test('non-file URIs filtered', () {
+ Map<String, List<Folder>> map = getPackageMap('''
+quiver:/home/somebody/.pub/cache/quiver-1.2.1/lib
+foo:http://www.google.com
+''');
+ expect(map.keys, unorderedEquals(['quiver']));
+ });
+ });
+ });
+ });
+
+ group('URI utils', () {
+ group('URI', () {
+ test('startsWith', () {
+ expect(utils.startsWith(Uri.parse('/foo/bar/'), Uri.parse('/foo/')),
+ isTrue);
+ expect(utils.startsWith(Uri.parse('/foo/bar/'), Uri.parse('/foo/bar/')),
+ isTrue);
+ expect(utils.startsWith(Uri.parse('/foo/bar'), Uri.parse('/foo/b')),
+ isFalse);
+ // Handle odd URIs (https://github.com/dart-lang/sdk/issues/24126)
+ expect(utils.startsWith(Uri.parse('/foo/bar'), Uri.parse('')), isFalse);
+ expect(utils.startsWith(Uri.parse(''), Uri.parse('/foo/bar')), isFalse);
+ });
+ });
+ });
+}
+
+class CustomUriResolver extends UriResolver {
+ String uriPath;
+ CustomUriResolver({this.uriPath});
+
+ @override
+ Source resolveAbsolute(Uri uri, [Uri actualUri]) =>
+ createSource(path: uriPath);
+}
+
+@reflectiveTest
+class SourceFactoryTest {
+ void test_creation() {
+ expect(new SourceFactory([]), isNotNull);
+ }
+
+ void test_fromEncoding_invalidUri() {
+ SourceFactory factory = new SourceFactory([]);
+ expect(() => factory.fromEncoding("<:&%>"),
+ throwsA(new isInstanceOf<IllegalArgumentException>()));
+ }
+
+ void test_fromEncoding_noResolver() {
+ SourceFactory factory = new SourceFactory([]);
+ expect(() => factory.fromEncoding("foo:/does/not/exist.dart"),
+ throwsA(new isInstanceOf<IllegalArgumentException>()));
+ }
+
+ void test_fromEncoding_valid() {
+ String encoding = "file:///does/not/exist.dart";
+ SourceFactory factory = new SourceFactory(
+ [new UriResolver_SourceFactoryTest_test_fromEncoding_valid(encoding)]);
+ expect(factory.fromEncoding(encoding), isNotNull);
+ }
+
+ void test_resolveUri_absolute() {
+ UriResolver_absolute resolver = new UriResolver_absolute();
+ SourceFactory factory = new SourceFactory([resolver]);
+ factory.resolveUri(null, "dart:core");
+ expect(resolver.invoked, isTrue);
+ }
+
+ void test_resolveUri_nonAbsolute_absolute() {
+ SourceFactory factory =
+ new SourceFactory([new UriResolver_nonAbsolute_absolute()]);
+ String absolutePath = "/does/not/matter.dart";
+ Source containingSource =
+ new FileBasedSource(FileUtilities2.createFile("/does/not/exist.dart"));
+ Source result = factory.resolveUri(containingSource, absolutePath);
+ expect(result.fullName,
+ FileUtilities2.createFile(absolutePath).getAbsolutePath());
+ }
+
+ void test_resolveUri_nonAbsolute_relative() {
+ SourceFactory factory =
+ new SourceFactory([new UriResolver_nonAbsolute_relative()]);
+ Source containingSource =
+ new FileBasedSource(FileUtilities2.createFile("/does/not/have.dart"));
+ Source result = factory.resolveUri(containingSource, "exist.dart");
+ expect(result.fullName,
+ FileUtilities2.createFile("/does/not/exist.dart").getAbsolutePath());
+ }
+
+ void test_resolveUri_nonAbsolute_relative_package() {
+ MemoryResourceProvider provider = new MemoryResourceProvider();
+ Context context = provider.pathContext;
+ String packagePath =
+ context.joinAll([context.separator, 'path', 'to', 'package']);
+ String libPath = context.joinAll([packagePath, 'lib']);
+ String dirPath = context.joinAll([libPath, 'dir']);
+ String firstPath = context.joinAll([dirPath, 'first.dart']);
+ String secondPath = context.joinAll([dirPath, 'second.dart']);
+
+ provider.newFolder(packagePath);
+ Folder libFolder = provider.newFolder(libPath);
+ provider.newFolder(dirPath);
+ File firstFile = provider.newFile(firstPath, '');
+ provider.newFile(secondPath, '');
+
+ PackageMapUriResolver resolver = new PackageMapUriResolver(provider, {
+ 'package': [libFolder]
+ });
+ SourceFactory factory = new SourceFactory([resolver]);
+ Source librarySource =
+ firstFile.createSource(Uri.parse('package:package/dir/first.dart'));
+
+ Source result = factory.resolveUri(librarySource, 'second.dart');
+ expect(result, isNotNull);
+ expect(result.fullName, secondPath);
+ expect(result.uri.toString(), 'package:package/dir/second.dart');
+ }
+
+ void test_restoreUri() {
+ JavaFile file1 = FileUtilities2.createFile("/some/file1.dart");
+ JavaFile file2 = FileUtilities2.createFile("/some/file2.dart");
+ Source source1 = new FileBasedSource(file1);
+ Source source2 = new FileBasedSource(file2);
+ Uri expected1 = parseUriWithException("file:///my_file.dart");
+ SourceFactory factory =
+ new SourceFactory([new UriResolver_restoreUri(source1, expected1)]);
+ expect(factory.restoreUri(source1), same(expected1));
+ expect(factory.restoreUri(source2), same(null));
+ }
+}
+
+class UriResolver_absolute extends UriResolver {
+ bool invoked = false;
+
+ UriResolver_absolute();
+
+ @override
+ Source resolveAbsolute(Uri uri, [Uri actualUri]) {
+ invoked = true;
+ return null;
+ }
+}
+
+class UriResolver_nonAbsolute_absolute extends UriResolver {
+ @override
+ Source resolveAbsolute(Uri uri, [Uri actualUri]) {
+ return new FileBasedSource(new JavaFile.fromUri(uri), actualUri);
+ }
+}
+
+class UriResolver_nonAbsolute_relative extends UriResolver {
+ @override
+ Source resolveAbsolute(Uri uri, [Uri actualUri]) {
+ return new FileBasedSource(new JavaFile.fromUri(uri), actualUri);
+ }
+}
+
+class UriResolver_restoreUri extends UriResolver {
+ Source source1;
+ Uri expected1;
+ UriResolver_restoreUri(this.source1, this.expected1);
+
+ @override
+ Source resolveAbsolute(Uri uri, [Uri actualUri]) => null;
+
+ @override
+ Uri restoreAbsolute(Source source) {
+ if (identical(source, source1)) {
+ return expected1;
+ }
+ return null;
+ }
+}
+
+class UriResolver_SourceFactoryTest_test_fromEncoding_valid
+ extends UriResolver {
+ String encoding;
+ UriResolver_SourceFactoryTest_test_fromEncoding_valid(this.encoding);
+
+ @override
+ Source resolveAbsolute(Uri uri, [Uri actualUri]) {
+ if (uri.toString() == encoding) {
+ return new TestSource();
+ }
+ return null;
+ }
+}

Powered by Google App Engine
This is Rietveld 408576698