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

Side by Side Diff: tests/compiler/dart2js/resolver_test.dart

Issue 1915123008: Implements support for ignoring method type arguments in resolution. (Closed) Base URL: https://github.com/dart-lang/sdk.git@master
Patch Set: Rebased again Created 4 years, 7 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
« no previous file with comments | « tests/compiler/dart2js/mock_compiler.dart ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file 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 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 'dart:async'; 5 import 'dart:async';
6 import 'dart:collection'; 6 import 'dart:collection';
7 7
8 import 'package:async_helper/async_helper.dart'; 8 import 'package:async_helper/async_helper.dart';
9 import 'package:expect/expect.dart'; 9 import 'package:expect/expect.dart';
10 import 'package:compiler/src/constants/expressions.dart'; 10 import 'package:compiler/src/constants/expressions.dart';
(...skipping 204 matching lines...) Expand 10 before | Expand all | Expand 10 after
215 String script = """class A { foo() {} } 215 String script = """class A { foo() {} }
216 class B extends A { foo() => super.foo(); }"""; 216 class B extends A { foo() => super.foo(); }""";
217 compiler.parseScript(script); 217 compiler.parseScript(script);
218 compiler.resolveStatement("B b;"); 218 compiler.resolveStatement("B b;");
219 219
220 ClassElement classB = compiler.mainApp.find("B"); 220 ClassElement classB = compiler.mainApp.find("B");
221 FunctionElement fooB = classB.lookupLocalMember("foo"); 221 FunctionElement fooB = classB.lookupLocalMember("foo");
222 ClassElement classA = compiler.mainApp.find("A"); 222 ClassElement classA = compiler.mainApp.find("A");
223 FunctionElement fooA = classA.lookupLocalMember("foo"); 223 FunctionElement fooA = classA.lookupLocalMember("foo");
224 224
225 ResolverVisitor visitor = 225 ResolverVisitor visitor = new ResolverVisitor(
226 new ResolverVisitor(compiler, fooB, 226 compiler,
227 new ResolutionRegistry(compiler, 227 fooB,
228 new CollectingTreeElements(fooB))); 228 new ResolutionRegistry(compiler, new CollectingTreeElements(fooB)),
229 scope: new MockTypeVariablesScope(classB.buildScope()));
229 FunctionExpression node = 230 FunctionExpression node =
230 (fooB as FunctionElementX).parseNode(compiler.parsingContext); 231 (fooB as FunctionElementX).parseNode(compiler.parsingContext);
231 visitor.visit(node.body); 232 visitor.visit(node.body);
232 Map mapping = map(visitor); 233 Map mapping = map(visitor);
233 234
234 Send superCall = node.body.asReturn().expression; 235 Send superCall = node.body.asReturn().expression;
235 FunctionElement called = mapping[superCall]; 236 FunctionElement called = mapping[superCall];
236 Expect.isNotNull(called); 237 Expect.isNotNull(called);
237 Expect.equals(fooA, called); 238 Expect.equals(fooA, called);
238 }); 239 });
(...skipping 20 matching lines...) Expand all
259 }); 260 });
260 } 261 }
261 262
262 Future testThis() { 263 Future testThis() {
263 return Future.wait([ 264 return Future.wait([
264 MockCompiler.create((MockCompiler compiler) { 265 MockCompiler.create((MockCompiler compiler) {
265 compiler.parseScript("class Foo { foo() { return this; } }"); 266 compiler.parseScript("class Foo { foo() { return this; } }");
266 compiler.resolveStatement("Foo foo;"); 267 compiler.resolveStatement("Foo foo;");
267 ClassElement fooElement = compiler.mainApp.find("Foo"); 268 ClassElement fooElement = compiler.mainApp.find("Foo");
268 FunctionElement funElement = fooElement.lookupLocalMember("foo"); 269 FunctionElement funElement = fooElement.lookupLocalMember("foo");
269 ResolverVisitor visitor = 270 ResolverVisitor visitor = new ResolverVisitor(
270 new ResolverVisitor(compiler, funElement, 271 compiler,
271 new ResolutionRegistry(compiler, 272 funElement,
272 new CollectingTreeElements(funElement))); 273 new ResolutionRegistry(
274 compiler, new CollectingTreeElements(funElement)),
275 scope: new MockTypeVariablesScope(fooElement.buildScope()));
273 FunctionExpression function = 276 FunctionExpression function =
274 (funElement as FunctionElementX).parseNode(compiler.parsingContext); 277 (funElement as FunctionElementX).parseNode(compiler.parsingContext);
275 visitor.visit(function.body); 278 visitor.visit(function.body);
276 Map mapping = map(visitor); 279 Map mapping = map(visitor);
277 List<Element> values = mapping.values.toList(); 280 List<Element> values = mapping.values.toList();
278 DiagnosticCollector collector = compiler.diagnosticCollector; 281 DiagnosticCollector collector = compiler.diagnosticCollector;
279 Expect.equals(0, mapping.length); 282 Expect.equals(0, mapping.length);
280 Expect.equals(0, collector.warnings.length); 283 Expect.equals(0, collector.warnings.length);
281 }), 284 }),
282 MockCompiler.create((MockCompiler compiler) { 285 MockCompiler.create((MockCompiler compiler) {
283 compiler.resolveStatement("main() { return this; }"); 286 compiler.resolveStatement("main() { return this; }");
284 DiagnosticCollector collector = compiler.diagnosticCollector; 287 DiagnosticCollector collector = compiler.diagnosticCollector;
285 Expect.equals(0, collector.warnings.length); 288 Expect.equals(0, collector.warnings.length);
286 Expect.equals(1, collector.errors.length); 289 Expect.equals(1, collector.errors.length);
287 Expect.equals(MessageKind.NO_INSTANCE_AVAILABLE, 290 Expect.equals(MessageKind.NO_INSTANCE_AVAILABLE,
288 collector.errors.first.message.kind); 291 collector.errors.first.message.kind);
289 }), 292 }),
290 MockCompiler.create((MockCompiler compiler) { 293 MockCompiler.create((MockCompiler compiler) {
291 compiler.parseScript("class Foo { static foo() { return this; } }"); 294 compiler.parseScript("class Foo { static foo() { return this; } }");
292 compiler.resolveStatement("Foo foo;"); 295 compiler.resolveStatement("Foo foo;");
293 ClassElement fooElement = compiler.mainApp.find("Foo"); 296 ClassElement fooElement = compiler.mainApp.find("Foo");
294 FunctionElement funElement = fooElement.lookupLocalMember("foo"); 297 FunctionElement funElement = fooElement.lookupLocalMember("foo");
295 ResolverVisitor visitor = new ResolverVisitor(compiler, funElement, 298 ResolverVisitor visitor = new ResolverVisitor(
296 new ResolutionRegistry(compiler, 299 compiler,
297 new CollectingTreeElements(funElement))); 300 funElement,
301 new ResolutionRegistry(
302 compiler, new CollectingTreeElements(funElement)),
303 scope: new MockTypeVariablesScope(fooElement.buildScope()));
298 FunctionExpression function = 304 FunctionExpression function =
299 (funElement as FunctionElementX).parseNode(compiler.parsingContext); 305 (funElement as FunctionElementX).parseNode(compiler.parsingContext);
300 visitor.visit(function.body); 306 visitor.visit(function.body);
301 DiagnosticCollector collector = compiler.diagnosticCollector; 307 DiagnosticCollector collector = compiler.diagnosticCollector;
302 Expect.equals(0, collector.warnings.length); 308 Expect.equals(0, collector.warnings.length);
303 Expect.equals(1, collector.errors.length); 309 Expect.equals(1, collector.errors.length);
304 Expect.equals(MessageKind.NO_INSTANCE_AVAILABLE, 310 Expect.equals(MessageKind.NO_INSTANCE_AVAILABLE,
305 collector.errors.first.message.kind); 311 collector.errors.first.message.kind);
306 }), 312 }),
307 ]); 313 ]);
(...skipping 266 matching lines...) Expand 10 before | Expand all | Expand 10 after
574 new Message( 580 new Message(
575 MessageTemplate.TEMPLATES[MessageKind.CANNOT_RESOLVE_TYPE], 581 MessageTemplate.TEMPLATES[MessageKind.CANNOT_RESOLVE_TYPE],
576 {'typeName': 'bar'}, false), 582 {'typeName': 'bar'}, false),
577 collector.errors.first.message); 583 collector.errors.first.message);
578 collector.clear(); 584 collector.clear();
579 585
580 // Add the abstract class to the world and make sure everything is setup 586 // Add the abstract class to the world and make sure everything is setup
581 // correctly. 587 // correctly.
582 compiler.parseScript("abstract class Bar {}"); 588 compiler.parseScript("abstract class Bar {}");
583 589
584 ResolverVisitor visitor = 590 ResolverVisitor visitor = new ResolverVisitor(
585 new ResolverVisitor(compiler, null, 591 compiler,
586 new ResolutionRegistry(compiler, 592 null,
587 new CollectingTreeElements(null))); 593 new ResolutionRegistry(compiler, new CollectingTreeElements(null)));
588 compiler.resolveStatement("Foo bar;"); 594 compiler.resolveStatement("Foo bar;");
589 595
590 ClassElement fooElement = compiler.mainApp.find('Foo'); 596 ClassElement fooElement = compiler.mainApp.find('Foo');
591 ClassElement barElement = compiler.mainApp.find('Bar'); 597 ClassElement barElement = compiler.mainApp.find('Bar');
592 598
593 Expect.equals(null, barElement.supertype); 599 Expect.equals(null, barElement.supertype);
594 Expect.isTrue(barElement.interfaces.isEmpty); 600 Expect.isTrue(barElement.interfaces.isEmpty);
595 601
596 Expect.equals(barElement.computeType(compiler.resolution), 602 Expect.equals(barElement.computeType(compiler.resolution),
597 fooElement.interfaces.head); 603 fooElement.interfaces.head);
(...skipping 14 matching lines...) Expand all
612 ClassElement i2 = compiler.mainApp.find('I2'); 618 ClassElement i2 = compiler.mainApp.find('I2');
613 619
614 Expect.equals(2, length(c.interfaces)); 620 Expect.equals(2, length(c.interfaces));
615 Expect.equals(i1.computeType(compiler.resolution), at(c.interfaces, 0)); 621 Expect.equals(i1.computeType(compiler.resolution), at(c.interfaces, 0));
616 Expect.equals(i2.computeType(compiler.resolution), at(c.interfaces, 1)); 622 Expect.equals(i2.computeType(compiler.resolution), at(c.interfaces, 1));
617 }); 623 });
618 } 624 }
619 625
620 Future testFunctionExpression() { 626 Future testFunctionExpression() {
621 return MockCompiler.create((MockCompiler compiler) { 627 return MockCompiler.create((MockCompiler compiler) {
622 ResolverVisitor visitor = compiler.resolverVisitor();
623 Map mapping = compiler.resolveStatement("int f() {}").map; 628 Map mapping = compiler.resolveStatement("int f() {}").map;
624 Expect.equals(2, mapping.length); 629 Expect.equals(2, mapping.length);
625 Element element; 630 Element element;
626 Node node; 631 Node node;
627 mapping.forEach((Node n, Element e) { 632 mapping.forEach((Node n, Element e) {
628 if (n is FunctionExpression) { 633 if (n is FunctionExpression) {
629 element = e; 634 element = e;
630 node = n; 635 node = n;
631 } 636 }
632 }); 637 });
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
694 List expectedInfos: const [], 699 List expectedInfos: const [],
695 Map<String, String> corelib}) { 700 Map<String, String> corelib}) {
696 MockCompiler compiler = new MockCompiler.internal(coreSource: corelib); 701 MockCompiler compiler = new MockCompiler.internal(coreSource: corelib);
697 return compiler.init().then((_) { 702 return compiler.init().then((_) {
698 compiler.parseScript(script); 703 compiler.parseScript(script);
699 compiler.resolveStatement(statement); 704 compiler.resolveStatement(statement);
700 ClassElement classElement = compiler.mainApp.find(className); 705 ClassElement classElement = compiler.mainApp.find(className);
701 Element element; 706 Element element;
702 element = classElement.lookupConstructor(constructor); 707 element = classElement.lookupConstructor(constructor);
703 FunctionExpression tree = (element as FunctionElement).node; 708 FunctionExpression tree = (element as FunctionElement).node;
704 ResolverVisitor visitor = 709 ResolverVisitor visitor = new ResolverVisitor(
705 new ResolverVisitor(compiler, element, 710 compiler,
706 new ResolutionRegistry(compiler, 711 element,
707 new CollectingTreeElements(element))); 712 new ResolutionRegistry(compiler, new CollectingTreeElements(element)),
713 scope: classElement.buildScope());
708 new InitializerResolver(visitor, element, tree).resolveInitializers(); 714 new InitializerResolver(visitor, element, tree).resolveInitializers();
709 visitor.visit(tree.body); 715 visitor.visit(tree.body);
710 Expect.equals(expectedElementCount, map(visitor).length, 716 Expect.equals(expectedElementCount, map(visitor).length,
711 "${map(visitor).values} for '$statement' in context of `$script`"); 717 "${map(visitor).values} for '$statement' in context of `$script`");
712 718
713 DiagnosticCollector collector = compiler.diagnosticCollector; 719 DiagnosticCollector collector = compiler.diagnosticCollector;
714 compareWarningKinds(script, expectedWarnings, collector.warnings); 720 compareWarningKinds(script, expectedWarnings, collector.warnings);
715 compareWarningKinds(script, expectedErrors, collector.errors); 721 compareWarningKinds(script, expectedErrors, collector.errors);
716 compareWarningKinds(script, expectedInfos, collector.infos); 722 compareWarningKinds(script, expectedInfos, collector.infos);
717 }); 723 });
(...skipping 723 matching lines...) Expand 10 before | Expand all | Expand 10 after
1441 } 1447 }
1442 main() => A.m(); 1448 main() => A.m();
1443 ''', functionName: 'm'); 1449 ''', functionName: 'm');
1444 check(''' 1450 check('''
1445 class A { 1451 class A {
1446 m() => () => await - 3; 1452 m() => () => await - 3;
1447 } 1453 }
1448 main() => new A().m(); 1454 main() => new A().m();
1449 ''', className: 'A'); 1455 ''', className: 'A');
1450 } 1456 }
OLDNEW
« no previous file with comments | « tests/compiler/dart2js/mock_compiler.dart ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698