Index: pkg/analysis_services/test/index/dart_index_contributor_test.dart |
diff --git a/pkg/analysis_services/test/index/dart_index_contributor_test.dart b/pkg/analysis_services/test/index/dart_index_contributor_test.dart |
deleted file mode 100644 |
index c02d89834d2cd3590ace076a486b2db00e293bd6..0000000000000000000000000000000000000000 |
--- a/pkg/analysis_services/test/index/dart_index_contributor_test.dart |
+++ /dev/null |
@@ -1,1728 +0,0 @@ |
-// Copyright (c) 2014, 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. |
- |
-library test.services.src.index.dart_index_contributor; |
- |
-import 'package:analysis_services/index/index.dart'; |
-import 'package:analysis_services/index/index_store.dart'; |
-import 'package:analysis_services/src/index/index_contributor.dart'; |
-import 'package:analysis_testing/abstract_single_unit.dart'; |
-import 'package:analysis_testing/reflective_tests.dart'; |
-import 'package:analyzer/src/generated/ast.dart'; |
-import 'package:analyzer/src/generated/element.dart'; |
-import 'package:analyzer/src/generated/source.dart'; |
-import 'package:typed_mock/typed_mock.dart'; |
-import 'package:unittest/unittest.dart'; |
- |
- |
-main() { |
- groupSep = ' | '; |
- runReflectiveTests(DartUnitContributorTest); |
-} |
- |
- |
-/** |
- * Returns `true` if the [actual] location the same properties as [expected]. |
- */ |
-bool _equalsLocation(Location actual, ExpectedLocation expected) { |
- return _equalsLocationProperties( |
- actual, |
- expected.element, |
- expected.offset, |
- expected.length, |
- expected.isQualified, |
- expected.isResolved); |
-} |
- |
- |
-/** |
- * Returns `true` if the [actual] location the expected properties. |
- */ |
-bool _equalsLocationProperties(Location actual, Element expectedElement, |
- int expectedOffset, int expectedLength, bool isQualified, bool isResolved) { |
- return expectedElement == actual.element && |
- expectedOffset == actual.offset && |
- expectedLength == actual.length && |
- isQualified == actual.isQualified && |
- isResolved == actual.isResolved; |
-} |
- |
- |
-bool _equalsRecordedRelation(RecordedRelation recordedRelation, |
- Element expectedElement, Relationship expectedRelationship, |
- ExpectedLocation expectedLocation) { |
- return expectedElement == recordedRelation.element && |
- expectedRelationship == recordedRelation.relationship && |
- (expectedLocation == null || |
- _equalsLocation(recordedRelation.location, expectedLocation)); |
-} |
- |
- |
-@ReflectiveTestCase() |
-class DartUnitContributorTest extends AbstractSingleUnitTest { |
- IndexStore store = new MockIndexStore(); |
- List<RecordedRelation> recordedRelations = <RecordedRelation>[]; |
- |
- CompilationUnitElement importedUnit({int index: 0}) { |
- List<ImportElement> imports = testLibraryElement.imports; |
- return imports[index].importedLibrary.definingCompilationUnit; |
- } |
- |
- void setUp() { |
- super.setUp(); |
- when(store.aboutToIndexDart(context, anyObject)).thenReturn(true); |
- when( |
- store.recordRelationship( |
- anyObject, |
- anyObject, |
- anyObject)).thenInvoke( |
- (Element element, Relationship relationship, Location location) { |
- recordedRelations.add( |
- new RecordedRelation(element, relationship, location)); |
- }); |
- } |
- |
- void test_NameElement_field() { |
- _indexTestUnit(''' |
-class A { |
- int field; |
-} |
-main(A a, p) { |
- print(a.field); // r |
- print(p.field); // ur |
- { |
- var field = 42; |
- print(field); // not a member |
- } |
-} |
-'''); |
- // prepare elements |
- Element mainElement = findElement('main'); |
- FieldElement fieldElement = findElement('field'); |
- Element nameElement = new NameElement('field'); |
- // verify |
- _assertRecordedRelation( |
- nameElement, |
- IndexConstants.NAME_IS_DEFINED_BY, |
- _expectedLocation(fieldElement, 'field;')); |
- _assertRecordedRelation( |
- nameElement, |
- IndexConstants.IS_READ_BY, |
- _expectedLocationQ(mainElement, 'field); // r')); |
- _assertRecordedRelation( |
- nameElement, |
- IndexConstants.IS_READ_BY, |
- _expectedLocationQU(mainElement, 'field); // ur')); |
- _assertNoRecordedRelation( |
- nameElement, |
- IndexConstants.IS_READ_BY, |
- _expectedLocation(mainElement, 'field); // not a member')); |
- } |
- |
- void test_NameElement_isDefinedBy_localVariable_inForEach() { |
- _indexTestUnit(''' |
-class A { |
- main() { |
- for (int test in []) { |
- } |
- } |
-} |
-'''); |
- // prepare elements |
- Element mainElement = findElement('main'); |
- LocalVariableElement testElement = findElement('test'); |
- Element nameElement = new NameElement('test'); |
- // verify |
- _assertRecordedRelation( |
- nameElement, |
- IndexConstants.NAME_IS_DEFINED_BY, |
- _expectedLocation(testElement, 'test in []')); |
- } |
- |
- void test_NameElement_method() { |
- _indexTestUnit(''' |
-class A { |
- method() {} |
-} |
-main(A a, p) { |
- a.method(); // r |
- p.method(); // ur |
-} |
-'''); |
- // prepare elements |
- Element mainElement = findElement('main'); |
- MethodElement methodElement = findElement('method'); |
- Element nameElement = new NameElement('method'); |
- // verify |
- _assertRecordedRelation( |
- nameElement, |
- IndexConstants.NAME_IS_DEFINED_BY, |
- _expectedLocation(methodElement, 'method() {}')); |
- _assertRecordedRelation( |
- nameElement, |
- IndexConstants.IS_INVOKED_BY, |
- _expectedLocationQ(mainElement, 'method(); // r')); |
- _assertRecordedRelation( |
- nameElement, |
- IndexConstants.IS_INVOKED_BY, |
- _expectedLocationQU(mainElement, 'method(); // ur')); |
- } |
- |
- void test_NameElement_operator_resolved() { |
- _indexTestUnit(''' |
-class A { |
- operator +(o) {} |
- operator -(o) {} |
- operator ~() {} |
- operator ==(o) {} |
-} |
-main(A a) { |
- a + 5; |
- a += 5; |
- a == 5; |
- ++a; |
- --a; |
- ~a; |
- a++; |
- a--; |
-} |
-'''); |
- // prepare elements |
- Element mainElement = findElement('main'); |
- // binary |
- _assertRecordedRelation( |
- new NameElement('+'), |
- IndexConstants.IS_INVOKED_BY, |
- _expectedLocationQ(mainElement, '+ 5', length: 1)); |
- _assertRecordedRelation( |
- new NameElement('+'), |
- IndexConstants.IS_INVOKED_BY, |
- _expectedLocationQ(mainElement, '+= 5', length: 2)); |
- _assertRecordedRelation( |
- new NameElement('=='), |
- IndexConstants.IS_INVOKED_BY, |
- _expectedLocationQ(mainElement, '== 5', length: 2)); |
- // prefix |
- _assertRecordedRelation( |
- new NameElement('+'), |
- IndexConstants.IS_INVOKED_BY, |
- _expectedLocationQ(mainElement, '++a', length: 2)); |
- _assertRecordedRelation( |
- new NameElement('-'), |
- IndexConstants.IS_INVOKED_BY, |
- _expectedLocationQ(mainElement, '--a', length: 2)); |
- _assertRecordedRelation( |
- new NameElement('~'), |
- IndexConstants.IS_INVOKED_BY, |
- _expectedLocationQ(mainElement, '~a', length: 1)); |
- // postfix |
- _assertRecordedRelation( |
- new NameElement('+'), |
- IndexConstants.IS_INVOKED_BY, |
- _expectedLocationQ(mainElement, '++;', length: 2)); |
- _assertRecordedRelation( |
- new NameElement('-'), |
- IndexConstants.IS_INVOKED_BY, |
- _expectedLocationQ(mainElement, '--;', length: 2)); |
- } |
- |
- |
- void test_NameElement_operator_unresolved() { |
- _indexTestUnit(''' |
-class A { |
- operator +(o) {} |
- operator -(o) {} |
- operator ~() {} |
- operator ==(o) {} |
-} |
-main(a) { |
- a + 5; |
- a += 5; |
- a == 5; |
- ++a; |
- --a; |
- ~a; |
- a++; |
- a--; |
-} |
-'''); |
- // prepare elements |
- Element mainElement = findElement('main'); |
- // binary |
- _assertRecordedRelation( |
- new NameElement('+'), |
- IndexConstants.IS_INVOKED_BY, |
- _expectedLocationQU(mainElement, '+ 5', length: 1)); |
- _assertRecordedRelation( |
- new NameElement('+'), |
- IndexConstants.IS_INVOKED_BY, |
- _expectedLocationQU(mainElement, '+= 5', length: 2)); |
- _assertRecordedRelation( |
- new NameElement('=='), |
- IndexConstants.IS_INVOKED_BY, |
- _expectedLocationQU(mainElement, '== 5', length: 2)); |
- // prefix |
- _assertRecordedRelation( |
- new NameElement('+'), |
- IndexConstants.IS_INVOKED_BY, |
- _expectedLocationQU(mainElement, '++a', length: 2)); |
- _assertRecordedRelation( |
- new NameElement('-'), |
- IndexConstants.IS_INVOKED_BY, |
- _expectedLocationQU(mainElement, '--a', length: 2)); |
- _assertRecordedRelation( |
- new NameElement('~'), |
- IndexConstants.IS_INVOKED_BY, |
- _expectedLocationQU(mainElement, '~a', length: 1)); |
- // postfix |
- _assertRecordedRelation( |
- new NameElement('+'), |
- IndexConstants.IS_INVOKED_BY, |
- _expectedLocationQU(mainElement, '++;', length: 2)); |
- _assertRecordedRelation( |
- new NameElement('-'), |
- IndexConstants.IS_INVOKED_BY, |
- _expectedLocationQU(mainElement, '--;', length: 2)); |
- } |
- |
- void test_definesClass() { |
- _indexTestUnit('class A {}'); |
- // prepare elements |
- ClassElement classElement = findElement("A"); |
- // verify |
- _assertDefinesTopLevelElement( |
- IndexConstants.DEFINES, |
- _expectedLocation(classElement, 'A {}')); |
- } |
- |
- void test_definesClassAlias() { |
- _indexTestUnit(''' |
-class Mix {} |
-class MyClass = Object with Mix;'''); |
- // prepare elements |
- Element classElement = findElement("MyClass"); |
- // verify |
- _assertDefinesTopLevelElement( |
- IndexConstants.DEFINES, |
- _expectedLocation(classElement, 'MyClass =')); |
- } |
- |
- void test_definesFunction() { |
- _indexTestUnit('myFunction() {}'); |
- // prepare elements |
- FunctionElement functionElement = findElement("myFunction"); |
- // verify |
- _assertDefinesTopLevelElement( |
- IndexConstants.DEFINES, |
- _expectedLocation(functionElement, 'myFunction() {}')); |
- } |
- |
- |
- void test_definesFunctionType() { |
- _indexTestUnit('typedef MyFunction(int p);'); |
- // prepare elements |
- FunctionTypeAliasElement typeAliasElement = findElement("MyFunction"); |
- // verify |
- _assertDefinesTopLevelElement( |
- IndexConstants.DEFINES, |
- _expectedLocation(typeAliasElement, 'MyFunction(int p);')); |
- } |
- |
- void test_definesVariable() { |
- _indexTestUnit('var myVar = 42;'); |
- // prepare elements |
- VariableElement varElement = findElement("myVar"); |
- // verify |
- _assertDefinesTopLevelElement( |
- IndexConstants.DEFINES, |
- _expectedLocation(varElement, 'myVar = 42;')); |
- } |
- |
- void test_forIn() { |
- _indexTestUnit(''' |
-main() { |
- for (var v in []) { |
- } |
-}'''); |
- // prepare elements |
- Element mainElement = findElement("main"); |
- VariableElement variableElement = findElement("v"); |
- // verify |
- _assertNoRecordedRelation( |
- variableElement, |
- IndexConstants.IS_READ_BY, |
- _expectedLocation(mainElement, 'v in []')); |
- } |
- |
- void test_isDefinedBy_ConstructorElement() { |
- _indexTestUnit(''' |
-class A { |
- A() {} |
- A.foo() {} |
-}'''); |
- // prepare elements |
- ClassElement classA = findElement("A"); |
- ConstructorElement consA = |
- findNodeElementAtString("A()", (node) => node is ConstructorDeclaration); |
- ConstructorElement consA_foo = |
- findNodeElementAtString("A.foo()", (node) => node is ConstructorDeclaration); |
- // verify |
- _assertRecordedRelation( |
- consA, |
- IndexConstants.NAME_IS_DEFINED_BY, |
- _expectedLocation(classA, '() {}')); |
- _assertRecordedRelation( |
- consA_foo, |
- IndexConstants.NAME_IS_DEFINED_BY, |
- _expectedLocation(classA, '.foo() {}', length: 4)); |
- } |
- |
- void test_isDefinedBy_NameElement_method() { |
- _indexTestUnit(''' |
-class A { |
- m() {} |
-}'''); |
- // prepare elements |
- Element methodElement = findElement("m"); |
- Element nameElement = new NameElement("m"); |
- // verify |
- _assertRecordedRelation( |
- nameElement, |
- IndexConstants.NAME_IS_DEFINED_BY, |
- _expectedLocation(methodElement, 'm() {}')); |
- } |
- |
- void test_isDefinedBy_NameElement_operator() { |
- _indexTestUnit(''' |
-class A { |
- operator +(o) {} |
-}'''); |
- // prepare elements |
- Element methodElement = findElement("+"); |
- Element nameElement = new NameElement("+"); |
- // verify |
- _assertRecordedRelation( |
- nameElement, |
- IndexConstants.NAME_IS_DEFINED_BY, |
- _expectedLocation(methodElement, '+(o) {}', length: 1)); |
- } |
- |
- |
- void test_isExtendedBy_ClassDeclaration() { |
- _indexTestUnit(''' |
-class A {} // 1 |
-class B extends A {} // 2 |
-'''); |
- // prepare elements |
- ClassElement classElementA = findElement("A"); |
- ClassElement classElementB = findElement("B"); |
- // verify |
- _assertRecordedRelation( |
- classElementA, |
- IndexConstants.IS_EXTENDED_BY, |
- _expectedLocation(classElementB, 'A {} // 2')); |
- } |
- |
- void test_isExtendedBy_ClassDeclaration_Object() { |
- _indexTestUnit(''' |
-class A {} // 1 |
-'''); |
- // prepare elements |
- ClassElement classElementA = findElement("A"); |
- ClassElement classElementObject = classElementA.supertype.element; |
- // verify |
- _assertRecordedRelation( |
- classElementObject, |
- IndexConstants.IS_EXTENDED_BY, |
- _expectedLocation(classElementA, 'A {}', length: 0)); |
- } |
- |
- |
- void test_isExtendedBy_ClassTypeAlias() { |
- _indexTestUnit(''' |
-class A {} // 1 |
-class B {} // 2 |
-class C = A with B; // 3 |
-'''); |
- // prepare elements |
- ClassElement classElementA = findElement("A"); |
- ClassElement classElementC = findElement("C"); |
- // verify |
- _assertRecordedRelation( |
- classElementA, |
- IndexConstants.IS_EXTENDED_BY, |
- _expectedLocation(classElementC, 'A with')); |
- } |
- |
- void test_isImplementedBy_ClassDeclaration() { |
- _indexTestUnit(''' |
-class A {} // 1 |
-class B implements A {} // 2 |
-'''); |
- // prepare elements |
- ClassElement classElementA = findElement("A"); |
- ClassElement classElementB = findElement("B"); |
- // verify |
- _assertRecordedRelation( |
- classElementA, |
- IndexConstants.IS_IMPLEMENTED_BY, |
- _expectedLocation(classElementB, 'A {} // 2')); |
- } |
- |
- void test_isImplementedBy_ClassTypeAlias() { |
- _indexTestUnit(''' |
-class A {} // 1 |
-class B {} // 2 |
-class C = Object with A implements B; // 3 |
-'''); |
- // prepare elements |
- ClassElement classElementB = findElement("B"); |
- ClassElement classElementC = findElement("C"); |
- // verify |
- _assertRecordedRelation( |
- classElementB, |
- IndexConstants.IS_IMPLEMENTED_BY, |
- _expectedLocation(classElementC, 'B; // 3')); |
- } |
- |
- void test_isInvokedBy_FieldElement() { |
- _indexTestUnit(''' |
-class A { |
- var field; |
- main() { |
- this.field(); // q |
- field(); // nq |
- } |
-}'''); |
- // prepare elements |
- Element mainElement = findElement("main"); |
- FieldElement fieldElement = findElement("field"); |
- PropertyAccessorElement getterElement = fieldElement.getter; |
- // verify |
- _assertRecordedRelation( |
- getterElement, |
- IndexConstants.IS_INVOKED_BY, |
- _expectedLocationQ(mainElement, 'field(); // q')); |
- _assertRecordedRelation( |
- getterElement, |
- IndexConstants.IS_INVOKED_BY, |
- _expectedLocation(mainElement, 'field(); // nq')); |
- } |
- |
- void test_isInvokedBy_FunctionElement() { |
- addSource('/lib.dart', ''' |
-library lib; |
-foo() {} |
-'''); |
- _indexTestUnit(''' |
-import 'lib.dart'; |
-import 'lib.dart' as pref; |
-main() { |
- pref.foo(); // q |
- foo(); // nq |
-}'''); |
- // prepare elements |
- Element mainElement = findElement("main"); |
- FunctionElement functionElement = importedUnit().functions[0]; |
- // verify |
- _assertRecordedRelation( |
- functionElement, |
- IndexConstants.IS_INVOKED_BY, |
- _expectedLocation(mainElement, 'foo(); // q')); |
- _assertRecordedRelation( |
- functionElement, |
- IndexConstants.IS_INVOKED_BY, |
- _expectedLocation(mainElement, 'foo(); // nq')); |
- } |
- |
- void test_isInvokedBy_LocalVariableElement() { |
- _indexTestUnit(''' |
-main() { |
- var v; |
- v(); |
-}'''); |
- // prepare elements |
- Element mainElement = findElement("main"); |
- Element element = findElement("v"); |
- // verify |
- _assertRecordedRelation( |
- element, |
- IndexConstants.IS_INVOKED_BY, |
- _expectedLocation(mainElement, 'v();')); |
- } |
- |
- void test_isInvokedBy_MethodElement() { |
- _indexTestUnit(''' |
-class A { |
- foo() {} |
- main() { |
- this.foo(); // q |
- foo(); // nq |
- } |
-}'''); |
- // prepare elements |
- Element mainElement = findElement("main"); |
- Element methodElement = findElement("foo"); |
- // verify |
- _assertRecordedRelation( |
- methodElement, |
- IndexConstants.IS_INVOKED_BY, |
- _expectedLocationQ(mainElement, 'foo(); // q')); |
- _assertRecordedRelation( |
- methodElement, |
- IndexConstants.IS_INVOKED_BY, |
- _expectedLocation(mainElement, 'foo(); // nq')); |
- } |
- |
- void test_isInvokedBy_MethodElement_propagatedType() { |
- _indexTestUnit(''' |
-class A { |
- foo() {} |
-} |
-main() { |
- var a = new A(); |
- a.foo(); |
-} |
-'''); |
- // prepare elements |
- Element mainElement = findElement("main"); |
- Element methodElement = findElement("foo"); |
- // verify |
- _assertRecordedRelation( |
- methodElement, |
- IndexConstants.IS_INVOKED_BY, |
- _expectedLocationQ(mainElement, 'foo();')); |
- } |
- |
- void test_isInvokedBy_ParameterElement() { |
- _indexTestUnit(''' |
-main(p()) { |
- p(); |
-}'''); |
- // prepare elements |
- Element mainElement = findElement("main"); |
- Element element = findElement("p"); |
- // verify |
- _assertRecordedRelation( |
- element, |
- IndexConstants.IS_INVOKED_BY, |
- _expectedLocation(mainElement, 'p();')); |
- } |
- |
- void test_isInvokedBy_operator_binary() { |
- _indexTestUnit(''' |
-class A { |
- operator +(other) => this; |
-} |
-main(A a) { |
- print(a + 1); |
- a += 2; |
- ++a; |
- a++; |
-} |
-'''); |
- // prepare elements |
- MethodElement element = findElement('+'); |
- Element mainElement = findElement('main'); |
- // verify |
- _assertRecordedRelation( |
- element, |
- IndexConstants.IS_INVOKED_BY, |
- _expectedLocationQ(mainElement, '+ 1', length: 1)); |
- _assertRecordedRelation( |
- element, |
- IndexConstants.IS_INVOKED_BY, |
- _expectedLocationQ(mainElement, '+= 2', length: 2)); |
- _assertRecordedRelation( |
- element, |
- IndexConstants.IS_INVOKED_BY, |
- _expectedLocationQ(mainElement, '++a;', length: 2)); |
- _assertRecordedRelation( |
- element, |
- IndexConstants.IS_INVOKED_BY, |
- _expectedLocationQ(mainElement, '++;', length: 2)); |
- } |
- |
- void test_isInvokedBy_operator_index() { |
- _indexTestUnit(''' |
-class A { |
- operator [](i) => null; |
- operator []=(i, v) {} |
-} |
-main(A a) { |
- print(a[0]); |
- a[1] = 42; |
-} |
-'''); |
- // prepare elements |
- MethodElement readElement = findElement("[]"); |
- MethodElement writeElement = findElement("[]="); |
- Element mainElement = findElement('main'); |
- // verify |
- _assertRecordedRelation( |
- readElement, |
- IndexConstants.IS_INVOKED_BY, |
- _expectedLocationQ(mainElement, '[0]', length: 1)); |
- _assertRecordedRelation( |
- writeElement, |
- IndexConstants.IS_INVOKED_BY, |
- _expectedLocationQ(mainElement, '[1] =', length: 1)); |
- } |
- |
- void test_isInvokedBy_operator_prefix() { |
- _indexTestUnit(''' |
-class A { |
- A operator ~() => this; |
-} |
-main(A a) { |
- print(~a); |
-} |
-'''); |
- // prepare elements |
- MethodElement element = findElement("~"); |
- Element mainElement = findElement('main'); |
- // verify |
- _assertRecordedRelation( |
- element, |
- IndexConstants.IS_INVOKED_BY, |
- _expectedLocationQ(mainElement, '~a', length: 1)); |
- } |
- |
- void test_isMixedInBy_ClassDeclaration() { |
- _indexTestUnit(''' |
-class A {} // 1 |
-class B extends Object with A {} // 2 |
-'''); |
- // prepare elements |
- ClassElement classElementA = findElement("A"); |
- ClassElement classElementB = findElement("B"); |
- // verify |
- _assertRecordedRelation( |
- classElementA, |
- IndexConstants.IS_MIXED_IN_BY, |
- _expectedLocation(classElementB, 'A {} // 2')); |
- } |
- |
- void test_isMixedInBy_ClassTypeAlias() { |
- _indexTestUnit(''' |
-class A {} // 1 |
-class B = Object with A; // 2 |
-'''); |
- // prepare elements |
- ClassElement classElementA = findElement("A"); |
- ClassElement classElementB = findElement("B"); |
- // verify |
- _assertRecordedRelation( |
- classElementA, |
- IndexConstants.IS_MIXED_IN_BY, |
- _expectedLocation(classElementB, 'A; // 2')); |
- } |
- |
- void test_isReadBy_ParameterElement() { |
- _indexTestUnit(''' |
-main(var p) { |
- print(p); |
-} |
-'''); |
- // prepare elements |
- Element mainElement = findElement("main"); |
- Element parameterElement = findElement("p"); |
- // verify |
- _assertRecordedRelation( |
- parameterElement, |
- IndexConstants.IS_READ_BY, |
- _expectedLocation(mainElement, 'p);')); |
- } |
- |
- void test_isReadBy_VariableElement() { |
- _indexTestUnit(''' |
-main() { |
- var v = 0; |
- print(v); |
-} |
-'''); |
- // prepare elements |
- Element mainElement = findElement("main"); |
- Element variableElement = findElement("v"); |
- // verify |
- _assertRecordedRelation( |
- variableElement, |
- IndexConstants.IS_READ_BY, |
- _expectedLocation(mainElement, 'v);')); |
- } |
- |
- void test_isReadWrittenBy_ParameterElement() { |
- _indexTestUnit(''' |
-main(int p) { |
- p += 1; |
-} |
-'''); |
- // prepare elements |
- Element mainElement = findElement("main"); |
- Element parameterElement = findElement("p"); |
- // verify |
- _assertRecordedRelation( |
- parameterElement, |
- IndexConstants.IS_READ_WRITTEN_BY, |
- _expectedLocation(mainElement, 'p += 1')); |
- } |
- |
- void test_isReadWrittenBy_VariableElement() { |
- _indexTestUnit(''' |
-main() { |
- var v = 0; |
- v += 1; |
-} |
-'''); |
- // prepare elements |
- Element mainElement = findElement("main"); |
- Element variableElement = findElement("v"); |
- // verify |
- _assertRecordedRelation( |
- variableElement, |
- IndexConstants.IS_READ_WRITTEN_BY, |
- _expectedLocation(mainElement, 'v += 1')); |
- } |
- |
- void test_isReferencedBy_ClassElement() { |
- _indexTestUnit(''' |
-class A { |
- static var field; |
-} |
-main(A p) { |
- A v; |
- new A(); // 2 |
- A.field = 1; |
- print(A.field); // 3 |
-} |
-'''); |
- // prepare elements |
- ClassElement aElement = findElement("A"); |
- Element mainElement = findElement("main"); |
- ParameterElement pElement = findElement("p"); |
- VariableElement vElement = findElement("v"); |
- // verify |
- _assertRecordedRelation( |
- aElement, |
- IndexConstants.IS_REFERENCED_BY, |
- _expectedLocation(pElement, 'A p) {')); |
- _assertRecordedRelation( |
- aElement, |
- IndexConstants.IS_REFERENCED_BY, |
- _expectedLocation(vElement, 'A v;')); |
- _assertRecordedRelation( |
- aElement, |
- IndexConstants.IS_REFERENCED_BY, |
- _expectedLocation(mainElement, 'A(); // 2')); |
- _assertRecordedRelation( |
- aElement, |
- IndexConstants.IS_REFERENCED_BY, |
- _expectedLocation(mainElement, 'A.field = 1;')); |
- _assertRecordedRelation( |
- aElement, |
- IndexConstants.IS_REFERENCED_BY, |
- _expectedLocation(mainElement, 'A.field); // 3')); |
- } |
- |
- void test_isReferencedBy_ClassTypeAlias() { |
- _indexTestUnit(''' |
-class A {} |
-class B = Object with A; |
-main(B p) { |
- B v; |
-} |
-'''); |
- // prepare elements |
- ClassElement bElement = findElement("B"); |
- ParameterElement pElement = findElement("p"); |
- VariableElement vElement = findElement("v"); |
- // verify |
- _assertRecordedRelation( |
- bElement, |
- IndexConstants.IS_REFERENCED_BY, |
- _expectedLocation(pElement, 'B p) {')); |
- _assertRecordedRelation( |
- bElement, |
- IndexConstants.IS_REFERENCED_BY, |
- _expectedLocation(vElement, 'B v;')); |
- } |
- |
- void test_isReferencedBy_CompilationUnitElement_export() { |
- addSource('/lib.dart', ''' |
-library lib; |
-'''); |
- _indexTestUnit(''' |
-export 'lib.dart'; |
-'''); |
- // prepare elements |
- LibraryElement libElement = testLibraryElement.exportedLibraries[0]; |
- CompilationUnitElement libUnitElement = libElement.definingCompilationUnit; |
- // verify |
- _assertRecordedRelation( |
- libUnitElement, |
- IndexConstants.IS_REFERENCED_BY, |
- _expectedLocation(testUnitElement, "'lib.dart'", length: 10)); |
- } |
- |
- void test_isReferencedBy_CompilationUnitElement_import() { |
- addSource('/lib.dart', ''' |
-library lib; |
-'''); |
- _indexTestUnit(''' |
-import 'lib.dart'; |
-'''); |
- // prepare elements |
- LibraryElement libElement = testLibraryElement.imports[0].importedLibrary; |
- CompilationUnitElement libUnitElement = libElement.definingCompilationUnit; |
- // verify |
- _assertRecordedRelation( |
- libUnitElement, |
- IndexConstants.IS_REFERENCED_BY, |
- _expectedLocation(testUnitElement, "'lib.dart'", length: 10)); |
- } |
- |
- void test_isReferencedBy_CompilationUnitElement_part() { |
- addSource('/my_unit.dart', 'part of my_lib;'); |
- _indexTestUnit(''' |
-library my_lib; |
-part 'my_unit.dart'; |
-'''); |
- // prepare elements |
- CompilationUnitElement myUnitElement = testLibraryElement.parts[0]; |
- // verify |
- _assertRecordedRelation( |
- myUnitElement, |
- IndexConstants.IS_REFERENCED_BY, |
- _expectedLocation(testUnitElement, "'my_unit.dart';", length: 14)); |
- } |
- |
- void test_isReferencedBy_ConstructorElement() { |
- _indexTestUnit(''' |
-class A implements B { |
- A() {} |
- A.foo() {} |
-} |
-class B extends A { |
- B() : super(); // marker-1 |
- B.foo() : super.foo(); // marker-2 |
- factory B.bar() = A.foo; // marker-3 |
-} |
-main() { |
- new A(); // marker-main-1 |
- new A.foo(); // marker-main-2 |
-} |
-'''); |
- // prepare elements |
- Element mainElement = findElement('main'); |
- var isConstructor = (node) => node is ConstructorDeclaration; |
- ConstructorElement consA = findNodeElementAtString("A()", isConstructor); |
- ConstructorElement consA_foo = |
- findNodeElementAtString("A.foo()", isConstructor); |
- ConstructorElement consB = findNodeElementAtString("B()", isConstructor); |
- ConstructorElement consB_foo = |
- findNodeElementAtString("B.foo()", isConstructor); |
- ConstructorElement consB_bar = |
- findNodeElementAtString("B.bar()", isConstructor); |
- // A() |
- _assertRecordedRelation( |
- consA, |
- IndexConstants.IS_REFERENCED_BY, |
- _expectedLocation(consB, '(); // marker-1', length: 0)); |
- _assertRecordedRelation( |
- consA, |
- IndexConstants.IS_REFERENCED_BY, |
- _expectedLocation(mainElement, '(); // marker-main-1', length: 0)); |
- // A.foo() |
- _assertRecordedRelation( |
- consA_foo, |
- IndexConstants.IS_REFERENCED_BY, |
- _expectedLocation(consB_foo, '.foo(); // marker-2', length: 4)); |
- _assertRecordedRelation( |
- consA_foo, |
- IndexConstants.IS_REFERENCED_BY, |
- _expectedLocation(consB_bar, '.foo; // marker-3', length: 4)); |
- _assertRecordedRelation( |
- consA_foo, |
- IndexConstants.IS_REFERENCED_BY, |
- _expectedLocation(mainElement, '.foo(); // marker-main-2', length: 4)); |
- } |
- |
- void test_isReferencedBy_ConstructorElement_classTypeAlias() { |
- _indexTestUnit(''' |
-class M {} |
-class A implements B { |
- A() {} |
- A.named() {} |
-} |
-class B = A with M; |
-main() { |
- new B(); // marker-main-1 |
- new B.named(); // marker-main-2 |
-} |
-'''); |
- // prepare elements |
- Element mainElement = findElement('main'); |
- var isConstructor = (node) => node is ConstructorDeclaration; |
- ConstructorElement consA = findNodeElementAtString("A()", isConstructor); |
- ConstructorElement consA_named = |
- findNodeElementAtString("A.named()", isConstructor); |
- // verify |
- _assertRecordedRelation( |
- consA, |
- IndexConstants.IS_REFERENCED_BY, |
- _expectedLocation(mainElement, '(); // marker-main-1', length: 0)); |
- _assertRecordedRelation( |
- consA_named, |
- IndexConstants.IS_REFERENCED_BY, |
- _expectedLocation(mainElement, '.named(); // marker-main-2', length: 6)); |
- } |
- |
- void test_isReferencedBy_ConstructorFieldInitializer() { |
- _indexTestUnit(''' |
-class A { |
- int field; |
- A() : field = 5; |
-} |
-'''); |
- // prepare elements |
- ConstructorElement constructorElement = |
- findNodeElementAtString("A()", (node) => node is ConstructorDeclaration); |
- FieldElement fieldElement = findElement("field"); |
- // verify |
- _assertRecordedRelation( |
- fieldElement, |
- IndexConstants.IS_REFERENCED_BY, |
- _expectedLocation(constructorElement, 'field = 5')); |
- } |
- |
- void test_isReferencedBy_FieldElement() { |
- _indexTestUnit(''' |
-class A { |
- var field; |
- main() { |
- this.field = 5; // q |
- print(this.field); // q |
- field = 5; // nq |
- print(field); // nq |
- } |
-} |
-'''); |
- // prepare elements |
- Element mainElement = findElement("main"); |
- FieldElement fieldElement = findElement("field"); |
- PropertyAccessorElement getter = fieldElement.getter; |
- PropertyAccessorElement setter = fieldElement.setter; |
- // verify |
- _assertRecordedRelation( |
- setter, |
- IndexConstants.IS_REFERENCED_BY, |
- _expectedLocationQ(mainElement, 'field = 5; // q')); |
- _assertRecordedRelation( |
- getter, |
- IndexConstants.IS_REFERENCED_BY, |
- _expectedLocationQ(mainElement, 'field); // q')); |
- _assertRecordedRelation( |
- setter, |
- IndexConstants.IS_REFERENCED_BY, |
- _expectedLocation(mainElement, 'field = 5; // nq')); |
- _assertRecordedRelation( |
- getter, |
- IndexConstants.IS_REFERENCED_BY, |
- _expectedLocation(mainElement, 'field); // nq')); |
- } |
- |
- void test_isReferencedBy_FieldFormalParameterElement() { |
- _indexTestUnit(''' |
-class A { |
- int field; |
- A(this.field); |
-} |
-'''); |
- // prepare elements |
- FieldElement fieldElement = findElement("field"); |
- Element fieldParameterElement = findNodeElementAtString("field);"); |
- // verify |
- _assertRecordedRelation( |
- fieldElement, |
- IndexConstants.IS_REFERENCED_BY, |
- _expectedLocation(fieldParameterElement, 'field);')); |
- } |
- |
- void test_isReferencedBy_FunctionElement() { |
- _indexTestUnit(''' |
-foo() {} |
-main() { |
- print(foo); |
- print(foo()); |
-} |
-'''); |
- // prepare elements |
- FunctionElement element = findElement("foo"); |
- Element mainElement = findElement("main"); |
- // "referenced" here |
- _assertRecordedRelation( |
- element, |
- IndexConstants.IS_REFERENCED_BY, |
- _expectedLocation(mainElement, 'foo);')); |
- // only "invoked", but not "referenced" |
- { |
- _assertRecordedRelation( |
- element, |
- IndexConstants.IS_INVOKED_BY, |
- _expectedLocation(mainElement, 'foo());')); |
- _assertNoRecordedRelation( |
- element, |
- IndexConstants.IS_REFERENCED_BY, |
- _expectedLocation(mainElement, 'foo());')); |
- } |
- } |
- |
- void test_isReferencedBy_FunctionTypeAliasElement() { |
- _indexTestUnit(''' |
-typedef A(); |
-main(A p) { |
-} |
-'''); |
- // prepare elements |
- Element aElement = findElement('A'); |
- Element pElement = findElement('p'); |
- // verify |
- _assertRecordedRelation( |
- aElement, |
- IndexConstants.IS_REFERENCED_BY, |
- _expectedLocation(pElement, 'A p) {')); |
- } |
- |
- void test_isReferencedBy_ImportElement_noPrefix() { |
- addSource('/lib.dart', ''' |
-library lib; |
-var myVar; |
-myFunction() {} |
-myToHide() {} |
-'''); |
- _indexTestUnit(''' |
-import 'lib.dart' show myVar, myFunction hide myToHide; |
-main() { |
- myVar = 1; |
- myFunction(); |
- print(0); |
-} |
-'''); |
- // prepare elements |
- ImportElement importElement = testLibraryElement.imports[0]; |
- Element mainElement = findElement('main'); |
- // verify |
- _assertRecordedRelation( |
- importElement, |
- IndexConstants.IS_REFERENCED_BY, |
- _expectedLocation(mainElement, 'myVar = 1;', length: 0)); |
- _assertRecordedRelation( |
- importElement, |
- IndexConstants.IS_REFERENCED_BY, |
- _expectedLocation(mainElement, 'myFunction();', length: 0)); |
- _assertNoRecordedRelation( |
- importElement, |
- IndexConstants.IS_REFERENCED_BY, |
- _expectedLocation(mainElement, 'print(0);', length: 0)); |
- // no references from import combinators |
- _assertNoRecordedRelation( |
- importElement, |
- IndexConstants.IS_REFERENCED_BY, |
- _expectedLocation(testUnitElement, 'myVar, ', length: 0)); |
- _assertNoRecordedRelation( |
- importElement, |
- IndexConstants.IS_REFERENCED_BY, |
- _expectedLocation(testUnitElement, 'myFunction hide', length: 0)); |
- _assertNoRecordedRelation( |
- importElement, |
- IndexConstants.IS_REFERENCED_BY, |
- _expectedLocation(testUnitElement, 'myToHide;', length: 0)); |
- } |
- |
- void test_isReferencedBy_ImportElement_withPrefix() { |
- addSource('/libA.dart', ''' |
-library libA; |
-var myVar; |
-'''); |
- addSource('/libB.dart', ''' |
-library libB; |
-class MyClass {} |
-'''); |
- _indexTestUnit(''' |
-import 'libA.dart' as pref; |
-import 'libB.dart' as pref; |
-main() { |
- pref.myVar = 1; |
- new pref.MyClass(); |
-} |
-'''); |
- // prepare elements |
- ImportElement importElementA = testLibraryElement.imports[0]; |
- ImportElement importElementB = testLibraryElement.imports[1]; |
- Element mainElement = findElement('main'); |
- // verify |
- _assertRecordedRelation( |
- importElementA, |
- IndexConstants.IS_REFERENCED_BY, |
- _expectedLocation(mainElement, 'pref.myVar = 1;', length: 5)); |
- _assertRecordedRelation( |
- importElementB, |
- IndexConstants.IS_REFERENCED_BY, |
- _expectedLocation(mainElement, 'pref.MyClass();', length: 5)); |
- } |
- |
- void test_isReferencedBy_ImportElement_withPrefix_combinators() { |
- addSource('/lib.dart', ''' |
-library lib; |
-class A {} |
-class B {} |
-'''); |
- _indexTestUnit(''' |
-import 'lib.dart' as pref show A; |
-import 'lib.dart' as pref show B; |
-import 'lib.dart'; |
-import 'lib.dart' as otherPrefix; |
-main() { |
- new pref.A(); |
- new pref.B(); |
-} |
-'''); |
- // prepare elements |
- ImportElement importElementA = testLibraryElement.imports[0]; |
- ImportElement importElementB = testLibraryElement.imports[1]; |
- Element mainElement = findElement('main'); |
- // verify |
- _assertRecordedRelation( |
- importElementA, |
- IndexConstants.IS_REFERENCED_BY, |
- _expectedLocation(mainElement, 'pref.A();', length: 5)); |
- _assertRecordedRelation( |
- importElementB, |
- IndexConstants.IS_REFERENCED_BY, |
- _expectedLocation(mainElement, 'pref.B();', length: 5)); |
- } |
- |
- void test_isReferencedBy_ImportElement_withPrefix_invocation() { |
- addSource('/lib.dart', ''' |
-library lib; |
-myFunc() {} |
-'''); |
- _indexTestUnit(''' |
-import 'lib.dart' as pref; |
-main() { |
- pref.myFunc(); |
-} |
-'''); |
- // prepare elements |
- ImportElement importElement = testLibraryElement.imports[0]; |
- Element mainElement = findElement('main'); |
- // verify |
- _assertRecordedRelation( |
- importElement, |
- IndexConstants.IS_REFERENCED_BY, |
- _expectedLocation(mainElement, 'pref.myFunc();', length: 5)); |
- } |
- |
- void test_isReferencedBy_ImportElement_withPrefix_oneCandidate() { |
- addSource('/lib.dart', ''' |
-library lib; |
-class A {} |
-class B {} |
-'''); |
- _indexTestUnit(''' |
-import 'lib.dart' as pref show A; |
-main() { |
- new pref.A(); |
-} |
-'''); |
- // prepare elements |
- ImportElement importElement = testLibraryElement.imports[0]; |
- Element mainElement = findElement('main'); |
- // verify |
- _assertRecordedRelation( |
- importElement, |
- IndexConstants.IS_REFERENCED_BY, |
- _expectedLocation(mainElement, 'pref.A();', length: 5)); |
- } |
- |
- void test_isReferencedBy_ImportElement_withPrefix_unresolvedElement() { |
- verifyNoTestUnitErrors = false; |
- addSource('/lib.dart', ''' |
-library lib; |
-'''); |
- _indexTestUnit(''' |
-import 'lib.dart' as pref; |
-main() { |
- pref.myVar = 1; |
-} |
-'''); |
- } |
- |
- void test_isReferencedBy_ImportElement_withPrefix_wrongInvocation() { |
- verifyNoTestUnitErrors = false; |
- _indexTestUnit(''' |
-import 'dart:math' as m; |
-main() { |
- m(); |
-}'''); |
- } |
- |
- void test_isReferencedBy_ImportElement_withPrefix_wrongPrefixedIdentifier() { |
- verifyNoTestUnitErrors = false; |
- _indexTestUnit(''' |
-import 'dart:math' as m; |
-main() { |
- x.m; |
-} |
-'''); |
- } |
- |
- void test_isReferencedBy_LabelElement() { |
- _indexTestUnit(''' |
-main() { |
- L: while (true) { |
- break L; |
- } |
-} |
-'''); |
- // prepare elements |
- Element mainElement = findElement('main'); |
- Element element = findElement('L'); |
- // verify |
- _assertRecordedRelation( |
- element, |
- IndexConstants.IS_REFERENCED_BY, |
- _expectedLocation(mainElement, 'L;')); |
- } |
- |
- void test_isReferencedBy_MethodElement() { |
- _indexTestUnit(''' |
-class A { |
- method() {} |
- main() { |
- print(this.method); // q |
- print(method); // nq |
- } |
-}'''); |
- // prepare elements |
- Element mainElement = findElement("main"); |
- MethodElement methodElement = findElement("method"); |
- // verify |
- _assertRecordedRelation( |
- methodElement, |
- IndexConstants.IS_REFERENCED_BY, |
- _expectedLocationQ(mainElement, 'method); // q')); |
- _assertRecordedRelation( |
- methodElement, |
- IndexConstants.IS_REFERENCED_BY, |
- _expectedLocation(mainElement, 'method); // nq')); |
- } |
- |
- void test_isReferencedBy_ParameterElement() { |
- _indexTestUnit(''' |
-foo({var p}) {} |
-main() { |
- foo(p: 1); |
-} |
-'''); |
- // prepare elements |
- Element mainElement = findElement('main'); |
- Element element = findElement('p'); |
- // verify |
- _assertRecordedRelation( |
- element, |
- IndexConstants.IS_REFERENCED_BY, |
- _expectedLocation(mainElement, 'p: 1')); |
- } |
- |
- void test_isReferencedBy_TopLevelVariableElement() { |
- addSource('/lib.dart', ''' |
-library lib; |
-var V; |
-'''); |
- _indexTestUnit(''' |
-import 'lib.dart' show V; // imp |
-import 'lib.dart' as pref; |
-main() { |
- pref.V = 5; // q |
- print(pref.V); // q |
- V = 5; // nq |
- print(V); // nq |
-}'''); |
- // prepare elements |
- TopLevelVariableElement variable = importedUnit().topLevelVariables[0]; |
- Element mainElement = findElement("main"); |
- // verify |
- _assertRecordedRelation( |
- variable, |
- IndexConstants.IS_REFERENCED_BY, |
- _expectedLocation(testUnitElement, 'V; // imp')); |
- _assertRecordedRelation( |
- variable.setter, |
- IndexConstants.IS_REFERENCED_BY, |
- _expectedLocation(mainElement, 'V = 5; // q')); |
- _assertRecordedRelation( |
- variable.getter, |
- IndexConstants.IS_REFERENCED_BY, |
- _expectedLocation(mainElement, 'V); // q')); |
- _assertRecordedRelation( |
- variable.setter, |
- IndexConstants.IS_REFERENCED_BY, |
- _expectedLocation(mainElement, 'V = 5; // nq')); |
- _assertRecordedRelation( |
- variable.getter, |
- IndexConstants.IS_REFERENCED_BY, |
- _expectedLocation(mainElement, 'V); // nq')); |
- } |
- |
- void test_isReferencedBy_TypeParameterElement() { |
- _indexTestUnit(''' |
-class A<T> { |
- T f; |
- foo(T p) { |
- T v; |
- } |
-} |
-'''); |
- // prepare elements |
- Element typeParameterElement = findElement('T'); |
- Element fieldElement = findElement('f'); |
- Element parameterElement = findElement('p'); |
- Element variableElement = findElement('v'); |
- // verify |
- _assertRecordedRelation( |
- typeParameterElement, |
- IndexConstants.IS_REFERENCED_BY, |
- _expectedLocation(fieldElement, 'T f')); |
- _assertRecordedRelation( |
- typeParameterElement, |
- IndexConstants.IS_REFERENCED_BY, |
- _expectedLocation(parameterElement, 'T p')); |
- _assertRecordedRelation( |
- typeParameterElement, |
- IndexConstants.IS_REFERENCED_BY, |
- _expectedLocation(variableElement, 'T v')); |
- } |
- |
- /** |
- * There was a bug in the AST structure, when single [Comment] was cloned and |
- * assigned to both [FieldDeclaration] and [VariableDeclaration]. |
- * |
- * This caused duplicate indexing. |
- * Here we test that the problem is fixed one way or another. |
- */ |
- void test_isReferencedBy_identifierInComment() { |
- _indexTestUnit(''' |
-class A {} |
-/// [A] text |
-var myVariable = null; |
-'''); |
- // prepare elements |
- Element aElement = findElement('A'); |
- Element variableElement = findElement('myVariable'); |
- // verify |
- _assertRecordedRelation( |
- aElement, |
- IndexConstants.IS_REFERENCED_BY, |
- _expectedLocation(testUnitElement, 'A] text')); |
- _assertNoRecordedRelation( |
- aElement, |
- IndexConstants.IS_REFERENCED_BY, |
- _expectedLocation(variableElement, 'A] text')); |
- } |
- |
- void test_isReferencedBy_libraryName() { |
- Source libSource = addSource('/lib.dart', ''' |
-library lib; |
-part 'test.dart'; |
-'''); |
- testCode = 'part of lib;'; |
- testSource = addSource('/test.dart', testCode); |
- testUnit = resolveDartUnit(testSource, libSource); |
- testUnitElement = testUnit.element; |
- testLibraryElement = testUnitElement.library; |
- indexDartUnit(store, context, testUnit); |
- // verify |
- _assertRecordedRelation( |
- testLibraryElement, |
- IndexConstants.IS_REFERENCED_BY, |
- _expectedLocation(testUnitElement, "lib;")); |
- } |
- |
- void test_isReferencedBy_typeInVariableList() { |
- _indexTestUnit(''' |
-class A {} |
-A myVariable = null; |
-'''); |
- // prepare elements |
- Element classElementA = findElement('A'); |
- Element variableElement = findElement('myVariable'); |
- // verify |
- _assertRecordedRelation( |
- classElementA, |
- IndexConstants.IS_REFERENCED_BY, |
- _expectedLocation(variableElement, 'A myVariable')); |
- } |
- |
- void test_isWrittenBy_ParameterElement() { |
- _indexTestUnit(''' |
-main(var p) { |
- p = 1; |
-}'''); |
- // prepare elements |
- Element mainElement = findElement("main"); |
- ParameterElement pElement = findElement("p"); |
- // verify |
- _assertRecordedRelation( |
- pElement, |
- IndexConstants.IS_WRITTEN_BY, |
- _expectedLocation(mainElement, 'p = 1')); |
- } |
- |
- void test_isWrittenBy_VariableElement() { |
- _indexTestUnit(''' |
-main() { |
- var v = 0; |
- v = 1; |
-}'''); |
- // prepare elements |
- Element mainElement = findElement("main"); |
- LocalVariableElement vElement = findElement("v"); |
- // verify |
- _assertRecordedRelation( |
- vElement, |
- IndexConstants.IS_WRITTEN_BY, |
- _expectedLocation(mainElement, 'v = 1')); |
- } |
- |
- void test_nameIsInvokedBy() { |
- _indexTestUnit(''' |
-class A { |
- test(x) {} |
-} |
-main(A a, p) { |
- a.test(1); |
- p.test(2); |
-}'''); |
- // prepare elements |
- Element mainElement = findElement("main"); |
- Element nameElement = new NameElement('test'); |
- // verify |
- _assertRecordedRelation( |
- nameElement, |
- IndexConstants.IS_INVOKED_BY, |
- _expectedLocationQ(mainElement, 'test(1)')); |
- _assertRecordedRelation( |
- nameElement, |
- IndexConstants.IS_INVOKED_BY, |
- _expectedLocationQU(mainElement, 'test(2)')); |
- _assertNoRecordedRelation( |
- nameElement, |
- IndexConstants.IS_READ_BY, |
- _expectedLocationQU(mainElement, 'test(2)')); |
- } |
- |
- void test_nameIsReadBy() { |
- _indexTestUnit(''' |
-class A { |
- var test; |
-} |
-main(A a, p) { |
- print(a.test); // a |
- print(p.test); // p |
-}'''); |
- // prepare elements |
- Element mainElement = findElement("main"); |
- Element nameElement = new NameElement('test'); |
- // verify |
- _assertRecordedRelation( |
- nameElement, |
- IndexConstants.IS_READ_BY, |
- _expectedLocationQ(mainElement, 'test); // a')); |
- _assertRecordedRelation( |
- nameElement, |
- IndexConstants.IS_READ_BY, |
- _expectedLocationQU(mainElement, 'test); // p')); |
- } |
- |
- void test_nameIsReadWrittenBy() { |
- _indexTestUnit(''' |
-class A { |
- var test; |
-} |
-main(A a, p) { |
- a.test += 1; |
- p.test += 2; |
-}'''); |
- // prepare elements |
- Element mainElement = findElement("main"); |
- Element nameElement = new NameElement('test'); |
- // verify |
- _assertRecordedRelation( |
- nameElement, |
- IndexConstants.IS_READ_WRITTEN_BY, |
- _expectedLocationQ(mainElement, 'test += 1')); |
- _assertRecordedRelation( |
- nameElement, |
- IndexConstants.IS_READ_WRITTEN_BY, |
- _expectedLocationQU(mainElement, 'test += 2')); |
- } |
- |
- void test_nameIsWrittenBy() { |
- _indexTestUnit(''' |
-class A { |
- var test; |
-} |
-main(A a, p) { |
- a.test = 1; |
- p.test = 2; |
-}'''); |
- // prepare elements |
- Element mainElement = findElement("main"); |
- Element nameElement = new NameElement('test'); |
- // verify |
- _assertRecordedRelation( |
- nameElement, |
- IndexConstants.IS_WRITTEN_BY, |
- _expectedLocationQ(mainElement, 'test = 1')); |
- _assertRecordedRelation( |
- nameElement, |
- IndexConstants.IS_WRITTEN_BY, |
- _expectedLocationQU(mainElement, 'test = 2')); |
- } |
- |
- void test_nullUnit() { |
- indexDartUnit(store, context, null); |
- } |
- |
- void test_nullUnitElement() { |
- CompilationUnit unit = new CompilationUnit(null, null, [], [], null); |
- indexDartUnit(store, context, unit); |
- } |
- |
- void _assertDefinesTopLevelElement(Relationship relationship, |
- ExpectedLocation expectedLocation) { |
- _assertRecordedRelation(testLibraryElement, relationship, expectedLocation); |
- _assertRecordedRelation( |
- UniverseElement.INSTANCE, |
- relationship, |
- expectedLocation); |
- } |
- |
- /** |
- * Asserts that [recordedRelations] has no item with the specified properties. |
- */ |
- void _assertNoRecordedRelation(Element element, Relationship relationship, |
- ExpectedLocation location) { |
- for (RecordedRelation recordedRelation in recordedRelations) { |
- if (_equalsRecordedRelation( |
- recordedRelation, |
- element, |
- relationship, |
- location)) { |
- fail( |
- 'not expected: ${recordedRelation} in\n' + recordedRelations.join('\n')); |
- } |
- } |
- } |
- |
- /** |
- * Asserts that [recordedRelations] has an item with the expected properties. |
- */ |
- Location _assertRecordedRelation(Element expectedElement, |
- Relationship expectedRelationship, ExpectedLocation expectedLocation) { |
- for (RecordedRelation recordedRelation in recordedRelations) { |
- if (_equalsRecordedRelation( |
- recordedRelation, |
- expectedElement, |
- expectedRelationship, |
- expectedLocation)) { |
- return recordedRelation.location; |
- } |
- } |
- fail( |
- "not found\n$expectedElement $expectedRelationship " "in $expectedLocation in\n" |
- + |
- recordedRelations.join('\n')); |
- return null; |
- } |
- |
- ExpectedLocation _expectedLocation(Element element, String search, |
- {int length: -1, bool isQualified: false, bool isResolved: true}) { |
- int offset = findOffset(search); |
- if (length == -1) { |
- length = getLeadingIdentifierLength(search); |
- } |
- return new ExpectedLocation( |
- element, |
- offset, |
- length, |
- isQualified, |
- isResolved); |
- } |
- |
- ExpectedLocation _expectedLocationQ(Element element, String search, |
- {int length: -1}) { |
- return _expectedLocation( |
- element, |
- search, |
- length: length, |
- isQualified: true); |
- } |
- |
- ExpectedLocation _expectedLocationQU(Element element, String search, |
- {int length: -1}) { |
- return _expectedLocation( |
- element, |
- search, |
- length: length, |
- isQualified: true, |
- isResolved: false); |
- } |
- |
- void _indexTestUnit(String code) { |
- resolveTestUnit(code); |
- indexDartUnit(store, context, testUnit); |
- } |
-} |
- |
-class ExpectedLocation { |
- Element element; |
- int offset; |
- int length; |
- bool isQualified; |
- bool isResolved; |
- |
- ExpectedLocation(this.element, this.offset, this.length, this.isQualified, |
- this.isResolved); |
- |
- @override |
- String toString() { |
- return 'ExpectedLocation(element=$element; offset=$offset; length=$length;' |
- ' isQualified=$isQualified isResolved=$isResolved)'; |
- } |
-} |
- |
-class MockIndexStore extends TypedMock implements IndexStore { |
- noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation); |
-} |
- |
- |
-/** |
- * Information about a relation recorded into {@link IndexStore}. |
- */ |
-class RecordedRelation { |
- final Element element; |
- final Relationship relationship; |
- final Location location; |
- |
- RecordedRelation(this.element, this.relationship, this.location); |
- |
- @override |
- String toString() { |
- return 'RecordedRelation(element=$element; relationship=$relationship; ' |
- 'location=$location; flags=' '${location.isQualified ? "Q" : ""}' |
- '${location.isResolved ? "R" : ""})'; |
- } |
-} |