| Index: tests/compiler/dart2js/simple_inferrer_test.dart
|
| diff --git a/tests/compiler/dart2js/simple_inferrer_test.dart b/tests/compiler/dart2js/simple_inferrer_test.dart
|
| index 5eb96d2ce587393344727fdf2b1aa942d51acf21..058741bd8832bbf80eb7b19520ca86302e7d3f24 100644
|
| --- a/tests/compiler/dart2js/simple_inferrer_test.dart
|
| +++ b/tests/compiler/dart2js/simple_inferrer_test.dart
|
| @@ -3,6 +3,7 @@
|
| // BSD-style license that can be found in the LICENSE file.
|
|
|
| import 'package:expect/expect.dart';
|
| +import "package:async_helper/async_helper.dart";
|
| import
|
| '../../../sdk/lib/_internal/compiler/implementation/types/types.dart'
|
| show TypeMask;
|
| @@ -597,123 +598,125 @@ main() {
|
| void main() {
|
| Uri uri = new Uri(scheme: 'source');
|
| var compiler = compilerFor(TEST, uri);
|
| - compiler.runCompiler(uri);
|
| - var typesTask = compiler.typesTask;
|
| - var typesInferrer = typesTask.typesInferrer;
|
| -
|
| - checkReturn(String name, type) {
|
| - var element = findElement(compiler, name);
|
| - Expect.equals(
|
| - type,
|
| - typesInferrer.getReturnTypeOfElement(element).simplify(compiler),
|
| - name);
|
| - }
|
| - var interceptorType =
|
| - findTypeMask(compiler, 'Interceptor', 'nonNullSubclass');
|
| -
|
| - checkReturn('returnNum1', typesTask.numType);
|
| - checkReturn('returnNum2', typesTask.numType);
|
| - checkReturn('returnInt1', typesTask.intType);
|
| - checkReturn('returnInt2', typesTask.intType);
|
| - checkReturn('returnDouble', typesTask.doubleType);
|
| - checkReturn('returnGiveUp', interceptorType);
|
| - checkReturn('returnInt5', typesTask.intType);
|
| - checkReturn('returnInt6', typesTask.intType);
|
| - checkReturn('returnIntOrNull', typesTask.intType.nullable());
|
| - checkReturn('returnInt3', typesTask.intType);
|
| - checkReturn('returnDynamic', typesTask.dynamicType);
|
| - checkReturn('returnInt4', typesTask.intType);
|
| - checkReturn('returnInt7', typesTask.intType);
|
| - checkReturn('returnInt8', typesTask.intType);
|
| - checkReturn('returnDynamic1', typesTask.dynamicType);
|
| - checkReturn('returnDynamic2', typesTask.dynamicType);
|
| - TypeMask intType = new TypeMask.nonNullSubtype(compiler.intClass.rawType);
|
| - checkReturn('testIsCheck1', intType);
|
| - checkReturn('testIsCheck2', intType);
|
| - checkReturn('testIsCheck3', intType.nullable());
|
| - checkReturn('testIsCheck4', intType);
|
| - checkReturn('testIsCheck5', intType);
|
| - checkReturn('testIsCheck6', typesTask.dynamicType);
|
| - checkReturn('testIsCheck7', intType);
|
| - checkReturn('testIsCheck8', typesTask.dynamicType);
|
| - checkReturn('testIsCheck9', intType);
|
| - checkReturn('testIsCheck10', typesTask.dynamicType);
|
| - checkReturn('testIsCheck11', intType);
|
| - checkReturn('testIsCheck12', typesTask.dynamicType);
|
| - checkReturn('testIsCheck13', intType);
|
| - checkReturn('testIsCheck14', typesTask.dynamicType);
|
| - checkReturn('testIsCheck15', intType);
|
| - checkReturn('testIsCheck16', typesTask.dynamicType);
|
| - checkReturn('testIsCheck17', intType);
|
| - checkReturn('testIsCheck18', typesTask.dynamicType);
|
| - checkReturn('testIsCheck19', typesTask.dynamicType);
|
| - checkReturn('testIsCheck20', typesTask.dynamicType.nonNullable());
|
| - checkReturn('testIf1', typesTask.intType.nullable());
|
| - checkReturn('testIf2', typesTask.intType.nullable());
|
| - checkReturn('returnAsString',
|
| - new TypeMask.subtype(compiler.stringClass.computeType(compiler)));
|
| - checkReturn('returnIntAsNum', typesTask.intType);
|
| - checkReturn('returnAsTypedef', typesTask.functionType.nullable());
|
| - checkReturn('returnTopLevelGetter', typesTask.intType);
|
| - checkReturn('testDeadCode', typesTask.intType);
|
| - checkReturn('testLabeledIf', typesTask.intType.nullable());
|
| - checkReturn('testSwitch1', typesTask.intType
|
| - .union(typesTask.doubleType, compiler).nullable().simplify(compiler));
|
| - checkReturn('testSwitch2', typesTask.intType);
|
| - checkReturn('testSwitch3', interceptorType.nullable());
|
| - checkReturn('testSwitch4', typesTask.intType);
|
| - checkReturn('testSwitch5', typesTask.intType);
|
| - checkReturn('testContinue1', interceptorType.nullable());
|
| - checkReturn('testBreak1', interceptorType.nullable());
|
| - checkReturn('testContinue2', interceptorType.nullable());
|
| - checkReturn('testBreak2', typesTask.intType.nullable());
|
| - checkReturn('testReturnElementOfConstList1', typesTask.intType);
|
| - checkReturn('testReturnElementOfConstList2', typesTask.intType);
|
| - checkReturn('testReturnItselfOrInt', typesTask.intType);
|
| - checkReturn('testReturnInvokeDynamicGetter', typesTask.dynamicType);
|
| -
|
| - checkReturn('testDoWhile1', typesTask.stringType);
|
| - checkReturn('testDoWhile2', typesTask.nullType);
|
| - checkReturn('testDoWhile3', interceptorType);
|
| - checkReturn('testDoWhile4', typesTask.numType);
|
| -
|
| - checkReturnInClass(String className, String methodName, type) {
|
| - var cls = findElement(compiler, className);
|
| - var element = cls.lookupLocalMember(buildSourceString(methodName));
|
| - Expect.equals(type,
|
| - typesInferrer.getReturnTypeOfElement(element).simplify(compiler));
|
| - }
|
| + asyncTest(() => compiler.runCompiler(uri).then((_) {
|
| + var typesTask = compiler.typesTask;
|
| + var typesInferrer = typesTask.typesInferrer;
|
| +
|
| + checkReturn(String name, type) {
|
| + var element = findElement(compiler, name);
|
| + Expect.equals(
|
| + type,
|
| + typesInferrer.getReturnTypeOfElement(element).simplify(compiler),
|
| + name);
|
| + }
|
| + var interceptorType =
|
| + findTypeMask(compiler, 'Interceptor', 'nonNullSubclass');
|
| +
|
| + checkReturn('returnNum1', typesTask.numType);
|
| + checkReturn('returnNum2', typesTask.numType);
|
| + checkReturn('returnInt1', typesTask.intType);
|
| + checkReturn('returnInt2', typesTask.intType);
|
| + checkReturn('returnDouble', typesTask.doubleType);
|
| + checkReturn('returnGiveUp', interceptorType);
|
| + checkReturn('returnInt5', typesTask.intType);
|
| + checkReturn('returnInt6', typesTask.intType);
|
| + checkReturn('returnIntOrNull', typesTask.intType.nullable());
|
| + checkReturn('returnInt3', typesTask.intType);
|
| + checkReturn('returnDynamic', typesTask.dynamicType);
|
| + checkReturn('returnInt4', typesTask.intType);
|
| + checkReturn('returnInt7', typesTask.intType);
|
| + checkReturn('returnInt8', typesTask.intType);
|
| + checkReturn('returnDynamic1', typesTask.dynamicType);
|
| + checkReturn('returnDynamic2', typesTask.dynamicType);
|
| + TypeMask intType = new TypeMask.nonNullSubtype(compiler.intClass.rawType);
|
| + checkReturn('testIsCheck1', intType);
|
| + checkReturn('testIsCheck2', intType);
|
| + checkReturn('testIsCheck3', intType.nullable());
|
| + checkReturn('testIsCheck4', intType);
|
| + checkReturn('testIsCheck5', intType);
|
| + checkReturn('testIsCheck6', typesTask.dynamicType);
|
| + checkReturn('testIsCheck7', intType);
|
| + checkReturn('testIsCheck8', typesTask.dynamicType);
|
| + checkReturn('testIsCheck9', intType);
|
| + checkReturn('testIsCheck10', typesTask.dynamicType);
|
| + checkReturn('testIsCheck11', intType);
|
| + checkReturn('testIsCheck12', typesTask.dynamicType);
|
| + checkReturn('testIsCheck13', intType);
|
| + checkReturn('testIsCheck14', typesTask.dynamicType);
|
| + checkReturn('testIsCheck15', intType);
|
| + checkReturn('testIsCheck16', typesTask.dynamicType);
|
| + checkReturn('testIsCheck17', intType);
|
| + checkReturn('testIsCheck18', typesTask.dynamicType);
|
| + checkReturn('testIsCheck19', typesTask.dynamicType);
|
| + checkReturn('testIsCheck20', typesTask.dynamicType.nonNullable());
|
| + checkReturn('testIf1', typesTask.intType.nullable());
|
| + checkReturn('testIf2', typesTask.intType.nullable());
|
| + checkReturn('returnAsString',
|
| + new TypeMask.subtype(compiler.stringClass.computeType(compiler)));
|
| + checkReturn('returnIntAsNum', typesTask.intType);
|
| + checkReturn('returnAsTypedef', typesTask.functionType.nullable());
|
| + checkReturn('returnTopLevelGetter', typesTask.intType);
|
| + checkReturn('testDeadCode', typesTask.intType);
|
| + checkReturn('testLabeledIf', typesTask.intType.nullable());
|
| + checkReturn('testSwitch1', typesTask.intType
|
| + .union(typesTask.doubleType, compiler)
|
| + .nullable().simplify(compiler));
|
| + checkReturn('testSwitch2', typesTask.intType);
|
| + checkReturn('testSwitch3', interceptorType.nullable());
|
| + checkReturn('testSwitch4', typesTask.intType);
|
| + checkReturn('testSwitch5', typesTask.intType);
|
| + checkReturn('testContinue1', interceptorType.nullable());
|
| + checkReturn('testBreak1', interceptorType.nullable());
|
| + checkReturn('testContinue2', interceptorType.nullable());
|
| + checkReturn('testBreak2', typesTask.intType.nullable());
|
| + checkReturn('testReturnElementOfConstList1', typesTask.intType);
|
| + checkReturn('testReturnElementOfConstList2', typesTask.intType);
|
| + checkReturn('testReturnItselfOrInt', typesTask.intType);
|
| + checkReturn('testReturnInvokeDynamicGetter', typesTask.dynamicType);
|
| +
|
| + checkReturn('testDoWhile1', typesTask.stringType);
|
| + checkReturn('testDoWhile2', typesTask.nullType);
|
| + checkReturn('testDoWhile3', interceptorType);
|
| + checkReturn('testDoWhile4', typesTask.numType);
|
| +
|
| + checkReturnInClass(String className, String methodName, type) {
|
| + var cls = findElement(compiler, className);
|
| + var element = cls.lookupLocalMember(buildSourceString(methodName));
|
| + Expect.equals(type,
|
| + typesInferrer.getReturnTypeOfElement(element).simplify(compiler));
|
| + }
|
|
|
| - checkReturnInClass('A', 'returnInt1', typesTask.intType);
|
| - checkReturnInClass('A', 'returnInt2', typesTask.intType);
|
| - checkReturnInClass('A', 'returnInt3', typesTask.intType);
|
| - checkReturnInClass('A', 'returnInt4', typesTask.intType);
|
| - checkReturnInClass('A', 'returnInt5', typesTask.intType);
|
| - checkReturnInClass('A', 'returnInt6', typesTask.intType);
|
| - checkReturnInClass('A', '==', interceptorType);
|
| -
|
| - checkReturnInClass('B', 'returnInt1', typesTask.intType);
|
| - checkReturnInClass('B', 'returnInt2', typesTask.intType);
|
| - checkReturnInClass('B', 'returnInt3', typesTask.intType);
|
| - checkReturnInClass('B', 'returnInt4', typesTask.intType);
|
| - checkReturnInClass('B', 'returnInt5', typesTask.intType);
|
| - checkReturnInClass('B', 'returnInt6', typesTask.intType);
|
| - checkReturnInClass('B', 'returnInt7', typesTask.intType);
|
| - checkReturnInClass('B', 'returnInt8', typesTask.intType);
|
| - checkReturnInClass('B', 'returnInt9', typesTask.intType);
|
| -
|
| - checkFactoryConstructor(String className, String factoryName) {
|
| - var cls = findElement(compiler, className);
|
| - var element = cls.localLookup(buildSourceString(factoryName));
|
| - Expect.equals(new TypeMask.nonNullExact(cls.rawType),
|
| - typesInferrer.getReturnTypeOfElement(element));
|
| - }
|
| - checkFactoryConstructor('A', '');
|
| -
|
| - checkReturn('testCascade1', typesTask.growableListType);
|
| - checkReturn('testCascade2', new TypeMask.nonNullExact(
|
| - typesTask.rawTypeOf(findElement(compiler, 'CascadeHelper'))));
|
| - checkReturn('testSpecialization1', typesTask.numType);
|
| - checkReturn('testSpecialization2', typesTask.dynamicType);
|
| - checkReturn('testSpecialization3', typesTask.intType.nullable());
|
| + checkReturnInClass('A', 'returnInt1', typesTask.intType);
|
| + checkReturnInClass('A', 'returnInt2', typesTask.intType);
|
| + checkReturnInClass('A', 'returnInt3', typesTask.intType);
|
| + checkReturnInClass('A', 'returnInt4', typesTask.intType);
|
| + checkReturnInClass('A', 'returnInt5', typesTask.intType);
|
| + checkReturnInClass('A', 'returnInt6', typesTask.intType);
|
| + checkReturnInClass('A', '==', interceptorType);
|
| +
|
| + checkReturnInClass('B', 'returnInt1', typesTask.intType);
|
| + checkReturnInClass('B', 'returnInt2', typesTask.intType);
|
| + checkReturnInClass('B', 'returnInt3', typesTask.intType);
|
| + checkReturnInClass('B', 'returnInt4', typesTask.intType);
|
| + checkReturnInClass('B', 'returnInt5', typesTask.intType);
|
| + checkReturnInClass('B', 'returnInt6', typesTask.intType);
|
| + checkReturnInClass('B', 'returnInt7', typesTask.intType);
|
| + checkReturnInClass('B', 'returnInt8', typesTask.intType);
|
| + checkReturnInClass('B', 'returnInt9', typesTask.intType);
|
| +
|
| + checkFactoryConstructor(String className, String factoryName) {
|
| + var cls = findElement(compiler, className);
|
| + var element = cls.localLookup(buildSourceString(factoryName));
|
| + Expect.equals(new TypeMask.nonNullExact(cls.rawType),
|
| + typesInferrer.getReturnTypeOfElement(element));
|
| + }
|
| + checkFactoryConstructor('A', '');
|
| +
|
| + checkReturn('testCascade1', typesTask.growableListType);
|
| + checkReturn('testCascade2', new TypeMask.nonNullExact(
|
| + typesTask.rawTypeOf(findElement(compiler, 'CascadeHelper'))));
|
| + checkReturn('testSpecialization1', typesTask.numType);
|
| + checkReturn('testSpecialization2', typesTask.dynamicType);
|
| + checkReturn('testSpecialization3', typesTask.intType.nullable());
|
| + }));
|
| }
|
|
|