| // Copyright (c) 2011, 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. |
| // |
| // Dart test for new function type alias. |
| |
| // @dart = 2.9 |
| |
| import "package:expect/expect.dart"; |
| |
| class FunctionLiteralsTest { |
| static void testMain() { |
| f(x) { |
| return x * 2; |
| } |
| |
| f(42); // make sure it is parsed as a function call |
| Expect.equals(20, f(10)); |
| |
| int g(x) { |
| return x * 2; |
| } |
| |
| g(42); // make sure it is parsed as a function call |
| Expect.equals(20, g(10)); |
| |
| h(x) { |
| return x * 2; |
| } |
| |
| h(42); // make sure it is parsed as a function call |
| Expect.equals(20, h(10)); |
| |
| dynamic a = (x) { |
| return x + 2; |
| }; |
| Expect.equals(7, a(5)); |
| |
| Expect.equals( |
| 10, |
| apply((k) { |
| return k << 1; |
| }, 5)); |
| Expect.equals(20, apply((k) => k << 1, 10)); |
| |
| a = new A(3); |
| Expect.equals(-1, a.f); |
| Expect.equals(-3, a.f2); |
| |
| a = new A.n(5); |
| Expect.equals(-2, a.f); |
| Expect.equals(2, a.f2); |
| |
| Expect.equals(true, isOdd(5)); |
| Expect.equals(false, isOdd(8)); |
| |
| var b = new B(10); |
| Expect.equals(10, b.n); |
| Expect.equals(100, (b.f)(10)); |
| |
| b = new B.withZ(10); |
| Expect.equals(10, b.n); |
| Expect.equals(101, (b.f)(10)); |
| |
| var c = new C(5); |
| Expect.equals("2*x is 10", c.s); |
| |
| int x = 0; |
| int y = 1; |
| // make sure this isn't parsed as a generic type |
| Expect.isTrue(x < y, "foo"); |
| } |
| } |
| |
| apply(f, n) { |
| return f(n); |
| } |
| |
| bool isOdd(b) => b % 2 == 1; |
| |
| class A { |
| int f; |
| int f2; |
| A(p) : f = apply((j) => 2 - j, p) { |
| /* constr. body */ |
| f2 = -p; |
| } |
| A.n(p) : f = 1 + apply((j) => 2 - j, p) { |
| /* constr. body */ |
| f2 = -f; |
| } |
| } |
| |
| class B { |
| var f; |
| int n; |
| B(z) : f = ((x) => x * x) { |
| n = z; |
| } |
| B.withZ(z) |
| : f = ((x) { |
| return x * x + 1; |
| }) { |
| n = z; |
| } |
| } |
| |
| class C { |
| String s; |
| C(x) : s = "2*x is ${() { return 2*x; }()}"; |
| } |
| |
| main() { |
| FunctionLiteralsTest.testMain(); |
| } |