OLD | NEW |
1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file |
2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
4 | 4 |
5 library analyzer.test.source.embedder_test; | 5 library analyzer.test.source.embedder_test; |
6 | 6 |
7 import 'dart:core' hide Resource; | 7 import 'dart:core' hide Resource; |
8 | 8 |
9 import 'package:analyzer/file_system/file_system.dart'; | 9 import 'package:analyzer/file_system/file_system.dart'; |
10 import 'package:analyzer/file_system/memory_file_system.dart'; | 10 import 'package:analyzer/file_system/memory_file_system.dart'; |
11 import 'package:analyzer/source/embedder.dart'; | 11 import 'package:analyzer/source/embedder.dart'; |
| 12 import 'package:analyzer/src/generated/sdk.dart'; |
12 import 'package:analyzer/src/generated/source.dart'; | 13 import 'package:analyzer/src/generated/source.dart'; |
13 import 'package:path/path.dart' as path; | 14 import 'package:path/path.dart' as path; |
14 import 'package:unittest/unittest.dart'; | 15 import 'package:unittest/unittest.dart'; |
15 | 16 |
| 17 import '../reflective_tests.dart'; |
16 import '../resource_utils.dart'; | 18 import '../resource_utils.dart'; |
17 import '../utils.dart'; | 19 import '../utils.dart'; |
18 | 20 |
19 main() { | 21 main() { |
20 group('EmbedderUriResolverTest', () { | 22 runReflectiveTests(DartUriResolverTest); |
21 setUp(() { | 23 runReflectiveTests(EmbedderSdkTest); |
22 initializeTestEnvironment(path.context); | 24 runReflectiveTests(EmbedderUriResolverTest); |
23 buildResourceProvider(); | 25 runReflectiveTests(EmbedderYamlLocatorTest); |
24 }); | |
25 tearDown(() { | |
26 initializeTestEnvironment(); | |
27 clearResourceProvider(); | |
28 }); | |
29 test('test_NullEmbedderYamls', () { | |
30 var resolver = new EmbedderUriResolver(null); | |
31 expect(resolver.length, 0); | |
32 }); | |
33 test('test_NoEmbedderYamls', () { | |
34 var locator = new EmbedderYamlLocator({ | |
35 'fox': [pathTranslator.getResource('/empty')] | |
36 }); | |
37 expect(locator.embedderYamls.length, 0); | |
38 }); | |
39 test('test_EmbedderYaml', () { | |
40 var locator = new EmbedderYamlLocator({ | |
41 'fox': [pathTranslator.getResource('/tmp')] | |
42 }); | |
43 var resolver = new EmbedderUriResolver(locator.embedderYamls); | |
44 | |
45 expectResolved(dartUri, posixPath) { | |
46 Source source = resolver.resolveAbsolute(Uri.parse(dartUri)); | |
47 expect(source, isNotNull, reason: dartUri); | |
48 expect(source.fullName, posixToOSPath(posixPath)); | |
49 } | |
50 | |
51 // We have five mappings. | |
52 expect(resolver.length, 5); | |
53 // Check that they map to the correct paths. | |
54 expectResolved('dart:core', '/tmp/core.dart'); | |
55 expectResolved('dart:fox', '/tmp/slippy.dart'); | |
56 expectResolved('dart:bear', '/tmp/grizzly.dart'); | |
57 expectResolved('dart:relative', '/relative.dart'); | |
58 expectResolved('dart:deep', '/tmp/deep/directory/file.dart'); | |
59 }); | |
60 test('test_BadYAML', () { | |
61 var locator = new EmbedderYamlLocator(null); | |
62 locator.addEmbedderYaml(null, r'''{{{,{{}}},}}'''); | |
63 expect(locator.embedderYamls.length, 0); | |
64 }); | |
65 test('test_restoreAbsolute', () { | |
66 var locator = new EmbedderYamlLocator({ | |
67 'fox': [pathTranslator.getResource('/tmp')] | |
68 }); | |
69 var resolver = new EmbedderUriResolver(locator.embedderYamls); | |
70 | |
71 expectRestore(String dartUri, [String expected]) { | |
72 var parsedUri = Uri.parse(dartUri); | |
73 var source = resolver.resolveAbsolute(parsedUri); | |
74 expect(source, isNotNull); | |
75 // Restore source's uri. | |
76 var restoreUri = resolver.restoreAbsolute(source); | |
77 expect(restoreUri, isNotNull, reason: dartUri); | |
78 // Verify that it is 'dart:fox'. | |
79 expect(restoreUri.toString(), expected ?? dartUri); | |
80 List<String> split = (expected ?? dartUri).split(':'); | |
81 expect(restoreUri.scheme, split[0]); | |
82 expect(restoreUri.path, split[1]); | |
83 } | |
84 | |
85 expectRestore('dart:deep'); | |
86 expectRestore('dart:deep/file.dart', 'dart:deep'); | |
87 expectRestore('dart:deep/part.dart'); | |
88 expectRestore('dart:deep/deep/file.dart'); | |
89 }); | |
90 | |
91 test('test_EmbedderSdk_fromFileUri', () { | |
92 var locator = new EmbedderYamlLocator({ | |
93 'fox': [pathTranslator.getResource('/tmp')] | |
94 }); | |
95 var resolver = new EmbedderUriResolver(locator.embedderYamls); | |
96 var sdk = resolver.dartSdk; | |
97 | |
98 expectSource(String posixPath, String dartUri) { | |
99 var uri = Uri.parse(posixToOSFileUri(posixPath)); | |
100 var source = sdk.fromFileUri(uri); | |
101 expect(source, isNotNull, reason: posixPath); | |
102 expect(source.uri.toString(), dartUri); | |
103 expect(source.fullName, posixToOSPath(posixPath)); | |
104 } | |
105 | |
106 expectSource('/tmp/slippy.dart', 'dart:fox'); | |
107 expectSource('/tmp/deep/directory/file.dart', 'dart:deep'); | |
108 expectSource('/tmp/deep/directory/part.dart', 'dart:deep/part.dart'); | |
109 }); | |
110 test('test_EmbedderSdk_getSdkLibrary', () { | |
111 var locator = new EmbedderYamlLocator({ | |
112 'fox': [pathTranslator.getResource('/tmp')] | |
113 }); | |
114 var resolver = new EmbedderUriResolver(locator.embedderYamls); | |
115 var sdk = resolver.dartSdk; | |
116 var lib = sdk.getSdkLibrary('dart:fox'); | |
117 expect(lib, isNotNull); | |
118 expect(lib.path, posixToOSPath('/tmp/slippy.dart')); | |
119 expect(lib.shortName, 'dart:fox'); | |
120 }); | |
121 test('test_EmbedderSdk_mapDartUri', () { | |
122 var locator = new EmbedderYamlLocator({ | |
123 'fox': [pathTranslator.getResource('/tmp')] | |
124 }); | |
125 var resolver = new EmbedderUriResolver(locator.embedderYamls); | |
126 var sdk = resolver.dartSdk; | |
127 | |
128 expectSource(String dartUri, String posixPath) { | |
129 var source = sdk.mapDartUri(dartUri); | |
130 expect(source, isNotNull, reason: posixPath); | |
131 expect(source.uri.toString(), dartUri); | |
132 expect(source.fullName, posixToOSPath(posixPath)); | |
133 } | |
134 | |
135 expectSource('dart:core', '/tmp/core.dart'); | |
136 expectSource('dart:fox', '/tmp/slippy.dart'); | |
137 expectSource('dart:deep', '/tmp/deep/directory/file.dart'); | |
138 expectSource('dart:deep/part.dart', '/tmp/deep/directory/part.dart'); | |
139 }); | |
140 }); | |
141 } | 26 } |
142 | 27 |
143 TestPathTranslator pathTranslator; | 28 @reflectiveTest |
144 ResourceProvider resourceProvider; | 29 class DartUriResolverTest extends EmbedderRelatedTest { |
| 30 void test_embedderYaml() { |
| 31 EmbedderYamlLocator locator = new EmbedderYamlLocator({ |
| 32 'fox': [pathTranslator.getResource('/tmp')] |
| 33 }); |
| 34 EmbedderSdk sdk = new EmbedderSdk(locator.embedderYamls); |
| 35 DartUriResolver resolver = new DartUriResolver(sdk); |
145 | 36 |
146 buildResourceProvider() { | 37 void expectResolved(dartUri, posixPath) { |
147 var rawProvider = new MemoryResourceProvider(isWindows: isWindows); | 38 Source source = resolver.resolveAbsolute(Uri.parse(dartUri)); |
148 resourceProvider = new TestResourceProvider(rawProvider); | 39 expect(source, isNotNull, reason: dartUri); |
149 pathTranslator = new TestPathTranslator(rawProvider) | 40 expect(source.fullName, posixToOSPath(posixPath)); |
150 ..newFolder('/empty') | 41 } |
151 ..newFolder('/tmp') | 42 // Check that they map to the correct paths. |
152 ..newFile( | 43 expectResolved('dart:core', '/tmp/core.dart'); |
153 '/tmp/_embedder.yaml', | 44 expectResolved('dart:fox', '/tmp/slippy.dart'); |
154 r''' | 45 expectResolved('dart:bear', '/tmp/grizzly.dart'); |
| 46 expectResolved('dart:relative', '/relative.dart'); |
| 47 expectResolved('dart:deep', '/tmp/deep/directory/file.dart'); |
| 48 } |
| 49 } |
| 50 |
| 51 abstract class EmbedderRelatedTest { |
| 52 TestPathTranslator pathTranslator; |
| 53 ResourceProvider resourceProvider; |
| 54 |
| 55 buildResourceProvider() { |
| 56 MemoryResourceProvider rawProvider = |
| 57 new MemoryResourceProvider(isWindows: isWindows); |
| 58 resourceProvider = new TestResourceProvider(rawProvider); |
| 59 pathTranslator = new TestPathTranslator(rawProvider) |
| 60 ..newFolder('/empty') |
| 61 ..newFolder('/tmp') |
| 62 ..newFile( |
| 63 '/tmp/_embedder.yaml', |
| 64 r''' |
155 embedded_libs: | 65 embedded_libs: |
156 "dart:core" : "core.dart" | 66 "dart:core" : "core.dart" |
157 "dart:fox": "slippy.dart" | 67 "dart:fox": "slippy.dart" |
158 "dart:bear": "grizzly.dart" | 68 "dart:bear": "grizzly.dart" |
159 "dart:relative": "../relative.dart" | 69 "dart:relative": "../relative.dart" |
160 "dart:deep": "deep/directory/file.dart" | 70 "dart:deep": "deep/directory/file.dart" |
161 "fart:loudly": "nomatter.dart" | 71 "fart:loudly": "nomatter.dart" |
162 '''); | 72 '''); |
| 73 } |
| 74 |
| 75 clearResourceProvider() { |
| 76 resourceProvider = null; |
| 77 pathTranslator = null; |
| 78 } |
| 79 |
| 80 void setUp() { |
| 81 initializeTestEnvironment(path.context); |
| 82 buildResourceProvider(); |
| 83 } |
| 84 |
| 85 void tearDown() { |
| 86 initializeTestEnvironment(); |
| 87 clearResourceProvider(); |
| 88 } |
163 } | 89 } |
164 | 90 |
165 clearResourceProvider() { | 91 @reflectiveTest |
166 resourceProvider = null; | 92 class EmbedderSdkTest extends EmbedderRelatedTest { |
167 pathTranslator = null; | 93 void test_creation() { |
| 94 EmbedderYamlLocator locator = new EmbedderYamlLocator({ |
| 95 'fox': [pathTranslator.getResource('/tmp')] |
| 96 }); |
| 97 EmbedderSdk sdk = new EmbedderSdk(locator.embedderYamls); |
| 98 |
| 99 expect(sdk.urlMappings, hasLength(5)); |
| 100 } |
| 101 |
| 102 void test_fromFileUri() { |
| 103 EmbedderYamlLocator locator = new EmbedderYamlLocator({ |
| 104 'fox': [pathTranslator.getResource('/tmp')] |
| 105 }); |
| 106 EmbedderSdk sdk = new EmbedderSdk(locator.embedderYamls); |
| 107 |
| 108 expectSource(String posixPath, String dartUri) { |
| 109 Uri uri = Uri.parse(posixToOSFileUri(posixPath)); |
| 110 Source source = sdk.fromFileUri(uri); |
| 111 expect(source, isNotNull, reason: posixPath); |
| 112 expect(source.uri.toString(), dartUri); |
| 113 expect(source.fullName, posixToOSPath(posixPath)); |
| 114 } |
| 115 |
| 116 expectSource('/tmp/slippy.dart', 'dart:fox'); |
| 117 expectSource('/tmp/deep/directory/file.dart', 'dart:deep'); |
| 118 expectSource('/tmp/deep/directory/part.dart', 'dart:deep/part.dart'); |
| 119 } |
| 120 |
| 121 void test_getSdkLibrary() { |
| 122 EmbedderYamlLocator locator = new EmbedderYamlLocator({ |
| 123 'fox': [pathTranslator.getResource('/tmp')] |
| 124 }); |
| 125 EmbedderSdk sdk = new EmbedderSdk(locator.embedderYamls); |
| 126 |
| 127 SdkLibrary lib = sdk.getSdkLibrary('dart:fox'); |
| 128 expect(lib, isNotNull); |
| 129 expect(lib.path, posixToOSPath('/tmp/slippy.dart')); |
| 130 expect(lib.shortName, 'dart:fox'); |
| 131 } |
| 132 |
| 133 void test_mapDartUri() { |
| 134 EmbedderYamlLocator locator = new EmbedderYamlLocator({ |
| 135 'fox': [pathTranslator.getResource('/tmp')] |
| 136 }); |
| 137 EmbedderSdk sdk = new EmbedderSdk(locator.embedderYamls); |
| 138 |
| 139 void expectSource(String dartUri, String posixPath) { |
| 140 Source source = sdk.mapDartUri(dartUri); |
| 141 expect(source, isNotNull, reason: posixPath); |
| 142 expect(source.uri.toString(), dartUri); |
| 143 expect(source.fullName, posixToOSPath(posixPath)); |
| 144 } |
| 145 |
| 146 expectSource('dart:core', '/tmp/core.dart'); |
| 147 expectSource('dart:fox', '/tmp/slippy.dart'); |
| 148 expectSource('dart:deep', '/tmp/deep/directory/file.dart'); |
| 149 expectSource('dart:deep/part.dart', '/tmp/deep/directory/part.dart'); |
| 150 } |
168 } | 151 } |
| 152 |
| 153 @reflectiveTest |
| 154 class EmbedderUriResolverTest extends EmbedderRelatedTest { |
| 155 void test_embedderYaml() { |
| 156 var locator = new EmbedderYamlLocator({ |
| 157 'fox': [pathTranslator.getResource('/tmp')] |
| 158 }); |
| 159 var resolver = new EmbedderUriResolver(locator.embedderYamls); |
| 160 |
| 161 expectResolved(dartUri, posixPath) { |
| 162 Source source = resolver.resolveAbsolute(Uri.parse(dartUri)); |
| 163 expect(source, isNotNull, reason: dartUri); |
| 164 expect(source.fullName, posixToOSPath(posixPath)); |
| 165 } |
| 166 |
| 167 // We have five mappings. |
| 168 expect(resolver, hasLength(5)); |
| 169 // Check that they map to the correct paths. |
| 170 expectResolved('dart:core', '/tmp/core.dart'); |
| 171 expectResolved('dart:fox', '/tmp/slippy.dart'); |
| 172 expectResolved('dart:bear', '/tmp/grizzly.dart'); |
| 173 expectResolved('dart:relative', '/relative.dart'); |
| 174 expectResolved('dart:deep', '/tmp/deep/directory/file.dart'); |
| 175 } |
| 176 |
| 177 void test_nullEmbedderYamls() { |
| 178 var resolver = new EmbedderUriResolver(null); |
| 179 expect(resolver, hasLength(0)); |
| 180 } |
| 181 |
| 182 void test_restoreAbsolute() { |
| 183 var locator = new EmbedderYamlLocator({ |
| 184 'fox': [pathTranslator.getResource('/tmp')] |
| 185 }); |
| 186 var resolver = new EmbedderUriResolver(locator.embedderYamls); |
| 187 |
| 188 expectRestore(String dartUri, [String expected]) { |
| 189 var parsedUri = Uri.parse(dartUri); |
| 190 var source = resolver.resolveAbsolute(parsedUri); |
| 191 expect(source, isNotNull); |
| 192 // Restore source's uri. |
| 193 var restoreUri = resolver.restoreAbsolute(source); |
| 194 expect(restoreUri, isNotNull, reason: dartUri); |
| 195 // Verify that it is 'dart:fox'. |
| 196 expect(restoreUri.toString(), expected ?? dartUri); |
| 197 List<String> split = (expected ?? dartUri).split(':'); |
| 198 expect(restoreUri.scheme, split[0]); |
| 199 expect(restoreUri.path, split[1]); |
| 200 } |
| 201 |
| 202 expectRestore('dart:deep'); |
| 203 expectRestore('dart:deep/file.dart', 'dart:deep'); |
| 204 expectRestore('dart:deep/part.dart'); |
| 205 expectRestore('dart:deep/deep/file.dart'); |
| 206 } |
| 207 } |
| 208 |
| 209 @reflectiveTest |
| 210 class EmbedderYamlLocatorTest extends EmbedderRelatedTest { |
| 211 void test_empty() { |
| 212 EmbedderYamlLocator locator = new EmbedderYamlLocator({ |
| 213 'fox': [pathTranslator.getResource('/empty')] |
| 214 }); |
| 215 expect(locator.embedderYamls, hasLength(0)); |
| 216 } |
| 217 |
| 218 void test_invalid() { |
| 219 EmbedderYamlLocator locator = new EmbedderYamlLocator(null); |
| 220 locator.addEmbedderYaml(null, r'''{{{,{{}}},}}'''); |
| 221 expect(locator.embedderYamls, hasLength(0)); |
| 222 } |
| 223 |
| 224 void test_valid() { |
| 225 EmbedderYamlLocator locator = new EmbedderYamlLocator({ |
| 226 'fox': [pathTranslator.getResource('/tmp')] |
| 227 }); |
| 228 expect(locator.embedderYamls, hasLength(1)); |
| 229 } |
| 230 } |
OLD | NEW |