// Copyright (c) 2012, 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. import "package:expect/expect.dart"; /** * Test various forms of function literals. */ typedef int IntFunc(int); class FunctionLiteralsTest { static void checkIntFunction(expected, int f(x), arg) { Expect.equals(expected, f(arg)); } static void checkIntFuncFunction(expected, IntFunc f(x), arg) { Expect.equals(expected, f(arg)(arg)); } int func1(int x) => x; int func2(x) => x; int func3(int x) { return x; } int func4(x) { return x; } FunctionLiteralsTest() {} static void testMain() { var test = new FunctionLiteralsTest(); test.testArrow(); test.testArrowArrow(); test.testArrowBlock(); test.testBlock(); test.testBlockArrow(); test.testBlockBlock(); test.testFunctionRef(); } void testArrow() { checkIntFunction(42, (x) => x, 42); checkIntFunction(42, (int x) => x, 42); } void testArrowArrow() { checkIntFuncFunction(84, (x) => (y) => x + y, 42); checkIntFuncFunction(84, (int x) => (y) => x + y, 42); checkIntFuncFunction(84, (x) => (y) => x + y, 42); checkIntFuncFunction(84, (int x) => (y) => x + y, 42); } void testArrowBlock() { checkIntFuncFunction( 84, (x) => (y) { return x + y; }, 42); checkIntFuncFunction( 84, (int x) => (y) { return x + y; }, 42); } void testBlock() { checkIntFunction(42, (x) { return x; }, 42); checkIntFunction(42, (int x) { return x; }, 42); } void testBlockArrow() { checkIntFuncFunction(84, (x) { return (y) => x + y; }, 42); checkIntFuncFunction(84, (int x) { return (y) => x + y; }, 42); } void testBlockBlock() { checkIntFuncFunction(84, (x) { return (y) { return x + y; }; }, 42); checkIntFuncFunction(84, (int x) { return (y) { return x + y; }; }, 42); } void testFunctionRef() { checkIntFunction(42, func1, 42); checkIntFunction(42, func2, 42); checkIntFunction(42, func3, 42); checkIntFunction(42, func4, 42); } } main() { FunctionLiteralsTest.testMain(); }