| Index: tests/language/src/FunctionTest.dart
|
| diff --git a/tests/language/src/FunctionTest.dart b/tests/language/src/FunctionTest.dart
|
| deleted file mode 100644
|
| index c211899c912c320490c42155c0ade91268027e91..0000000000000000000000000000000000000000
|
| --- a/tests/language/src/FunctionTest.dart
|
| +++ /dev/null
|
| @@ -1,358 +0,0 @@
|
| -// 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.
|
| -
|
| -// Tests function statements and expressions.
|
| -
|
| -class Bug4089219 {
|
| - int x;
|
| - var f;
|
| -
|
| - Bug4089219(int i) : this.x = i {
|
| - f = () => x;
|
| - }
|
| -}
|
| -
|
| -class Bug4342163 {
|
| - final m;
|
| - Bug4342163(int a) : this.m = (() => a) {}
|
| -}
|
| -
|
| -class StaticFunctionDef {
|
| - static final int one = 1;
|
| - static var fn1;
|
| - static var fn2;
|
| - static var fn3;
|
| -
|
| - static init() {
|
| - fn1 = () { return one; };
|
| - fn2 = () { return (() { return one; })(); };
|
| - fn3 = () {
|
| - final local = 1;
|
| - return (() { return local; })();
|
| - };
|
| - }
|
| -}
|
| -
|
| -class A {
|
| - var ma;
|
| - A(a) {ma = a;}
|
| -}
|
| -
|
| -class B1 extends A {
|
| - final mfn;
|
| - B1(int a) : super(a), this.mfn = (() {return a;}) {
|
| - }
|
| -}
|
| -
|
| -class B2 extends A {
|
| - final mfn;
|
| - B2(int a) : super(2), this.mfn = (() {return a;}) {
|
| - }
|
| -}
|
| -
|
| -class B3 extends A {
|
| - final mfn;
|
| - B3(int a) : super(() {return a;}), this.mfn = (() {return a;}) {
|
| - }
|
| -}
|
| -
|
| -typedef void Fisk();
|
| -
|
| -class FunctionTest {
|
| -
|
| - FunctionTest() {}
|
| -
|
| - static void testMain() {
|
| - var test = new FunctionTest();
|
| - test.testRecursiveClosureRef();
|
| - test.testForEach();
|
| - test.testVarOrder1();
|
| - test.testVarOrder2();
|
| - test.testLexicalClosureRef1();
|
| - test.testLexicalClosureRef2();
|
| - test.testLexicalClosureRef3();
|
| - test.testLexicalClosureRef4();
|
| - test.testLexicalClosureRef5();
|
| - test.testFunctionScopes();
|
| - test.testDefaultParametersOrder();
|
| - test.testParametersOrder();
|
| - test.testFunctionDefaults1();
|
| - test.testFunctionDefaults2();
|
| - test.testEscapingFunctions();
|
| - test.testThisBinding();
|
| - test.testFnBindingInStatics();
|
| - test.testFnBindingInInitLists();
|
| - test.testSubclassConstructorScopeAlias();
|
| - }
|
| -
|
| - void testSubclassConstructorScopeAlias() {
|
| - var b1 = new B1(10);
|
| - Expect.equals(10, (b1.mfn)());
|
| - Expect.equals(10, b1.ma);
|
| -
|
| - var b2 = new B2(11);
|
| - Expect.equals(11, (b2.mfn)());
|
| - Expect.equals(2, b2.ma);
|
| -
|
| - var b3 = new B3(12);
|
| - Expect.equals(12, (b3.mfn)());
|
| - Expect.equals(12, (b3.ma)());
|
| - }
|
| -
|
| - void testFnBindingInInitLists() {
|
| - Expect.equals(1, (new Bug4342163(1).m)());
|
| - }
|
| -
|
| - void testFnBindingInStatics() {
|
| - StaticFunctionDef.init();
|
| - Expect.equals(1, ((StaticFunctionDef.fn1)()));
|
| - Expect.equals(1, ((StaticFunctionDef.fn2)()));
|
| - Expect.equals(1, ((StaticFunctionDef.fn3)()));
|
| - }
|
| -
|
| - Fisk testReturnVoidFunction() {
|
| - void f() {}
|
| - Fisk x = f;
|
| - return f;
|
| - }
|
| -
|
| - void testVarOrder1() {
|
| - var a = 0, b = a++, c = a++;
|
| -
|
| - Expect.equals(a, 2);
|
| - Expect.equals(b, 0);
|
| - Expect.equals(c, 1);
|
| - }
|
| -
|
| - void testVarOrder2() {
|
| - var a = 0;
|
| - f() {return a++;};
|
| - var b = f(), c = f();
|
| -
|
| - Expect.equals(a, 2);
|
| - Expect.equals(b, 0);
|
| - Expect.equals(c, 1);
|
| - }
|
| -
|
| - void testLexicalClosureRef1() {
|
| - var a = 1;
|
| - var f, g;
|
| - {
|
| - var b = 2;
|
| - f = () {return b - a;};
|
| - }
|
| -
|
| - {
|
| - var b = 3;
|
| - g = () {return b - a;};
|
| - }
|
| - Expect.equals(1, f());
|
| - Expect.equals(2, g());
|
| - }
|
| -
|
| - void testLexicalClosureRef2() {
|
| - var a = 1;
|
| - var f, g;
|
| - {
|
| - var b = 2;
|
| - f = () {return ((){return b - a;})();};
|
| - }
|
| -
|
| - {
|
| - var b = 3;
|
| - g = () {return ((){return b - a;})();};
|
| - }
|
| - Expect.equals(1, f());
|
| - Expect.equals(2, g());
|
| - }
|
| -
|
| - void testLexicalClosureRef3() {
|
| - var a = new List();
|
| - for (int i = 0; i < 10; i++) {
|
| - var x = i;
|
| - a.add(() {return x;});
|
| - }
|
| -
|
| - var sum = 0;
|
| - for (int i = 0; i < a.length; i++) {
|
| - sum += (a[i])();
|
| - }
|
| -
|
| - Expect.equals(45, sum);
|
| - }
|
| -
|
| - void testLexicalClosureRef5() {
|
| - {
|
| - var a;
|
| - Expect.equals(null, a);
|
| - a = 1;
|
| - Expect.equals(1, a);
|
| - }
|
| -
|
| - {
|
| - var a;
|
| - Expect.equals(null, a);
|
| - a = 1;
|
| - Expect.equals(1, a);
|
| - }
|
| - }
|
| -
|
| - // Make sure labels are preserved, and a second 'i' does influence the first.
|
| - void testLexicalClosureRef4() {
|
| - var a = new List();
|
| - x:for (int i = 0; i < 10; i++) {
|
| - a.add(() {return i;});
|
| - continue x;
|
| - }
|
| -
|
| - var sum = 0;
|
| - for (int i = 0; i < a.length; i++) {
|
| - sum += (a[i])();
|
| - }
|
| -
|
| - Expect.equals(45, sum);
|
| - }
|
| -
|
| - int tempField;
|
| -
|
| - // Validate that a closure that calls the private name of a function (for
|
| - // for recursion) calls the version of function with the bound names.
|
| - void testRecursiveClosureRef() {
|
| - tempField = 2;
|
| - var x = 3;
|
| - var g = f(a) {
|
| - tempField++;
|
| - x++;
|
| - if (a > 0) {
|
| - f(--a);
|
| - }
|
| - };
|
| - g(2);
|
| -
|
| -
|
| - Expect.equals(5, tempField);
|
| - Expect.equals(6, x);
|
| - }
|
| -
|
| - void testForEach() {
|
| - List<int> vals = [1,2,3];
|
| - int total = 0;
|
| - vals.forEach((int v) {
|
| - total += v;
|
| - });
|
| - Expect.equals(6, total);
|
| - }
|
| -
|
| - void testFunctionScopes() {
|
| - // Function expression. 'recurse' is only defined within the function body.
|
| - // FAILS:
|
| - // var factorial0 = function recurse(int x) {
|
| - // return (x == 1) ? 1 : (x * recurse(x - 1));
|
| - // };
|
| - // TEMP:
|
| - var factorial0;
|
| - factorial0 = recurse(int x) {
|
| - return (x == 1) ? 1 : (x * factorial0(x - 1));
|
| - };
|
| - // END TEMP
|
| -
|
| -
|
| - // Function statement. 'factorial1' is defined in the outer scope.
|
| - int factorial1(int x) {
|
| - return (x == 1) ? 1 : (x * factorial1(x - 1));
|
| - }
|
| -
|
| - // This would fail to compile if 'recurse' were defined in the outer scope.
|
| - // Which it shouldn't be.
|
| - int recurse = 42;
|
| -
|
| - Expect.equals(6, factorial0(3));
|
| - Expect.equals(24, factorial0(4));
|
| - }
|
| -
|
| - void testDefaultParametersOrder() {
|
| - f([a = 1, b = 3]) {
|
| - return a - b;
|
| - }
|
| - Expect.equals(-2, f());
|
| - }
|
| -
|
| - void testParametersOrder() {
|
| - f(a, b) {
|
| - return a - b;
|
| - }
|
| - Expect.equals(-2, f(1,3));
|
| - }
|
| -
|
| - void testFunctionDefaults1() {
|
| - // TODO(jimhug): This return null shouldn't be necessary.
|
| - f() { return null; };
|
| - (([a = 10]) { Expect.equals(10, a); })();
|
| - ((a, [b = 10]) { Expect.equals(10, b); })(1);
|
| - (([a = 10]) { Expect.equals(null, a); })( f() );
|
| - // FAILS: (([a = 10]) { Expect.equals(null ,a); })( f() );
|
| - }
|
| -
|
| - void testFunctionDefaults2() {
|
| - Expect.equals(10, helperFunctionDefaults2());
|
| - Expect.equals(1, helperFunctionDefaults2(1));
|
| - }
|
| -
|
| - num helperFunctionDefaults2([a = 10]) {
|
| - return ((){return a;})();
|
| - }
|
| -
|
| - void testEscapingFunctions() {
|
| - f() { return 42; };
|
| - (() { Expect.equals(42, f()); })();
|
| - var o = new Bug4089219(42);
|
| - Expect.equals(42, (o.f)());
|
| - }
|
| -
|
| - void testThisBinding() {
|
| - Expect.equals(this, () { return this; }());
|
| - }
|
| -}
|
| -
|
| -typedef void Foo<A, B>(A a, B b);
|
| -
|
| -class Bar<A, B> {
|
| - Foo<A, B> field;
|
| - Bar(A a, B b) : this.field = ((A a1, B b2){}) {
|
| - field(a, b);
|
| - }
|
| -}
|
| -
|
| -typedef UntypedFunction(arg);
|
| -typedef UntypedFunction2(arg);
|
| -
|
| -class UseFunctionTypes {
|
| - void test() {
|
| - Function f = null;
|
| - UntypedFunction uf = null;
|
| - UntypedFunction2 uf2 = null;
|
| - Foo foo = null;
|
| - Foo<int, String> fooIntString = null;
|
| -
|
| - f = uf;
|
| - f = uf2;
|
| - f = foo;
|
| - f = fooIntString;
|
| -
|
| - uf = f;
|
| - uf2 = f;
|
| - foo = f;
|
| - fooIntString = f;
|
| -
|
| - foo = fooIntString;
|
| - fooIntString = foo;
|
| -
|
| - uf = uf2;
|
| - uf2 = uf;
|
| - }
|
| -}
|
| -
|
| -main() {
|
| - FunctionTest.testMain();
|
| -}
|
|
|