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

Side by Side Diff: frog/tests/leg/mock_compiler.dart

Issue 10536169: Move frog/tests/{leg,leg_only,frog_native} to tests/compiler/. (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 8 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « frog/tests/leg/loop_test.dart ('k') | frog/tests/leg/no_constructor_body_test.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
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.
4
5 #library('mock_compiler');
6
7 #import("dart:uri");
8
9 #import("../../../lib/compiler/implementation/elements/elements.dart");
10 #import("../../../lib/compiler/implementation/leg.dart");
11 #import("../../../lib/compiler/implementation/tree/tree.dart");
12 #import("../../../lib/compiler/implementation/util/util.dart");
13 #import("parser_helper.dart");
14
15 class WarningMessage {
16 Node node;
17 Message message;
18 WarningMessage(this.node, this.message);
19
20 toString() => message.toString();
21 }
22
23 final String DEFAULT_HELPERLIB = @'''
24 lt() {} add(var a, var b) {} sub() {} mul() {} div() {} tdiv() {} mod() {}
25 neg() {} shl() {} shr() {} eq() {} le() {} gt() {} ge() {}
26 or() {} and() {} not() {} eqNull(a) {} eqq() {}
27 ltB() {} leB() {} eqB() {} gtB() {} geB() {} eqNullB(a) {}
28 iae(x) {throw x;} ioore(x) {throw x;}
29 guard$array(x) { return x; }
30 guard$num(x) { return x; }
31 guard$string(x) { return x; }
32 guard$stringOrArray(x) { return x; }
33 index(a, index) {}
34 indexSet(a, index, value) {}
35 setRuntimeTypeInfo(a, b) {}
36 getRuntimeTypeInfo(a) {}
37 interface JavaScriptIndexingBehavior {}
38 S() {}''';
39
40 final String DEFAULT_INTERCEPTORSLIB = @'''
41 add$1(receiver, value) {}
42 get$length(receiver) {}
43 filter(receiver, predicate) {}
44 removeLast(receiver) {}
45 iterator(receiver) {}
46 next(receiver) {}
47 hasNext(receiver) {}''';
48
49 final String DEFAULT_CORELIB = @'''
50 print(var obj) {}
51 interface int extends num {}
52 interface double extends num {}
53 class bool {}
54 class String {}
55 class Object {}
56 interface num {}
57 class Function {}
58 class List {}
59 class Closure {}
60 class Null {}
61 class Dynamic {}''';
62
63 class MockCompiler extends Compiler {
64 List<WarningMessage> warnings;
65 List<WarningMessage> errors;
66 final Map<String, String> sources;
67 Node parsedTree;
68
69 MockCompiler([String coreSource = DEFAULT_CORELIB,
70 String helperSource = DEFAULT_HELPERLIB,
71 String interceptorsSource = DEFAULT_INTERCEPTORSLIB])
72 : warnings = [], errors = [],
73 sources = new Map<String, String>(),
74 super() {
75 Uri uri = new Uri(scheme: "source");
76 var script = new Script(uri, new MockFile(coreSource));
77 coreLibrary = new LibraryElement(script);
78 parseScript(coreSource, coreLibrary);
79
80 script = new Script(uri, new MockFile(helperSource));
81 jsHelperLibrary = new LibraryElement(script);
82 parseScript(helperSource, jsHelperLibrary);
83
84 script = new Script(uri, new MockFile(interceptorsSource));
85 interceptorsLibrary = new LibraryElement(script);
86 parseScript(interceptorsSource, interceptorsLibrary);
87
88 scanner.importLibrary(jsHelperLibrary, coreLibrary, null);
89 scanner.importLibrary(interceptorsLibrary, coreLibrary, null);
90 mainApp = mockLibrary(this, "");
91 initializeSpecialClasses();
92 }
93
94 void reportWarning(Node node, var message) {
95 warnings.add(new WarningMessage(node, message.message));
96 }
97
98 void reportError(Node node, var message) {
99 if (message is String && message.startsWith("no #library tag found in")) {
100 // TODO(ahe): Fix the MockCompiler to not have this problem.
101 return;
102 }
103 errors.add(new WarningMessage(node, message.message));
104 }
105
106 void reportDiagnostic(SourceSpan span, String message, bool fatal) {
107 print(message);
108 }
109
110 void clearWarnings() {
111 warnings = [];
112 }
113
114 void clearErrors() {
115 errors = [];
116 }
117
118 TreeElementMapping resolveStatement(String text) {
119 parsedTree = parseStatement(text);
120 return resolveNodeStatement(parsedTree, mainApp);
121 }
122
123 TreeElementMapping resolveNodeStatement(Node tree, Element element) {
124 ResolverVisitor visitor = new ResolverVisitor(this, element);
125 if (visitor.context is TopScope) {
126 visitor.context = new BlockScope(visitor.context);
127 }
128 visitor.visit(tree);
129 visitor.context = new TopScope(element.getLibrary());
130 // Resolve the type annotations encountered in the code.
131 while (!resolver.toResolve.isEmpty()) {
132 resolver.toResolve.removeFirst().ensureResolved(this);
133 }
134 return visitor.mapping;
135 }
136
137 resolverVisitor() {
138 Element mockElement =
139 new Element(buildSourceString(''), ElementKind.FUNCTION, mainApp);
140 ResolverVisitor visitor = new ResolverVisitor(this, mockElement);
141 visitor.context = new BlockScope(visitor.context);
142 return visitor;
143 }
144
145 parseScript(String text, [LibraryElement library]) {
146 if (library === null) library = mainApp;
147 parseUnit(text, this, library);
148 }
149
150 void scanBuiltinLibraries() {
151 // Do nothing. The mock core library is already handled in the constructor.
152 }
153
154 LibraryElement scanBuiltinLibrary(String name) {
155 // Do nothing. The mock core library is already handled in the constructor.
156 }
157
158 Script readScript(Uri uri, [ScriptTag node]) {
159 String code = sources[uri.toString()];
160 if (code === null) throw new IllegalArgumentException(uri);
161 return new StringScript(code);
162 }
163 }
164
165 void compareWarningKinds(String text, expectedWarnings, foundWarnings) {
166 var fail = (message) => Expect.fail('$text: $message');
167 Iterator<MessageKind> expected = expectedWarnings.iterator();
168 Iterator<WarningMessage> found = foundWarnings.iterator();
169 while (expected.hasNext() && found.hasNext()) {
170 Expect.equals(expected.next(), found.next().message.kind);
171 }
172 if (expected.hasNext()) {
173 do {
174 print('Expected warning "${expected.next()}" did not occur');
175 } while (expected.hasNext());
176 fail('Too few warnings');
177 }
178 if (found.hasNext()) {
179 do {
180 print('Additional warning "${found.next()}"');
181 } while (found.hasNext());
182 fail('Too many warnings');
183 }
184 }
185
186 void importLibrary(LibraryElement target, LibraryElement imported,
187 Compiler compiler) {
188 for (Link<Element> link = imported.topLevelElements; !link.isEmpty();
189 link = link.tail) {
190 compiler.withCurrentElement(link.head, () {
191 target.define(link.head, compiler);
192 });
193 }
194 }
195
196 LibraryElement mockLibrary(Compiler compiler, String source) {
197 Uri uri = new Uri(scheme: "source");
198 var library = new LibraryElement(new Script(uri, new MockFile(source)));
199 importLibrary(library, compiler.coreLibrary, compiler);
200 return library;
201 }
202
203 class StringScript extends Script {
204 final String code;
205 StringScript(this.code) : super(null, null);
206 String get text() => code;
207 String get name() => "mock script";
208 }
OLDNEW
« no previous file with comments | « frog/tests/leg/loop_test.dart ('k') | frog/tests/leg/no_constructor_body_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698