Index: pkg/analyzer/test/source/embedder_test.dart |
diff --git a/pkg/analyzer/test/source/embedder_test.dart b/pkg/analyzer/test/source/embedder_test.dart |
index 80072b8e56c4566ddcba5a277a0c8298532912bc..c16e6f9765ad5cee2d7cf3d93f38cda4a49a2f34 100644 |
--- a/pkg/analyzer/test/source/embedder_test.dart |
+++ b/pkg/analyzer/test/source/embedder_test.dart |
@@ -9,149 +9,59 @@ import 'dart:core' hide Resource; |
import 'package:analyzer/file_system/file_system.dart'; |
import 'package:analyzer/file_system/memory_file_system.dart'; |
import 'package:analyzer/source/embedder.dart'; |
+import 'package:analyzer/src/generated/sdk.dart'; |
import 'package:analyzer/src/generated/source.dart'; |
import 'package:path/path.dart' as path; |
import 'package:unittest/unittest.dart'; |
+import '../reflective_tests.dart'; |
import '../resource_utils.dart'; |
import '../utils.dart'; |
main() { |
- group('EmbedderUriResolverTest', () { |
- setUp(() { |
- initializeTestEnvironment(path.context); |
- buildResourceProvider(); |
- }); |
- tearDown(() { |
- initializeTestEnvironment(); |
- clearResourceProvider(); |
- }); |
- test('test_NullEmbedderYamls', () { |
- var resolver = new EmbedderUriResolver(null); |
- expect(resolver.length, 0); |
- }); |
- test('test_NoEmbedderYamls', () { |
- var locator = new EmbedderYamlLocator({ |
- 'fox': [pathTranslator.getResource('/empty')] |
- }); |
- expect(locator.embedderYamls.length, 0); |
- }); |
- test('test_EmbedderYaml', () { |
- var locator = new EmbedderYamlLocator({ |
- 'fox': [pathTranslator.getResource('/tmp')] |
- }); |
- var resolver = new EmbedderUriResolver(locator.embedderYamls); |
- |
- expectResolved(dartUri, posixPath) { |
- Source source = resolver.resolveAbsolute(Uri.parse(dartUri)); |
- expect(source, isNotNull, reason: dartUri); |
- expect(source.fullName, posixToOSPath(posixPath)); |
- } |
- |
- // We have five mappings. |
- expect(resolver.length, 5); |
- // Check that they map to the correct paths. |
- expectResolved('dart:core', '/tmp/core.dart'); |
- expectResolved('dart:fox', '/tmp/slippy.dart'); |
- expectResolved('dart:bear', '/tmp/grizzly.dart'); |
- expectResolved('dart:relative', '/relative.dart'); |
- expectResolved('dart:deep', '/tmp/deep/directory/file.dart'); |
- }); |
- test('test_BadYAML', () { |
- var locator = new EmbedderYamlLocator(null); |
- locator.addEmbedderYaml(null, r'''{{{,{{}}},}}'''); |
- expect(locator.embedderYamls.length, 0); |
- }); |
- test('test_restoreAbsolute', () { |
- var locator = new EmbedderYamlLocator({ |
- 'fox': [pathTranslator.getResource('/tmp')] |
- }); |
- var resolver = new EmbedderUriResolver(locator.embedderYamls); |
- |
- expectRestore(String dartUri, [String expected]) { |
- var parsedUri = Uri.parse(dartUri); |
- var source = resolver.resolveAbsolute(parsedUri); |
- expect(source, isNotNull); |
- // Restore source's uri. |
- var restoreUri = resolver.restoreAbsolute(source); |
- expect(restoreUri, isNotNull, reason: dartUri); |
- // Verify that it is 'dart:fox'. |
- expect(restoreUri.toString(), expected ?? dartUri); |
- List<String> split = (expected ?? dartUri).split(':'); |
- expect(restoreUri.scheme, split[0]); |
- expect(restoreUri.path, split[1]); |
- } |
- |
- expectRestore('dart:deep'); |
- expectRestore('dart:deep/file.dart', 'dart:deep'); |
- expectRestore('dart:deep/part.dart'); |
- expectRestore('dart:deep/deep/file.dart'); |
- }); |
+ runReflectiveTests(DartUriResolverTest); |
+ runReflectiveTests(EmbedderSdkTest); |
+ runReflectiveTests(EmbedderUriResolverTest); |
+ runReflectiveTests(EmbedderYamlLocatorTest); |
+} |
- test('test_EmbedderSdk_fromFileUri', () { |
- var locator = new EmbedderYamlLocator({ |
- 'fox': [pathTranslator.getResource('/tmp')] |
- }); |
- var resolver = new EmbedderUriResolver(locator.embedderYamls); |
- var sdk = resolver.dartSdk; |
- |
- expectSource(String posixPath, String dartUri) { |
- var uri = Uri.parse(posixToOSFileUri(posixPath)); |
- var source = sdk.fromFileUri(uri); |
- expect(source, isNotNull, reason: posixPath); |
- expect(source.uri.toString(), dartUri); |
- expect(source.fullName, posixToOSPath(posixPath)); |
- } |
- |
- expectSource('/tmp/slippy.dart', 'dart:fox'); |
- expectSource('/tmp/deep/directory/file.dart', 'dart:deep'); |
- expectSource('/tmp/deep/directory/part.dart', 'dart:deep/part.dart'); |
- }); |
- test('test_EmbedderSdk_getSdkLibrary', () { |
- var locator = new EmbedderYamlLocator({ |
- 'fox': [pathTranslator.getResource('/tmp')] |
- }); |
- var resolver = new EmbedderUriResolver(locator.embedderYamls); |
- var sdk = resolver.dartSdk; |
- var lib = sdk.getSdkLibrary('dart:fox'); |
- expect(lib, isNotNull); |
- expect(lib.path, posixToOSPath('/tmp/slippy.dart')); |
- expect(lib.shortName, 'dart:fox'); |
- }); |
- test('test_EmbedderSdk_mapDartUri', () { |
- var locator = new EmbedderYamlLocator({ |
- 'fox': [pathTranslator.getResource('/tmp')] |
- }); |
- var resolver = new EmbedderUriResolver(locator.embedderYamls); |
- var sdk = resolver.dartSdk; |
- |
- expectSource(String dartUri, String posixPath) { |
- var source = sdk.mapDartUri(dartUri); |
- expect(source, isNotNull, reason: posixPath); |
- expect(source.uri.toString(), dartUri); |
- expect(source.fullName, posixToOSPath(posixPath)); |
- } |
- |
- expectSource('dart:core', '/tmp/core.dart'); |
- expectSource('dart:fox', '/tmp/slippy.dart'); |
- expectSource('dart:deep', '/tmp/deep/directory/file.dart'); |
- expectSource('dart:deep/part.dart', '/tmp/deep/directory/part.dart'); |
+@reflectiveTest |
+class DartUriResolverTest extends EmbedderRelatedTest { |
+ void test_embedderYaml() { |
+ EmbedderYamlLocator locator = new EmbedderYamlLocator({ |
+ 'fox': [pathTranslator.getResource('/tmp')] |
}); |
- }); |
+ EmbedderSdk sdk = new EmbedderSdk(locator.embedderYamls); |
+ DartUriResolver resolver = new DartUriResolver(sdk); |
+ |
+ void expectResolved(dartUri, posixPath) { |
+ Source source = resolver.resolveAbsolute(Uri.parse(dartUri)); |
+ expect(source, isNotNull, reason: dartUri); |
+ expect(source.fullName, posixToOSPath(posixPath)); |
+ } |
+ // Check that they map to the correct paths. |
+ expectResolved('dart:core', '/tmp/core.dart'); |
+ expectResolved('dart:fox', '/tmp/slippy.dart'); |
+ expectResolved('dart:bear', '/tmp/grizzly.dart'); |
+ expectResolved('dart:relative', '/relative.dart'); |
+ expectResolved('dart:deep', '/tmp/deep/directory/file.dart'); |
+ } |
} |
-TestPathTranslator pathTranslator; |
-ResourceProvider resourceProvider; |
- |
-buildResourceProvider() { |
- var rawProvider = new MemoryResourceProvider(isWindows: isWindows); |
- resourceProvider = new TestResourceProvider(rawProvider); |
- pathTranslator = new TestPathTranslator(rawProvider) |
- ..newFolder('/empty') |
- ..newFolder('/tmp') |
- ..newFile( |
- '/tmp/_embedder.yaml', |
- r''' |
+abstract class EmbedderRelatedTest { |
+ TestPathTranslator pathTranslator; |
+ ResourceProvider resourceProvider; |
+ |
+ buildResourceProvider() { |
+ MemoryResourceProvider rawProvider = |
+ new MemoryResourceProvider(isWindows: isWindows); |
+ resourceProvider = new TestResourceProvider(rawProvider); |
+ pathTranslator = new TestPathTranslator(rawProvider) |
+ ..newFolder('/empty') |
+ ..newFolder('/tmp') |
+ ..newFile( |
+ '/tmp/_embedder.yaml', |
+ r''' |
embedded_libs: |
"dart:core" : "core.dart" |
"dart:fox": "slippy.dart" |
@@ -160,9 +70,161 @@ embedded_libs: |
"dart:deep": "deep/directory/file.dart" |
"fart:loudly": "nomatter.dart" |
'''); |
+ } |
+ |
+ clearResourceProvider() { |
+ resourceProvider = null; |
+ pathTranslator = null; |
+ } |
+ |
+ void setUp() { |
+ initializeTestEnvironment(path.context); |
+ buildResourceProvider(); |
+ } |
+ |
+ void tearDown() { |
+ initializeTestEnvironment(); |
+ clearResourceProvider(); |
+ } |
+} |
+ |
+@reflectiveTest |
+class EmbedderSdkTest extends EmbedderRelatedTest { |
+ void test_creation() { |
+ EmbedderYamlLocator locator = new EmbedderYamlLocator({ |
+ 'fox': [pathTranslator.getResource('/tmp')] |
+ }); |
+ EmbedderSdk sdk = new EmbedderSdk(locator.embedderYamls); |
+ |
+ expect(sdk.urlMappings, hasLength(5)); |
+ } |
+ |
+ void test_fromFileUri() { |
+ EmbedderYamlLocator locator = new EmbedderYamlLocator({ |
+ 'fox': [pathTranslator.getResource('/tmp')] |
+ }); |
+ EmbedderSdk sdk = new EmbedderSdk(locator.embedderYamls); |
+ |
+ expectSource(String posixPath, String dartUri) { |
+ Uri uri = Uri.parse(posixToOSFileUri(posixPath)); |
+ Source source = sdk.fromFileUri(uri); |
+ expect(source, isNotNull, reason: posixPath); |
+ expect(source.uri.toString(), dartUri); |
+ expect(source.fullName, posixToOSPath(posixPath)); |
+ } |
+ |
+ expectSource('/tmp/slippy.dart', 'dart:fox'); |
+ expectSource('/tmp/deep/directory/file.dart', 'dart:deep'); |
+ expectSource('/tmp/deep/directory/part.dart', 'dart:deep/part.dart'); |
+ } |
+ |
+ void test_getSdkLibrary() { |
+ EmbedderYamlLocator locator = new EmbedderYamlLocator({ |
+ 'fox': [pathTranslator.getResource('/tmp')] |
+ }); |
+ EmbedderSdk sdk = new EmbedderSdk(locator.embedderYamls); |
+ |
+ SdkLibrary lib = sdk.getSdkLibrary('dart:fox'); |
+ expect(lib, isNotNull); |
+ expect(lib.path, posixToOSPath('/tmp/slippy.dart')); |
+ expect(lib.shortName, 'dart:fox'); |
+ } |
+ |
+ void test_mapDartUri() { |
+ EmbedderYamlLocator locator = new EmbedderYamlLocator({ |
+ 'fox': [pathTranslator.getResource('/tmp')] |
+ }); |
+ EmbedderSdk sdk = new EmbedderSdk(locator.embedderYamls); |
+ |
+ void expectSource(String dartUri, String posixPath) { |
+ Source source = sdk.mapDartUri(dartUri); |
+ expect(source, isNotNull, reason: posixPath); |
+ expect(source.uri.toString(), dartUri); |
+ expect(source.fullName, posixToOSPath(posixPath)); |
+ } |
+ |
+ expectSource('dart:core', '/tmp/core.dart'); |
+ expectSource('dart:fox', '/tmp/slippy.dart'); |
+ expectSource('dart:deep', '/tmp/deep/directory/file.dart'); |
+ expectSource('dart:deep/part.dart', '/tmp/deep/directory/part.dart'); |
+ } |
} |
-clearResourceProvider() { |
- resourceProvider = null; |
- pathTranslator = null; |
+@reflectiveTest |
+class EmbedderUriResolverTest extends EmbedderRelatedTest { |
+ void test_embedderYaml() { |
+ var locator = new EmbedderYamlLocator({ |
+ 'fox': [pathTranslator.getResource('/tmp')] |
+ }); |
+ var resolver = new EmbedderUriResolver(locator.embedderYamls); |
+ |
+ expectResolved(dartUri, posixPath) { |
+ Source source = resolver.resolveAbsolute(Uri.parse(dartUri)); |
+ expect(source, isNotNull, reason: dartUri); |
+ expect(source.fullName, posixToOSPath(posixPath)); |
+ } |
+ |
+ // We have five mappings. |
+ expect(resolver, hasLength(5)); |
+ // Check that they map to the correct paths. |
+ expectResolved('dart:core', '/tmp/core.dart'); |
+ expectResolved('dart:fox', '/tmp/slippy.dart'); |
+ expectResolved('dart:bear', '/tmp/grizzly.dart'); |
+ expectResolved('dart:relative', '/relative.dart'); |
+ expectResolved('dart:deep', '/tmp/deep/directory/file.dart'); |
+ } |
+ |
+ void test_nullEmbedderYamls() { |
+ var resolver = new EmbedderUriResolver(null); |
+ expect(resolver, hasLength(0)); |
+ } |
+ |
+ void test_restoreAbsolute() { |
+ var locator = new EmbedderYamlLocator({ |
+ 'fox': [pathTranslator.getResource('/tmp')] |
+ }); |
+ var resolver = new EmbedderUriResolver(locator.embedderYamls); |
+ |
+ expectRestore(String dartUri, [String expected]) { |
+ var parsedUri = Uri.parse(dartUri); |
+ var source = resolver.resolveAbsolute(parsedUri); |
+ expect(source, isNotNull); |
+ // Restore source's uri. |
+ var restoreUri = resolver.restoreAbsolute(source); |
+ expect(restoreUri, isNotNull, reason: dartUri); |
+ // Verify that it is 'dart:fox'. |
+ expect(restoreUri.toString(), expected ?? dartUri); |
+ List<String> split = (expected ?? dartUri).split(':'); |
+ expect(restoreUri.scheme, split[0]); |
+ expect(restoreUri.path, split[1]); |
+ } |
+ |
+ expectRestore('dart:deep'); |
+ expectRestore('dart:deep/file.dart', 'dart:deep'); |
+ expectRestore('dart:deep/part.dart'); |
+ expectRestore('dart:deep/deep/file.dart'); |
+ } |
+} |
+ |
+@reflectiveTest |
+class EmbedderYamlLocatorTest extends EmbedderRelatedTest { |
+ void test_empty() { |
+ EmbedderYamlLocator locator = new EmbedderYamlLocator({ |
+ 'fox': [pathTranslator.getResource('/empty')] |
+ }); |
+ expect(locator.embedderYamls, hasLength(0)); |
+ } |
+ |
+ void test_invalid() { |
+ EmbedderYamlLocator locator = new EmbedderYamlLocator(null); |
+ locator.addEmbedderYaml(null, r'''{{{,{{}}},}}'''); |
+ expect(locator.embedderYamls, hasLength(0)); |
+ } |
+ |
+ void test_valid() { |
+ EmbedderYamlLocator locator = new EmbedderYamlLocator({ |
+ 'fox': [pathTranslator.getResource('/tmp')] |
+ }); |
+ expect(locator.embedderYamls, hasLength(1)); |
+ } |
} |