| OLD | NEW |
| 1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file | 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 | 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 engine.resolver_test; | 5 library engine.resolver_test; |
| 6 | 6 |
| 7 import 'dart:collection'; | 7 import 'dart:collection'; |
| 8 | 8 |
| 9 import 'package:analyzer/src/generated/ast.dart'; | 9 import 'package:analyzer/src/generated/ast.dart'; |
| 10 import 'package:analyzer/src/generated/element.dart'; | 10 import 'package:analyzer/src/generated/element.dart'; |
| (...skipping 445 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 456 } | 456 } |
| 457 | 457 |
| 458 void runTasks() { | 458 void runTasks() { |
| 459 AnalysisResult result = context.performAnalysisTask(); | 459 AnalysisResult result = context.performAnalysisTask(); |
| 460 while (result.changeNotices != null) { | 460 while (result.changeNotices != null) { |
| 461 result = context.performAnalysisTask(); | 461 result = context.performAnalysisTask(); |
| 462 } | 462 } |
| 463 } | 463 } |
| 464 } | 464 } |
| 465 | 465 |
| 466 @ReflectiveTestCase() | 466 @reflectiveTest |
| 467 class AnalysisDeltaTest extends EngineTestCase { | 467 class AnalysisDeltaTest extends EngineTestCase { |
| 468 TestSource source1 = new TestSource('/1.dart'); | 468 TestSource source1 = new TestSource('/1.dart'); |
| 469 TestSource source2 = new TestSource('/2.dart'); | 469 TestSource source2 = new TestSource('/2.dart'); |
| 470 TestSource source3 = new TestSource('/3.dart'); | 470 TestSource source3 = new TestSource('/3.dart'); |
| 471 | 471 |
| 472 void test_getAddedSources() { | 472 void test_getAddedSources() { |
| 473 AnalysisDelta delta = new AnalysisDelta(); | 473 AnalysisDelta delta = new AnalysisDelta(); |
| 474 delta.setAnalysisLevel(source1, AnalysisLevel.ALL); | 474 delta.setAnalysisLevel(source1, AnalysisLevel.ALL); |
| 475 delta.setAnalysisLevel(source2, AnalysisLevel.ERRORS); | 475 delta.setAnalysisLevel(source2, AnalysisLevel.ERRORS); |
| 476 delta.setAnalysisLevel(source3, AnalysisLevel.NONE); | 476 delta.setAnalysisLevel(source3, AnalysisLevel.NONE); |
| (...skipping 19 matching lines...) Expand all Loading... |
| 496 | 496 |
| 497 void test_toString() { | 497 void test_toString() { |
| 498 AnalysisDelta delta = new AnalysisDelta(); | 498 AnalysisDelta delta = new AnalysisDelta(); |
| 499 delta.setAnalysisLevel(new TestSource(), AnalysisLevel.ALL); | 499 delta.setAnalysisLevel(new TestSource(), AnalysisLevel.ALL); |
| 500 String result = delta.toString(); | 500 String result = delta.toString(); |
| 501 expect(result, isNotNull); | 501 expect(result, isNotNull); |
| 502 expect(result.length > 0, isTrue); | 502 expect(result.length > 0, isTrue); |
| 503 } | 503 } |
| 504 } | 504 } |
| 505 | 505 |
| 506 @ReflectiveTestCase() | 506 @reflectiveTest |
| 507 class ChangeSetTest extends EngineTestCase { | 507 class ChangeSetTest extends EngineTestCase { |
| 508 void test_changedContent() { | 508 void test_changedContent() { |
| 509 TestSource source = new TestSource(); | 509 TestSource source = new TestSource(); |
| 510 String content = ""; | 510 String content = ""; |
| 511 ChangeSet changeSet = new ChangeSet(); | 511 ChangeSet changeSet = new ChangeSet(); |
| 512 changeSet.changedContent(source, content); | 512 changeSet.changedContent(source, content); |
| 513 expect(changeSet.addedSources, hasLength(0)); | 513 expect(changeSet.addedSources, hasLength(0)); |
| 514 expect(changeSet.changedSources, hasLength(0)); | 514 expect(changeSet.changedSources, hasLength(0)); |
| 515 Map<Source, String> map = changeSet.changedContents; | 515 Map<Source, String> map = changeSet.changedContents; |
| 516 expect(map, hasLength(1)); | 516 expect(map, hasLength(1)); |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 549 changeSet.changedContent(new TestSource(), ""); | 549 changeSet.changedContent(new TestSource(), ""); |
| 550 changeSet.changedRange(new TestSource(), "", 0, 0, 0); | 550 changeSet.changedRange(new TestSource(), "", 0, 0, 0); |
| 551 changeSet.deletedSource(new TestSource()); | 551 changeSet.deletedSource(new TestSource()); |
| 552 changeSet.removedSource(new TestSource()); | 552 changeSet.removedSource(new TestSource()); |
| 553 changeSet.removedContainer( | 553 changeSet.removedContainer( |
| 554 new SourceContainer_ChangeSetTest_test_toString()); | 554 new SourceContainer_ChangeSetTest_test_toString()); |
| 555 expect(changeSet.toString(), isNotNull); | 555 expect(changeSet.toString(), isNotNull); |
| 556 } | 556 } |
| 557 } | 557 } |
| 558 | 558 |
| 559 @ReflectiveTestCase() | 559 @reflectiveTest |
| 560 class CheckedModeCompileTimeErrorCodeTest extends ResolverTestCase { | 560 class CheckedModeCompileTimeErrorCodeTest extends ResolverTestCase { |
| 561 void test_fieldFormalParameterAssignableToField_extends() { | 561 void test_fieldFormalParameterAssignableToField_extends() { |
| 562 // According to checked-mode type checking rules, a value of type B is | 562 // According to checked-mode type checking rules, a value of type B is |
| 563 // assignable to a field of type A, because B extends A (and hence is a | 563 // assignable to a field of type A, because B extends A (and hence is a |
| 564 // subtype of A). | 564 // subtype of A). |
| 565 Source source = addSource(r''' | 565 Source source = addSource(r''' |
| 566 class A { | 566 class A { |
| 567 const A(); | 567 const A(); |
| 568 } | 568 } |
| 569 class B extends A { | 569 class B extends A { |
| (...skipping 565 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1135 resolve(source); | 1135 resolve(source); |
| 1136 assertErrors( | 1136 assertErrors( |
| 1137 source, | 1137 source, |
| 1138 [ | 1138 [ |
| 1139 CheckedModeCompileTimeErrorCode.VARIABLE_TYPE_MISMATCH, | 1139 CheckedModeCompileTimeErrorCode.VARIABLE_TYPE_MISMATCH, |
| 1140 StaticWarningCode.UNDEFINED_CLASS]); | 1140 StaticWarningCode.UNDEFINED_CLASS]); |
| 1141 verify([source]); | 1141 verify([source]); |
| 1142 } | 1142 } |
| 1143 } | 1143 } |
| 1144 | 1144 |
| 1145 @ReflectiveTestCase() | 1145 @reflectiveTest |
| 1146 class ElementResolverTest extends EngineTestCase { | 1146 class ElementResolverTest extends EngineTestCase { |
| 1147 /** | 1147 /** |
| 1148 * The error listener to which errors will be reported. | 1148 * The error listener to which errors will be reported. |
| 1149 */ | 1149 */ |
| 1150 GatheringErrorListener _listener; | 1150 GatheringErrorListener _listener; |
| 1151 | 1151 |
| 1152 /** | 1152 /** |
| 1153 * The type provider used to access the types. | 1153 * The type provider used to access the types. |
| 1154 */ | 1154 */ |
| 1155 TestTypeProvider _typeProvider; | 1155 TestTypeProvider _typeProvider; |
| (...skipping 913 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2069 statement.accept(_resolver); | 2069 statement.accept(_resolver); |
| 2070 } finally { | 2070 } finally { |
| 2071 _visitor.labelScope_J2DAccessor = outerScope; | 2071 _visitor.labelScope_J2DAccessor = outerScope; |
| 2072 } | 2072 } |
| 2073 } catch (exception) { | 2073 } catch (exception) { |
| 2074 throw new IllegalArgumentException("Could not resolve node", exception); | 2074 throw new IllegalArgumentException("Could not resolve node", exception); |
| 2075 } | 2075 } |
| 2076 } | 2076 } |
| 2077 } | 2077 } |
| 2078 | 2078 |
| 2079 @ReflectiveTestCase() | 2079 @reflectiveTest |
| 2080 class EnclosedScopeTest extends ResolverTestCase { | 2080 class EnclosedScopeTest extends ResolverTestCase { |
| 2081 void test_define_duplicate() { | 2081 void test_define_duplicate() { |
| 2082 GatheringErrorListener listener = new GatheringErrorListener(); | 2082 GatheringErrorListener listener = new GatheringErrorListener(); |
| 2083 Scope rootScope = | 2083 Scope rootScope = |
| 2084 new Scope_EnclosedScopeTest_test_define_duplicate(listener); | 2084 new Scope_EnclosedScopeTest_test_define_duplicate(listener); |
| 2085 EnclosedScope scope = new EnclosedScope(rootScope); | 2085 EnclosedScope scope = new EnclosedScope(rootScope); |
| 2086 VariableElement element1 = | 2086 VariableElement element1 = |
| 2087 ElementFactory.localVariableElement(AstFactory.identifier3("v1")); | 2087 ElementFactory.localVariableElement(AstFactory.identifier3("v1")); |
| 2088 VariableElement element2 = | 2088 VariableElement element2 = |
| 2089 ElementFactory.localVariableElement(AstFactory.identifier3("v1")); | 2089 ElementFactory.localVariableElement(AstFactory.identifier3("v1")); |
| (...skipping 10 matching lines...) Expand all Loading... |
| 2100 VariableElement element1 = | 2100 VariableElement element1 = |
| 2101 ElementFactory.localVariableElement(AstFactory.identifier3("v1")); | 2101 ElementFactory.localVariableElement(AstFactory.identifier3("v1")); |
| 2102 VariableElement element2 = | 2102 VariableElement element2 = |
| 2103 ElementFactory.localVariableElement(AstFactory.identifier3("v2")); | 2103 ElementFactory.localVariableElement(AstFactory.identifier3("v2")); |
| 2104 outerScope.define(element1); | 2104 outerScope.define(element1); |
| 2105 innerScope.define(element2); | 2105 innerScope.define(element2); |
| 2106 listener.assertNoErrors(); | 2106 listener.assertNoErrors(); |
| 2107 } | 2107 } |
| 2108 } | 2108 } |
| 2109 | 2109 |
| 2110 @ReflectiveTestCase() | 2110 @reflectiveTest |
| 2111 class ErrorResolverTest extends ResolverTestCase { | 2111 class ErrorResolverTest extends ResolverTestCase { |
| 2112 void test_breakLabelOnSwitchMember() { | 2112 void test_breakLabelOnSwitchMember() { |
| 2113 Source source = addSource(r''' | 2113 Source source = addSource(r''' |
| 2114 class A { | 2114 class A { |
| 2115 void m(int i) { | 2115 void m(int i) { |
| 2116 switch (i) { | 2116 switch (i) { |
| 2117 l: case 0: | 2117 l: case 0: |
| 2118 break; | 2118 break; |
| 2119 case 1: | 2119 case 1: |
| 2120 break l; | 2120 break l; |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2163 ConstructorElement constructor = constructors[0]; | 2163 ConstructorElement constructor = constructors[0]; |
| 2164 expect(constructor, isNotNull); | 2164 expect(constructor, isNotNull); |
| 2165 List<FunctionElement> functions = constructor.functions; | 2165 List<FunctionElement> functions = constructor.functions; |
| 2166 expect(functions, isNotNull); | 2166 expect(functions, isNotNull); |
| 2167 expect(functions, hasLength(1)); | 2167 expect(functions, hasLength(1)); |
| 2168 expect(functions[0].enclosingElement, constructor); | 2168 expect(functions[0].enclosingElement, constructor); |
| 2169 assertErrors(source, [ParserErrorCode.GETTER_IN_FUNCTION]); | 2169 assertErrors(source, [ParserErrorCode.GETTER_IN_FUNCTION]); |
| 2170 } | 2170 } |
| 2171 } | 2171 } |
| 2172 | 2172 |
| 2173 @ReflectiveTestCase() | 2173 @reflectiveTest |
| 2174 class HintCodeTest extends ResolverTestCase { | 2174 class HintCodeTest extends ResolverTestCase { |
| 2175 void fail_deadCode_statementAfterRehrow() { | 2175 void fail_deadCode_statementAfterRehrow() { |
| 2176 Source source = addSource(r''' | 2176 Source source = addSource(r''' |
| 2177 f() { | 2177 f() { |
| 2178 try { | 2178 try { |
| 2179 var one = 1; | 2179 var one = 1; |
| 2180 } catch (e) { | 2180 } catch (e) { |
| 2181 rethrow; | 2181 rethrow; |
| 2182 var two = 2; | 2182 var two = 2; |
| 2183 } | 2183 } |
| (...skipping 2249 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4433 } | 4433 } |
| 4434 }'''); | 4434 }'''); |
| 4435 resolve(source); | 4435 resolve(source); |
| 4436 assertErrors( | 4436 assertErrors( |
| 4437 source, | 4437 source, |
| 4438 [HintCode.USE_OF_VOID_RESULT, HintCode.USE_OF_VOID_RESULT]); | 4438 [HintCode.USE_OF_VOID_RESULT, HintCode.USE_OF_VOID_RESULT]); |
| 4439 verify([source]); | 4439 verify([source]); |
| 4440 } | 4440 } |
| 4441 } | 4441 } |
| 4442 | 4442 |
| 4443 @ReflectiveTestCase() | 4443 @reflectiveTest |
| 4444 class InheritanceManagerTest extends EngineTestCase { | 4444 class InheritanceManagerTest extends EngineTestCase { |
| 4445 /** | 4445 /** |
| 4446 * The type provider used to access the types. | 4446 * The type provider used to access the types. |
| 4447 */ | 4447 */ |
| 4448 TestTypeProvider _typeProvider; | 4448 TestTypeProvider _typeProvider; |
| 4449 | 4449 |
| 4450 /** | 4450 /** |
| 4451 * The library containing the code being resolved. | 4451 * The library containing the code being resolved. |
| 4452 */ | 4452 */ |
| 4453 LibraryElementImpl _definingLibrary; | 4453 LibraryElementImpl _definingLibrary; |
| (...skipping 1197 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5651 new FileBasedSource.con1(FileUtilities2.createFile("/test.dart")); | 5651 new FileBasedSource.con1(FileUtilities2.createFile("/test.dart")); |
| 5652 CompilationUnitElementImpl definingCompilationUnit = | 5652 CompilationUnitElementImpl definingCompilationUnit = |
| 5653 new CompilationUnitElementImpl("test.dart"); | 5653 new CompilationUnitElementImpl("test.dart"); |
| 5654 definingCompilationUnit.source = source; | 5654 definingCompilationUnit.source = source; |
| 5655 _definingLibrary = ElementFactory.library(context, "test"); | 5655 _definingLibrary = ElementFactory.library(context, "test"); |
| 5656 _definingLibrary.definingCompilationUnit = definingCompilationUnit; | 5656 _definingLibrary.definingCompilationUnit = definingCompilationUnit; |
| 5657 return new InheritanceManager(_definingLibrary); | 5657 return new InheritanceManager(_definingLibrary); |
| 5658 } | 5658 } |
| 5659 } | 5659 } |
| 5660 | 5660 |
| 5661 @ReflectiveTestCase() | 5661 @reflectiveTest |
| 5662 class LibraryElementBuilderTest extends EngineTestCase { | 5662 class LibraryElementBuilderTest extends EngineTestCase { |
| 5663 /** | 5663 /** |
| 5664 * The analysis context used to analyze sources. | 5664 * The analysis context used to analyze sources. |
| 5665 */ | 5665 */ |
| 5666 AnalysisContextImpl _context; | 5666 AnalysisContextImpl _context; |
| 5667 | 5667 |
| 5668 /** | 5668 /** |
| 5669 * Add a source file to the content provider. The file path should be absolute
. | 5669 * Add a source file to the content provider. The file path should be absolute
. |
| 5670 * | 5670 * |
| 5671 * @param filePath the path of the file being added | 5671 * @param filePath the path of the file being added |
| (...skipping 163 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5835 new LibraryElementBuilder(resolver.analysisContext, resolver.errorListen
er); | 5835 new LibraryElementBuilder(resolver.analysisContext, resolver.errorListen
er); |
| 5836 Library library = resolver.createLibrary(librarySource); | 5836 Library library = resolver.createLibrary(librarySource); |
| 5837 LibraryElement element = builder.buildLibrary(library); | 5837 LibraryElement element = builder.buildLibrary(library); |
| 5838 GatheringErrorListener listener = new GatheringErrorListener(); | 5838 GatheringErrorListener listener = new GatheringErrorListener(); |
| 5839 listener.addAll2(resolver.errorListener); | 5839 listener.addAll2(resolver.errorListener); |
| 5840 listener.assertErrorsWithCodes(expectedErrorCodes); | 5840 listener.assertErrorsWithCodes(expectedErrorCodes); |
| 5841 return element; | 5841 return element; |
| 5842 } | 5842 } |
| 5843 } | 5843 } |
| 5844 | 5844 |
| 5845 @ReflectiveTestCase() | 5845 @reflectiveTest |
| 5846 class LibraryImportScopeTest extends ResolverTestCase { | 5846 class LibraryImportScopeTest extends ResolverTestCase { |
| 5847 void test_conflictingImports() { | 5847 void test_conflictingImports() { |
| 5848 AnalysisContext context = new AnalysisContextImpl(); | 5848 AnalysisContext context = new AnalysisContextImpl(); |
| 5849 context.sourceFactory = new SourceFactory([]); | 5849 context.sourceFactory = new SourceFactory([]); |
| 5850 String typeNameA = "A"; | 5850 String typeNameA = "A"; |
| 5851 String typeNameB = "B"; | 5851 String typeNameB = "B"; |
| 5852 String typeNameC = "C"; | 5852 String typeNameC = "C"; |
| 5853 ClassElement typeA = ElementFactory.classElement2(typeNameA); | 5853 ClassElement typeA = ElementFactory.classElement2(typeNameA); |
| 5854 ClassElement typeB1 = ElementFactory.classElement2(typeNameB); | 5854 ClassElement typeB1 = ElementFactory.classElement2(typeNameB); |
| 5855 ClassElement typeB2 = ElementFactory.classElement2(typeNameB); | 5855 ClassElement typeB2 = ElementFactory.classElement2(typeNameB); |
| (...skipping 175 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6031 scope.lookup(AstFactory.identifier5(prefixName, typeName), importingLibr
ary); | 6031 scope.lookup(AstFactory.identifier5(prefixName, typeName), importingLibr
ary); |
| 6032 errorListener.assertNoErrors(); | 6032 errorListener.assertNoErrors(); |
| 6033 expect(prefixedElement, same(prefixedType)); | 6033 expect(prefixedElement, same(prefixedType)); |
| 6034 Element nonPrefixedElement = | 6034 Element nonPrefixedElement = |
| 6035 scope.lookup(AstFactory.identifier3(typeName), importingLibrary); | 6035 scope.lookup(AstFactory.identifier3(typeName), importingLibrary); |
| 6036 errorListener.assertNoErrors(); | 6036 errorListener.assertNoErrors(); |
| 6037 expect(nonPrefixedElement, same(nonPrefixedType)); | 6037 expect(nonPrefixedElement, same(nonPrefixedType)); |
| 6038 } | 6038 } |
| 6039 } | 6039 } |
| 6040 | 6040 |
| 6041 @ReflectiveTestCase() | 6041 @reflectiveTest |
| 6042 class LibraryResolver2Test extends ResolverTestCase { | 6042 class LibraryResolver2Test extends ResolverTestCase { |
| 6043 LibraryResolver2 _resolver; | 6043 LibraryResolver2 _resolver; |
| 6044 | 6044 |
| 6045 Source _coreLibrarySource; | 6045 Source _coreLibrarySource; |
| 6046 | 6046 |
| 6047 @override | 6047 @override |
| 6048 void setUp() { | 6048 void setUp() { |
| 6049 super.setUp(); | 6049 super.setUp(); |
| 6050 _resolver = new LibraryResolver2(analysisContext2); | 6050 _resolver = new LibraryResolver2(analysisContext2); |
| 6051 _coreLibrarySource = | 6051 _coreLibrarySource = |
| (...skipping 26 matching lines...) Expand all Loading... |
| 6078 | 6078 |
| 6079 ResolvableLibrary _createResolvableLibrary(Source source) { | 6079 ResolvableLibrary _createResolvableLibrary(Source source) { |
| 6080 CompilationUnit unit = analysisContext2.parseCompilationUnit(source); | 6080 CompilationUnit unit = analysisContext2.parseCompilationUnit(source); |
| 6081 ResolvableLibrary resolvableLibrary = new ResolvableLibrary(source); | 6081 ResolvableLibrary resolvableLibrary = new ResolvableLibrary(source); |
| 6082 resolvableLibrary.resolvableCompilationUnits = | 6082 resolvableLibrary.resolvableCompilationUnits = |
| 6083 <ResolvableCompilationUnit>[new ResolvableCompilationUnit(source, unit)]
; | 6083 <ResolvableCompilationUnit>[new ResolvableCompilationUnit(source, unit)]
; |
| 6084 return resolvableLibrary; | 6084 return resolvableLibrary; |
| 6085 } | 6085 } |
| 6086 } | 6086 } |
| 6087 | 6087 |
| 6088 @ReflectiveTestCase() | 6088 @reflectiveTest |
| 6089 class LibraryResolverTest extends ResolverTestCase { | 6089 class LibraryResolverTest extends ResolverTestCase { |
| 6090 LibraryResolver _resolver; | 6090 LibraryResolver _resolver; |
| 6091 | 6091 |
| 6092 @override | 6092 @override |
| 6093 void setUp() { | 6093 void setUp() { |
| 6094 super.setUp(); | 6094 super.setUp(); |
| 6095 _resolver = new LibraryResolver(analysisContext2); | 6095 _resolver = new LibraryResolver(analysisContext2); |
| 6096 } | 6096 } |
| 6097 | 6097 |
| 6098 void test_imports_dart_html() { | 6098 void test_imports_dart_html() { |
| (...skipping 20 matching lines...) Expand all Loading... |
| 6119 Source source = addSource(r''' | 6119 Source source = addSource(r''' |
| 6120 library libA; | 6120 library libA; |
| 6121 import 'libB.dart'; | 6121 import 'libB.dart'; |
| 6122 class A {}'''); | 6122 class A {}'''); |
| 6123 LibraryElement library = _resolver.resolveLibrary(source, true); | 6123 LibraryElement library = _resolver.resolveLibrary(source, true); |
| 6124 List<LibraryElement> importedLibraries = library.importedLibraries; | 6124 List<LibraryElement> importedLibraries = library.importedLibraries; |
| 6125 assertNamedElements(importedLibraries, ["dart.core", "libB"]); | 6125 assertNamedElements(importedLibraries, ["dart.core", "libB"]); |
| 6126 } | 6126 } |
| 6127 } | 6127 } |
| 6128 | 6128 |
| 6129 @ReflectiveTestCase() | 6129 @reflectiveTest |
| 6130 class LibraryScopeTest extends ResolverTestCase { | 6130 class LibraryScopeTest extends ResolverTestCase { |
| 6131 void test_creation_empty() { | 6131 void test_creation_empty() { |
| 6132 LibraryElement definingLibrary = createDefaultTestLibrary(); | 6132 LibraryElement definingLibrary = createDefaultTestLibrary(); |
| 6133 GatheringErrorListener errorListener = new GatheringErrorListener(); | 6133 GatheringErrorListener errorListener = new GatheringErrorListener(); |
| 6134 new LibraryScope(definingLibrary, errorListener); | 6134 new LibraryScope(definingLibrary, errorListener); |
| 6135 } | 6135 } |
| 6136 | 6136 |
| 6137 void test_creation_nonEmpty() { | 6137 void test_creation_nonEmpty() { |
| 6138 AnalysisContext context = new AnalysisContextImpl(); | 6138 AnalysisContext context = new AnalysisContextImpl(); |
| 6139 context.sourceFactory = new SourceFactory([]); | 6139 context.sourceFactory = new SourceFactory([]); |
| (...skipping 16 matching lines...) Expand all Loading... |
| 6156 } | 6156 } |
| 6157 | 6157 |
| 6158 void test_getErrorListener() { | 6158 void test_getErrorListener() { |
| 6159 LibraryElement definingLibrary = createDefaultTestLibrary(); | 6159 LibraryElement definingLibrary = createDefaultTestLibrary(); |
| 6160 GatheringErrorListener errorListener = new GatheringErrorListener(); | 6160 GatheringErrorListener errorListener = new GatheringErrorListener(); |
| 6161 LibraryScope scope = new LibraryScope(definingLibrary, errorListener); | 6161 LibraryScope scope = new LibraryScope(definingLibrary, errorListener); |
| 6162 expect(scope.errorListener, errorListener); | 6162 expect(scope.errorListener, errorListener); |
| 6163 } | 6163 } |
| 6164 } | 6164 } |
| 6165 | 6165 |
| 6166 @ReflectiveTestCase() | 6166 @reflectiveTest |
| 6167 class LibraryTest extends EngineTestCase { | 6167 class LibraryTest extends EngineTestCase { |
| 6168 /** | 6168 /** |
| 6169 * The error listener to which all errors will be reported. | 6169 * The error listener to which all errors will be reported. |
| 6170 */ | 6170 */ |
| 6171 GatheringErrorListener _errorListener; | 6171 GatheringErrorListener _errorListener; |
| 6172 | 6172 |
| 6173 /** | 6173 /** |
| 6174 * The source factory used to create libraries. | 6174 * The source factory used to create libraries. |
| 6175 */ | 6175 */ |
| 6176 SourceFactory _sourceFactory; | 6176 SourceFactory _sourceFactory; |
| (...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6273 } | 6273 } |
| 6274 | 6274 |
| 6275 Library _createLibrary(String definingCompilationUnitPath) => | 6275 Library _createLibrary(String definingCompilationUnitPath) => |
| 6276 new Library( | 6276 new Library( |
| 6277 _analysisContext, | 6277 _analysisContext, |
| 6278 _errorListener, | 6278 _errorListener, |
| 6279 new FileBasedSource.con1( | 6279 new FileBasedSource.con1( |
| 6280 FileUtilities2.createFile(definingCompilationUnitPath))); | 6280 FileUtilities2.createFile(definingCompilationUnitPath))); |
| 6281 } | 6281 } |
| 6282 | 6282 |
| 6283 @ReflectiveTestCase() | 6283 @reflectiveTest |
| 6284 class MemberMapTest { | 6284 class MemberMapTest { |
| 6285 /** | 6285 /** |
| 6286 * The null type. | 6286 * The null type. |
| 6287 */ | 6287 */ |
| 6288 InterfaceType _nullType; | 6288 InterfaceType _nullType; |
| 6289 | 6289 |
| 6290 void setUp() { | 6290 void setUp() { |
| 6291 _nullType = new TestTypeProvider().nullType; | 6291 _nullType = new TestTypeProvider().nullType; |
| 6292 } | 6292 } |
| 6293 | 6293 |
| (...skipping 25 matching lines...) Expand all Loading... |
| 6319 void test_MemberMap_put() { | 6319 void test_MemberMap_put() { |
| 6320 MethodElement m1 = ElementFactory.methodElement("m1", _nullType); | 6320 MethodElement m1 = ElementFactory.methodElement("m1", _nullType); |
| 6321 MemberMap map = new MemberMap(); | 6321 MemberMap map = new MemberMap(); |
| 6322 expect(map.size, 0); | 6322 expect(map.size, 0); |
| 6323 map.put(m1.name, m1); | 6323 map.put(m1.name, m1); |
| 6324 expect(map.size, 1); | 6324 expect(map.size, 1); |
| 6325 expect(map.get("m1"), m1); | 6325 expect(map.get("m1"), m1); |
| 6326 } | 6326 } |
| 6327 } | 6327 } |
| 6328 | 6328 |
| 6329 @ReflectiveTestCase() | 6329 @reflectiveTest |
| 6330 class NonHintCodeTest extends ResolverTestCase { | 6330 class NonHintCodeTest extends ResolverTestCase { |
| 6331 void test_deadCode_deadBlock_conditionalElse_debugConst() { | 6331 void test_deadCode_deadBlock_conditionalElse_debugConst() { |
| 6332 Source source = addSource(r''' | 6332 Source source = addSource(r''' |
| 6333 const bool DEBUG = true; | 6333 const bool DEBUG = true; |
| 6334 f() { | 6334 f() { |
| 6335 DEBUG ? 1 : 2; | 6335 DEBUG ? 1 : 2; |
| 6336 }'''); | 6336 }'''); |
| 6337 resolve(source); | 6337 resolve(source); |
| 6338 assertNoErrors(source); | 6338 assertNoErrors(source); |
| 6339 verify([source]); | 6339 verify([source]); |
| (...skipping 1628 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 7968 | 7968 |
| 7969 @override | 7969 @override |
| 7970 AnalysisErrorListener get errorListener => listener; | 7970 AnalysisErrorListener get errorListener => listener; |
| 7971 | 7971 |
| 7972 @override | 7972 @override |
| 7973 Element internalLookup(Identifier identifier, String name, | 7973 Element internalLookup(Identifier identifier, String name, |
| 7974 LibraryElement referencingLibrary) => | 7974 LibraryElement referencingLibrary) => |
| 7975 null; | 7975 null; |
| 7976 } | 7976 } |
| 7977 | 7977 |
| 7978 @ReflectiveTestCase() | 7978 @reflectiveTest |
| 7979 class ScopeTest extends ResolverTestCase { | 7979 class ScopeTest extends ResolverTestCase { |
| 7980 void test_define_duplicate() { | 7980 void test_define_duplicate() { |
| 7981 GatheringErrorListener errorListener = new GatheringErrorListener(); | 7981 GatheringErrorListener errorListener = new GatheringErrorListener(); |
| 7982 ScopeTest_TestScope scope = new ScopeTest_TestScope(errorListener); | 7982 ScopeTest_TestScope scope = new ScopeTest_TestScope(errorListener); |
| 7983 VariableElement element1 = | 7983 VariableElement element1 = |
| 7984 ElementFactory.localVariableElement(AstFactory.identifier3("v1")); | 7984 ElementFactory.localVariableElement(AstFactory.identifier3("v1")); |
| 7985 VariableElement element2 = | 7985 VariableElement element2 = |
| 7986 ElementFactory.localVariableElement(AstFactory.identifier3("v1")); | 7986 ElementFactory.localVariableElement(AstFactory.identifier3("v1")); |
| 7987 scope.define(element1); | 7987 scope.define(element1); |
| 7988 scope.define(element2); | 7988 scope.define(element2); |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 8026 final AnalysisErrorListener errorListener; | 8026 final AnalysisErrorListener errorListener; |
| 8027 | 8027 |
| 8028 ScopeTest_TestScope(this.errorListener); | 8028 ScopeTest_TestScope(this.errorListener); |
| 8029 | 8029 |
| 8030 @override | 8030 @override |
| 8031 Element internalLookup(Identifier identifier, String name, | 8031 Element internalLookup(Identifier identifier, String name, |
| 8032 LibraryElement referencingLibrary) => | 8032 LibraryElement referencingLibrary) => |
| 8033 localLookup(name, referencingLibrary); | 8033 localLookup(name, referencingLibrary); |
| 8034 } | 8034 } |
| 8035 | 8035 |
| 8036 @ReflectiveTestCase() | 8036 @reflectiveTest |
| 8037 class SimpleResolverTest extends ResolverTestCase { | 8037 class SimpleResolverTest extends ResolverTestCase { |
| 8038 void fail_staticInvocation() { | 8038 void fail_staticInvocation() { |
| 8039 Source source = addSource(r''' | 8039 Source source = addSource(r''' |
| 8040 class A { | 8040 class A { |
| 8041 static int get g => (a,b) => 0; | 8041 static int get g => (a,b) => 0; |
| 8042 } | 8042 } |
| 8043 class B { | 8043 class B { |
| 8044 f() { | 8044 f() { |
| 8045 A.g(1,0); | 8045 A.g(1,0); |
| 8046 } | 8046 } |
| (...skipping 1321 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 9368 } | 9368 } |
| 9369 | 9369 |
| 9370 class SourceContainer_ChangeSetTest_test_toString implements SourceContainer { | 9370 class SourceContainer_ChangeSetTest_test_toString implements SourceContainer { |
| 9371 @override | 9371 @override |
| 9372 bool contains(Source source) => false; | 9372 bool contains(Source source) => false; |
| 9373 } | 9373 } |
| 9374 | 9374 |
| 9375 /** | 9375 /** |
| 9376 * Like [StaticTypeAnalyzerTest], but as end-to-end tests. | 9376 * Like [StaticTypeAnalyzerTest], but as end-to-end tests. |
| 9377 */ | 9377 */ |
| 9378 @ReflectiveTestCase() | 9378 @reflectiveTest |
| 9379 class StaticTypeAnalyzer2Test extends ResolverTestCase { | 9379 class StaticTypeAnalyzer2Test extends ResolverTestCase { |
| 9380 String testCode; | 9380 String testCode; |
| 9381 Source testSource; | 9381 Source testSource; |
| 9382 CompilationUnit testUnit; | 9382 CompilationUnit testUnit; |
| 9383 | 9383 |
| 9384 void test_MethodInvocation_nameType_localVariable() { | 9384 void test_MethodInvocation_nameType_localVariable() { |
| 9385 String code = r""" | 9385 String code = r""" |
| 9386 typedef Foo(); | 9386 typedef Foo(); |
| 9387 main() { | 9387 main() { |
| 9388 Foo foo; | 9388 Foo foo; |
| (...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 9441 void _resolveTestUnit(String code) { | 9441 void _resolveTestUnit(String code) { |
| 9442 testCode = code; | 9442 testCode = code; |
| 9443 testSource = addSource(testCode); | 9443 testSource = addSource(testCode); |
| 9444 LibraryElement library = resolve(testSource); | 9444 LibraryElement library = resolve(testSource); |
| 9445 assertNoErrors(testSource); | 9445 assertNoErrors(testSource); |
| 9446 verify([testSource]); | 9446 verify([testSource]); |
| 9447 testUnit = resolveCompilationUnit(testSource, library); | 9447 testUnit = resolveCompilationUnit(testSource, library); |
| 9448 } | 9448 } |
| 9449 } | 9449 } |
| 9450 | 9450 |
| 9451 @ReflectiveTestCase() | 9451 @reflectiveTest |
| 9452 class StaticTypeAnalyzerTest extends EngineTestCase { | 9452 class StaticTypeAnalyzerTest extends EngineTestCase { |
| 9453 /** | 9453 /** |
| 9454 * The error listener to which errors will be reported. | 9454 * The error listener to which errors will be reported. |
| 9455 */ | 9455 */ |
| 9456 GatheringErrorListener _listener; | 9456 GatheringErrorListener _listener; |
| 9457 | 9457 |
| 9458 /** | 9458 /** |
| 9459 * The resolver visitor used to create the analyzer. | 9459 * The resolver visitor used to create the analyzer. |
| 9460 */ | 9460 */ |
| 9461 ResolverVisitor _visitor; | 9461 ResolverVisitor _visitor; |
| (...skipping 1398 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 10860 } | 10860 } |
| 10861 } | 10861 } |
| 10862 return "<unknown file- ASTNode is null>"; | 10862 return "<unknown file- ASTNode is null>"; |
| 10863 } | 10863 } |
| 10864 } | 10864 } |
| 10865 | 10865 |
| 10866 /** | 10866 /** |
| 10867 * The class `StrictModeTest` contains tests to ensure that the correct errors a
nd warnings | 10867 * The class `StrictModeTest` contains tests to ensure that the correct errors a
nd warnings |
| 10868 * are reported when the analysis engine is run in strict mode. | 10868 * are reported when the analysis engine is run in strict mode. |
| 10869 */ | 10869 */ |
| 10870 @ReflectiveTestCase() | 10870 @reflectiveTest |
| 10871 class StrictModeTest extends ResolverTestCase { | 10871 class StrictModeTest extends ResolverTestCase { |
| 10872 void fail_for() { | 10872 void fail_for() { |
| 10873 Source source = addSource(r''' | 10873 Source source = addSource(r''' |
| 10874 int f(List<int> list) { | 10874 int f(List<int> list) { |
| 10875 num sum = 0; | 10875 num sum = 0; |
| 10876 for (num i = 0; i < list.length; i++) { | 10876 for (num i = 0; i < list.length; i++) { |
| 10877 sum += list[i]; | 10877 sum += list[i]; |
| 10878 } | 10878 } |
| 10879 }'''); | 10879 }'''); |
| 10880 resolve(source); | 10880 resolve(source); |
| (...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 11012 Source source = addSource(r''' | 11012 Source source = addSource(r''' |
| 11013 int f() { | 11013 int f() { |
| 11014 num n = 1234; | 11014 num n = 1234; |
| 11015 return n & 0x0F; | 11015 return n & 0x0F; |
| 11016 }'''); | 11016 }'''); |
| 11017 resolve(source); | 11017 resolve(source); |
| 11018 assertErrors(source, [StaticTypeWarningCode.UNDEFINED_OPERATOR]); | 11018 assertErrors(source, [StaticTypeWarningCode.UNDEFINED_OPERATOR]); |
| 11019 } | 11019 } |
| 11020 } | 11020 } |
| 11021 | 11021 |
| 11022 @ReflectiveTestCase() | 11022 @reflectiveTest |
| 11023 class SubtypeManagerTest extends EngineTestCase { | 11023 class SubtypeManagerTest extends EngineTestCase { |
| 11024 /** | 11024 /** |
| 11025 * The inheritance manager being tested. | 11025 * The inheritance manager being tested. |
| 11026 */ | 11026 */ |
| 11027 SubtypeManager _subtypeManager; | 11027 SubtypeManager _subtypeManager; |
| 11028 | 11028 |
| 11029 /** | 11029 /** |
| 11030 * The compilation unit element containing all of the types setup in each test
. | 11030 * The compilation unit element containing all of the types setup in each test
. |
| 11031 */ | 11031 */ |
| 11032 CompilationUnitElementImpl _definingCompilationUnit; | 11032 CompilationUnitElementImpl _definingCompilationUnit; |
| (...skipping 545 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 11578 FunctionTypeImpl functionType = method.type as FunctionTypeImpl; | 11578 FunctionTypeImpl functionType = method.type as FunctionTypeImpl; |
| 11579 functionType.typeArguments = typeArguments; | 11579 functionType.typeArguments = typeArguments; |
| 11580 } | 11580 } |
| 11581 for (ConstructorElement constructor in classElement.constructors) { | 11581 for (ConstructorElement constructor in classElement.constructors) { |
| 11582 FunctionTypeImpl functionType = constructor.type as FunctionTypeImpl; | 11582 FunctionTypeImpl functionType = constructor.type as FunctionTypeImpl; |
| 11583 functionType.typeArguments = typeArguments; | 11583 functionType.typeArguments = typeArguments; |
| 11584 } | 11584 } |
| 11585 } | 11585 } |
| 11586 } | 11586 } |
| 11587 | 11587 |
| 11588 @ReflectiveTestCase() | 11588 @reflectiveTest |
| 11589 class TypeOverrideManagerTest extends EngineTestCase { | 11589 class TypeOverrideManagerTest extends EngineTestCase { |
| 11590 void test_exitScope_noScopes() { | 11590 void test_exitScope_noScopes() { |
| 11591 TypeOverrideManager manager = new TypeOverrideManager(); | 11591 TypeOverrideManager manager = new TypeOverrideManager(); |
| 11592 try { | 11592 try { |
| 11593 manager.exitScope(); | 11593 manager.exitScope(); |
| 11594 fail("Expected IllegalStateException"); | 11594 fail("Expected IllegalStateException"); |
| 11595 } on IllegalStateException catch (exception) { | 11595 } on IllegalStateException catch (exception) { |
| 11596 // Expected | 11596 // Expected |
| 11597 } | 11597 } |
| 11598 } | 11598 } |
| (...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 11649 manager.enterScope(); | 11649 manager.enterScope(); |
| 11650 expect(manager.getType(ElementFactory.localVariableElement2("v")), isNull); | 11650 expect(manager.getType(ElementFactory.localVariableElement2("v")), isNull); |
| 11651 } | 11651 } |
| 11652 | 11652 |
| 11653 void test_getType_noScope() { | 11653 void test_getType_noScope() { |
| 11654 TypeOverrideManager manager = new TypeOverrideManager(); | 11654 TypeOverrideManager manager = new TypeOverrideManager(); |
| 11655 expect(manager.getType(ElementFactory.localVariableElement2("v")), isNull); | 11655 expect(manager.getType(ElementFactory.localVariableElement2("v")), isNull); |
| 11656 } | 11656 } |
| 11657 } | 11657 } |
| 11658 | 11658 |
| 11659 @ReflectiveTestCase() | 11659 @reflectiveTest |
| 11660 class TypePropagationTest extends ResolverTestCase { | 11660 class TypePropagationTest extends ResolverTestCase { |
| 11661 void fail_mergePropagatedTypesAtJoinPoint_1() { | 11661 void fail_mergePropagatedTypesAtJoinPoint_1() { |
| 11662 // https://code.google.com/p/dart/issues/detail?id=19929 | 11662 // https://code.google.com/p/dart/issues/detail?id=19929 |
| 11663 _assertTypeOfMarkedExpression(r''' | 11663 _assertTypeOfMarkedExpression(r''' |
| 11664 f1(x) { | 11664 f1(x) { |
| 11665 var y = []; | 11665 var y = []; |
| 11666 if (x) { | 11666 if (x) { |
| 11667 y = 0; | 11667 y = 0; |
| 11668 } else { | 11668 } else { |
| 11669 y = ''; | 11669 y = ''; |
| (...skipping 1455 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 13125 // assertion failure here should be a failure, in both "test_*" and | 13125 // assertion failure here should be a failure, in both "test_*" and |
| 13126 // "fail_*" tests. However, an assertion failure is success for the | 13126 // "fail_*" tests. However, an assertion failure is success for the |
| 13127 // purpose of "fail_*" tests, so without catching them here "fail_*" tests | 13127 // purpose of "fail_*" tests, so without catching them here "fail_*" tests |
| 13128 // can succeed by failing for the wrong reason. | 13128 // can succeed by failing for the wrong reason. |
| 13129 throw new JavaException("Unexexpected assertion failure: $exception"); | 13129 throw new JavaException("Unexexpected assertion failure: $exception"); |
| 13130 } | 13130 } |
| 13131 } | 13131 } |
| 13132 } | 13132 } |
| 13133 | 13133 |
| 13134 | 13134 |
| 13135 @ReflectiveTestCase() | 13135 @reflectiveTest |
| 13136 class TypeProviderImplTest extends EngineTestCase { | 13136 class TypeProviderImplTest extends EngineTestCase { |
| 13137 void test_creation() { | 13137 void test_creation() { |
| 13138 // | 13138 // |
| 13139 // Create a mock library element with the types expected to be in dart:core. | 13139 // Create a mock library element with the types expected to be in dart:core. |
| 13140 // We cannot use either ElementFactory or TestTypeProvider (which uses | 13140 // We cannot use either ElementFactory or TestTypeProvider (which uses |
| 13141 // ElementFactory) because we side-effect the elements in ways that would | 13141 // ElementFactory) because we side-effect the elements in ways that would |
| 13142 // break other tests. | 13142 // break other tests. |
| 13143 // | 13143 // |
| 13144 InterfaceType objectType = _classElement("Object", null).type; | 13144 InterfaceType objectType = _classElement("Object", null).type; |
| 13145 InterfaceType boolType = _classElement("bool", objectType).type; | 13145 InterfaceType boolType = _classElement("bool", objectType).type; |
| (...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 13212 typeParameter.type = typeArguments[i]; | 13212 typeParameter.type = typeArguments[i]; |
| 13213 } | 13213 } |
| 13214 element.typeParameters = typeParameters; | 13214 element.typeParameters = typeParameters; |
| 13215 type.typeArguments = typeArguments; | 13215 type.typeArguments = typeArguments; |
| 13216 } | 13216 } |
| 13217 } | 13217 } |
| 13218 return element; | 13218 return element; |
| 13219 } | 13219 } |
| 13220 } | 13220 } |
| 13221 | 13221 |
| 13222 @ReflectiveTestCase() | 13222 @reflectiveTest |
| 13223 class TypeResolverVisitorTest extends EngineTestCase { | 13223 class TypeResolverVisitorTest extends EngineTestCase { |
| 13224 /** | 13224 /** |
| 13225 * The error listener to which errors will be reported. | 13225 * The error listener to which errors will be reported. |
| 13226 */ | 13226 */ |
| 13227 GatheringErrorListener _listener; | 13227 GatheringErrorListener _listener; |
| 13228 | 13228 |
| 13229 /** | 13229 /** |
| 13230 * The object representing the information about the library in which the type
s are being | 13230 * The object representing the information about the library in which the type
s are being |
| 13231 * resolved. | 13231 * resolved. |
| 13232 */ | 13232 */ |
| (...skipping 578 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 13811 // check propagated type | 13811 // check propagated type |
| 13812 FunctionType propagatedType = node.propagatedType as FunctionType; | 13812 FunctionType propagatedType = node.propagatedType as FunctionType; |
| 13813 expect(propagatedType.returnType, test.typeProvider.stringType); | 13813 expect(propagatedType.returnType, test.typeProvider.stringType); |
| 13814 } on AnalysisException catch (e, stackTrace) { | 13814 } on AnalysisException catch (e, stackTrace) { |
| 13815 thrownException[0] = new CaughtException(e, stackTrace); | 13815 thrownException[0] = new CaughtException(e, stackTrace); |
| 13816 } | 13816 } |
| 13817 } | 13817 } |
| 13818 return null; | 13818 return null; |
| 13819 } | 13819 } |
| 13820 } | 13820 } |
| OLD | NEW |