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

Unified Diff: tests/compiler/dart2js/inference/inference_test_helper.dart

Issue 2950493002: Add closure_test (Closed)
Patch Set: Created 3 years, 6 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
Index: tests/compiler/dart2js/inference/inference_test_helper.dart
diff --git a/tests/compiler/dart2js/inference/inference_test_helper.dart b/tests/compiler/dart2js/inference/inference_test_helper.dart
index e518df210771f951cfe217d6988a6db670456db2..faac1f9f1743fda287ee85756ce7724798990c5c 100644
--- a/tests/compiler/dart2js/inference/inference_test_helper.dart
+++ b/tests/compiler/dart2js/inference/inference_test_helper.dart
@@ -3,56 +3,13 @@
// BSD-style license that can be found in the LICENSE file.
import 'package:compiler/src/common.dart';
-import 'package:compiler/src/common_elements.dart';
import 'package:compiler/src/compiler.dart';
import 'package:compiler/src/elements/elements.dart';
-import 'package:compiler/src/elements/entities.dart';
-import 'package:compiler/src/resolution/tree_elements.dart';
import 'package:compiler/src/tree/nodes.dart';
import 'package:compiler/src/types/types.dart';
-import 'package:expect/expect.dart';
-import '../annotated_code_helper.dart';
-import '../memory_compiler.dart';
-import 'enumerator.dart';
-
-typedef void CheckMemberFunction(
- Compiler compiler, Map<Id, String> expectedMap, MemberElement member);
-
-/// Compiles the [annotatedCode] with the provided [options] and calls
-/// [checkMember] for each member in the code providing the map from [Id] to
-/// annotation. Any [Id] left in the map will be reported as missing.
-checkCode(String annotatedCode, CheckMemberFunction checkMember,
- {List<String> options: const <String>[]}) async {
- AnnotatedCode code =
- new AnnotatedCode.fromText(annotatedCode, commentStart, commentEnd);
- Map<Id, String> expectedMap = computeExpectedMap(code);
- Compiler compiler = compilerFor(
- memorySourceFiles: {'main.dart': code.sourceCode}, options: options);
- compiler.stopAfterTypeInference = true;
- Uri mainUri = Uri.parse('memory:main.dart');
- await compiler.run(mainUri);
- LibraryElement mainApp =
- compiler.frontendStrategy.elementEnvironment.mainLibrary;
- mainApp.forEachLocalMember((dynamic member) {
- if (member.isClass) {
- member.forEachLocalMember((member) {
- checkMember(compiler, expectedMap, member);
- });
- } else if (member.isTypedef) {
- // Skip.
- } else {
- checkMember(compiler, expectedMap, member);
- }
- });
- expectedMap.forEach((Id id, String expected) {
- reportHere(
- compiler.reporter,
- computeSpannable(compiler.resolution.elementEnvironment, mainUri, id),
- 'expected:${expected},actual:null');
- });
- Expect.isTrue(expectedMap.isEmpty, "Ids not found: $expectedMap.");
-}
+import '../equivalence/id_equivalence.dart';
+import '../equivalence/id_equivalence_helper.dart';
void checkMemberAstTypeMasks(
Compiler compiler, Map<Id, String> expectedMap, MemberElement member) {
@@ -65,120 +22,32 @@ void checkMemberAstTypeMasks(
});
}
-Spannable computeSpannable(
- ElementEnvironment elementEnvironment, Uri mainUri, Id id) {
- if (id is NodeId) {
- return new SourceSpan(mainUri, id.value, id.value + 1);
- } else if (id is ElementId) {
- LibraryEntity library = elementEnvironment.lookupLibrary(mainUri);
- if (id.className != null) {
- ClassEntity cls =
- elementEnvironment.lookupClass(library, id.className, required: true);
- return elementEnvironment.lookupClassMember(cls, id.memberName);
- } else {
- return elementEnvironment.lookupLibraryMember(library, id.memberName);
- }
- }
- throw new UnsupportedError('Unsupported id $id.');
-}
-
-Map<Id, String> computeExpectedMap(AnnotatedCode code) {
- Map<Id, String> map = <Id, String>{};
- for (Annotation annotation in code.annotations) {
- String text = annotation.text;
- int colonPos = text.indexOf(':');
- Id id;
- String expected;
- if (colonPos == -1) {
- id = new NodeId(annotation.offset);
- expected = text;
- } else {
- id = new ElementId(text.substring(0, colonPos));
- expected = text.substring(colonPos + 1);
- }
- map[id] = expected;
- }
- return map;
-}
-
-class TypeMaskChecker extends Visitor with AstEnumeratorMixin {
- final DiagnosticReporter reporter;
- final Map<Id, String> expectedMap;
- final ResolvedAst resolvedAst;
+class TypeMaskChecker extends AbstractResolvedAstChecker {
final GlobalTypeInferenceResults results;
final GlobalTypeInferenceElementResult result;
- TypeMaskChecker(
- this.reporter, this.expectedMap, this.resolvedAst, this.results)
- : result = results.resultOfMember(resolvedAst.element as MemberElement);
-
- TreeElements get elements => resolvedAst.elements;
-
- void check() {
- resolvedAst.node.accept(this);
- }
-
- visitNode(Node node) {
- node.visitChildren(this);
- }
+ TypeMaskChecker(DiagnosticReporter reporter, Map<Id, String> expectedMap,
+ ResolvedAst resolvedAst, this.results)
+ : result = results.resultOfMember(resolvedAst.element as MemberElement),
+ super(reporter, expectedMap, resolvedAst);
- void checkElement(AstElement element) {
- ElementId id = computeElementId(element);
+ @override
+ String computeElementValue(AstElement element) {
GlobalTypeInferenceElementResult elementResult =
results.resultOfElement(element);
TypeMask value =
element.isFunction ? elementResult.returnType : elementResult.type;
- String expected = annotationForId(id);
- checkValue(element, expected, value);
- }
-
- String annotationForId(Id id) {
- if (id == null) return null;
- return expectedMap.remove(id);
- }
-
- void checkValue(Spannable spannable, String expected, TypeMask value) {
- if (value != null || expected != null) {
- String valueText = '$value';
- if (valueText != expected) {
- reportHere(reporter, spannable, 'expected:${expected},actual:${value}');
- }
- Expect.equals(expected, valueText);
- }
+ return value != null ? '$value' : null;
}
- void checkSend(Send node) {
- NodeId id = computeNodeId(node);
- TypeMask value = result.typeOfSend(node);
- String expected = annotationForId(id);
- checkValue(node, expected, value);
- }
-
- visitVariableDefinitions(VariableDefinitions node) {
- for (Node child in node.definitions) {
- AstElement element = elements[child];
- if (element == null) {
- reportHere(reporter, child, 'No element for variable.');
- } else if (!element.isLocal) {
- checkElement(element);
- }
+ @override
+ String computeNodeValue(Node node, [AstElement element]) {
+ if (node is Send) {
+ TypeMask value = result.typeOfSend(node);
+ return value != null ? '$value' : null;
+ } else if (element != null && element.isLocal) {
+ return computeElementValue(element);
}
- visitNode(node);
- }
-
- visitFunctionExpression(FunctionExpression node) {
- AstElement element = elements.getFunctionDefinition(node);
- checkElement(element);
- visitNode(node);
- }
-
- visitSend(Send node) {
- checkSend(node);
- visitNode(node);
- }
-
- visitSendSet(SendSet node) {
- checkSend(node);
- visitNode(node);
+ return null;
}
}
« no previous file with comments | « tests/compiler/dart2js/inference/id_equivalence_test.dart ('k') | tests/compiler/dart2js/inference/send_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698