Index: pkg/analyzer/test/src/context/context_test.dart |
diff --git a/pkg/analyzer/test/src/context/context_test.dart b/pkg/analyzer/test/src/context/context_test.dart |
index 92d552fd8d2c08489febea6ab0e1f0d88be6bde7..a4764b8e47661802f9977852b4af9085e49764a7 100644 |
--- a/pkg/analyzer/test/src/context/context_test.dart |
+++ b/pkg/analyzer/test/src/context/context_test.dart |
@@ -5,7 +5,6 @@ |
library test.src.context.context_test; |
import 'dart:async'; |
-import 'dart:collection'; |
import 'package:analyzer/src/cancelable_future.dart'; |
import 'package:analyzer/src/context/cache.dart'; |
@@ -38,12 +37,7 @@ import 'package:analyzer/src/generated/sdk.dart'; |
import 'package:analyzer/src/generated/sdk_io.dart'; |
import 'package:analyzer/src/generated/source.dart'; |
import 'package:analyzer/src/generated/source_io.dart'; |
-import 'package:analyzer/src/generated/testing/ast_factory.dart'; |
-import 'package:analyzer/src/generated/testing/element_factory.dart'; |
-import 'package:analyzer/src/generated/testing/test_type_provider.dart'; |
-import 'package:analyzer/src/generated/utilities_dart.dart'; |
import 'package:analyzer/src/plugin/engine_plugin.dart'; |
-import 'package:analyzer/task/dart.dart'; |
import 'package:plugin/manager.dart'; |
import 'package:unittest/unittest.dart'; |
import 'package:watcher/src/utils.dart'; |
@@ -72,7 +66,6 @@ class AnalysisContextForTests extends AnalysisContextImpl { |
SourceFactory sourceFactory = |
new SourceFactory([new DartUriResolver(sdk), new FileUriResolver()]); |
this.sourceFactory = sourceFactory; |
-// initWithCore(); |
} |
@override |
@@ -119,266 +112,15 @@ class AnalysisContextForTests extends AnalysisContextImpl { |
return super.getModificationStamp(source); |
} |
- /** |
- * Initialize the given analysis context with a fake core library already resolved. |
- * |
- * @param context the context to be initialized (not `null`) |
- * @return the analysis context that was created |
- */ |
- void initWithCore() { |
- AnalysisContext coreContext = sourceFactory.dartSdk.context; |
- // |
- // dart:core |
- // |
- TestTypeProvider provider = new TestTypeProvider(); |
- typeProvider = provider; |
- CompilationUnitElementImpl coreUnit = |
- new CompilationUnitElementImpl("core.dart"); |
- Source coreSource = sourceFactory.forUri(DartSdk.DART_CORE); |
- coreContext.setContents(coreSource, ""); |
- coreUnit.source = coreSource; |
- ClassElementImpl proxyClassElement = ElementFactory.classElement2("_Proxy"); |
- coreUnit.types = <ClassElement>[ |
- provider.boolType.element, |
- provider.deprecatedType.element, |
- provider.doubleType.element, |
- provider.functionType.element, |
- provider.intType.element, |
- provider.iterableType.element, |
- provider.iteratorType.element, |
- provider.listType.element, |
- provider.mapType.element, |
- provider.nullType.element, |
- provider.numType.element, |
- provider.objectType.element, |
- proxyClassElement, |
- provider.stackTraceType.element, |
- provider.stringType.element, |
- provider.symbolType.element, |
- provider.typeType.element |
- ]; |
- coreUnit.functions = <FunctionElement>[ |
- ElementFactory.functionElement3("identical", provider.boolType.element, |
- <ClassElement>[ |
- provider.objectType.element, |
- provider.objectType.element |
- ], null), |
- ElementFactory.functionElement3("print", VoidTypeImpl.instance.element, |
- <ClassElement>[provider.objectType.element], null) |
- ]; |
- TopLevelVariableElement proxyTopLevelVariableElt = ElementFactory |
- .topLevelVariableElement3("proxy", true, false, proxyClassElement.type); |
- TopLevelVariableElement deprecatedTopLevelVariableElt = ElementFactory |
- .topLevelVariableElement3( |
- "deprecated", true, false, provider.deprecatedType); |
- coreUnit.accessors = <PropertyAccessorElement>[ |
- proxyTopLevelVariableElt.getter, |
- deprecatedTopLevelVariableElt.getter |
- ]; |
- coreUnit.topLevelVariables = <TopLevelVariableElement>[ |
- proxyTopLevelVariableElt, |
- deprecatedTopLevelVariableElt |
- ]; |
- LibraryElementImpl coreLibrary = new LibraryElementImpl.forNode( |
- coreContext, AstFactory.libraryIdentifier2(["dart", "core"])); |
- coreLibrary.definingCompilationUnit = coreUnit; |
- // |
- // dart:async |
- // |
- CompilationUnitElementImpl asyncUnit = |
- new CompilationUnitElementImpl("async.dart"); |
- Source asyncSource = sourceFactory.forUri(DartSdk.DART_ASYNC); |
- coreContext.setContents(asyncSource, ""); |
- asyncUnit.source = asyncSource; |
- // Future |
- ClassElementImpl futureElement = |
- ElementFactory.classElement2("Future", ["T"]); |
- InterfaceType futureType = futureElement.type; |
- // factory Future.value([value]) |
- ConstructorElementImpl futureConstructor = |
- ElementFactory.constructorElement2(futureElement, "value"); |
- futureConstructor.parameters = <ParameterElement>[ |
- ElementFactory.positionalParameter2("value", provider.dynamicType) |
- ]; |
- futureConstructor.factory = true; |
- (futureConstructor.type as FunctionTypeImpl).typeArguments = |
- futureElement.type.typeArguments; |
- futureElement.constructors = <ConstructorElement>[futureConstructor]; |
- // Future then(onValue(T value), { Function onError }); |
- List<ParameterElement> parameters = <ParameterElement>[ |
- ElementFactory.requiredParameter2( |
- "value", futureElement.typeParameters[0].type) |
- ]; |
- FunctionTypeAliasElementImpl aliasElement = |
- new FunctionTypeAliasElementImpl.forNode(null); |
- aliasElement.synthetic = true; |
- aliasElement.parameters = parameters; |
- aliasElement.returnType = provider.dynamicType; |
- aliasElement.enclosingElement = asyncUnit; |
- FunctionTypeImpl aliasType = new FunctionTypeImpl.con2(aliasElement); |
- aliasElement.shareTypeParameters(futureElement.typeParameters); |
- aliasType.typeArguments = futureElement.type.typeArguments; |
- MethodElement thenMethod = ElementFactory.methodElementWithParameters( |
- "then", futureElement.type.typeArguments, futureType, [ |
- ElementFactory.requiredParameter2("onValue", aliasType), |
- ElementFactory.namedParameter2("onError", provider.functionType) |
- ]); |
- futureElement.methods = <MethodElement>[thenMethod]; |
- // Completer |
- ClassElementImpl completerElement = |
- ElementFactory.classElement2("Completer", ["T"]); |
- ConstructorElementImpl completerConstructor = |
- ElementFactory.constructorElement2(completerElement, null); |
- (completerConstructor.type as FunctionTypeImpl).typeArguments = |
- completerElement.type.typeArguments; |
- completerElement.constructors = <ConstructorElement>[completerConstructor]; |
- asyncUnit.types = <ClassElement>[ |
- completerElement, |
- futureElement, |
- ElementFactory.classElement2("Stream", ["T"]) |
- ]; |
- LibraryElementImpl asyncLibrary = new LibraryElementImpl.forNode( |
- coreContext, AstFactory.libraryIdentifier2(["dart", "async"])); |
- asyncLibrary.definingCompilationUnit = asyncUnit; |
- // |
- // dart:html |
- // |
- CompilationUnitElementImpl htmlUnit = |
- new CompilationUnitElementImpl("html_dartium.dart"); |
- Source htmlSource = sourceFactory.forUri(DartSdk.DART_HTML); |
- coreContext.setContents(htmlSource, ""); |
- htmlUnit.source = htmlSource; |
- ClassElementImpl elementElement = ElementFactory.classElement2("Element"); |
- InterfaceType elementType = elementElement.type; |
- ClassElementImpl canvasElement = |
- ElementFactory.classElement("CanvasElement", elementType); |
- ClassElementImpl contextElement = |
- ElementFactory.classElement2("CanvasRenderingContext"); |
- InterfaceType contextElementType = contextElement.type; |
- ClassElementImpl context2dElement = ElementFactory.classElement( |
- "CanvasRenderingContext2D", contextElementType); |
- canvasElement.methods = <MethodElement>[ |
- ElementFactory.methodElement( |
- "getContext", contextElementType, [provider.stringType]) |
- ]; |
- canvasElement.accessors = <PropertyAccessorElement>[ |
- ElementFactory.getterElement("context2D", false, context2dElement.type) |
- ]; |
- canvasElement.fields = canvasElement.accessors |
- .map((PropertyAccessorElement accessor) => accessor.variable) |
- .toList(); |
- ClassElementImpl documentElement = |
- ElementFactory.classElement("Document", elementType); |
- ClassElementImpl htmlDocumentElement = |
- ElementFactory.classElement("HtmlDocument", documentElement.type); |
- htmlDocumentElement.methods = <MethodElement>[ |
- ElementFactory.methodElement( |
- "query", elementType, <DartType>[provider.stringType]) |
- ]; |
- htmlUnit.types = <ClassElement>[ |
- ElementFactory.classElement("AnchorElement", elementType), |
- ElementFactory.classElement("BodyElement", elementType), |
- ElementFactory.classElement("ButtonElement", elementType), |
- canvasElement, |
- contextElement, |
- context2dElement, |
- ElementFactory.classElement("DivElement", elementType), |
- documentElement, |
- elementElement, |
- htmlDocumentElement, |
- ElementFactory.classElement("InputElement", elementType), |
- ElementFactory.classElement("SelectElement", elementType) |
- ]; |
- htmlUnit.functions = <FunctionElement>[ |
- ElementFactory.functionElement3("query", elementElement, |
- <ClassElement>[provider.stringType.element], ClassElement.EMPTY_LIST) |
- ]; |
- TopLevelVariableElementImpl document = ElementFactory |
- .topLevelVariableElement3( |
- "document", false, true, htmlDocumentElement.type); |
- htmlUnit.topLevelVariables = <TopLevelVariableElement>[document]; |
- htmlUnit.accessors = <PropertyAccessorElement>[document.getter]; |
- LibraryElementImpl htmlLibrary = new LibraryElementImpl.forNode( |
- coreContext, AstFactory.libraryIdentifier2(["dart", "dom", "html"])); |
- htmlLibrary.definingCompilationUnit = htmlUnit; |
- // |
- // dart:math |
- // |
- CompilationUnitElementImpl mathUnit = |
- new CompilationUnitElementImpl("math.dart"); |
- Source mathSource = sourceFactory.forUri("dart:math"); |
- coreContext.setContents(mathSource, ""); |
- mathUnit.source = mathSource; |
- FunctionElement cosElement = ElementFactory.functionElement3("cos", |
- provider.doubleType.element, <ClassElement>[provider.numType.element], |
- ClassElement.EMPTY_LIST); |
- TopLevelVariableElement ln10Element = ElementFactory |
- .topLevelVariableElement3("LN10", true, false, provider.doubleType); |
- TopLevelVariableElement piElement = ElementFactory.topLevelVariableElement3( |
- "PI", true, false, provider.doubleType); |
- ClassElementImpl randomElement = ElementFactory.classElement2("Random"); |
- randomElement.abstract = true; |
- ConstructorElementImpl randomConstructor = |
- ElementFactory.constructorElement2(randomElement, null); |
- randomConstructor.factory = true; |
- ParameterElementImpl seedParam = new ParameterElementImpl("seed", 0); |
- seedParam.parameterKind = ParameterKind.POSITIONAL; |
- seedParam.type = provider.intType; |
- randomConstructor.parameters = <ParameterElement>[seedParam]; |
- randomElement.constructors = <ConstructorElement>[randomConstructor]; |
- FunctionElement sinElement = ElementFactory.functionElement3("sin", |
- provider.doubleType.element, <ClassElement>[provider.numType.element], |
- ClassElement.EMPTY_LIST); |
- FunctionElement sqrtElement = ElementFactory.functionElement3("sqrt", |
- provider.doubleType.element, <ClassElement>[provider.numType.element], |
- ClassElement.EMPTY_LIST); |
- mathUnit.accessors = <PropertyAccessorElement>[ |
- ln10Element.getter, |
- piElement.getter |
- ]; |
- mathUnit.functions = <FunctionElement>[cosElement, sinElement, sqrtElement]; |
- mathUnit.topLevelVariables = <TopLevelVariableElement>[ |
- ln10Element, |
- piElement |
- ]; |
- mathUnit.types = <ClassElement>[randomElement]; |
- LibraryElementImpl mathLibrary = new LibraryElementImpl.forNode( |
- coreContext, AstFactory.libraryIdentifier2(["dart", "math"])); |
- mathLibrary.definingCompilationUnit = mathUnit; |
- // |
- // Set empty sources for the rest of the libraries. |
- // |
- Source source = sourceFactory.forUri("dart:_interceptors"); |
- coreContext.setContents(source, ""); |
- source = sourceFactory.forUri("dart:_js_helper"); |
- coreContext.setContents(source, ""); |
- // |
- // Record the elements. |
- // |
- HashMap<Source, LibraryElement> elementMap = |
- new HashMap<Source, LibraryElement>(); |
- elementMap[coreSource] = coreLibrary; |
- elementMap[asyncSource] = asyncLibrary; |
- elementMap[htmlSource] = htmlLibrary; |
- elementMap[mathSource] = mathLibrary; |
- recordLibraryElements(elementMap); |
- elementMap.forEach((Source librarySource, LibraryElement library) { |
- CompilationUnit unit = new CompilationUnit(null, null, null, null, null); |
- unit.element = library.definingCompilationUnit; |
- CacheEntry entry = getCacheEntry(librarySource); |
- entry.setValue(PARSED_UNIT, unit, TargetedResult.EMPTY_LIST, null); |
- }); |
- } |
- |
- /** |
- * Set the analysis options, even if they would force re-analysis. This method should only be |
- * invoked before the fake SDK is initialized. |
- * |
- * @param options the analysis options to be set |
- */ |
- void _internalSetAnalysisOptions(AnalysisOptions options) { |
- super.analysisOptions = options; |
- } |
+// /** |
+// * Set the analysis options, even if they would force re-analysis. This method should only be |
+// * invoked before the fake SDK is initialized. |
+// * |
+// * @param options the analysis options to be set |
+// */ |
+// void _internalSetAnalysisOptions(AnalysisOptions options) { |
+// super.analysisOptions = options; |
+// } |
} |
@reflectiveTest |
@@ -397,8 +139,8 @@ class AnalysisContextImplTest extends EngineTestCase { |
_context.applyChanges(new ChangeSet()); |
expect(_context.performAnalysisTask().changeNotices, isNull); |
// This test appears to be flaky. If it is named "test_" it fails, if it's |
- // named "fail_" it doesn't fail. I'm guessing that it's dependent on some |
- // other test being run (or not). |
+ // named "fail_" it doesn't fail. I'm guessing that it's dependent on |
+ // whether some other test is run. |
fail('Should have failed'); |
} |
@@ -524,11 +266,15 @@ import 'libB.dart';'''; |
} |
void fail_computeImportedLibraries_none() { |
+ // This is failing because computeImportedLibraries now always includes |
+ // dart:core, and we don't have any way of knowing whether it was explicit. |
Source source = _addSource("/test.dart", "library test;"); |
expect(_context.computeImportedLibraries(source), hasLength(0)); |
} |
void fail_computeImportedLibraries_some() { |
+ // This is failing because computeImportedLibraries now always includes |
+ // dart:core, and we don't have any way of knowing whether it was explicit. |
// addSource("/lib1.dart", "library lib1;"); |
// addSource("/lib2.dart", "library lib2;"); |
Source source = _addSource( |
@@ -536,7 +282,7 @@ import 'libB.dart';'''; |
expect(_context.computeImportedLibraries(source), hasLength(2)); |
} |
- void fail_computeKindOf_html() { |
+ void test_computeKindOf_html() { |
Source source = _addSource("/test.html", ""); |
expect(_context.computeKindOf(source), same(SourceKind.HTML)); |
} |
@@ -610,9 +356,7 @@ import 'libB.dart';'''; |
_context |
.computeResolvedCompilationUnitAsync(partSource, librarySource) |
.then((_) { |
- // TODO(brianwilkerson) Uncomment the line below (and figure out why |
- // invoking 'fail' directly causes a failing test to fail. |
- //fail('Expected resolution to fail'); |
+ fail('Expected resolution to fail'); |
}, onError: (e) { |
expect(e, new isInstanceOf<AnalysisNotScheduledError>()); |
completed = true; |
@@ -768,12 +512,12 @@ class A { |
expect(sources[0], source); |
} |
- void fail_getKindOf_html() { |
+ void test_getKindOf_html() { |
Source source = _addSource("/test.html", ""); |
expect(_context.getKindOf(source), same(SourceKind.HTML)); |
} |
- void fail_getLibrariesContaining() { |
+ void test_getLibrariesContaining() { |
_context = contextWithCore(); |
_sourceFactory = _context.sourceFactory; |
Source librarySource = _addSource("/lib.dart", r''' |
@@ -1383,13 +1127,13 @@ library test2;'''); |
Future test_applyChanges_add() { |
SourcesChangedListener listener = new SourcesChangedListener(); |
_context.onSourcesChanged.listen(listener.onData); |
- expect(_context.sourcesNeedingProcessing.isEmpty, isTrue); |
+ expect(_context.sourcesNeedingProcessing, isEmpty); |
Source source = |
new FileBasedSource.con1(FileUtilities2.createFile("/test.dart")); |
ChangeSet changeSet = new ChangeSet(); |
changeSet.addedSource(source); |
_context.applyChanges(changeSet); |
- expect(_context.sourcesNeedingProcessing.contains(source), isTrue); |
+ expect(_context.sourcesNeedingProcessing, contains(source)); |
return pumpEventQueue().then((_) { |
listener.assertEvent(wereSourcesAdded: true); |
listener.assertNoMoreEvents(); |
@@ -1399,13 +1143,13 @@ library test2;'''); |
Future test_applyChanges_change() { |
SourcesChangedListener listener = new SourcesChangedListener(); |
_context.onSourcesChanged.listen(listener.onData); |
- expect(_context.sourcesNeedingProcessing.isEmpty, isTrue); |
+ expect(_context.sourcesNeedingProcessing, isEmpty); |
Source source = |
new FileBasedSource.con1(FileUtilities2.createFile("/test.dart")); |
ChangeSet changeSet1 = new ChangeSet(); |
changeSet1.addedSource(source); |
_context.applyChanges(changeSet1); |
- expect(_context.sourcesNeedingProcessing.contains(source), isTrue); |
+ expect(_context.sourcesNeedingProcessing, contains(source)); |
Source source2 = |
new FileBasedSource.con1(FileUtilities2.createFile("/test2.dart")); |
ChangeSet changeSet2 = new ChangeSet(); |
@@ -1422,13 +1166,13 @@ library test2;'''); |
Future test_applyChanges_change_content() { |
SourcesChangedListener listener = new SourcesChangedListener(); |
_context.onSourcesChanged.listen(listener.onData); |
- expect(_context.sourcesNeedingProcessing.isEmpty, isTrue); |
+ expect(_context.sourcesNeedingProcessing, isEmpty); |
Source source = |
new FileBasedSource.con1(FileUtilities2.createFile("/test.dart")); |
ChangeSet changeSet1 = new ChangeSet(); |
changeSet1.addedSource(source); |
_context.applyChanges(changeSet1); |
- expect(_context.sourcesNeedingProcessing.contains(source), isTrue); |
+ expect(_context.sourcesNeedingProcessing, contains(source)); |
Source source2 = |
new FileBasedSource.con1(FileUtilities2.createFile("/test2.dart")); |
ChangeSet changeSet2 = new ChangeSet(); |
@@ -1509,13 +1253,13 @@ int b = aa;'''; |
Future test_applyChanges_change_range() { |
SourcesChangedListener listener = new SourcesChangedListener(); |
_context.onSourcesChanged.listen(listener.onData); |
- expect(_context.sourcesNeedingProcessing.isEmpty, isTrue); |
+ expect(_context.sourcesNeedingProcessing, isEmpty); |
Source source = |
new FileBasedSource.con1(FileUtilities2.createFile("/test.dart")); |
ChangeSet changeSet1 = new ChangeSet(); |
changeSet1.addedSource(source); |
_context.applyChanges(changeSet1); |
- expect(_context.sourcesNeedingProcessing.contains(source), isTrue); |
+ expect(_context.sourcesNeedingProcessing, contains(source)); |
Source source2 = |
new FileBasedSource.con1(FileUtilities2.createFile("/test2.dart")); |
ChangeSet changeSet2 = new ChangeSet(); |
@@ -2280,13 +2024,13 @@ int a = 0;'''); |
} |
void test_updateAnalysis() { |
- expect(_context.sourcesNeedingProcessing.isEmpty, isTrue); |
+ expect(_context.sourcesNeedingProcessing, isEmpty); |
Source source = |
new FileBasedSource.con1(FileUtilities2.createFile("/test.dart")); |
AnalysisDelta delta = new AnalysisDelta(); |
delta.setAnalysisLevel(source, AnalysisLevel.ALL); |
_context.applyAnalysisDelta(delta); |
- expect(_context.sourcesNeedingProcessing.contains(source), isTrue); |
+ expect(_context.sourcesNeedingProcessing, contains(source)); |
delta = new AnalysisDelta(); |
delta.setAnalysisLevel(source, AnalysisLevel.NONE); |
_context.applyAnalysisDelta(delta); |