| // TODO(multitest): This was automatically migrated from a multitest and may |
| // contain strange or dead code. |
| |
| // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file |
| // 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. |
| |
| // Check that both `=` and `:` are allowed for named parameters. |
| |
| import "package:expect/expect.dart"; |
| |
| // Default values are not allowed on typedefs. |
| |
| |
| typedef functype({x, y, z}); |
| |
| int topF({x = 3, y: 5, z}) => x * y * (z ?? 2); |
| |
| class A { |
| int x; |
| int y; |
| int z; |
| A({this.x = 3, this.y: 5, z}) : z = z ?? 2; |
| A.redirect({int x = 3, int y: 5, int? z}) : this(x: x, y: y, z: z); |
| factory A.factory({int x = 3, int y: 5, int? z}) => |
| new A(x: x, y: y, z: z ?? 2); |
| factory A.redirectFactory({int x, int y, int z}) = A; |
| |
| // Default values are not allowed on redirecting factory constructors. |
| |
| |
| |
| int get value => x * y * z; |
| |
| static int staticF({x = 3, y: 5, z}) => x * y * (z ?? 2); |
| int instanceF({x = 3, y: 5, z}) => x * y * (z ?? 2); |
| } |
| |
| main() { |
| // Reference the type, or dart2js won't see that the declaration is invalid |
| |
| |
| var a = new A(); |
| |
| int local({x = 3, y: 5, z}) => x * y * (z ?? 2); |
| var expr = ({x = 3, y: 5, z}) => x * y * (z ?? 2); |
| var tearOff = a.instanceF; |
| |
| test(function) { |
| Expect.equals(30, function()); |
| Expect.equals(70, function(x: 7)); |
| Expect.equals(42, function(y: 7)); |
| Expect.equals(28, function(x: 7, y: 2)); |
| Expect.equals(15, function(z: 1)); |
| Expect.equals(21, function(y: 7, z: 1)); |
| Expect.equals(35, function(x: 7, z: 1)); |
| Expect.equals(14, function(x: 7, y: 2, z: 1)); |
| Expect.isTrue(function is functype); |
| } |
| |
| test(topF); |
| test(A.staticF); |
| test(a.instanceF); |
| test(local); |
| test(expr); |
| test(tearOff); |
| |
| // Can't tear off constructors. |
| Expect.equals(30, new A().value); |
| Expect.equals(70, new A(x: 7).value); |
| Expect.equals(42, new A(y: 7).value); |
| Expect.equals(28, new A(x: 7, y: 2).value); |
| Expect.equals(15, new A(z: 1).value); |
| Expect.equals(21, new A(y: 7, z: 1).value); |
| Expect.equals(35, new A(x: 7, z: 1).value); |
| Expect.equals(14, new A(x: 7, y: 2, z: 1).value); |
| |
| Expect.equals(30, new A.redirect().value); |
| Expect.equals(70, new A.redirect(x: 7).value); |
| Expect.equals(42, new A.redirect(y: 7).value); |
| Expect.equals(28, new A.redirect(x: 7, y: 2).value); |
| Expect.equals(15, new A.redirect(z: 1).value); |
| Expect.equals(21, new A.redirect(y: 7, z: 1).value); |
| Expect.equals(35, new A.redirect(x: 7, z: 1).value); |
| Expect.equals(14, new A.redirect(x: 7, y: 2, z: 1).value); |
| |
| Expect.equals(30, new A.factory().value); |
| Expect.equals(70, new A.factory(x: 7).value); |
| Expect.equals(42, new A.factory(y: 7).value); |
| Expect.equals(28, new A.factory(x: 7, y: 2).value); |
| Expect.equals(15, new A.factory(z: 1).value); |
| Expect.equals(21, new A.factory(y: 7, z: 1).value); |
| Expect.equals(35, new A.factory(x: 7, z: 1).value); |
| Expect.equals(14, new A.factory(x: 7, y: 2, z: 1).value); |
| |
| Expect.equals(30, new A.redirectFactory().value); |
| Expect.equals(70, new A.redirectFactory(x: 7).value); |
| Expect.equals(42, new A.redirectFactory(y: 7).value); |
| Expect.equals(28, new A.redirectFactory(x: 7, y: 2).value); |
| Expect.equals(15, new A.redirectFactory(z: 1).value); |
| Expect.equals(21, new A.redirectFactory(y: 7, z: 1).value); |
| Expect.equals(35, new A.redirectFactory(x: 7, z: 1).value); |
| Expect.equals(14, new A.redirectFactory(x: 7, y: 2, z: 1).value); |
| } |