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

Unified Diff: pkg/analyzer/test/src/task/dart_test.dart

Issue 998053002: Task: Build Public Namespace. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 5 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « pkg/analyzer/lib/task/dart.dart ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: pkg/analyzer/test/src/task/dart_test.dart
diff --git a/pkg/analyzer/test/src/task/dart_test.dart b/pkg/analyzer/test/src/task/dart_test.dart
index 5f5409eb45d3537e156f84a873b9dc952b5c9839..da1b2169211d4890131923bd25d854fba6add04b 100644
--- a/pkg/analyzer/test/src/task/dart_test.dart
+++ b/pkg/analyzer/test/src/task/dart_test.dart
@@ -32,6 +32,7 @@ main() {
groupSep = ' | ';
runReflectiveTests(BuildCompilationUnitElementTaskTest);
runReflectiveTests(BuildLibraryElementTaskTest);
+ runReflectiveTests(BuildPublicNamespaceTaskTest);
runReflectiveTests(ParseDartTaskTest);
runReflectiveTests(ScanDartTaskTest);
}
@@ -42,10 +43,8 @@ class BuildCompilationUnitElementTaskTest extends EngineTestCase {
AnalysisTarget target = new TestSource();
Map<String, TaskInput> inputs =
BuildCompilationUnitElementTask.buildInputs(target);
- expect(inputs, isNotNull);
- expect(inputs, hasLength(1));
- expect(inputs[BuildCompilationUnitElementTask.PARSED_UNIT_INPUT_NAME],
- isNotNull);
+ expect(inputs.keys, unorderedEquals(
+ [BuildCompilationUnitElementTask.PARSED_UNIT_INPUT_NAME]));
}
test_constructor() {
@@ -125,27 +124,14 @@ class A {''');
}
@reflectiveTest
-class BuildLibraryElementTaskTest extends EngineTestCase {
- MemoryResourceProvider resourceProvider = new MemoryResourceProvider();
- InternalAnalysisContext context = AnalysisContextFactory.contextWithCore();
-
+class BuildLibraryElementTaskTest extends _AbstractDartTaskTest {
Source librarySource;
CompilationUnit libraryUnit;
CompilationUnitElement libraryUnitElement;
List<CompilationUnit> partUnits;
- BuildLibraryElementTask task;
- Map<ResultDescriptor<dynamic>, dynamic> outputs;
LibraryElement libraryElement;
- void setUp() {
- DartSdk sdk = context.sourceFactory.dartSdk;
- context.sourceFactory = new SourceFactory(<UriResolver>[
- new DartUriResolver(sdk),
- new ResourceUriResolver(resourceProvider)
- ]);
- }
-
test_buildInputs() {
ExtendedAnalysisContext context = new _MockContext();
// prepare sources
@@ -373,54 +359,92 @@ void set test(_) {}
errorListener.assertErrorsWithCodes(expectedErrorCodes);
}
- CompilationUnit _buildCompilationUnit(
- InternalAnalysisContext context, String path, String content) {
- File file = resourceProvider.newFile(path, content);
- Source source = file.createSource();
-
- ScanDartTask scanTask = new ScanDartTask(context, source);
- scanTask.inputs = {ScanDartTask.CONTENT_INPUT_NAME: content};
- scanTask.perform();
- Map<ResultDescriptor, dynamic> scanOutputs = scanTask.outputs;
-
- ParseDartTask parseTask = new ParseDartTask(context, source);
- parseTask.inputs = {
- ParseDartTask.LINE_INFO_INPUT_NAME: scanOutputs[LINE_INFO],
- ParseDartTask.TOKEN_STREAM_INPUT_NAME: scanOutputs[TOKEN_STREAM]
- };
- parseTask.perform();
- Map<ResultDescriptor, dynamic> parseOutputs = parseTask.outputs;
-
- BuildCompilationUnitElementTask buildTask =
- new BuildCompilationUnitElementTask(context, source);
- buildTask.inputs = {
- BuildCompilationUnitElementTask.PARSED_UNIT_INPUT_NAME:
- parseOutputs[PARSED_UNIT]
- };
- buildTask.perform();
- return buildTask.outputs[BUILT_UNIT];
- }
-
void _performBuildTask(Map<String, String> sourceMap) {
+ _BuildLibraryElementTaskResult result = _buildLibraryElement(sourceMap);
Map<String, CompilationUnit> unitMap = <String, CompilationUnit>{};
sourceMap.forEach((String path, String content) {
- CompilationUnit unit = _buildCompilationUnit(context, path, content);
+ CompilationUnit unit = _buildCompilationUnit(path, content);
unitMap[path] = unit;
});
- libraryUnit = unitMap.values.first;
- libraryUnitElement = libraryUnit.element;
- librarySource = libraryUnitElement.source;
- partUnits = unitMap.values.skip(1).toList();
+ libraryUnit = result.libraryUnit;
+ libraryUnitElement = result.libraryUnitElement;
+ librarySource = result.librarySource;
+ partUnits = result.partUnits;
+
+ task = result.task;
+ outputs = result.outputs;
+ libraryElement = result.libraryElement;
+ }
+}
+
+@reflectiveTest
+class BuildPublicNamespaceTaskTest extends _AbstractDartTaskTest {
+ test_buildInputs() {
+ AnalysisTarget target = new TestSource();
+ Map<String, TaskInput> inputs =
+ BuildPublicNamespaceTask.buildInputs(target);
+ expect(inputs.keys, unorderedEquals(
+ [BuildPublicNamespaceTask.BUILT_LIBRARY_ELEMENT_INPUT_NAME]));
+ }
+
+ test_constructor() {
+ AnalysisContext context = AnalysisContextFactory.contextWithCore();
+ AnalysisTarget target = new TestSource();
+ BuildPublicNamespaceTask task =
+ new BuildPublicNamespaceTask(context, target);
+ expect(task, isNotNull);
+ expect(task.context, context);
+ expect(task.target, target);
+ }
+
+ test_createTask() {
+ AnalysisContext context = AnalysisContextFactory.contextWithCore();
+ AnalysisTarget target = new TestSource();
+ BuildPublicNamespaceTask task =
+ BuildPublicNamespaceTask.createTask(context, target);
+ expect(task, isNotNull);
+ expect(task.context, context);
+ expect(task.target, target);
+ }
+
+ test_description() {
+ AnalysisTarget target = new TestSource();
+ BuildPublicNamespaceTask task = new BuildPublicNamespaceTask(null, target);
+ expect(task.description, isNotNull);
+ }
+
+ test_descriptor() {
+ TaskDescriptor descriptor = BuildPublicNamespaceTask.DESCRIPTOR;
+ expect(descriptor, isNotNull);
+ }
- task = new BuildLibraryElementTask(context, librarySource);
+ test_perform() {
+ var buildLibraryElementResult = _buildLibraryElement({
+ '/lib.dart': '''
+library lib;
+part 'part.dart';
+a() {}
+_b() {}
+''',
+ '/part.dart': '''
+part of lib;
+_c() {}
+d() {}
+'''
+ });
+ Source librarySource = buildLibraryElementResult.librarySource;
+ LibraryElement libraryElement = buildLibraryElementResult.libraryElement;
+ // perform task
+ BuildPublicNamespaceTask task =
+ new BuildPublicNamespaceTask(context, librarySource);
task.inputs = {
- BuildLibraryElementTask.DEFINING_BUILT_UNIT_INPUT_NAME: libraryUnit,
- BuildLibraryElementTask.PART_BUILT_UNITS_INPUT_NAME: partUnits
+ BuildPublicNamespaceTask.BUILT_LIBRARY_ELEMENT_INPUT_NAME: libraryElement
};
- task.perform();
- outputs = task.outputs;
- libraryElement = outputs[BUILT_LIBRARY_ELEMENT];
+ Map<ResultDescriptor, dynamic> outputs = _performTask(task);
+ // validate
+ Namespace namespace = outputs[PUBLIC_NAMESPACE];
+ expect(namespace.definedNames.keys, unorderedEquals(['a', 'd']));
}
}
@@ -429,10 +453,10 @@ class ParseDartTaskTest extends EngineTestCase {
test_buildInputs() {
AnalysisTarget target = new TestSource();
Map<String, TaskInput> inputs = ParseDartTask.buildInputs(target);
- expect(inputs, isNotNull);
- expect(inputs, hasLength(2));
- expect(inputs[ParseDartTask.LINE_INFO_INPUT_NAME], isNotNull);
- expect(inputs[ParseDartTask.TOKEN_STREAM_INPUT_NAME], isNotNull);
+ expect(inputs.keys, unorderedEquals([
Brian Wilkerson 2015/03/11 20:55:25 I'd rather have the explicit test that 'inputs' is
+ ParseDartTask.LINE_INFO_INPUT_NAME,
+ ParseDartTask.TOKEN_STREAM_INPUT_NAME
+ ]));
}
test_constructor() {
@@ -543,9 +567,7 @@ class ScanDartTaskTest extends EngineTestCase {
test_buildInputs() {
AnalysisTarget target = new TestSource();
Map<String, TaskInput> inputs = ScanDartTask.buildInputs(target);
- expect(inputs, isNotNull);
- expect(inputs, hasLength(1));
- expect(inputs[ScanDartTask.CONTENT_INPUT_NAME], isNotNull);
+ expect(inputs.keys, unorderedEquals([ScanDartTask.CONTENT_INPUT_NAME]));
}
test_constructor() {
@@ -610,6 +632,109 @@ class ScanDartTaskTest extends EngineTestCase {
}
}
+class _AbstractDartTaskTest extends EngineTestCase {
+ MemoryResourceProvider resourceProvider = new MemoryResourceProvider();
+
+ InternalAnalysisContext context = AnalysisContextFactory.contextWithCore();
+ Map<AnalysisTarget, CacheEntry> entryMap = <AnalysisTarget, CacheEntry>{};
+
+ AnalysisTask task;
+ Map<ResultDescriptor<dynamic>, dynamic> outputs;
+
+ CacheEntry getCacheEntry(AnalysisTarget target) {
+ return entryMap.putIfAbsent(target, () => new CacheEntry());
+ }
+
+ void setUp() {
+ DartSdk sdk = context.sourceFactory.dartSdk;
+ context.sourceFactory = new SourceFactory(<UriResolver>[
+ new DartUriResolver(sdk),
+ new ResourceUriResolver(resourceProvider)
+ ]);
+ }
+
+ CompilationUnit _buildCompilationUnit(String path, String content) {
+ File file = resourceProvider.newFile(path, content);
+ Source source = file.createSource();
+ // scan
+ ScanDartTask scanTask = new ScanDartTask(context, source);
+ scanTask.inputs = {ScanDartTask.CONTENT_INPUT_NAME: content};
+ var scanOutputs = _performTask(scanTask);
+ // parse
+ ParseDartTask parseTask = new ParseDartTask(context, source);
+ parseTask.inputs = {
+ ParseDartTask.LINE_INFO_INPUT_NAME: scanOutputs[LINE_INFO],
+ ParseDartTask.TOKEN_STREAM_INPUT_NAME: scanOutputs[TOKEN_STREAM]
+ };
+ var parseOutputs = _performTask(parseTask);
+ // build CompilationUnit
+ BuildCompilationUnitElementTask buildTask =
+ new BuildCompilationUnitElementTask(context, source);
+ buildTask.inputs = {
+ BuildCompilationUnitElementTask.PARSED_UNIT_INPUT_NAME:
+ parseOutputs[PARSED_UNIT]
+ };
+ var buildUnitOutputs = _performTask(buildTask);
+ // done
+ return buildUnitOutputs[BUILT_UNIT];
+ }
+
+ _BuildLibraryElementTaskResult _buildLibraryElement(
+ Map<String, String> sourceMap) {
+ Map<String, CompilationUnit> unitMap = <String, CompilationUnit>{};
+ sourceMap.forEach((String path, String content) {
+ CompilationUnit unit = _buildCompilationUnit(path, content);
+ unitMap[path] = unit;
+ });
+
+ CompilationUnit libraryUnit = unitMap.values.first;
+ CompilationUnitElement libraryUnitElement = libraryUnit.element;
+ Source librarySource = libraryUnitElement.source;
+ List<CompilationUnit> partUnits = unitMap.values.skip(1).toList();
+
+ BuildLibraryElementTask task =
+ new BuildLibraryElementTask(context, librarySource);
+ task.inputs = {
+ BuildLibraryElementTask.DEFINING_BUILT_UNIT_INPUT_NAME: libraryUnit,
+ BuildLibraryElementTask.PART_BUILT_UNITS_INPUT_NAME: partUnits
+ };
+ Map<ResultDescriptor, dynamic> outputs = _performTask(task);
+
+ LibraryElement libraryElement = outputs[BUILT_LIBRARY_ELEMENT];
+ return new _BuildLibraryElementTaskResult(librarySource, libraryUnit,
+ libraryUnitElement, partUnits, task, outputs, libraryElement);
+ }
+
+ /**
+ * Perform the given [task], record and return its outputs.
+ */
+ Map<ResultDescriptor, dynamic> _performTask(AnalysisTask task) {
+ AnalysisTarget target = task.target;
+ // perform the task
+ task.perform();
+ Map<ResultDescriptor, dynamic> outputs = task.outputs;
+ // file the cache entry
+ CacheEntry cacheEntry = getCacheEntry(target);
+ outputs.forEach((result, value) {
+ cacheEntry.setValue(result, value);
+ });
+ return outputs;
+ }
+}
+
+class _BuildLibraryElementTaskResult {
+ final Source librarySource;
+ final CompilationUnit libraryUnit;
+ final CompilationUnitElement libraryUnitElement;
+ final List<CompilationUnit> partUnits;
+ final BuildLibraryElementTask task;
+ final Map<ResultDescriptor, dynamic> outputs;
+ final LibraryElement libraryElement;
+ _BuildLibraryElementTaskResult(this.librarySource, this.libraryUnit,
+ this.libraryUnitElement, this.partUnits, this.task, this.outputs,
+ this.libraryElement);
+}
+
class _MockContext extends TypedMock implements ExtendedAnalysisContext {
Map<AnalysisTarget, CacheEntry> entryMap = <AnalysisTarget, CacheEntry>{};
« no previous file with comments | « pkg/analyzer/lib/task/dart.dart ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698