Chromium Code Reviews| 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 5d4ffff8cfaa28721076688f3cbffe946b9b3dce..a253ce6edef0d24b15e23dadb25229111b898ffa 100644 |
| --- a/tests/compiler/dart2js/cpa_inference_test.dart |
| +++ b/tests/compiler/dart2js/cpa_inference_test.dart |
| @@ -48,7 +48,7 @@ class AnalysisResult { |
| BaseType num; |
| BaseType bool; |
| BaseType string; |
| - BaseType list; |
| + BaseType jsArray; |
| BaseType map; |
| BaseType nullType; |
| @@ -59,7 +59,7 @@ class AnalysisResult { |
| num = inferrer.baseTypes.numBaseType; |
| bool = inferrer.baseTypes.boolBaseType; |
| string = inferrer.baseTypes.stringBaseType; |
| - list = inferrer.baseTypes.listBaseType; |
| + jsArray = inferrer.baseTypes.jsArrayBaseType; |
| map = inferrer.baseTypes.mapBaseType; |
| nullType = new NullBaseType(); |
| Element mainElement = compiler.mainApp.find(buildSourceString('main')); |
| @@ -158,7 +158,11 @@ const String CORELIB = r''' |
| class String {} |
| class Object {} |
| class Function {} |
| - abstract class List {} |
| + abstract class List<E> { |
| + factory List([int length]); |
| + E operator [](int index); |
| + void operator []=(int index, E value); |
| + } |
| abstract class Map {} |
| class Closure {} |
| class Null {} |
| @@ -678,8 +682,8 @@ testListLiterals() { |
| } |
| """; |
| AnalysisResult result = analyze(source); |
| - result.checkNodeHasType('x', [result.list]); |
| - result.checkNodeHasType('y', [result.list]); |
| + result.checkNodeHasType('x', [result.jsArray]); |
| + result.checkNodeHasType('y', [result.jsArray]); |
| result.checkFieldHasType('A', 'x', [result.int]); |
| } |
| @@ -890,7 +894,7 @@ testInequality() { |
| result.checkNodeHasType('bar', [result.bool]); |
| result.checkNodeHasType('baz', []); |
| // TODO(polux): the following result should be [:[null, string]:], see |
| - // fieldInitialization(). |
| + // testFieldInitialization(). |
| result.checkFieldHasType('A', 'witness', [result.string]); |
| } |
| @@ -909,6 +913,48 @@ testFieldInitialization() { |
| result.checkFieldHasType('A', 'y', [result.int]); |
| } |
| +testLists() { |
| + final String source = r""" |
| + main() { |
| + new List(); |
| + var l1 = [1.2]; |
| + var l2 = []; |
| + l1['a'] = 42; // raises an error, so int should not be recorded |
| + l1[1] = 'abc'; |
| + "__dynamic_for_test"[1] = true; |
| + var x = l1[1]; |
| + var y = l2[1]; |
| + var z = l1['foo']; |
| + x; y; z; |
| + }"""; |
| + AnalysisResult result = analyze(source); |
| + result.checkNodeHasType('x', [result.double, result.string, result.bool]); |
| + result.checkNodeHasType('y', [result.double, result.string, result.bool]); |
| + result.checkNodeHasType('z', []); |
| +} |
| + |
| +testListWithCapacity() { |
|
karlklose
2013/01/23 13:16:55
Can you add a test with elements like in testLists
|
| + final String source = r""" |
| + main() { |
| + var l = new List(10); |
| + var x = l[0]; |
| + x; |
| + }"""; |
| + AnalysisResult result = analyze(source); |
| + result.checkNodeHasType('x', [result.nullType]); |
| +} |
| + |
| +testEmptyList() { |
| + final String source = r""" |
| + main() { |
| + var l = new List(); |
| + var x = l[0]; |
| + x; |
| + }"""; |
| + AnalysisResult result = analyze(source); |
| + result.checkNodeHasType('x', []); |
| +} |
| + |
| testSendWithWrongArity() { |
| final String source = r""" |
| f(x) { } |
| @@ -1014,4 +1060,7 @@ void main() { |
| testBigTypesWidening1(); |
| testBigTypesWidening2(); |
| testDynamicIsAbsorbing(); |
| + testLists(); |
| + testListWithCapacity(); |
| + testEmptyList(); |
| } |