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/source/embedder.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/sdk.dart'; |
| 13 import 'package:analyzer/src/generated/source.dart'; |
| 14 import 'package:unittest/unittest.dart'; |
| 15 |
| 16 import '../../../generated/test_support.dart'; |
| 17 import '../../../reflective_tests.dart'; |
| 18 import '../../../resource_utils.dart'; |
| 19 import '../../../source/embedder_test.dart'; |
| 20 import '../../../utils.dart'; |
| 21 |
| 22 main() { |
| 23 initializeTestEnvironment(); |
| 24 runReflectiveTests(EmbedderSdkTest); |
| 25 runReflectiveTests(FolderBasedDartSdkTest); |
| 26 runReflectiveTests(SDKLibrariesReaderTest); |
| 27 } |
| 28 |
| 29 @reflectiveTest |
| 30 class EmbedderSdkTest extends EmbedderRelatedTest { |
| 31 void test_creation() { |
| 32 EmbedderYamlLocator locator = new EmbedderYamlLocator({ |
| 33 'fox': [pathTranslator.getResource('/tmp')] |
| 34 }); |
| 35 EmbedderSdk sdk = new EmbedderSdk(resourceProvider, locator.embedderYamls); |
| 36 |
| 37 expect(sdk.urlMappings, hasLength(5)); |
| 38 } |
| 39 |
| 40 void test_fromFileUri() { |
| 41 EmbedderYamlLocator locator = new EmbedderYamlLocator({ |
| 42 'fox': [pathTranslator.getResource('/tmp')] |
| 43 }); |
| 44 EmbedderSdk sdk = new EmbedderSdk(resourceProvider, locator.embedderYamls); |
| 45 |
| 46 expectSource(String posixPath, String dartUri) { |
| 47 Uri uri = Uri.parse(posixToOSFileUri(posixPath)); |
| 48 Source source = sdk.fromFileUri(uri); |
| 49 expect(source, isNotNull, reason: posixPath); |
| 50 expect(source.uri.toString(), dartUri); |
| 51 expect(source.fullName, posixToOSPath(posixPath)); |
| 52 } |
| 53 |
| 54 expectSource('/tmp/slippy.dart', 'dart:fox'); |
| 55 expectSource('/tmp/deep/directory/file.dart', 'dart:deep'); |
| 56 expectSource('/tmp/deep/directory/part.dart', 'dart:deep/part.dart'); |
| 57 } |
| 58 |
| 59 void test_getSdkLibrary() { |
| 60 EmbedderYamlLocator locator = new EmbedderYamlLocator({ |
| 61 'fox': [pathTranslator.getResource('/tmp')] |
| 62 }); |
| 63 EmbedderSdk sdk = new EmbedderSdk(resourceProvider, locator.embedderYamls); |
| 64 |
| 65 SdkLibrary lib = sdk.getSdkLibrary('dart:fox'); |
| 66 expect(lib, isNotNull); |
| 67 expect(lib.path, posixToOSPath('/tmp/slippy.dart')); |
| 68 expect(lib.shortName, 'dart:fox'); |
| 69 } |
| 70 |
| 71 void test_mapDartUri() { |
| 72 EmbedderYamlLocator locator = new EmbedderYamlLocator({ |
| 73 'fox': [pathTranslator.getResource('/tmp')] |
| 74 }); |
| 75 EmbedderSdk sdk = new EmbedderSdk(resourceProvider, locator.embedderYamls); |
| 76 |
| 77 void expectSource(String dartUri, String posixPath) { |
| 78 Source source = sdk.mapDartUri(dartUri); |
| 79 expect(source, isNotNull, reason: posixPath); |
| 80 expect(source.uri.toString(), dartUri); |
| 81 expect(source.fullName, posixToOSPath(posixPath)); |
| 82 } |
| 83 |
| 84 expectSource('dart:core', '/tmp/core.dart'); |
| 85 expectSource('dart:fox', '/tmp/slippy.dart'); |
| 86 expectSource('dart:deep', '/tmp/deep/directory/file.dart'); |
| 87 expectSource('dart:deep/part.dart', '/tmp/deep/directory/part.dart'); |
| 88 } |
| 89 } |
| 90 |
| 91 @reflectiveTest |
| 92 class FolderBasedDartSdkTest { |
| 93 /** |
| 94 * The resource provider used by these tests. |
| 95 */ |
| 96 MemoryResourceProvider resourceProvider; |
| 97 |
| 98 // void test_getDocFileFor() { |
| 99 // FolderBasedDartSdk sdk = _createDartSdk(); |
| 100 // File docFile = sdk.getDocFileFor("html"); |
| 101 // expect(docFile, isNotNull); |
| 102 // } |
| 103 |
| 104 void test_analysisOptions_afterContextCreation() { |
| 105 FolderBasedDartSdk sdk = _createDartSdk(); |
| 106 sdk.context; |
| 107 expect(() { |
| 108 sdk.analysisOptions = new AnalysisOptionsImpl(); |
| 109 }, throwsStateError); |
| 110 } |
| 111 |
| 112 void test_analysisOptions_beforeContextCreation() { |
| 113 FolderBasedDartSdk sdk = _createDartSdk(); |
| 114 sdk.analysisOptions = new AnalysisOptionsImpl(); |
| 115 sdk.context; |
| 116 // cannot change "analysisOptions" in the context |
| 117 expect(() { |
| 118 sdk.context.analysisOptions = new AnalysisOptionsImpl(); |
| 119 }, throwsStateError); |
| 120 } |
| 121 |
| 122 void test_creation() { |
| 123 FolderBasedDartSdk sdk = _createDartSdk(); |
| 124 expect(sdk, isNotNull); |
| 125 } |
| 126 |
| 127 void test_fromFile_invalid() { |
| 128 FolderBasedDartSdk sdk = _createDartSdk(); |
| 129 expect( |
| 130 sdk.fromFileUri( |
| 131 resourceProvider.getFile("/not/in/the/sdk.dart").toUri()), |
| 132 isNull); |
| 133 } |
| 134 |
| 135 void test_fromFile_library() { |
| 136 FolderBasedDartSdk sdk = _createDartSdk(); |
| 137 Source source = sdk.fromFileUri(sdk.libraryDirectory |
| 138 .getChildAssumingFolder("core") |
| 139 .getChildAssumingFile("core.dart") |
| 140 .toUri()); |
| 141 expect(source, isNotNull); |
| 142 expect(source.isInSystemLibrary, isTrue); |
| 143 expect(source.uri.toString(), "dart:core"); |
| 144 } |
| 145 |
| 146 void test_fromFile_library_firstExact() { |
| 147 FolderBasedDartSdk sdk = _createDartSdk(); |
| 148 Folder dirHtml = sdk.libraryDirectory.getChildAssumingFolder("html"); |
| 149 Folder dirDartium = dirHtml.getChildAssumingFolder("dartium"); |
| 150 File file = dirDartium.getChildAssumingFile("html_dartium.dart"); |
| 151 Source source = sdk.fromFileUri(file.toUri()); |
| 152 expect(source, isNotNull); |
| 153 expect(source.isInSystemLibrary, isTrue); |
| 154 expect(source.uri.toString(), "dart:html"); |
| 155 } |
| 156 |
| 157 void test_fromFile_library_html_common_dart2js() { |
| 158 FolderBasedDartSdk sdk = _createDartSdk(); |
| 159 Folder dirHtml = sdk.libraryDirectory.getChildAssumingFolder("html"); |
| 160 Folder dirCommon = dirHtml.getChildAssumingFolder("html_common"); |
| 161 File file = dirCommon.getChildAssumingFile("html_common_dart2js.dart"); |
| 162 Source source = sdk.fromFileUri(file.toUri()); |
| 163 expect(source, isNotNull); |
| 164 expect(source.isInSystemLibrary, isTrue); |
| 165 expect(source.uri.toString(), "dart:html_common/html_common_dart2js.dart"); |
| 166 } |
| 167 |
| 168 void test_fromFile_part() { |
| 169 FolderBasedDartSdk sdk = _createDartSdk(); |
| 170 Source source = sdk.fromFileUri(sdk.libraryDirectory |
| 171 .getChildAssumingFolder("core") |
| 172 .getChildAssumingFile("num.dart") |
| 173 .toUri()); |
| 174 expect(source, isNotNull); |
| 175 expect(source.isInSystemLibrary, isTrue); |
| 176 expect(source.uri.toString(), "dart:core/num.dart"); |
| 177 } |
| 178 |
| 179 // void test_dart2JsExecutable() { |
| 180 // FolderBasedDartSdk sdk = _createDartSdk(); |
| 181 // File executable = sdk.dart2JsExecutable; |
| 182 // expect(executable, isNotNull); |
| 183 // expect(executable.exists, isTrue); |
| 184 //// expect(executable.isExecutable(), isTrue); |
| 185 // } |
| 186 |
| 187 void test_getDirectory() { |
| 188 FolderBasedDartSdk sdk = _createDartSdk(); |
| 189 Folder directory = sdk.directory; |
| 190 expect(directory, isNotNull); |
| 191 expect(directory.exists, isTrue); |
| 192 } |
| 193 |
| 194 void test_getDocDirectory() { |
| 195 FolderBasedDartSdk sdk = _createDartSdk(); |
| 196 Folder directory = sdk.docDirectory; |
| 197 expect(directory, isNotNull); |
| 198 } |
| 199 |
| 200 void test_getLibraryDirectory() { |
| 201 FolderBasedDartSdk sdk = _createDartSdk(); |
| 202 Folder directory = sdk.libraryDirectory; |
| 203 expect(directory, isNotNull); |
| 204 expect(directory.exists, isTrue); |
| 205 } |
| 206 |
| 207 void test_getPubExecutable() { |
| 208 FolderBasedDartSdk sdk = _createDartSdk(); |
| 209 File executable = sdk.pubExecutable; |
| 210 expect(executable, isNotNull); |
| 211 expect(executable.exists, isTrue); |
| 212 // expect(executable.isExecutable(), isTrue); |
| 213 } |
| 214 |
| 215 void test_getSdkVersion() { |
| 216 FolderBasedDartSdk sdk = _createDartSdk(); |
| 217 String version = sdk.sdkVersion; |
| 218 expect(version, isNotNull); |
| 219 expect(version.length > 0, isTrue); |
| 220 } |
| 221 |
| 222 // void test_vmExecutable() { |
| 223 // FolderBasedDartSdk sdk = _createDartSdk(); |
| 224 // File executable = sdk.vmExecutable; |
| 225 // expect(executable, isNotNull); |
| 226 // expect(executable.exists, isTrue); |
| 227 //// expect(executable.isExecutable(), isTrue); |
| 228 // } |
| 229 |
| 230 void test_useSummary_afterContextCreation() { |
| 231 FolderBasedDartSdk sdk = _createDartSdk(); |
| 232 sdk.context; |
| 233 expect(() { |
| 234 sdk.useSummary = true; |
| 235 }, throwsStateError); |
| 236 } |
| 237 |
| 238 void test_useSummary_beforeContextCreation() { |
| 239 FolderBasedDartSdk sdk = _createDartSdk(); |
| 240 sdk.useSummary = true; |
| 241 sdk.context; |
| 242 } |
| 243 |
| 244 FolderBasedDartSdk _createDartSdk() { |
| 245 resourceProvider = new MemoryResourceProvider(); |
| 246 Folder sdkDirectory = resourceProvider.getFolder('/sdk'); |
| 247 _createFile(sdkDirectory, |
| 248 ['lib', '_internal', 'sdk_library_metadata', 'lib', 'libraries.dart'], |
| 249 content: _librariesFileContent()); |
| 250 _createFile(sdkDirectory, ['bin', 'dart']); |
| 251 _createFile(sdkDirectory, ['bin', 'dart2js']); |
| 252 _createFile(sdkDirectory, ['bin', 'pub']); |
| 253 _createFile(sdkDirectory, ['lib', 'async', 'async.dart']); |
| 254 _createFile(sdkDirectory, ['lib', 'core', 'core.dart']); |
| 255 _createFile(sdkDirectory, ['lib', 'core', 'num.dart']); |
| 256 _createFile(sdkDirectory, |
| 257 ['lib', 'html', 'html_common', 'html_common_dart2js.dart']); |
| 258 _createFile(sdkDirectory, ['lib', 'html', 'dartium', 'html_dartium.dart']); |
| 259 return new FolderBasedDartSdk(resourceProvider, sdkDirectory); |
| 260 } |
| 261 |
| 262 void _createFile(Folder directory, List<String> segments, |
| 263 {String content: ''}) { |
| 264 Folder parent = directory; |
| 265 int last = segments.length - 1; |
| 266 for (int i = 0; i < last; i++) { |
| 267 parent = parent.getChildAssumingFolder(segments[i]); |
| 268 } |
| 269 File file = parent.getChildAssumingFile(segments[last]); |
| 270 resourceProvider.newFile(file.path, content); |
| 271 } |
| 272 |
| 273 String _librariesFileContent() => ''' |
| 274 final Map<String, LibraryInfo> LIBRARIES = const <String, LibraryInfo> { |
| 275 "async": const LibraryInfo( |
| 276 "async/async.dart", |
| 277 categories: "Client,Server", |
| 278 maturity: Maturity.STABLE, |
| 279 dart2jsPatchPath: "_internal/js_runtime/lib/async_patch.dart"), |
| 280 |
| 281 "core": const LibraryInfo( |
| 282 "core/core.dart", |
| 283 categories: "Client,Server,Embedded", |
| 284 maturity: Maturity.STABLE, |
| 285 dart2jsPatchPath: "_internal/js_runtime/lib/core_patch.dart"), |
| 286 |
| 287 "html": const LibraryInfo( |
| 288 "html/dartium/html_dartium.dart", |
| 289 categories: "Client", |
| 290 maturity: Maturity.WEB_STABLE, |
| 291 dart2jsPath: "html/dart2js/html_dart2js.dart"), |
| 292 |
| 293 "html_common": const LibraryInfo( |
| 294 "html/html_common/html_common.dart", |
| 295 categories: "Client", |
| 296 maturity: Maturity.WEB_STABLE, |
| 297 dart2jsPath: "html/html_common/html_common_dart2js.dart", |
| 298 documented: false, |
| 299 implementation: true), |
| 300 }; |
| 301 '''; |
| 302 } |
| 303 |
| 304 @reflectiveTest |
| 305 class SDKLibrariesReaderTest extends EngineTestCase { |
| 306 /** |
| 307 * The resource provider used by these tests. |
| 308 */ |
| 309 MemoryResourceProvider resourceProvider; |
| 310 |
| 311 @override |
| 312 void setUp() { |
| 313 resourceProvider = new MemoryResourceProvider(); |
| 314 } |
| 315 |
| 316 void test_readFrom_dart2js() { |
| 317 LibraryMap libraryMap = new SdkLibrariesReader(true).readFromFile( |
| 318 resourceProvider.getFile("/libs.dart"), |
| 319 r''' |
| 320 final Map<String, LibraryInfo> LIBRARIES = const <String, LibraryInfo> { |
| 321 'first' : const LibraryInfo( |
| 322 'first/first.dart', |
| 323 categories: 'Client', |
| 324 documented: true, |
| 325 platforms: VM_PLATFORM, |
| 326 dart2jsPath: 'first/first_dart2js.dart'), |
| 327 };'''); |
| 328 expect(libraryMap, isNotNull); |
| 329 expect(libraryMap.size(), 1); |
| 330 SdkLibrary first = libraryMap.getLibrary("dart:first"); |
| 331 expect(first, isNotNull); |
| 332 expect(first.category, "Client"); |
| 333 expect(first.path, "first/first_dart2js.dart"); |
| 334 expect(first.shortName, "dart:first"); |
| 335 expect(first.isDart2JsLibrary, false); |
| 336 expect(first.isDocumented, true); |
| 337 expect(first.isImplementation, false); |
| 338 expect(first.isVmLibrary, true); |
| 339 } |
| 340 |
| 341 void test_readFrom_empty() { |
| 342 LibraryMap libraryMap = new SdkLibrariesReader(false) |
| 343 .readFromFile(resourceProvider.getFile("/libs.dart"), ""); |
| 344 expect(libraryMap, isNotNull); |
| 345 expect(libraryMap.size(), 0); |
| 346 } |
| 347 |
| 348 void test_readFrom_normal() { |
| 349 LibraryMap libraryMap = new SdkLibrariesReader(false).readFromFile( |
| 350 resourceProvider.getFile("/libs.dart"), |
| 351 r''' |
| 352 final Map<String, LibraryInfo> LIBRARIES = const <String, LibraryInfo> { |
| 353 'first' : const LibraryInfo( |
| 354 'first/first.dart', |
| 355 categories: 'Client', |
| 356 documented: true, |
| 357 platforms: VM_PLATFORM), |
| 358 |
| 359 'second' : const LibraryInfo( |
| 360 'second/second.dart', |
| 361 categories: 'Server', |
| 362 documented: false, |
| 363 implementation: true, |
| 364 platforms: 0), |
| 365 };'''); |
| 366 expect(libraryMap, isNotNull); |
| 367 expect(libraryMap.size(), 2); |
| 368 SdkLibrary first = libraryMap.getLibrary("dart:first"); |
| 369 expect(first, isNotNull); |
| 370 expect(first.category, "Client"); |
| 371 expect(first.path, "first/first.dart"); |
| 372 expect(first.shortName, "dart:first"); |
| 373 expect(first.isDart2JsLibrary, false); |
| 374 expect(first.isDocumented, true); |
| 375 expect(first.isImplementation, false); |
| 376 expect(first.isVmLibrary, true); |
| 377 SdkLibrary second = libraryMap.getLibrary("dart:second"); |
| 378 expect(second, isNotNull); |
| 379 expect(second.category, "Server"); |
| 380 expect(second.path, "second/second.dart"); |
| 381 expect(second.shortName, "dart:second"); |
| 382 expect(second.isDart2JsLibrary, false); |
| 383 expect(second.isDocumented, false); |
| 384 expect(second.isImplementation, true); |
| 385 expect(second.isVmLibrary, false); |
| 386 } |
| 387 } |
OLD | NEW |