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

Side by Side Diff: pkg/analyzer/test/source/embedder_test.dart

Issue 2069483002: Refactor common portions of the two SDK implementations into a base class (Closed) Base URL: https://github.com/dart-lang/sdk.git@master
Patch Set: clean-up Created 4 years, 6 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 unified diff | Download patch
OLDNEW
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 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698