| // Copyright (c) 2018, the Dart project authors. Please see the AUTHORS file | 
 | // for details. All rights reserved. Use of this source code is governed by a | 
 | // BSD-style license that can be found in the LICENSE file. | 
 |  | 
 | import 'package:analyzer/dart/ast/ast.dart'; | 
 | import 'package:analyzer/dart/element/element.dart'; | 
 | import 'package:analyzer/src/dart/analysis/session_helper.dart'; | 
 | import 'package:test/test.dart'; | 
 | import 'package:test_reflective_loader/test_reflective_loader.dart'; | 
 |  | 
 | import '../resolution/context_collection_resolution.dart'; | 
 |  | 
 | main() { | 
 |   defineReflectiveSuite(() { | 
 |     defineReflectiveTests(AnalysisSessionHelperTest); | 
 |   }); | 
 | } | 
 |  | 
 | @reflectiveTest | 
 | class AnalysisSessionHelperTest extends PubPackageResolutionTest { | 
 |   late final AnalysisSessionHelper helper; | 
 |  | 
 |   @override | 
 |   void setUp() { | 
 |     super.setUp(); | 
 |     var session = contextFor(testFile).currentSession; | 
 |     helper = AnalysisSessionHelper(session); | 
 |   } | 
 |  | 
 |   test_getClass_defined() async { | 
 |     var file = newFile('$testPackageLibPath/c.dart', r''' | 
 | class C {} | 
 | int v = 0; | 
 | '''); | 
 |     String uri = file.toUri().toString(); | 
 |  | 
 |     var element = (await helper.getClass(uri, 'C'))!; | 
 |     expect(element.displayName, 'C'); | 
 |   } | 
 |  | 
 |   test_getClass_defined_notClass() async { | 
 |     var file = newFile('$testPackageLibPath/c.dart', r''' | 
 | int v = 0; | 
 | '''); | 
 |     String uri = file.toUri().toString(); | 
 |  | 
 |     var element = await helper.getClass(uri, 'v'); | 
 |     expect(element, isNull); | 
 |   } | 
 |  | 
 |   test_getClass_exported() async { | 
 |     newFile('$testPackageLibPath/a.dart', r''' | 
 | class A {} | 
 | '''); | 
 |     var bFile = newFile('$testPackageLibPath/b.dart', r''' | 
 | export 'a.dart'; | 
 | '''); | 
 |     String bUri = bFile.toUri().toString(); | 
 |  | 
 |     var element = (await helper.getClass(bUri, 'A'))!; | 
 |     expect(element.displayName, 'A'); | 
 |   } | 
 |  | 
 |   test_getClass_imported() async { | 
 |     newFile('$testPackageLibPath/a.dart', r''' | 
 | class A {} | 
 | '''); | 
 |     var bFile = newFile('$testPackageLibPath/b.dart', r''' | 
 | import 'a.dart'; | 
 | '''); | 
 |     String bUri = bFile.toUri().toString(); | 
 |  | 
 |     var element = await helper.getClass(bUri, 'A'); | 
 |     expect(element, isNull); | 
 |   } | 
 |  | 
 |   test_getElementDeclaration_class() async { | 
 |     await resolveTestCode(r''' | 
 | class A {} | 
 | '''); | 
 |     var element = findElement.class_('A'); | 
 |     var result = (await helper.getElementDeclaration(element))!; | 
 |     var node = result.node as ClassDeclaration; | 
 |     expect(node.name2.lexeme, 'A'); | 
 |   } | 
 |  | 
 |   test_getResolvedUnitByElement() async { | 
 |     await resolveTestCode(r''' | 
 | class A {} | 
 | class B {} | 
 | '''); | 
 |     var element = findNode.classDeclaration('A').declaredElement2!; | 
 |     var resolvedUnit = (await helper.getResolvedUnitByElement(element))!; | 
 |     expect(resolvedUnit.unit.declarations, hasLength(2)); | 
 |   } | 
 |  | 
 |   test_getTopLevelPropertyAccessor_defined_getter() async { | 
 |     var file = newFile('$testPackageLibPath/test.dart', r''' | 
 | int get a => 0; | 
 | '''); | 
 |     String uri = file.toUri().toString(); | 
 |  | 
 |     var element = (await helper.getTopLevelPropertyAccessor(uri, 'a'))!; | 
 |     expect(element.kind, ElementKind.GETTER); | 
 |     expect(element.displayName, 'a'); | 
 |   } | 
 |  | 
 |   test_getTopLevelPropertyAccessor_defined_setter() async { | 
 |     var file = newFile('$testPackageLibPath/test.dart', r''' | 
 | set a(_) {} | 
 | '''); | 
 |     String uri = file.toUri().toString(); | 
 |  | 
 |     var element = (await helper.getTopLevelPropertyAccessor(uri, 'a='))!; | 
 |     expect(element.kind, ElementKind.SETTER); | 
 |     expect(element.displayName, 'a'); | 
 |   } | 
 |  | 
 |   test_getTopLevelPropertyAccessor_defined_variable() async { | 
 |     var file = newFile('$testPackageLibPath/test.dart', r''' | 
 | int a; | 
 | '''); | 
 |     String uri = file.toUri().toString(); | 
 |  | 
 |     var element = (await helper.getTopLevelPropertyAccessor(uri, 'a'))!; | 
 |     expect(element.kind, ElementKind.GETTER); | 
 |     expect(element.displayName, 'a'); | 
 |   } | 
 |  | 
 |   test_getTopLevelPropertyAccessor_exported() async { | 
 |     newFile('$testPackageLibPath/a.dart', r''' | 
 | int a; | 
 | '''); | 
 |     var bFile = newFile('$testPackageLibPath/b.dart', r''' | 
 | export 'a.dart'; | 
 | '''); | 
 |     String bUri = bFile.toUri().toString(); | 
 |  | 
 |     var element = (await helper.getTopLevelPropertyAccessor(bUri, 'a'))!; | 
 |     expect(element.kind, ElementKind.GETTER); | 
 |     expect(element.displayName, 'a'); | 
 |   } | 
 |  | 
 |   test_getTopLevelPropertyAccessor_imported() async { | 
 |     newFile('$testPackageLibPath/a.dart', r''' | 
 | int a; | 
 | '''); | 
 |     var bFile = newFile('$testPackageLibPath/b.dart', r''' | 
 | import 'a.dart'; | 
 | '''); | 
 |     String bUri = bFile.toUri().toString(); | 
 |  | 
 |     var element = await helper.getTopLevelPropertyAccessor(bUri, 'a'); | 
 |     expect(element, isNull); | 
 |   } | 
 |  | 
 |   test_getTopLevelPropertyAccessor_notDefined() async { | 
 |     var file = newFile('$testPackageLibPath/test.dart', r''' | 
 | int a; | 
 | '''); | 
 |     String uri = file.toUri().toString(); | 
 |  | 
 |     var element = await helper.getTopLevelPropertyAccessor(uri, 'b'); | 
 |     expect(element, isNull); | 
 |   } | 
 |  | 
 |   test_getTopLevelPropertyAccessor_notPropertyAccessor() async { | 
 |     var file = newFile('$testPackageLibPath/test.dart', r''' | 
 | int a() {} | 
 | '''); | 
 |     String uri = file.toUri().toString(); | 
 |  | 
 |     var element = await helper.getTopLevelPropertyAccessor(uri, 'a'); | 
 |     expect(element, isNull); | 
 |   } | 
 | } |