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

Side by Side Diff: pkg/analyzer/test/src/dart/analysis/driver_test.dart

Issue 2680883004: Resolve Library/Part/PartOf/Directive(s) in AST without tasks. (Closed)
Patch Set: Created 3 years, 10 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) 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
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
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 {}
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698