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

Side by Side Diff: tests/compiler/dart2js/inference/inference_test_helper.dart

Issue 2750353003: Compute ids for IR nodes and check equivalence with the AST. (Closed)
Patch Set: Updated cf. comment Created 3 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 unified diff | Download patch
OLDNEW
1 // Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2017, 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 import 'package:compiler/src/common.dart'; 5 import 'package:compiler/src/common.dart';
6 import 'package:compiler/src/common_elements.dart';
6 import 'package:compiler/src/compiler.dart'; 7 import 'package:compiler/src/compiler.dart';
7 import 'package:compiler/src/elements/elements.dart'; 8 import 'package:compiler/src/elements/elements.dart';
9 import 'package:compiler/src/elements/entities.dart';
8 import 'package:compiler/src/resolution/tree_elements.dart'; 10 import 'package:compiler/src/resolution/tree_elements.dart';
9 import 'package:compiler/src/tree/nodes.dart'; 11 import 'package:compiler/src/tree/nodes.dart';
10 import 'package:compiler/src/types/types.dart'; 12 import 'package:compiler/src/types/types.dart';
11 import 'package:expect/expect.dart'; 13 import 'package:expect/expect.dart';
12 14
13 import '../annotated_code_helper.dart'; 15 import '../annotated_code_helper.dart';
14 import '../memory_compiler.dart'; 16 import '../memory_compiler.dart';
15 import 'enumerator.dart'; 17 import 'enumerator.dart';
16 18
17 checkCode(String annotatedCode) async { 19 typedef void CheckMemberFunction(
20 Compiler compiler, Map<Id, String> expectedMap, MemberElement member);
21
22 /// Compiles the [annotatedCode] with the provided [options] and calls
23 /// [checkMember] for each member in the code providing the map from [Id] to
24 /// annotation. Any [Id] left in the map will be reported as missing.
25 checkCode(String annotatedCode, CheckMemberFunction checkMember,
26 {List<String> options: const <String>[]}) async {
18 AnnotatedCode code = new AnnotatedCode.fromText(annotatedCode, '/*', '*/'); 27 AnnotatedCode code = new AnnotatedCode.fromText(annotatedCode, '/*', '*/');
19 Map<Id, String> expectedMap = computeExpectedMap(code); 28 Map<Id, String> expectedMap = computeExpectedMap(code);
20 Compiler compiler = 29 Compiler compiler = compilerFor(
21 compilerFor(memorySourceFiles: {'main.dart': code.sourceCode}); 30 memorySourceFiles: {'main.dart': code.sourceCode}, options: options);
22 compiler.stopAfterTypeInference = true; 31 compiler.stopAfterTypeInference = true;
23 Uri mainUri = Uri.parse('memory:main.dart'); 32 Uri mainUri = Uri.parse('memory:main.dart');
24 await compiler.run(mainUri); 33 await compiler.run(mainUri);
25 compiler.mainApp.forEachLocalMember((member) { 34 compiler.mainApp.forEachLocalMember((member) {
26 if (member.isClass) { 35 if (member.isClass) {
27 member.forEachLocalMember((member) { 36 member.forEachLocalMember((member) {
28 checkMember(compiler, expectedMap, member); 37 checkMember(compiler, expectedMap, member);
29 }); 38 });
30 } else if (member.isTypedef) { 39 } else if (member.isTypedef) {
31 // Skip. 40 // Skip.
32 } else { 41 } else {
33 checkMember(compiler, expectedMap, member); 42 checkMember(compiler, expectedMap, member);
34 } 43 }
35 }); 44 });
36 expectedMap.forEach((NodeId id, String expected) { 45 expectedMap.forEach((Id id, String expected) {
37 reportHere( 46 reportHere(
38 compiler.reporter, 47 compiler.reporter,
39 new SourceSpan(mainUri, id.value, id.value + 1), 48 computeSpannable(compiler.elementEnvironment, mainUri, id),
40 'expected:${expected},actual:null'); 49 'expected:${expected},actual:null');
41 }); 50 });
51 Expect.isTrue(expectedMap.isEmpty,
52 "Ids not found: $expectedMap.");
42 } 53 }
43 54
44 void checkMember( 55 void checkMemberAstTypeMasks(
45 Compiler compiler, Map<Id, String> expectedMap, MemberElement member) { 56 Compiler compiler, Map<Id, String> expectedMap, MemberElement member) {
46 ResolvedAst resolvedAst = member.resolvedAst; 57 ResolvedAst resolvedAst = member.resolvedAst;
47 if (resolvedAst.kind != ResolvedAstKind.PARSED) return; 58 if (resolvedAst.kind != ResolvedAstKind.PARSED) return;
48 compiler.reporter.withCurrentElement(member.implementation, () { 59 compiler.reporter.withCurrentElement(member.implementation, () {
49 new TypeMaskChecker(compiler.reporter, expectedMap, resolvedAst, 60 new TypeMaskChecker(compiler.reporter, expectedMap, resolvedAst,
50 compiler.globalInference.results) 61 compiler.globalInference.results)
51 .check(); 62 .check();
52 }); 63 });
53 } 64 }
54 65
66 Spannable computeSpannable(
67 ElementEnvironment elementEnvironment, Uri mainUri, Id id) {
68 if (id is NodeId) {
69 return new SourceSpan(mainUri, id.value, id.value + 1);
70 } else if (id is ElementId) {
71 LibraryEntity library = elementEnvironment.lookupLibrary(mainUri);
72 if (id.className != null) {
73 ClassEntity cls =
74 elementEnvironment.lookupClass(library, id.className, required: true);
75 return elementEnvironment.lookupClassMember(cls, id.memberName);
76 } else {
77 return elementEnvironment.lookupLibraryMember(library, id.memberName);
78 }
79 }
80 throw new UnsupportedError('Unsupported id $id.');
81 }
82
55 Map<Id, String> computeExpectedMap(AnnotatedCode code) { 83 Map<Id, String> computeExpectedMap(AnnotatedCode code) {
56 Map<Id, String> map = <Id, String>{}; 84 Map<Id, String> map = <Id, String>{};
57 for (Annotation annotation in code.annotations) { 85 for (Annotation annotation in code.annotations) {
58 String text = annotation.text; 86 String text = annotation.text;
59 int colonPos = text.indexOf(':'); 87 int colonPos = text.indexOf(':');
60 Id id; 88 Id id;
61 String expected; 89 String expected;
62 if (colonPos == -1) { 90 if (colonPos == -1) {
63 id = new NodeId(annotation.offset); 91 id = new NodeId(annotation.offset);
64 expected = text; 92 expected = text;
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after
144 visitSend(Send node) { 172 visitSend(Send node) {
145 checkSend(node); 173 checkSend(node);
146 visitNode(node); 174 visitNode(node);
147 } 175 }
148 176
149 visitSendSet(SendSet node) { 177 visitSendSet(SendSet node) {
150 checkSend(node); 178 checkSend(node);
151 visitNode(node); 179 visitNode(node);
152 } 180 }
153 } 181 }
OLDNEW
« 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