Index: tests/compiler/dart2js/cpa_inference_test.dart |
diff --git a/tests/compiler/dart2js/cpa_inference_test.dart b/tests/compiler/dart2js/cpa_inference_test.dart |
index bbe7d385615fc5392dab33b4536bff1e0c4fc2fe..ab3b4bed5e1c1cea1b0ed33c558969994ca4f6a3 100644 |
--- a/tests/compiler/dart2js/cpa_inference_test.dart |
+++ b/tests/compiler/dart2js/cpa_inference_test.dart |
@@ -2,7 +2,9 @@ |
// for details. All rights reserved. Use of this source code is governed by a |
// BSD-style license that can be found in the LICENSE file. |
+import 'dart:async'; |
import "package:expect/expect.dart"; |
+import "package:async_helper/async_helper.dart"; |
import '../../../sdk/lib/_internal/compiler/implementation/source_file.dart'; |
import '../../../sdk/lib/_internal/compiler/implementation/types/types.dart'; |
import '../../../sdk/lib/_internal/compiler/implementation/types/concrete_types_inferrer.dart'; |
@@ -145,7 +147,7 @@ class AnalysisResult { |
const String CORELIB = r''' |
print(var obj) {} |
- abstract class num { |
+ abstract class num { |
num operator +(num x); |
num operator *(num x); |
num operator -(num x); |
@@ -174,7 +176,7 @@ const String CORELIB = r''' |
class Dynamic_ {} |
bool identical(Object a, Object b) {}'''; |
-AnalysisResult analyze(String code, {int maxConcreteTypeSize: 1000}) { |
+Future<AnalysisResult> analyze(String code, {int maxConcreteTypeSize: 1000}) { |
Uri uri = new Uri(scheme: 'source'); |
MockCompiler compiler = new MockCompiler( |
coreSource: CORELIB, |
@@ -182,8 +184,9 @@ AnalysisResult analyze(String code, {int maxConcreteTypeSize: 1000}) { |
maxConcreteTypeSize: maxConcreteTypeSize); |
compiler.sourceFiles[uri.toString()] = new SourceFile(uri.toString(), code); |
compiler.typesTask.concreteTypesInferrer.testMode = true; |
- compiler.runCompiler(uri); |
- return new AnalysisResult(compiler); |
+ return compiler.runCompiler(uri).then((_) { |
+ return new AnalysisResult(compiler); |
+ }); |
} |
testDynamicBackDoor() { |
@@ -193,8 +196,9 @@ testDynamicBackDoor() { |
x; |
} |
"""; |
- AnalysisResult result = analyze(source); |
- result.checkNodeHasUnknownType('x'); |
+ return analyze(source).then((result) { |
+ result.checkNodeHasUnknownType('x'); |
+ }); |
} |
testVariableDeclaration() { |
@@ -206,9 +210,10 @@ testVariableDeclaration() { |
v1; v2; |
} |
"""; |
- AnalysisResult result = analyze(source); |
- result.checkNodeHasType('v1', [result.nullType]); |
- result.checkNodeHasType('v2', [result.int]); |
+ return analyze(source).then((result) { |
+ result.checkNodeHasType('v1', [result.nullType]); |
+ result.checkNodeHasType('v2', [result.int]); |
+ }); |
} |
testLiterals() { |
@@ -222,12 +227,13 @@ testLiterals() { |
v1; v2; v3; v4; v5; |
} |
"""; |
- AnalysisResult result = analyze(source); |
- result.checkNodeHasType('v1', [result.int]); |
- result.checkNodeHasType('v2', [result.double]); |
- result.checkNodeHasType('v3', [result.string]); |
- result.checkNodeHasType('v4', [result.bool]); |
- result.checkNodeHasType('v5', [result.nullType]); |
+ return analyze(source).then((result) { |
+ result.checkNodeHasType('v1', [result.int]); |
+ result.checkNodeHasType('v2', [result.double]); |
+ result.checkNodeHasType('v3', [result.string]); |
+ result.checkNodeHasType('v4', [result.bool]); |
+ result.checkNodeHasType('v5', [result.nullType]); |
+ }); |
} |
testRedefinition() { |
@@ -238,8 +244,9 @@ testRedefinition() { |
foo; |
} |
"""; |
- AnalysisResult result = analyze(source); |
- result.checkNodeHasType('foo', [result.string]); |
+ return analyze(source).then((result) { |
+ result.checkNodeHasType('foo', [result.string]); |
+ }); |
} |
testIfThenElse() { |
@@ -254,8 +261,9 @@ testIfThenElse() { |
foo; |
} |
"""; |
- AnalysisResult result = analyze(source); |
- result.checkNodeHasType('foo', [result.string, result.bool]); |
+ return analyze(source).then((result) { |
+ result.checkNodeHasType('foo', [result.string, result.bool]); |
+ }); |
} |
testTernaryIf() { |
@@ -266,8 +274,9 @@ testTernaryIf() { |
foo; |
} |
"""; |
- AnalysisResult result = analyze(source); |
- result.checkNodeHasType('foo', [result.string, result.bool]); |
+ return analyze(source).then((result) { |
+ result.checkNodeHasType('foo', [result.string, result.bool]); |
+ }); |
} |
testWhile() { |
@@ -284,12 +293,13 @@ testWhile() { |
foo; bar; |
} |
"""; |
- AnalysisResult result = analyze(source); |
- result.checkNodeHasType( |
- 'foo', |
- [result.base('A'), result.base('B'), result.base('C')]); |
- // Check that the condition is evaluated. |
- result.checkNodeHasType('bar', [result.int]); |
+ return analyze(source).then((result) { |
+ result.checkNodeHasType( |
+ 'foo', |
+ [result.base('A'), result.base('B'), result.base('C')]); |
+ // Check that the condition is evaluated. |
+ result.checkNodeHasType('bar', [result.int]); |
+ }); |
} |
testDoWhile() { |
@@ -306,12 +316,13 @@ testDoWhile() { |
foo; bar; |
} |
"""; |
- AnalysisResult result = analyze(source); |
- result.checkNodeHasType( |
- 'foo', |
- [result.base('A'), result.base('B'), result.base('C')]); |
- // Check that the condition is evaluated. |
- result.checkNodeHasType('bar', [result.int]); |
+ return analyze(source).then((AnalysisResult result) { |
+ result.checkNodeHasType( |
+ 'foo', |
+ [result.base('A'), result.base('B'), result.base('C')]); |
+ // Check that the condition is evaluated. |
+ result.checkNodeHasType('bar', [result.int]); |
+ }); |
} |
testFor1() { |
@@ -327,10 +338,11 @@ testFor1() { |
foo; |
} |
"""; |
- AnalysisResult result = analyze(source); |
- result.checkNodeHasType( |
- 'foo', |
- [result.base('A'), result.base('B'), result.base('C')]); |
+ return analyze(source).then((result) { |
+ result.checkNodeHasType( |
+ 'foo', |
+ [result.base('A'), result.base('B'), result.base('C')]); |
+ }); |
} |
testFor2() { |
@@ -346,10 +358,11 @@ testFor2() { |
foo; bar; |
} |
"""; |
- AnalysisResult result = analyze(source); |
- result.checkNodeHasType('foo', [result.base('A'), result.base('B')]); |
- // Check that the condition is evaluated. |
- result.checkNodeHasType('bar', [result.int]); |
+ return analyze(source).then((result) { |
+ result.checkNodeHasType('foo', [result.base('A'), result.base('B')]); |
+ // Check that the condition is evaluated. |
+ result.checkNodeHasType('bar', [result.int]); |
+ }); |
} |
testFor3() { |
@@ -363,8 +376,9 @@ testFor3() { |
i; |
} |
"""; |
- AnalysisResult result = analyze(source); |
- result.checkNodeHasType('i', [result.int]); |
+ return analyze(source).then((result) { |
+ result.checkNodeHasType('i', [result.int]); |
+ }); |
} |
testForIn() { |
@@ -399,8 +413,10 @@ testForIn() { |
res; |
} |
"""; |
- AnalysisResult result = analyze(source); |
- result.checkNodeHasType('res', [result.int, result.string, result.nullType]); |
+ return analyze(source).then((AnalysisResult result) { |
+ result.checkNodeHasType('res', |
+ [result.int, result.string, result.nullType]); |
+ }); |
} |
testToplevelVariable() { |
@@ -409,15 +425,16 @@ testToplevelVariable() { |
class A { |
f() => top; |
} |
- main() { |
+ main() { |
var foo = top; |
var bar = new A().f(); |
foo; bar; |
} |
"""; |
- AnalysisResult result = analyze(source); |
- result.checkNodeHasType('foo', [result.string]); |
- result.checkNodeHasType('bar', [result.string]); |
+ return analyze(source).then((result) { |
+ result.checkNodeHasType('foo', [result.string]); |
+ result.checkNodeHasType('bar', [result.string]); |
+ }); |
} |
testNonRecusiveFunction() { |
@@ -425,8 +442,9 @@ testNonRecusiveFunction() { |
f(x, y) => true ? x : y; |
main() { var foo = f(42, "abc"); foo; } |
"""; |
- AnalysisResult result = analyze(source); |
- result.checkNodeHasType('foo', [result.int, result.string]); |
+ return analyze(source).then((result) { |
+ result.checkNodeHasType('foo', [result.int, result.string]); |
+ }); |
} |
testRecusiveFunction() { |
@@ -437,18 +455,20 @@ testRecusiveFunction() { |
} |
main() { var foo = f(42); foo; } |
"""; |
- AnalysisResult result = analyze(source); |
- result.checkNodeHasType('foo', [result.int, result.string]); |
+ return analyze(source).then((result) { |
+ result.checkNodeHasType('foo', [result.int, result.string]); |
+ }); |
} |
testMutuallyRecusiveFunction() { |
final String source = r""" |
f() => true ? 42 : g(); |
- g() => true ? "abc" : f(); |
+ g() => true ? "abc" : f(); |
main() { var foo = f(); foo; } |
"""; |
- AnalysisResult result = analyze(source); |
- result.checkNodeHasType('foo', [result.int, result.string]); |
+ return analyze(source).then((result) { |
+ result.checkNodeHasType('foo', [result.int, result.string]); |
+ }); |
} |
testSimpleSend() { |
@@ -463,7 +483,7 @@ testSimpleSend() { |
f(x) => 3.14; |
} |
class D { |
- var f; // we check that this field is ignored in calls to dynamic.f() |
+ var f; // we check that this field is ignored in calls to dynamic.f() |
D(this.f); |
} |
main() { |
@@ -473,9 +493,10 @@ testSimpleSend() { |
foo; bar; |
} |
"""; |
- AnalysisResult result = analyze(source); |
- result.checkNodeHasType('foo', [result.int]); |
- result.checkNodeHasType('bar', [result.int, result.string]); |
+ return analyze(source).then((result) { |
+ result.checkNodeHasType('foo', [result.int]); |
+ result.checkNodeHasType('bar', [result.int, result.string]); |
+ }); |
} |
testSendToClosureField() { |
@@ -490,8 +511,9 @@ testSendToClosureField() { |
foo; |
} |
"""; |
- AnalysisResult result = analyze(source); |
- result.checkNodeHasType('foo', [result.int]); |
+ return analyze(source).then((result) { |
+ result.checkNodeHasType('foo', [result.int]); |
+ }); |
} |
testSendToThis1() { |
@@ -506,8 +528,9 @@ testSendToThis1() { |
foo; |
} |
"""; |
- AnalysisResult result = analyze(source); |
- result.checkNodeHasType('foo', [result.int]); |
+ return analyze(source).then((result) { |
+ result.checkNodeHasType('foo', [result.int]); |
+ }); |
} |
testSendToThis2() { |
@@ -523,8 +546,9 @@ testSendToThis2() { |
x; |
} |
"""; |
- AnalysisResult result = analyze(source); |
- result.checkNodeHasType('x', [result.base('B')]); |
+ return analyze(source).then((result) { |
+ result.checkNodeHasType('x', [result.base('B')]); |
+ }); |
} |
testSendToThis3() { |
@@ -541,8 +565,9 @@ testSendToThis3() { |
x; |
} |
"""; |
- AnalysisResult result = analyze(source); |
- result.checkNodeHasType('x', [result.string]); |
+ return analyze(source).then((AnalysisResult result) { |
+ result.checkNodeHasType('x', [result.string]); |
+ }); |
} |
testConstructor() { |
@@ -556,11 +581,12 @@ testConstructor() { |
new A(true, null); |
} |
"""; |
- AnalysisResult result = analyze(source); |
- result.checkFieldHasType('A', 'x', [result.int, result.bool]); |
- result.checkFieldHasType('A', 'y', [result.string, result.nullType]); |
- // TODO(polux): we can be smarter and infer {string} for z |
- result.checkFieldHasType('A', 'z', [result.string, result.nullType]); |
+ return analyze(source).then((result) { |
+ result.checkFieldHasType('A', 'x', [result.int, result.bool]); |
+ result.checkFieldHasType('A', 'y', [result.string, result.nullType]); |
+ // TODO(polux): we can be smarter and infer {string} for z |
+ result.checkFieldHasType('A', 'z', [result.string, result.nullType]); |
+ }); |
} |
testGetters() { |
@@ -586,12 +612,13 @@ testGetters() { |
foo; bar; baz; qux; quux; |
} |
"""; |
- AnalysisResult result = analyze(source); |
- result.checkNodeHasType('foo', [result.int]); |
- result.checkNodeHasType('bar', [result.int]); |
- result.checkNodeHasType('baz', [result.int]); |
- result.checkNodeHasType('qux', []); |
- result.checkNodeHasType('quux', [result.int, result.string]); |
+ return analyze(source).then((result) { |
+ result.checkNodeHasType('foo', [result.int]); |
+ result.checkNodeHasType('bar', [result.int]); |
+ result.checkNodeHasType('baz', [result.int]); |
+ result.checkNodeHasType('qux', []); |
+ result.checkNodeHasType('quux', [result.int, result.string]); |
+ }); |
} |
testSetters() { |
@@ -617,20 +644,21 @@ testSetters() { |
"__dynamic_for_test".y = 3.14; |
} |
"""; |
- AnalysisResult result = analyze(source); |
- result.checkFieldHasType('B', 'x', |
- [result.int, // new B(42) |
- result.nullType]); // dynamic.x = null |
- result.checkFieldHasType('A', 'x', |
- [result.int, // new A(42, ...) |
- result.string, // a.x = 'abc' |
- result.bool, // a.y = true |
- result.nullType, // dynamic.x = null |
- result.double]); // dynamic.y = 3.14 |
- result.checkFieldHasType('A', 'w', |
- [result.int, // new A(..., 42) |
- result.bool, // a.y = true |
- result.double]); // dynamic.y = double |
+ return analyze(source).then((result) { |
+ result.checkFieldHasType('B', 'x', |
+ [result.int, // new B(42) |
+ result.nullType]); // dynamic.x = null |
+ result.checkFieldHasType('A', 'x', |
+ [result.int, // new A(42, ...) |
+ result.string, // a.x = 'abc' |
+ result.bool, // a.y = true |
+ result.nullType, // dynamic.x = null |
+ result.double]); // dynamic.y = 3.14 |
+ result.checkFieldHasType('A', 'w', |
+ [result.int, // new A(..., 42) |
+ result.bool, // a.y = true |
+ result.double]); // dynamic.y = double |
+ }); |
} |
testOptionalNamedParameters() { |
@@ -695,29 +723,30 @@ testOptionalNamedParameters() { |
test.f3(1, z: 2); // non-existing named parameter |
} |
"""; |
- AnalysisResult result = analyze(source); |
- |
- final foo = result.base('Foo'); |
- final nil = result.nullType; |
- |
- result.checkFieldHasType('A', 'x', [result.int, result.string]); |
- result.checkFieldHasType('A', 'y', [nil]); |
- result.checkFieldHasType('A', 'z', [nil, result.double]); |
- result.checkFieldHasType('A', 'w', [nil, result.bool]); |
- result.checkFieldHasType('Test', 'a', [foo, result.int, result.string]); |
- result.checkFieldHasType('Test', 'b', [foo, nil]); |
- result.checkFieldHasType('Test', 'c', [foo, nil, result.double]); |
- result.checkFieldHasType('Test', 'd', [foo, nil, result.bool]); |
- |
- result.checkFieldHasType('B', 'x', [result.string]); |
- result.checkFieldHasType('B', 'y', [result.bool]); |
- result.checkFieldHasType('Test', 'e', [foo, result.string]); |
- result.checkFieldHasType('Test', 'f', [foo, result.bool]); |
- |
- result.checkFieldHasType('C', 'x', [result.string]); |
- result.checkFieldHasType('C', 'y', [result.bool]); |
- result.checkFieldHasType('Test', 'g', [foo, result.string]); |
- result.checkFieldHasType('Test', 'h', [foo, result.bool]); |
+ return analyze(source).then((result) { |
+ |
+ final foo = result.base('Foo'); |
+ final nil = result.nullType; |
+ |
+ result.checkFieldHasType('A', 'x', [result.int, result.string]); |
+ result.checkFieldHasType('A', 'y', [nil]); |
+ result.checkFieldHasType('A', 'z', [nil, result.double]); |
+ result.checkFieldHasType('A', 'w', [nil, result.bool]); |
+ result.checkFieldHasType('Test', 'a', [foo, result.int, result.string]); |
+ result.checkFieldHasType('Test', 'b', [foo, nil]); |
+ result.checkFieldHasType('Test', 'c', [foo, nil, result.double]); |
+ result.checkFieldHasType('Test', 'd', [foo, nil, result.bool]); |
+ |
+ result.checkFieldHasType('B', 'x', [result.string]); |
+ result.checkFieldHasType('B', 'y', [result.bool]); |
+ result.checkFieldHasType('Test', 'e', [foo, result.string]); |
+ result.checkFieldHasType('Test', 'f', [foo, result.bool]); |
+ |
+ result.checkFieldHasType('C', 'x', [result.string]); |
+ result.checkFieldHasType('C', 'y', [result.bool]); |
+ result.checkFieldHasType('Test', 'g', [foo, result.string]); |
+ result.checkFieldHasType('Test', 'h', [foo, result.bool]); |
+ }); |
} |
testOptionalPositionalParameters() { |
@@ -767,24 +796,25 @@ testOptionalPositionalParameters() { |
test.f2(1, 2, 3); // too many arguments |
} |
"""; |
- AnalysisResult result = analyze(source); |
- |
- final foo = result.base('Foo'); |
- final nil = result.nullType; |
- |
- result.checkFieldHasType('A', 'x', [result.int, result.string]); |
- result.checkFieldHasType('A', 'y', [nil, result.bool]); |
- result.checkFieldHasType('A', 'z', [nil, result.double]); |
- result.checkFieldHasType('A', 'w', [nil]); |
- result.checkFieldHasType('Test', 'a', [foo, result.int, result.string]); |
- result.checkFieldHasType('Test', 'b', [foo, nil, result.bool]); |
- result.checkFieldHasType('Test', 'c', [foo, nil, result.double]); |
- result.checkFieldHasType('Test', 'd', [foo, nil]); |
- |
- result.checkFieldHasType('B', 'x', [result.string]); |
- result.checkFieldHasType('B', 'y', [result.bool]); |
- result.checkFieldHasType('Test', 'e', [foo, result.string]); |
- result.checkFieldHasType('Test', 'f', [foo, result.bool]); |
+ return analyze(source).then((result) { |
+ |
+ final foo = result.base('Foo'); |
+ final nil = result.nullType; |
+ |
+ result.checkFieldHasType('A', 'x', [result.int, result.string]); |
+ result.checkFieldHasType('A', 'y', [nil, result.bool]); |
+ result.checkFieldHasType('A', 'z', [nil, result.double]); |
+ result.checkFieldHasType('A', 'w', [nil]); |
+ result.checkFieldHasType('Test', 'a', [foo, result.int, result.string]); |
+ result.checkFieldHasType('Test', 'b', [foo, nil, result.bool]); |
+ result.checkFieldHasType('Test', 'c', [foo, nil, result.double]); |
+ result.checkFieldHasType('Test', 'd', [foo, nil]); |
+ |
+ result.checkFieldHasType('B', 'x', [result.string]); |
+ result.checkFieldHasType('B', 'y', [result.bool]); |
+ result.checkFieldHasType('Test', 'e', [foo, result.string]); |
+ result.checkFieldHasType('Test', 'f', [foo, result.bool]); |
+ }); |
} |
testListLiterals() { |
@@ -799,10 +829,11 @@ testListLiterals() { |
x; y; |
} |
"""; |
- AnalysisResult result = analyze(source); |
- result.checkNodeHasType('x', [result.growableList]); |
- result.checkNodeHasType('y', [result.growableList]); |
- result.checkFieldHasType('A', 'x', [result.int]); |
+ return analyze(source).then((result) { |
+ result.checkNodeHasType('x', [result.growableList]); |
+ result.checkNodeHasType('y', [result.growableList]); |
+ result.checkFieldHasType('A', 'x', [result.int]); |
+ }); |
} |
testMapLiterals() { |
@@ -817,10 +848,11 @@ testMapLiterals() { |
x; y; |
} |
"""; |
- AnalysisResult result = analyze(source); |
- result.checkNodeHasType('x', [result.map]); |
- result.checkNodeHasType('y', [result.map]); |
- result.checkFieldHasType('A', 'x', [result.int]); |
+ return analyze(source).then((result) { |
+ result.checkNodeHasType('x', [result.map]); |
+ result.checkNodeHasType('y', [result.map]); |
+ result.checkFieldHasType('A', 'x', [result.int]); |
+ }); |
} |
testReturn() { |
@@ -833,9 +865,10 @@ testReturn() { |
x; y; |
} |
"""; |
- AnalysisResult result = analyze(source); |
- result.checkNodeHasType('x', [result.int, result.string]); |
- result.checkNodeHasType('y', [result.nullType]); |
+ return analyze(source).then((result) { |
+ result.checkNodeHasType('x', [result.int, result.string]); |
+ result.checkNodeHasType('y', [result.nullType]); |
+ }); |
} |
testNoReturn() { |
@@ -848,9 +881,10 @@ testNoReturn() { |
x; y; |
} |
"""; |
- AnalysisResult result = analyze(source); |
- result.checkNodeHasType('x', [result.int, result.nullType]); |
- result.checkNodeHasType('y', [result.nullType]); |
+ return analyze(source).then((result) { |
+ result.checkNodeHasType('x', [result.int, result.nullType]); |
+ result.checkNodeHasType('y', [result.nullType]); |
+ }); |
} |
testArithmeticOperators() { |
@@ -872,21 +906,22 @@ testArithmeticOperators() { |
a; b; c; d; e; f; g; h; i; j; k; l; |
}"""; |
} |
- for (String op in ['+', '*', '-']) { |
- AnalysisResult result = analyze(source(op)); |
- result.checkNodeHasType('a', [result.int]); |
- result.checkNodeHasType('b', [result.num]); |
- result.checkNodeHasType('c', [result.num]); |
- result.checkNodeHasType('d', [result.double]); |
- result.checkNodeHasType('e', [result.num]); |
- result.checkNodeHasType('f', [result.num]); |
- result.checkNodeHasType('g', [result.num]); |
- result.checkNodeHasType('h', [result.num]); |
- result.checkNodeHasType('i', [result.int]); |
- result.checkNodeHasType('j', [result.int]); |
- result.checkNodeHasType('k', [result.double]); |
- result.checkNodeHasType('l', [result.double]); |
- } |
+ return Future.forEach(['+', '*', '-'], (String op) { |
+ return analyze(source(op)).then((result) { |
+ result.checkNodeHasType('a', [result.int]); |
+ result.checkNodeHasType('b', [result.num]); |
+ result.checkNodeHasType('c', [result.num]); |
+ result.checkNodeHasType('d', [result.double]); |
+ result.checkNodeHasType('e', [result.num]); |
+ result.checkNodeHasType('f', [result.num]); |
+ result.checkNodeHasType('g', [result.num]); |
+ result.checkNodeHasType('h', [result.num]); |
+ result.checkNodeHasType('i', [result.int]); |
+ result.checkNodeHasType('j', [result.int]); |
+ result.checkNodeHasType('k', [result.double]); |
+ result.checkNodeHasType('l', [result.double]); |
+ }); |
+ }); |
} |
testBooleanOperators() { |
@@ -900,13 +935,14 @@ testBooleanOperators() { |
a; b; c; d; |
}"""; |
} |
- for (String op in ['&&', '||']) { |
- AnalysisResult result = analyze(source(op)); |
- result.checkNodeHasType('a', [result.bool]); |
- result.checkNodeHasType('b', [result.bool]); |
- result.checkNodeHasType('c', [result.bool]); |
- result.checkNodeHasType('d', [result.bool]); |
- } |
+ return Future.forEach(['&&', '||'], (String op) { |
+ return analyze(source(op)).then((result) { |
+ result.checkNodeHasType('a', [result.bool]); |
+ result.checkNodeHasType('b', [result.bool]); |
+ result.checkNodeHasType('c', [result.bool]); |
+ result.checkNodeHasType('d', [result.bool]); |
+ }); |
+ }); |
} |
testBooleanOperatorsShortCirtcuit() { |
@@ -918,10 +954,11 @@ testBooleanOperatorsShortCirtcuit() { |
x; |
}"""; |
} |
- for (String op in ['&&', '||']) { |
- AnalysisResult result = analyze(source(op)); |
- result.checkNodeHasType('x', [result.nullType, result.int]); |
- } |
+ return Future.forEach(['&&', '||'], (String op) { |
+ return analyze(source(op)).then((AnalysisResult result) { |
+ result.checkNodeHasType('x', [result.nullType, result.int]); |
+ }); |
+ }); |
} |
testOperators() { |
@@ -936,9 +973,10 @@ testOperators() { |
x; y; |
} |
"""; |
- AnalysisResult result = analyze(source); |
- result.checkNodeHasType('x', [result.int]); |
- result.checkNodeHasType('y', [result.string]); |
+ return analyze(source).then((result) { |
+ result.checkNodeHasType('x', [result.int]); |
+ result.checkNodeHasType('y', [result.string]); |
+ }); |
} |
testSetIndexOperator() { |
@@ -953,10 +991,11 @@ testSetIndexOperator() { |
x; |
} |
"""; |
- AnalysisResult result = analyze(source); |
- result.checkNodeHasType('x', [result.string]); |
- result.checkFieldHasType('A', 'witness1', [result.int, result.nullType]); |
- result.checkFieldHasType('A', 'witness2', [result.string, result.nullType]); |
+ return analyze(source).then((result) { |
+ result.checkNodeHasType('x', [result.string]); |
+ result.checkFieldHasType('A', 'witness1', [result.int, result.nullType]); |
+ result.checkFieldHasType('A', 'witness2', [result.string, result.nullType]); |
+ }); |
} |
testCompoundOperators1() { |
@@ -981,13 +1020,14 @@ testCompoundOperators1() { |
x1; x2; x3; x4; x5; x6; |
} |
"""; |
- AnalysisResult result = analyze(source); |
- result.checkNodeHasType('x1', [result.int]); |
- result.checkNodeHasType('x2', [result.int]); |
- result.checkNodeHasType('x3', [result.int]); |
- result.checkNodeHasType('x4', [result.string]); |
- result.checkNodeHasType('x5', [result.string]); |
- result.checkNodeHasType('x6', [result.string]); |
+ return analyze(source).then((result) { |
+ result.checkNodeHasType('x1', [result.int]); |
+ result.checkNodeHasType('x2', [result.int]); |
+ result.checkNodeHasType('x3', [result.int]); |
+ result.checkNodeHasType('x4', [result.string]); |
+ result.checkNodeHasType('x5', [result.string]); |
+ result.checkNodeHasType('x6', [result.string]); |
+ }); |
} |
@@ -1010,16 +1050,17 @@ testCompoundOperators2() { |
main () { |
var a = new A(1, 1); |
a.x++; |
- a.y++; |
+ a.y++; |
} |
"""; |
- AnalysisResult result = analyze(source); |
- result.checkFieldHasType('A', 'xx', [result.int]); |
- result.checkFieldHasType('A', 'yy', [result.int]); |
- result.checkFieldHasType('A', 'witness1', [result.string, result.nullType]); |
- result.checkFieldHasType('A', 'witness2', [result.string, result.nullType]); |
- result.checkFieldHasType('A', 'witness3', [result.string, result.nullType]); |
- result.checkFieldHasType('A', 'witness4', [result.string, result.nullType]); |
+ return analyze(source).then((result) { |
+ result.checkFieldHasType('A', 'xx', [result.int]); |
+ result.checkFieldHasType('A', 'yy', [result.int]); |
+ result.checkFieldHasType('A', 'witness1', [result.string, result.nullType]); |
+ result.checkFieldHasType('A', 'witness2', [result.string, result.nullType]); |
+ result.checkFieldHasType('A', 'witness3', [result.string, result.nullType]); |
+ result.checkFieldHasType('A', 'witness4', [result.string, result.nullType]); |
+ }); |
} |
testInequality() { |
@@ -1038,11 +1079,12 @@ testInequality() { |
foo; bar; baz; |
} |
"""; |
- AnalysisResult result = analyze(source); |
- result.checkNodeHasType('foo', [result.bool]); |
- result.checkNodeHasType('bar', [result.bool]); |
- result.checkNodeHasType('baz', []); |
- result.checkFieldHasType('A', 'witness', [result.string, result.nullType]); |
+ return analyze(source).then((result) { |
+ result.checkNodeHasType('foo', [result.bool]); |
+ result.checkNodeHasType('bar', [result.bool]); |
+ result.checkNodeHasType('baz', []); |
+ result.checkFieldHasType('A', 'witness', [result.string, result.nullType]); |
+ }); |
} |
testFieldInitialization1() { |
@@ -1058,10 +1100,11 @@ testFieldInitialization1() { |
new B(); |
} |
"""; |
- AnalysisResult result = analyze(source); |
- result.checkFieldHasType('A', 'x', [result.nullType]); |
- result.checkFieldHasType('A', 'y', [result.int]); |
- result.checkFieldHasType('B', 'z', [result.string]); |
+ return analyze(source).then((result) { |
+ result.checkFieldHasType('A', 'x', [result.nullType]); |
+ result.checkFieldHasType('A', 'y', [result.int]); |
+ result.checkFieldHasType('B', 'z', [result.string]); |
+ }); |
} |
testFieldInitialization2() { |
@@ -1074,8 +1117,9 @@ testFieldInitialization2() { |
new A(); |
} |
"""; |
- AnalysisResult result = analyze(source); |
- result.checkFieldHasType('A', 'x', [result.int]); |
+ return analyze(source).then((result) { |
+ result.checkFieldHasType('A', 'x', [result.int]); |
+ }); |
} |
testFieldInitialization3() { |
@@ -1095,15 +1139,16 @@ testFieldInitialization3() { |
foo; bar; |
} |
"""; |
- AnalysisResult result = analyze(source); |
- // checks that B.B is set as a reader of A.x |
- result.checkFieldHasType('B', 'x', [result.nullType, result.string]); |
- // checks that B.B is set as a caller of f |
- result.checkFieldHasType('B', 'y', [result.nullType, result.string]); |
- // checks that readers of x are notified by changes in x's type |
- result.checkNodeHasType('foo', [result.nullType, result.string]); |
- // checks that readers of y are notified by changes in y's type |
- result.checkNodeHasType('bar', [result.nullType, result.string]); |
+ return analyze(source).then((result) { |
+ // checks that B.B is set as a reader of A.x |
+ result.checkFieldHasType('B', 'x', [result.nullType, result.string]); |
+ // checks that B.B is set as a caller of f |
+ result.checkFieldHasType('B', 'y', [result.nullType, result.string]); |
+ // checks that readers of x are notified by changes in x's type |
+ result.checkNodeHasType('foo', [result.nullType, result.string]); |
+ // checks that readers of y are notified by changes in y's type |
+ result.checkNodeHasType('bar', [result.nullType, result.string]); |
+ }); |
} |
testLists() { |
@@ -1135,16 +1180,17 @@ testLists() { |
var x8 = l2.removeLast(); |
x1; x2; x3; x4; x5; x6; x7; x8; |
}"""; |
- AnalysisResult result = analyze(source); |
- final expectedTypes = ['A', 'C', 'D', 'F', 'G'].map(result.base).toList(); |
- result.checkNodeHasType('x1', expectedTypes); |
- result.checkNodeHasType('x2', expectedTypes); |
- result.checkNodeHasType('x3', []); |
- result.checkNodeHasType('x4', expectedTypes); |
- result.checkNodeHasType('x5', expectedTypes); |
- result.checkNodeHasType('x6', []); |
- result.checkNodeHasType('x7', expectedTypes); |
- result.checkNodeHasType('x8', expectedTypes); |
+ return analyze(source).then((result) { |
+ final expectedTypes = ['A', 'C', 'D', 'F', 'G'].map(result.base).toList(); |
+ result.checkNodeHasType('x1', expectedTypes); |
+ result.checkNodeHasType('x2', expectedTypes); |
+ result.checkNodeHasType('x3', []); |
+ result.checkNodeHasType('x4', expectedTypes); |
+ result.checkNodeHasType('x5', expectedTypes); |
+ result.checkNodeHasType('x6', []); |
+ result.checkNodeHasType('x7', expectedTypes); |
+ result.checkNodeHasType('x8', expectedTypes); |
+ }); |
} |
testListWithCapacity() { |
@@ -1154,8 +1200,9 @@ testListWithCapacity() { |
var x = [][0]; |
x; |
}"""; |
- AnalysisResult result = analyze(source); |
- result.checkNodeHasType('x', [result.nullType]); |
+ return analyze(source).then((result) { |
+ result.checkNodeHasType('x', [result.nullType]); |
+ }); |
} |
testEmptyList() { |
@@ -1165,8 +1212,9 @@ testEmptyList() { |
var x = l[0]; |
x; |
}"""; |
- AnalysisResult result = analyze(source); |
- result.checkNodeHasType('x', []); |
+ return analyze(source).then((result) { |
+ result.checkNodeHasType('x', []); |
+ }); |
} |
testSendWithWrongArity() { |
@@ -1181,11 +1229,12 @@ testSendWithWrongArity() { |
x; y; z; w; |
} |
"""; |
- AnalysisResult result = analyze(source); |
- result.checkNodeHasType('x', []); |
- result.checkNodeHasType('y', []); |
- result.checkNodeHasType('z', []); |
- result.checkNodeHasType('w', []); |
+ return analyze(source).then((result) { |
+ result.checkNodeHasType('x', []); |
+ result.checkNodeHasType('y', []); |
+ result.checkNodeHasType('z', []); |
+ result.checkNodeHasType('w', []); |
+ }); |
} |
testBigTypesWidening1() { |
@@ -1198,9 +1247,10 @@ testBigTypesWidening1() { |
x; y; |
} |
"""; |
- AnalysisResult result = analyze(source, maxConcreteTypeSize: 2); |
- result.checkNodeHasType('x', [result.int, result.string]); |
- result.checkNodeHasUnknownType('y'); |
+ return analyze(source, maxConcreteTypeSize: 2).then((result) { |
+ result.checkNodeHasType('x', [result.int, result.string]); |
+ result.checkNodeHasUnknownType('y'); |
+ }); |
} |
testBigTypesWidening2() { |
@@ -1216,9 +1266,10 @@ testBigTypesWidening2() { |
a.y = true; |
} |
"""; |
- AnalysisResult result = analyze(source, maxConcreteTypeSize: 2); |
- result.checkFieldHasType('A', 'x', [result.int, result.string]); |
- result.checkFieldHasUknownType('A', 'y'); |
+ return analyze(source, maxConcreteTypeSize: 2).then((result) { |
+ result.checkFieldHasType('A', 'x', [result.int, result.string]); |
+ result.checkFieldHasUknownType('A', 'y'); |
+ }); |
} |
testDynamicIsAbsorbing() { |
@@ -1233,8 +1284,9 @@ testDynamicIsAbsorbing() { |
x; |
} |
"""; |
- AnalysisResult result = analyze(source); |
- result.checkNodeHasUnknownType('x'); |
+ return analyze(source).then((result) { |
+ result.checkNodeHasUnknownType('x'); |
+ }); |
} |
testJsCall() { |
@@ -1279,34 +1331,35 @@ testJsCall() { |
iNull; j; |
} |
"""; |
- AnalysisResult result = analyze(source); |
- List maybe(List types) => new List.from(types)..add(result.nullType); |
- result.checkNodeHasUnknownType('a'); |
- result.checkNodeHasUnknownType('b'); |
- final expectedCType = [result.growableList]; |
- result.checkNodeHasType('c', expectedCType); |
- result.checkNodeHasType('cNull', maybe(expectedCType)); |
- final expectedDType = [result.string]; |
- result.checkNodeHasType('d', expectedDType); |
- result.checkNodeHasType('dNull', maybe(expectedDType)); |
- final expectedEType = [result.int]; |
- result.checkNodeHasType('e', expectedEType); |
- result.checkNodeHasType('eNull', maybe(expectedEType)); |
- final expectedFType = [result.double]; |
- result.checkNodeHasType('f', expectedFType); |
- result.checkNodeHasType('fNull', maybe(expectedFType)); |
- final expectedGType = [result.num]; |
- result.checkNodeHasType('g', expectedGType); |
- result.checkNodeHasType('gNull', maybe(expectedGType)); |
- final expectedHType = [result.bool]; |
- result.checkNodeHasType('h', expectedHType); |
- result.checkNodeHasType('hNull', maybe(expectedHType)); |
- final expectedIType = [result.base('A'), result.base('B'), |
- result.base('BB'), result.base('C'), |
- result.base('D')]; |
- result.checkNodeHasType('i', expectedIType); |
- result.checkNodeHasType('iNull', maybe(expectedIType)); |
- result.checkNodeHasType('j', []); |
+ return analyze(source).then((result) { |
+ List maybe(List types) => new List.from(types)..add(result.nullType); |
+ result.checkNodeHasUnknownType('a'); |
+ result.checkNodeHasUnknownType('b'); |
+ final expectedCType = [result.growableList]; |
+ result.checkNodeHasType('c', expectedCType); |
+ result.checkNodeHasType('cNull', maybe(expectedCType)); |
+ final expectedDType = [result.string]; |
+ result.checkNodeHasType('d', expectedDType); |
+ result.checkNodeHasType('dNull', maybe(expectedDType)); |
+ final expectedEType = [result.int]; |
+ result.checkNodeHasType('e', expectedEType); |
+ result.checkNodeHasType('eNull', maybe(expectedEType)); |
+ final expectedFType = [result.double]; |
+ result.checkNodeHasType('f', expectedFType); |
+ result.checkNodeHasType('fNull', maybe(expectedFType)); |
+ final expectedGType = [result.num]; |
+ result.checkNodeHasType('g', expectedGType); |
+ result.checkNodeHasType('gNull', maybe(expectedGType)); |
+ final expectedHType = [result.bool]; |
+ result.checkNodeHasType('h', expectedHType); |
+ result.checkNodeHasType('hNull', maybe(expectedHType)); |
+ final expectedIType = [result.base('A'), result.base('B'), |
+ result.base('BB'), result.base('C'), |
+ result.base('D')]; |
+ result.checkNodeHasType('i', expectedIType); |
+ result.checkNodeHasType('iNull', maybe(expectedIType)); |
+ result.checkNodeHasType('j', []); |
+ }); |
} |
testJsCallAugmentsSeenClasses() { |
@@ -1316,20 +1369,23 @@ testJsCallAugmentsSeenClasses() { |
x; |
} |
"""; |
- AnalysisResult result1 = analyze(source1); |
- result1.checkNodeHasType('x', []); |
- |
- final String source2 = r""" |
- import 'dart:foreign'; |
- |
- main () { |
- var x = "__dynamic_for_test".truncate(); |
- JS('double', 'foo'); |
- x; |
- } |
- """; |
- AnalysisResult result2 = analyze(source2); |
- result2.checkNodeHasType('x', [result2.int]); |
+ return analyze(source1).then((AnalysisResult result) { |
+ result.checkNodeHasType('x', []); |
+ }).whenComplete(() { |
+ |
+ final String source2 = r""" |
+ import 'dart:foreign'; |
+ |
+ main () { |
+ var x = "__dynamic_for_test".truncate(); |
+ JS('double', 'foo'); |
+ x; |
+ } |
+ """; |
+ return analyze(source2).then((AnalysisResult result) { |
+ result.checkNodeHasType('x', [result.int]); |
+ }); |
+ }); |
} |
testIsCheck() { |
@@ -1339,8 +1395,9 @@ testIsCheck() { |
x; |
} |
"""; |
- AnalysisResult result = analyze(source); |
- result.checkNodeHasType('x', [result.bool]); |
+ return analyze(source).then((result) { |
+ result.checkNodeHasType('x', [result.bool]); |
+ }); |
} |
testSeenClasses() { |
@@ -1366,8 +1423,9 @@ testSeenClasses() { |
foo; |
} |
"""; |
- AnalysisResult result = analyze(source); |
- result.checkNodeHasType('foo', [result.int]); |
+ return analyze(source).then((result) { |
+ result.checkNodeHasType('foo', [result.int]); |
+ }); |
} |
testIntDoubleNum() { |
@@ -1379,10 +1437,11 @@ testIntDoubleNum() { |
a; b; c; |
} |
"""; |
- AnalysisResult result = analyze(source); |
- result.checkNodeHasType('a', [result.int]); |
- result.checkNodeHasType('b', [result.double]); |
- result.checkNodeHasType('c', [result.num]); |
+ return analyze(source).then((result) { |
+ result.checkNodeHasType('a', [result.int]); |
+ result.checkNodeHasType('b', [result.double]); |
+ result.checkNodeHasType('c', [result.num]); |
+ }); |
} |
testConcreteTypeToTypeMask() { |
@@ -1398,46 +1457,48 @@ testConcreteTypeToTypeMask() { |
new D(); |
} |
"""; |
- AnalysisResult result = analyze(source); |
+ return analyze(source).then((result) { |
- convert(ConcreteType type) { |
- return result.compiler.typesTask.concreteTypesInferrer |
- .concreteTypeToTypeMask(type); |
- } |
+ convert(ConcreteType type) { |
+ return result.compiler.typesTask.concreteTypesInferrer |
+ .concreteTypeToTypeMask(type); |
+ } |
- final nullSingleton = |
- result.compiler.typesTask.concreteTypesInferrer.singletonConcreteType( |
- new NullBaseType()); |
+ final nullSingleton = |
+ result.compiler.typesTask.concreteTypesInferrer.singletonConcreteType( |
+ new NullBaseType()); |
- singleton(ClassElement element) { |
- return result.compiler.typesTask.concreteTypesInferrer |
- .singletonConcreteType(new ClassBaseType(element)); |
- } |
+ singleton(ClassElement element) { |
+ return result.compiler.typesTask.concreteTypesInferrer |
+ .singletonConcreteType(new ClassBaseType(element)); |
+ } |
- ClassElement a = findElement(result.compiler, 'A'); |
- ClassElement b = findElement(result.compiler, 'B'); |
- ClassElement c = findElement(result.compiler, 'C'); |
- ClassElement d = findElement(result.compiler, 'D'); |
+ ClassElement a = findElement(result.compiler, 'A'); |
+ ClassElement b = findElement(result.compiler, 'B'); |
+ ClassElement c = findElement(result.compiler, 'C'); |
+ ClassElement d = findElement(result.compiler, 'D'); |
- for (ClassElement cls in [a, b, c, d]) { |
- Expect.equals(convert(singleton(cls)), |
- new TypeMask.nonNullExact(cls.rawType)); |
- } |
+ for (ClassElement cls in [a, b, c, d]) { |
+ Expect.equals(convert(singleton(cls)), |
+ new TypeMask.nonNullExact(cls.rawType)); |
+ } |
- for (ClassElement cls in [a, b, c, d]) { |
- Expect.equals(convert(singleton(cls).union(nullSingleton)), |
- new TypeMask.exact(cls.rawType)); |
- } |
+ for (ClassElement cls in [a, b, c, d]) { |
+ Expect.equals(convert(singleton(cls).union(nullSingleton)), |
+ new TypeMask.exact(cls.rawType)); |
+ } |
- Expect.equals(convert(singleton(a).union(singleton(b))), |
- new TypeMask.nonNullSubclass(a.rawType)); |
+ Expect.equals(convert(singleton(a).union(singleton(b))), |
+ new TypeMask.nonNullSubclass(a.rawType)); |
- Expect.equals(convert(singleton(a).union(singleton(b)).union(nullSingleton)), |
- new TypeMask.subclass(a.rawType)); |
+ Expect.equals( |
+ convert(singleton(a).union(singleton(b)).union(nullSingleton)), |
+ new TypeMask.subclass(a.rawType)); |
- Expect.equals( |
- convert(singleton(b).union(singleton(d))).simplify(result.compiler), |
- new TypeMask.nonNullSubtype(a.rawType)); |
+ Expect.equals( |
+ convert(singleton(b).union(singleton(d))).simplify(result.compiler), |
+ new TypeMask.nonNullSubtype(a.rawType)); |
+ }); |
} |
testSelectors() { |
@@ -1463,45 +1524,46 @@ testSelectors() { |
new Z().foo(); |
} |
"""; |
- AnalysisResult result = analyze(source); |
+ return analyze(source).then((result) { |
- inferredType(Selector selector) { |
- return result.compiler.typesTask.concreteTypesInferrer |
- .getTypeOfSelector(selector); |
- } |
+ inferredType(Selector selector) { |
+ return result.compiler.typesTask.concreteTypesInferrer |
+ .getTypeOfSelector(selector); |
+ } |
- ClassElement abc = findElement(result.compiler, 'ABC'); |
- ClassElement bc = findElement(result.compiler, 'BC'); |
- ClassElement a = findElement(result.compiler, 'A'); |
- ClassElement b = findElement(result.compiler, 'B'); |
- ClassElement c = findElement(result.compiler, 'C'); |
- ClassElement xy = findElement(result.compiler, 'XY'); |
- ClassElement x = findElement(result.compiler, 'X'); |
- ClassElement y = findElement(result.compiler, 'Y'); |
- ClassElement z = findElement(result.compiler, 'Z'); |
- |
- Selector foo = new Selector.call(buildSourceString("foo"), null, 0); |
- |
- Expect.equals( |
- inferredType(foo).simplify(result.compiler), |
- new TypeMask.nonNullSubclass(abc.rawType)); |
- Expect.equals( |
- inferredType(new TypedSelector.subclass(x.rawType, foo)), |
- new TypeMask.nonNullExact(b.rawType)); |
- Expect.equals( |
- inferredType(new TypedSelector.subclass(y.rawType, foo)), |
- new TypeMask.nonNullExact(c.rawType)); |
- Expect.equals( |
- inferredType(new TypedSelector.subclass(z.rawType, foo)), |
- new TypeMask.nonNullExact(a.rawType)); |
- Expect.equals( |
- inferredType(new TypedSelector.subclass( |
- xy.rawType, foo)).simplify(result.compiler), |
- new TypeMask.nonNullSubclass(bc.rawType)); |
- |
- Selector bar = new Selector.call(buildSourceString("bar"), null, 0); |
- |
- Expect.isNull(inferredType(bar)); |
+ ClassElement abc = findElement(result.compiler, 'ABC'); |
+ ClassElement bc = findElement(result.compiler, 'BC'); |
+ ClassElement a = findElement(result.compiler, 'A'); |
+ ClassElement b = findElement(result.compiler, 'B'); |
+ ClassElement c = findElement(result.compiler, 'C'); |
+ ClassElement xy = findElement(result.compiler, 'XY'); |
+ ClassElement x = findElement(result.compiler, 'X'); |
+ ClassElement y = findElement(result.compiler, 'Y'); |
+ ClassElement z = findElement(result.compiler, 'Z'); |
+ |
+ Selector foo = new Selector.call(buildSourceString("foo"), null, 0); |
+ |
+ Expect.equals( |
+ inferredType(foo).simplify(result.compiler), |
+ new TypeMask.nonNullSubclass(abc.rawType)); |
+ Expect.equals( |
+ inferredType(new TypedSelector.subclass(x.rawType, foo)), |
+ new TypeMask.nonNullExact(b.rawType)); |
+ Expect.equals( |
+ inferredType(new TypedSelector.subclass(y.rawType, foo)), |
+ new TypeMask.nonNullExact(c.rawType)); |
+ Expect.equals( |
+ inferredType(new TypedSelector.subclass(z.rawType, foo)), |
+ new TypeMask.nonNullExact(a.rawType)); |
+ Expect.equals( |
+ inferredType(new TypedSelector.subclass( |
+ xy.rawType, foo)).simplify(result.compiler), |
+ new TypeMask.nonNullSubclass(bc.rawType)); |
+ |
+ Selector bar = new Selector.call(buildSourceString("bar"), null, 0); |
+ |
+ Expect.isNull(inferredType(bar)); |
+ }); |
} |
testMixins() { |
@@ -1523,11 +1585,12 @@ testMixins() { |
x; y; z; w; |
} |
"""; |
- AnalysisResult result = analyze(source); |
- result.checkNodeHasType('x', [result.string]); |
- result.checkNodeHasType('y', [result.string]); |
- result.checkNodeHasType('z', [result.int]); |
- result.checkNodeHasType('w', [result.int]); |
+ return analyze(source).then((result) { |
+ result.checkNodeHasType('x', [result.string]); |
+ result.checkNodeHasType('y', [result.string]); |
+ result.checkNodeHasType('z', [result.int]); |
+ result.checkNodeHasType('w', [result.int]); |
+ }); |
} |
testClosures() { |
@@ -1549,10 +1612,11 @@ testClosures() { |
a; b; f; |
} |
"""; |
- AnalysisResult result = analyze(source); |
- result.checkNodeHasType('a', [result.int, result.string]); |
- result.checkNodeHasType('f', [result.functionType]); |
- result.checkNodeHasUnknownType('b'); |
+ return analyze(source).then((AnalysisResult result) { |
+ result.checkNodeHasType('a', [result.int, result.string]); |
+ result.checkNodeHasType('f', [result.functionType]); |
+ result.checkNodeHasUnknownType('b'); |
+ }); |
} |
testNestedFunctions() { |
@@ -1574,69 +1638,72 @@ testNestedFunctions() { |
a; b; f; |
} |
"""; |
- AnalysisResult result = analyze(source); |
- result.checkNodeHasType('a', [result.int, result.string]); |
- result.checkNodeHasType('f', [result.functionType]); |
- result.checkNodeHasUnknownType('b'); |
+ return analyze(source).then((AnalysisResult result) { |
+ result.checkNodeHasType('a', [result.int, result.string]); |
+ result.checkNodeHasType('f', [result.functionType]); |
+ result.checkNodeHasUnknownType('b'); |
+ }); |
} |
void main() { |
- testDynamicBackDoor(); |
- testVariableDeclaration(); |
- testLiterals(); |
- testRedefinition(); |
- testIfThenElse(); |
- testTernaryIf(); |
- testWhile(); |
- testDoWhile(); |
- testFor1(); |
- testFor2(); |
- testFor3(); |
- testForIn(); |
- testToplevelVariable(); |
- testNonRecusiveFunction(); |
- testRecusiveFunction(); |
- testMutuallyRecusiveFunction(); |
- testSimpleSend(); |
- // testSendToClosureField(); // closures are not yet supported |
- testSendToThis1(); |
- testSendToThis2(); |
- testSendToThis3(); |
- testConstructor(); |
- testGetters(); |
- testSetters(); |
- testOptionalNamedParameters(); |
- testOptionalPositionalParameters(); |
- testListLiterals(); |
- testMapLiterals(); |
- testReturn(); |
- // testNoReturn(); // right now we infer the empty type instead of null |
- testArithmeticOperators(); |
- testBooleanOperators(); |
- testBooleanOperatorsShortCirtcuit(); |
- testOperators(); |
- testCompoundOperators1(); |
- testCompoundOperators2(); |
- testSetIndexOperator(); |
- testInequality(); |
- testFieldInitialization1(); |
- testFieldInitialization2(); |
- testFieldInitialization3(); |
- testSendWithWrongArity(); |
- testBigTypesWidening1(); |
- testBigTypesWidening2(); |
- testDynamicIsAbsorbing(); |
- testLists(); |
- testListWithCapacity(); |
- testEmptyList(); |
- testJsCall(); |
- testJsCallAugmentsSeenClasses(); |
- testIsCheck(); |
- testSeenClasses(); |
- testIntDoubleNum(); |
- testConcreteTypeToTypeMask(); |
- testSelectors(); |
- testMixins(); |
- testClosures(); |
- testNestedFunctions(); |
+ asyncTest(() => Future.forEach([ |
+ testDynamicBackDoor, |
+ testVariableDeclaration, |
+ testLiterals, |
+ testRedefinition, |
+ testIfThenElse, |
+ testTernaryIf, |
+ testWhile, |
+ testDoWhile, |
+ testFor1, |
+ testFor2, |
+ testFor3, |
+ testForIn, |
+ testToplevelVariable, |
+ testNonRecusiveFunction, |
+ testRecusiveFunction, |
+ testMutuallyRecusiveFunction, |
+ testSimpleSend, |
+ // testSendToClosureField, // closures are not yet supported |
+ testSendToThis1, |
+ testSendToThis2, |
+ testSendToThis3, |
+ testConstructor, |
+ testGetters, |
+ testSetters, |
+ testOptionalNamedParameters, |
+ testOptionalPositionalParameters, |
+ testListLiterals, |
+ testMapLiterals, |
+ testReturn, |
+ // testNoReturn, // right now we infer the empty type instead of null |
+ testArithmeticOperators, |
+ testBooleanOperators, |
+ testBooleanOperatorsShortCirtcuit, |
+ testOperators, |
+ testCompoundOperators1, |
+ testCompoundOperators2, |
+ testSetIndexOperator, |
+ testInequality, |
+ testFieldInitialization1, |
+ testFieldInitialization2, |
+ testFieldInitialization3, |
+ testSendWithWrongArity, |
+ testBigTypesWidening1, |
+ testBigTypesWidening2, |
+ testDynamicIsAbsorbing, |
+ testLists, |
+ testListWithCapacity, |
+ testEmptyList, |
+ testJsCall, |
+ testJsCallAugmentsSeenClasses, |
+ testIsCheck, |
+ testSeenClasses, |
+ testIntDoubleNum, |
+ testConcreteTypeToTypeMask, |
+ testSelectors, |
+ testMixins, |
+ testClosures, |
+ testNestedFunctions, |
+ ], (f) => f())); |
} |