| OLD | NEW |
| 1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2016, 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.driver; | 5 library analyzer.test.driver; |
| 6 | 6 |
| 7 import 'dart:async'; | 7 import 'dart:async'; |
| 8 import 'dart:convert'; | 8 import 'dart:convert'; |
| 9 | 9 |
| 10 import 'package:analyzer/dart/ast/ast.dart'; | 10 import 'package:analyzer/dart/ast/ast.dart'; |
| 11 import 'package:analyzer/dart/ast/standard_resolution_map.dart'; | 11 import 'package:analyzer/dart/ast/standard_resolution_map.dart'; |
| 12 import 'package:analyzer/dart/element/element.dart'; | 12 import 'package:analyzer/dart/element/element.dart'; |
| 13 import 'package:analyzer/dart/element/type.dart'; | 13 import 'package:analyzer/dart/element/type.dart'; |
| 14 import 'package:analyzer/error/error.dart'; | 14 import 'package:analyzer/error/error.dart'; |
| 15 import 'package:analyzer/file_system/file_system.dart'; | 15 import 'package:analyzer/file_system/file_system.dart'; |
| 16 import 'package:analyzer/file_system/memory_file_system.dart'; | 16 import 'package:analyzer/file_system/memory_file_system.dart'; |
| 17 import 'package:analyzer/src/dart/analysis/byte_store.dart'; | 17 import 'package:analyzer/src/dart/analysis/byte_store.dart'; |
| 18 import 'package:analyzer/src/dart/analysis/driver.dart'; | 18 import 'package:analyzer/src/dart/analysis/driver.dart'; |
| 19 import 'package:analyzer/src/dart/analysis/file_state.dart'; | 19 import 'package:analyzer/src/dart/analysis/file_state.dart'; |
| 20 import 'package:analyzer/src/dart/analysis/status.dart'; | 20 import 'package:analyzer/src/dart/analysis/status.dart'; |
| 21 import 'package:analyzer/src/dart/analysis/top_level_declaration.dart'; | 21 import 'package:analyzer/src/dart/analysis/top_level_declaration.dart'; |
| 22 import 'package:analyzer/src/dart/constant/evaluation.dart'; | 22 import 'package:analyzer/src/dart/constant/evaluation.dart'; |
| 23 import 'package:analyzer/src/dart/element/element.dart'; | 23 import 'package:analyzer/src/dart/element/element.dart'; |
| 24 import 'package:analyzer/src/error/codes.dart'; | 24 import 'package:analyzer/src/error/codes.dart'; |
| 25 import 'package:analyzer/src/generated/engine.dart' show AnalysisOptionsImpl; | 25 import 'package:analyzer/src/generated/engine.dart' show AnalysisOptionsImpl; |
| 26 import 'package:analyzer/src/generated/resolver.dart' show ResolverErrorCode; |
| 26 import 'package:analyzer/src/generated/sdk.dart'; | 27 import 'package:analyzer/src/generated/sdk.dart'; |
| 27 import 'package:analyzer/src/generated/source.dart'; | 28 import 'package:analyzer/src/generated/source.dart'; |
| 28 import 'package:analyzer/src/summary/idl.dart'; | 29 import 'package:analyzer/src/summary/idl.dart'; |
| 29 import 'package:convert/convert.dart'; | 30 import 'package:convert/convert.dart'; |
| 30 import 'package:crypto/crypto.dart'; | 31 import 'package:crypto/crypto.dart'; |
| 31 import 'package:test/test.dart'; | 32 import 'package:test/test.dart'; |
| 32 import 'package:test_reflective_loader/test_reflective_loader.dart'; | 33 import 'package:test_reflective_loader/test_reflective_loader.dart'; |
| 33 import 'package:typed_mock/typed_mock.dart'; | 34 import 'package:typed_mock/typed_mock.dart'; |
| 34 | 35 |
| 35 import '../../../utils.dart'; | 36 import '../../../utils.dart'; |
| (...skipping 295 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 331 // Now remove 'a'. | 332 // Now remove 'a'. |
| 332 driver.removeFile(a); | 333 driver.removeFile(a); |
| 333 | 334 |
| 334 await scheduler.waitForIdle(); | 335 await scheduler.waitForIdle(); |
| 335 | 336 |
| 336 // Only 'b' has been analyzed, because 'a' was removed before we started. | 337 // Only 'b' has been analyzed, because 'a' was removed before we started. |
| 337 expect(allResults, hasLength(1)); | 338 expect(allResults, hasLength(1)); |
| 338 expect(allResults[0].path, b); | 339 expect(allResults[0].path, b); |
| 339 } | 340 } |
| 340 | 341 |
| 342 test_analyze_resolveDirectives() async { |
| 343 var lib = _p('/test/lib.dart'); |
| 344 var part1 = _p('/test/part1.dart'); |
| 345 var part2 = _p('/test/part2.dart'); |
| 346 provider.newFile( |
| 347 lib, |
| 348 ''' |
| 349 library lib; |
| 350 part 'part1.dart'; |
| 351 part 'part2.dart'; |
| 352 '''); |
| 353 provider.newFile( |
| 354 part1, |
| 355 ''' |
| 356 part of lib; |
| 357 '''); |
| 358 provider.newFile( |
| 359 part2, |
| 360 ''' |
| 361 part of 'lib.dart'; |
| 362 '''); |
| 363 |
| 364 AnalysisResult libResult = await driver.getResult(lib); |
| 365 AnalysisResult partResult1 = await driver.getResult(part1); |
| 366 AnalysisResult partResult2 = await driver.getResult(part2); |
| 367 |
| 368 CompilationUnit libUnit = libResult.unit; |
| 369 CompilationUnit partUnit1 = partResult1.unit; |
| 370 CompilationUnit partUnit2 = partResult2.unit; |
| 371 |
| 372 CompilationUnitElement unitElement = libUnit.element; |
| 373 CompilationUnitElement partElement1 = partUnit1.element; |
| 374 CompilationUnitElement partElement2 = partUnit2.element; |
| 375 |
| 376 LibraryElement libraryElement = unitElement.library; |
| 377 { |
| 378 expect(libraryElement.entryPoint, isNull); |
| 379 expect(libraryElement.source, unitElement.source); |
| 380 expect(libraryElement.definingCompilationUnit, unitElement); |
| 381 expect(libraryElement.parts, hasLength(2)); |
| 382 } |
| 383 |
| 384 expect((libUnit.directives[0] as LibraryDirective).element, libraryElement); |
| 385 expect((libUnit.directives[1] as PartDirective).element, partElement1); |
| 386 expect((libUnit.directives[2] as PartDirective).element, partElement2); |
| 387 |
| 388 { |
| 389 var partOf = partUnit1.directives.single as PartOfDirective; |
| 390 expect(partOf.element, libraryElement); |
| 391 } |
| 392 |
| 393 { |
| 394 var partOf = partUnit2.directives.single as PartOfDirective; |
| 395 expect(partOf.element, libraryElement); |
| 396 } |
| 397 } |
| 398 |
| 399 test_analyze_resolveDirectives_error_missingLibraryDirective() async { |
| 400 var lib = _p('/test/lib.dart'); |
| 401 var part = _p('/test/part.dart'); |
| 402 provider.newFile( |
| 403 lib, |
| 404 ''' |
| 405 part 'part.dart'; |
| 406 '''); |
| 407 provider.newFile( |
| 408 part, |
| 409 ''' |
| 410 part of lib; |
| 411 '''); |
| 412 |
| 413 driver.addFile(lib); |
| 414 |
| 415 AnalysisResult libResult = await driver.getResult(lib); |
| 416 List<AnalysisError> errors = libResult.errors; |
| 417 expect(errors, hasLength(1)); |
| 418 expect(errors[0].errorCode, |
| 419 ResolverErrorCode.MISSING_LIBRARY_DIRECTIVE_WITH_PART); |
| 420 } |
| 421 |
| 422 test_analyze_resolveDirectives_error_partOfDifferentLibrary_byName() async { |
| 423 var lib = _p('/test/lib.dart'); |
| 424 var part = _p('/test/part.dart'); |
| 425 provider.newFile( |
| 426 lib, |
| 427 ''' |
| 428 library lib; |
| 429 part 'part.dart'; |
| 430 '''); |
| 431 provider.newFile( |
| 432 part, |
| 433 ''' |
| 434 part of someOtherLib; |
| 435 '''); |
| 436 |
| 437 driver.addFile(lib); |
| 438 |
| 439 AnalysisResult libResult = await driver.getResult(lib); |
| 440 List<AnalysisError> errors = libResult.errors; |
| 441 expect(errors, hasLength(1)); |
| 442 expect(errors[0].errorCode, StaticWarningCode.PART_OF_DIFFERENT_LIBRARY); |
| 443 } |
| 444 |
| 445 test_analyze_resolveDirectives_error_partOfDifferentLibrary_byUri() async { |
| 446 var lib = _p('/test/lib.dart'); |
| 447 var part = _p('/test/part.dart'); |
| 448 provider.newFile( |
| 449 lib, |
| 450 ''' |
| 451 library lib; |
| 452 part 'part.dart'; |
| 453 '''); |
| 454 provider.newFile( |
| 455 part, |
| 456 ''' |
| 457 part of 'other_lib.dart'; |
| 458 '''); |
| 459 |
| 460 driver.addFile(lib); |
| 461 |
| 462 AnalysisResult libResult = await driver.getResult(lib); |
| 463 List<AnalysisError> errors = libResult.errors; |
| 464 expect(errors, hasLength(1)); |
| 465 expect(errors[0].errorCode, StaticWarningCode.PART_OF_DIFFERENT_LIBRARY); |
| 466 } |
| 467 |
| 468 test_analyze_resolveDirectives_error_partOfNonPart() async { |
| 469 var lib = _p('/test/lib.dart'); |
| 470 var part = _p('/test/part.dart'); |
| 471 provider.newFile( |
| 472 lib, |
| 473 ''' |
| 474 library lib; |
| 475 part 'part.dart'; |
| 476 '''); |
| 477 provider.newFile( |
| 478 part, |
| 479 ''' |
| 480 // no part of directive |
| 481 '''); |
| 482 |
| 483 driver.addFile(lib); |
| 484 |
| 485 AnalysisResult libResult = await driver.getResult(lib); |
| 486 List<AnalysisError> errors = libResult.errors; |
| 487 expect(errors, hasLength(1)); |
| 488 expect(errors[0].errorCode, CompileTimeErrorCode.PART_OF_NON_PART); |
| 489 } |
| 490 |
| 341 test_cachedPriorityResults() async { | 491 test_cachedPriorityResults() async { |
| 342 var a = _p('/test/bin/a.dart'); | 492 var a = _p('/test/bin/a.dart'); |
| 343 provider.newFile(a, 'var a = 1;'); | 493 provider.newFile(a, 'var a = 1;'); |
| 344 | 494 |
| 345 driver.priorityFiles = [a]; | 495 driver.priorityFiles = [a]; |
| 346 | 496 |
| 347 AnalysisResult result1 = await driver.getResult(a); | 497 AnalysisResult result1 = await driver.getResult(a); |
| 348 expect(driver.test.priorityResults, containsPair(a, result1)); | 498 expect(driver.test.priorityResults, containsPair(a, result1)); |
| 349 | 499 |
| 350 AnalysisResult result2 = await driver.getResult(a); | 500 AnalysisResult result2 = await driver.getResult(a); |
| (...skipping 1835 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2186 * Return the [provider] specific path for the given Posix [path]. | 2336 * Return the [provider] specific path for the given Posix [path]. |
| 2187 */ | 2337 */ |
| 2188 String _p(String path) => provider.convertPath(path); | 2338 String _p(String path) => provider.convertPath(path); |
| 2189 | 2339 |
| 2190 static String _md5(String content) { | 2340 static String _md5(String content) { |
| 2191 return hex.encode(md5.convert(UTF8.encode(content)).bytes); | 2341 return hex.encode(md5.convert(UTF8.encode(content)).bytes); |
| 2192 } | 2342 } |
| 2193 } | 2343 } |
| 2194 | 2344 |
| 2195 class _SourceMock extends TypedMock implements Source {} | 2345 class _SourceMock extends TypedMock implements Source {} |
| OLD | NEW |