| 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 99558b77a36ee94a952fbe3e558c341ba82ce532..5d4ffff8cfaa28721076688f3cbffe946b9b3dce 100644
|
| --- a/tests/compiler/dart2js/cpa_inference_test.dart
|
| +++ b/tests/compiler/dart2js/cpa_inference_test.dart
|
| @@ -511,22 +511,158 @@ testSetters() {
|
| result.double]); // dynamic.y = double
|
| }
|
|
|
| -testNamedParameters() {
|
| +testOptionalNamedParameters() {
|
| final String source = r"""
|
| class A {
|
| var x, y, z, w;
|
| A(this.x, {this.y, this.z, this.w});
|
| }
|
| + class B {
|
| + var x, y;
|
| + B(this.x, {this.y});
|
| + }
|
| + class C {
|
| + var x, y;
|
| + C(this.x, {this.y});
|
| + }
|
| + class Test {
|
| + var a, b, c, d;
|
| + var e, f;
|
| + var g, h;
|
| +
|
| + Test(this.a, this.b, this.c, this.d,
|
| + this.e, this.f,
|
| + this.g, this.h);
|
| +
|
| + f1(x, {y, z, w}) {
|
| + a = x;
|
| + b = y;
|
| + c = z;
|
| + d = w;
|
| + }
|
| + f2(x, {y}) {
|
| + e = x;
|
| + f = y;
|
| + }
|
| + f3(x, {y}) {
|
| + g = x;
|
| + h = y;
|
| + }
|
| + }
|
| + class Foo {
|
| + }
|
| main() {
|
| + // We want to test expiclitely for null later so we initialize all the
|
| + // fields of Test with a placeholder type: Foo.
|
| + var foo = new Foo();
|
| + var test = new Test(foo, foo, foo, foo, foo, foo, foo, foo);
|
| +
|
| new A(42);
|
| new A('abc', w: true, z: 42.0);
|
| + test.f1(42);
|
| + test.f1('abc', w: true, z: 42.0);
|
| +
|
| + new B('abc', y: true);
|
| + new B(1, 2); // too many positional arguments
|
| + test.f2('abc', y: true);
|
| + test.f2(1, 2); // too many positional arguments
|
| +
|
| + new C('abc', y: true);
|
| + new C(1, z: 2); // non-existing named parameter
|
| + test.f3('abc', y: true);
|
| + test.f3(1, z: 2); // non-existing named parameter
|
| }
|
| """;
|
| AnalysisResult result = analyze(source);
|
| +
|
| + final foo = result.base('Foo');
|
| + final nil = new NullBaseType();
|
| +
|
| + 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() {
|
| + final String source = r"""
|
| + class A {
|
| + var x, y, z, w;
|
| + A(this.x, [this.y, this.z, this.w]);
|
| + }
|
| + class B {
|
| + var x, y;
|
| + B(this.x, [this.y]);
|
| + }
|
| + class Test {
|
| + var a, b, c, d;
|
| + var e, f;
|
| +
|
| + Test(this.a, this.b, this.c, this.d,
|
| + this.e, this.f);
|
| +
|
| + f1(x, [y, z, w]) {
|
| + a = x;
|
| + b = y;
|
| + c = z;
|
| + d = w;
|
| + }
|
| + f2(x, [y]) {
|
| + e = x;
|
| + f = y;
|
| + }
|
| + }
|
| + class Foo {
|
| + }
|
| + main() {
|
| + // We want to test expiclitely for null later so we initialize all the
|
| + // fields of Test with a placeholder type: Foo.
|
| + var foo = new Foo();
|
| + var test = new Test(foo, foo, foo, foo, foo, foo);
|
| +
|
| + new A(42);
|
| + new A('abc', true, 42.0);
|
| + test.f1(42);
|
| + test.f1('abc', true, 42.0);
|
| +
|
| + new B('a', true);
|
| + new B(1, 2, 3); // too many arguments
|
| + test.f2('a', true);
|
| + test.f2(1, 2, 3); // too many arguments
|
| + }
|
| + """;
|
| + AnalysisResult result = analyze(source);
|
| +
|
| + final foo = result.base('Foo');
|
| + final nil = new NullBaseType();
|
| +
|
| result.checkFieldHasType('A', 'x', [result.int, result.string]);
|
| - result.checkFieldHasType('A', 'y', [new NullBaseType()]);
|
| - result.checkFieldHasType('A', 'z', [new NullBaseType(), result.double]);
|
| - result.checkFieldHasType('A', 'w', [new NullBaseType(), result.bool]);
|
| + 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() {
|
| @@ -861,7 +997,8 @@ void main() {
|
| testConstructor();
|
| testGetters();
|
| testSetters();
|
| - testNamedParameters();
|
| + testOptionalNamedParameters();
|
| + testOptionalPositionalParameters();
|
| testListLiterals();
|
| testMapLiterals();
|
| testReturn();
|
|
|