| OLD | NEW |
| (Empty) | |
| 1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file |
| 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. |
| 4 |
| 5 library analyzer.test.generated.sdk_test; |
| 6 |
| 7 import 'package:analyzer/file_system/file_system.dart'; |
| 8 import 'package:analyzer/file_system/memory_file_system.dart'; |
| 9 import 'package:analyzer/src/context/builder.dart' show EmbedderYamlLocator; |
| 10 import 'package:analyzer/src/dart/sdk/sdk.dart'; |
| 11 import 'package:analyzer/src/generated/engine.dart'; |
| 12 import 'package:analyzer/src/generated/java_engine_io.dart'; |
| 13 import 'package:analyzer/src/generated/sdk.dart'; |
| 14 import 'package:analyzer/src/generated/source.dart'; |
| 15 import 'package:analyzer/src/summary/summarize_elements.dart'; |
| 16 import 'package:test_reflective_loader/test_reflective_loader.dart'; |
| 17 import 'package:unittest/unittest.dart'; |
| 18 |
| 19 import '../../../embedder_tests.dart'; |
| 20 import '../../../generated/test_support.dart'; |
| 21 import '../../../resource_utils.dart'; |
| 22 import '../../../utils.dart'; |
| 23 |
| 24 main() { |
| 25 initializeTestEnvironment(); |
| 26 defineReflectiveTests(EmbedderSdkTest); |
| 27 defineReflectiveTests(FolderBasedDartSdkTest); |
| 28 defineReflectiveTests(SdkExtensionFinderTest); |
| 29 defineReflectiveTests(SDKLibrariesReaderTest); |
| 30 } |
| 31 |
| 32 @reflectiveTest |
| 33 class EmbedderSdkTest extends EmbedderRelatedTest { |
| 34 void test_creation() { |
| 35 EmbedderYamlLocator locator = new EmbedderYamlLocator({ |
| 36 'fox': <Folder>[pathTranslator.getResource(foxLib)] |
| 37 }); |
| 38 EmbedderSdk sdk = new EmbedderSdk(resourceProvider, locator.embedderYamls); |
| 39 |
| 40 expect(sdk.urlMappings, hasLength(5)); |
| 41 } |
| 42 |
| 43 void test_fromFileUri() { |
| 44 EmbedderYamlLocator locator = new EmbedderYamlLocator({ |
| 45 'fox': <Folder>[pathTranslator.getResource(foxLib)] |
| 46 }); |
| 47 EmbedderSdk sdk = new EmbedderSdk(resourceProvider, locator.embedderYamls); |
| 48 |
| 49 expectSource(String posixPath, String dartUri) { |
| 50 Uri uri = Uri.parse(posixToOSFileUri(posixPath)); |
| 51 Source source = sdk.fromFileUri(uri); |
| 52 expect(source, isNotNull, reason: posixPath); |
| 53 expect(source.uri.toString(), dartUri); |
| 54 expect(source.fullName, posixToOSPath(posixPath)); |
| 55 } |
| 56 |
| 57 expectSource('$foxLib/slippy.dart', 'dart:fox'); |
| 58 expectSource('$foxLib/deep/directory/file.dart', 'dart:deep'); |
| 59 expectSource('$foxLib/deep/directory/part.dart', 'dart:deep/part.dart'); |
| 60 } |
| 61 |
| 62 void test_getLinkedBundle_hasBundle() { |
| 63 pathTranslator.newFileWithBytes( |
| 64 '$foxPath/sdk.ds', new PackageBundleAssembler().assemble().toBuffer()); |
| 65 EmbedderYamlLocator locator = new EmbedderYamlLocator({ |
| 66 'fox': <Folder>[pathTranslator.getResource(foxLib)] |
| 67 }); |
| 68 // No bundle for spec mode. |
| 69 { |
| 70 EmbedderSdk sdk = |
| 71 new EmbedderSdk(resourceProvider, locator.embedderYamls); |
| 72 sdk.analysisOptions = new AnalysisOptionsImpl()..strongMode = false; |
| 73 sdk.useSummary = true; |
| 74 expect(sdk.getLinkedBundle(), isNull); |
| 75 } |
| 76 // Has bundle for strong mode. |
| 77 { |
| 78 EmbedderSdk sdk = |
| 79 new EmbedderSdk(resourceProvider, locator.embedderYamls); |
| 80 sdk.analysisOptions = new AnalysisOptionsImpl()..strongMode = true; |
| 81 sdk.useSummary = true; |
| 82 expect(sdk.getLinkedBundle(), isNotNull); |
| 83 } |
| 84 // Don't use bundle if not enabled. |
| 85 { |
| 86 EmbedderSdk sdk = |
| 87 new EmbedderSdk(resourceProvider, locator.embedderYamls); |
| 88 sdk.analysisOptions = new AnalysisOptionsImpl()..strongMode = true; |
| 89 sdk.useSummary = false; |
| 90 expect(sdk.getLinkedBundle(), isNull); |
| 91 } |
| 92 } |
| 93 |
| 94 void test_getLinkedBundle_noBundle() { |
| 95 EmbedderYamlLocator locator = new EmbedderYamlLocator({ |
| 96 'fox': <Folder>[pathTranslator.getResource(foxLib)] |
| 97 }); |
| 98 EmbedderSdk sdk = new EmbedderSdk(resourceProvider, locator.embedderYamls); |
| 99 expect(sdk.getLinkedBundle(), isNull); |
| 100 } |
| 101 |
| 102 void test_getSdkLibrary() { |
| 103 EmbedderYamlLocator locator = new EmbedderYamlLocator({ |
| 104 'fox': <Folder>[pathTranslator.getResource(foxLib)] |
| 105 }); |
| 106 EmbedderSdk sdk = new EmbedderSdk(resourceProvider, locator.embedderYamls); |
| 107 |
| 108 SdkLibrary lib = sdk.getSdkLibrary('dart:fox'); |
| 109 expect(lib, isNotNull); |
| 110 expect(lib.path, posixToOSPath('$foxLib/slippy.dart')); |
| 111 expect(lib.shortName, 'dart:fox'); |
| 112 } |
| 113 |
| 114 void test_mapDartUri() { |
| 115 EmbedderYamlLocator locator = new EmbedderYamlLocator({ |
| 116 'fox': <Folder>[pathTranslator.getResource(foxLib)] |
| 117 }); |
| 118 EmbedderSdk sdk = new EmbedderSdk(resourceProvider, locator.embedderYamls); |
| 119 |
| 120 void expectSource(String dartUri, String posixPath) { |
| 121 Source source = sdk.mapDartUri(dartUri); |
| 122 expect(source, isNotNull, reason: posixPath); |
| 123 expect(source.uri.toString(), dartUri); |
| 124 expect(source.fullName, posixToOSPath(posixPath)); |
| 125 } |
| 126 |
| 127 expectSource('dart:core', '$foxLib/core.dart'); |
| 128 expectSource('dart:fox', '$foxLib/slippy.dart'); |
| 129 expectSource('dart:deep', '$foxLib/deep/directory/file.dart'); |
| 130 expectSource('dart:deep/part.dart', '$foxLib/deep/directory/part.dart'); |
| 131 } |
| 132 } |
| 133 |
| 134 @reflectiveTest |
| 135 class FolderBasedDartSdkTest { |
| 136 /** |
| 137 * The resource provider used by these tests. |
| 138 */ |
| 139 MemoryResourceProvider resourceProvider; |
| 140 |
| 141 void test_addExtensions() { |
| 142 FolderBasedDartSdk sdk = _createDartSdk(); |
| 143 String uri = 'dart:my.internal'; |
| 144 sdk.addExtensions({uri: '/Users/user/dart/my.dart'}); |
| 145 expect(sdk.mapDartUri(uri), isNotNull); |
| 146 // The `shortName` property must include the `dart:` prefix. |
| 147 expect(sdk.sdkLibraries, contains(predicate((SdkLibrary library) { |
| 148 return library.shortName == uri; |
| 149 }))); |
| 150 } |
| 151 |
| 152 void test_analysisOptions_afterContextCreation() { |
| 153 FolderBasedDartSdk sdk = _createDartSdk(); |
| 154 sdk.context; |
| 155 expect(() { |
| 156 sdk.analysisOptions = new AnalysisOptionsImpl(); |
| 157 }, throwsStateError); |
| 158 } |
| 159 |
| 160 void test_analysisOptions_beforeContextCreation() { |
| 161 FolderBasedDartSdk sdk = _createDartSdk(); |
| 162 sdk.analysisOptions = new AnalysisOptionsImpl(); |
| 163 sdk.context; |
| 164 // cannot change "analysisOptions" in the context |
| 165 expect(() { |
| 166 sdk.context.analysisOptions = new AnalysisOptionsImpl(); |
| 167 }, throwsStateError); |
| 168 } |
| 169 |
| 170 void test_creation() { |
| 171 FolderBasedDartSdk sdk = _createDartSdk(); |
| 172 expect(sdk, isNotNull); |
| 173 } |
| 174 |
| 175 void test_fromFile_invalid() { |
| 176 FolderBasedDartSdk sdk = _createDartSdk(); |
| 177 expect( |
| 178 sdk.fromFileUri( |
| 179 resourceProvider.getFile("/not/in/the/sdk.dart").toUri()), |
| 180 isNull); |
| 181 } |
| 182 |
| 183 void test_fromFile_library() { |
| 184 FolderBasedDartSdk sdk = _createDartSdk(); |
| 185 Source source = sdk.fromFileUri(sdk.libraryDirectory |
| 186 .getChildAssumingFolder("core") |
| 187 .getChildAssumingFile("core.dart") |
| 188 .toUri()); |
| 189 expect(source, isNotNull); |
| 190 expect(source.isInSystemLibrary, isTrue); |
| 191 expect(source.uri.toString(), "dart:core"); |
| 192 } |
| 193 |
| 194 void test_fromFile_library_firstExact() { |
| 195 FolderBasedDartSdk sdk = _createDartSdk(); |
| 196 Folder dirHtml = sdk.libraryDirectory.getChildAssumingFolder("html"); |
| 197 Folder dirDartium = dirHtml.getChildAssumingFolder("dartium"); |
| 198 File file = dirDartium.getChildAssumingFile("html_dartium.dart"); |
| 199 Source source = sdk.fromFileUri(file.toUri()); |
| 200 expect(source, isNotNull); |
| 201 expect(source.isInSystemLibrary, isTrue); |
| 202 expect(source.uri.toString(), "dart:html"); |
| 203 } |
| 204 |
| 205 void test_fromFile_library_html_common_dart2js() { |
| 206 FolderBasedDartSdk sdk = _createDartSdk(); |
| 207 Folder dirHtml = sdk.libraryDirectory.getChildAssumingFolder("html"); |
| 208 Folder dirCommon = dirHtml.getChildAssumingFolder("html_common"); |
| 209 File file = dirCommon.getChildAssumingFile("html_common_dart2js.dart"); |
| 210 Source source = sdk.fromFileUri(file.toUri()); |
| 211 expect(source, isNotNull); |
| 212 expect(source.isInSystemLibrary, isTrue); |
| 213 expect(source.uri.toString(), "dart:html_common/html_common_dart2js.dart"); |
| 214 } |
| 215 |
| 216 void test_fromFile_part() { |
| 217 FolderBasedDartSdk sdk = _createDartSdk(); |
| 218 Source source = sdk.fromFileUri(sdk.libraryDirectory |
| 219 .getChildAssumingFolder("core") |
| 220 .getChildAssumingFile("num.dart") |
| 221 .toUri()); |
| 222 expect(source, isNotNull); |
| 223 expect(source.isInSystemLibrary, isTrue); |
| 224 expect(source.uri.toString(), "dart:core/num.dart"); |
| 225 } |
| 226 |
| 227 void test_getDirectory() { |
| 228 FolderBasedDartSdk sdk = _createDartSdk(); |
| 229 Folder directory = sdk.directory; |
| 230 expect(directory, isNotNull); |
| 231 expect(directory.exists, isTrue); |
| 232 } |
| 233 |
| 234 void test_getDocDirectory() { |
| 235 FolderBasedDartSdk sdk = _createDartSdk(); |
| 236 Folder directory = sdk.docDirectory; |
| 237 expect(directory, isNotNull); |
| 238 } |
| 239 |
| 240 void test_getLibraryDirectory() { |
| 241 FolderBasedDartSdk sdk = _createDartSdk(); |
| 242 Folder directory = sdk.libraryDirectory; |
| 243 expect(directory, isNotNull); |
| 244 expect(directory.exists, isTrue); |
| 245 } |
| 246 |
| 247 void test_getPubExecutable() { |
| 248 FolderBasedDartSdk sdk = _createDartSdk(); |
| 249 File executable = sdk.pubExecutable; |
| 250 expect(executable, isNotNull); |
| 251 expect(executable.exists, isTrue); |
| 252 } |
| 253 |
| 254 void test_getSdkVersion() { |
| 255 FolderBasedDartSdk sdk = _createDartSdk(); |
| 256 String version = sdk.sdkVersion; |
| 257 expect(version, isNotNull); |
| 258 expect(version.length > 0, isTrue); |
| 259 } |
| 260 |
| 261 void test_useSummary_afterContextCreation() { |
| 262 FolderBasedDartSdk sdk = _createDartSdk(); |
| 263 sdk.context; |
| 264 expect(() { |
| 265 sdk.useSummary = true; |
| 266 }, throwsStateError); |
| 267 } |
| 268 |
| 269 void test_useSummary_beforeContextCreation() { |
| 270 FolderBasedDartSdk sdk = _createDartSdk(); |
| 271 sdk.useSummary = true; |
| 272 sdk.context; |
| 273 } |
| 274 |
| 275 FolderBasedDartSdk _createDartSdk() { |
| 276 resourceProvider = new MemoryResourceProvider(); |
| 277 Folder sdkDirectory = resourceProvider.getFolder('/sdk'); |
| 278 _createFile(sdkDirectory, |
| 279 ['lib', '_internal', 'sdk_library_metadata', 'lib', 'libraries.dart'], |
| 280 content: _librariesFileContent()); |
| 281 _createFile(sdkDirectory, ['bin', 'dart']); |
| 282 _createFile(sdkDirectory, ['bin', 'dart2js']); |
| 283 _createFile(sdkDirectory, ['bin', 'pub']); |
| 284 _createFile(sdkDirectory, ['lib', 'async', 'async.dart']); |
| 285 _createFile(sdkDirectory, ['lib', 'core', 'core.dart']); |
| 286 _createFile(sdkDirectory, ['lib', 'core', 'num.dart']); |
| 287 _createFile(sdkDirectory, |
| 288 ['lib', 'html', 'html_common', 'html_common_dart2js.dart']); |
| 289 _createFile(sdkDirectory, ['lib', 'html', 'dartium', 'html_dartium.dart']); |
| 290 _createFile( |
| 291 sdkDirectory, ['bin', (OSUtilities.isWindows() ? 'pub.bat' : 'pub')]); |
| 292 return new FolderBasedDartSdk(resourceProvider, sdkDirectory); |
| 293 } |
| 294 |
| 295 void _createFile(Folder directory, List<String> segments, |
| 296 {String content: ''}) { |
| 297 Folder parent = directory; |
| 298 int last = segments.length - 1; |
| 299 for (int i = 0; i < last; i++) { |
| 300 parent = parent.getChildAssumingFolder(segments[i]); |
| 301 } |
| 302 File file = parent.getChildAssumingFile(segments[last]); |
| 303 resourceProvider.newFile(file.path, content); |
| 304 } |
| 305 |
| 306 String _librariesFileContent() => ''' |
| 307 final Map<String, LibraryInfo> LIBRARIES = const <String, LibraryInfo> { |
| 308 "async": const LibraryInfo( |
| 309 "async/async.dart", |
| 310 categories: "Client,Server", |
| 311 maturity: Maturity.STABLE, |
| 312 dart2jsPatchPath: "_internal/js_runtime/lib/async_patch.dart"), |
| 313 |
| 314 "core": const LibraryInfo( |
| 315 "core/core.dart", |
| 316 categories: "Client,Server,Embedded", |
| 317 maturity: Maturity.STABLE, |
| 318 dart2jsPatchPath: "_internal/js_runtime/lib/core_patch.dart"), |
| 319 |
| 320 "html": const LibraryInfo( |
| 321 "html/dartium/html_dartium.dart", |
| 322 categories: "Client", |
| 323 maturity: Maturity.WEB_STABLE, |
| 324 dart2jsPath: "html/dart2js/html_dart2js.dart"), |
| 325 |
| 326 "html_common": const LibraryInfo( |
| 327 "html/html_common/html_common.dart", |
| 328 categories: "Client", |
| 329 maturity: Maturity.WEB_STABLE, |
| 330 dart2jsPath: "html/html_common/html_common_dart2js.dart", |
| 331 documented: false, |
| 332 implementation: true), |
| 333 }; |
| 334 '''; |
| 335 } |
| 336 |
| 337 @reflectiveTest |
| 338 class SdkExtensionFinderTest { |
| 339 MemoryResourceProvider resourceProvider; |
| 340 |
| 341 void setUp() { |
| 342 resourceProvider = new MemoryResourceProvider(); |
| 343 resourceProvider.newFolder('/empty'); |
| 344 resourceProvider.newFolder('/tmp'); |
| 345 resourceProvider.newFile( |
| 346 '/tmp/_sdkext', |
| 347 r''' |
| 348 { |
| 349 "dart:fox": "slippy.dart", |
| 350 "dart:bear": "grizzly.dart", |
| 351 "dart:relative": "../relative.dart", |
| 352 "dart:deep": "deep/directory/file.dart", |
| 353 "fart:loudly": "nomatter.dart" |
| 354 }'''); |
| 355 } |
| 356 |
| 357 test_create_noSdkExtPackageMap() { |
| 358 var resolver = new SdkExtensionFinder({ |
| 359 'fox': <Folder>[resourceProvider.getResource('/empty')] |
| 360 }); |
| 361 expect(resolver.urlMappings.length, equals(0)); |
| 362 } |
| 363 |
| 364 test_create_nullPackageMap() { |
| 365 var resolver = new SdkExtensionFinder(null); |
| 366 expect(resolver.urlMappings.length, equals(0)); |
| 367 } |
| 368 |
| 369 test_create_sdkExtPackageMap() { |
| 370 var resolver = new SdkExtensionFinder({ |
| 371 'fox': <Folder>[resourceProvider.getResource('/tmp')] |
| 372 }); |
| 373 // We have four mappings. |
| 374 Map<String, String> urlMappings = resolver.urlMappings; |
| 375 expect(urlMappings.length, equals(4)); |
| 376 // Check that they map to the correct paths. |
| 377 expect(urlMappings['dart:fox'], equals("/tmp/slippy.dart")); |
| 378 expect(urlMappings['dart:bear'], equals("/tmp/grizzly.dart")); |
| 379 expect(urlMappings['dart:relative'], equals("/relative.dart")); |
| 380 expect(urlMappings['dart:deep'], equals("/tmp/deep/directory/file.dart")); |
| 381 } |
| 382 } |
| 383 |
| 384 @reflectiveTest |
| 385 class SDKLibrariesReaderTest extends EngineTestCase { |
| 386 /** |
| 387 * The resource provider used by these tests. |
| 388 */ |
| 389 MemoryResourceProvider resourceProvider; |
| 390 |
| 391 @override |
| 392 void setUp() { |
| 393 resourceProvider = new MemoryResourceProvider(); |
| 394 } |
| 395 |
| 396 void test_readFrom_dart2js() { |
| 397 LibraryMap libraryMap = new SdkLibrariesReader(true).readFromFile( |
| 398 resourceProvider.getFile("/libs.dart"), |
| 399 r''' |
| 400 final Map<String, LibraryInfo> LIBRARIES = const <String, LibraryInfo> { |
| 401 'first' : const LibraryInfo( |
| 402 'first/first.dart', |
| 403 categories: 'Client', |
| 404 documented: true, |
| 405 platforms: VM_PLATFORM, |
| 406 dart2jsPath: 'first/first_dart2js.dart'), |
| 407 };'''); |
| 408 expect(libraryMap, isNotNull); |
| 409 expect(libraryMap.size(), 1); |
| 410 SdkLibrary first = libraryMap.getLibrary("dart:first"); |
| 411 expect(first, isNotNull); |
| 412 expect(first.category, "Client"); |
| 413 expect(first.path, "first/first_dart2js.dart"); |
| 414 expect(first.shortName, "dart:first"); |
| 415 expect(first.isDart2JsLibrary, false); |
| 416 expect(first.isDocumented, true); |
| 417 expect(first.isImplementation, false); |
| 418 expect(first.isVmLibrary, true); |
| 419 } |
| 420 |
| 421 void test_readFrom_empty() { |
| 422 LibraryMap libraryMap = new SdkLibrariesReader(false) |
| 423 .readFromFile(resourceProvider.getFile("/libs.dart"), ""); |
| 424 expect(libraryMap, isNotNull); |
| 425 expect(libraryMap.size(), 0); |
| 426 } |
| 427 |
| 428 void test_readFrom_normal() { |
| 429 LibraryMap libraryMap = new SdkLibrariesReader(false).readFromFile( |
| 430 resourceProvider.getFile("/libs.dart"), |
| 431 r''' |
| 432 final Map<String, LibraryInfo> LIBRARIES = const <String, LibraryInfo> { |
| 433 'first' : const LibraryInfo( |
| 434 'first/first.dart', |
| 435 categories: 'Client', |
| 436 documented: true, |
| 437 platforms: VM_PLATFORM), |
| 438 |
| 439 'second' : const LibraryInfo( |
| 440 'second/second.dart', |
| 441 categories: 'Server', |
| 442 documented: false, |
| 443 implementation: true, |
| 444 platforms: 0), |
| 445 };'''); |
| 446 expect(libraryMap, isNotNull); |
| 447 expect(libraryMap.size(), 2); |
| 448 SdkLibrary first = libraryMap.getLibrary("dart:first"); |
| 449 expect(first, isNotNull); |
| 450 expect(first.category, "Client"); |
| 451 expect(first.path, "first/first.dart"); |
| 452 expect(first.shortName, "dart:first"); |
| 453 expect(first.isDart2JsLibrary, false); |
| 454 expect(first.isDocumented, true); |
| 455 expect(first.isImplementation, false); |
| 456 expect(first.isVmLibrary, true); |
| 457 SdkLibrary second = libraryMap.getLibrary("dart:second"); |
| 458 expect(second, isNotNull); |
| 459 expect(second.category, "Server"); |
| 460 expect(second.path, "second/second.dart"); |
| 461 expect(second.shortName, "dart:second"); |
| 462 expect(second.isDart2JsLibrary, false); |
| 463 expect(second.isDocumented, false); |
| 464 expect(second.isImplementation, true); |
| 465 expect(second.isVmLibrary, false); |
| 466 } |
| 467 } |
| OLD | NEW |