blob: cfc0fb668552c954e45a2cdb7181a8dd9667ba64 [file] [log] [blame]
/*
* 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.
*/
/**
* @assertion Then, the body of q is executed with respect to the bindings that
* resulted from the evaluation of the argument list and the type parameters (if
* any) of q bound to the actual type arguments V1, ..., Vm resulting in an object i.
* The result of the evaluation of e is i.
* @description Checks that arguments of a constructor and instance variables are bound correctly.
* @author msyabro
* @reviewer rodionov
*/
import "../../../Utils/expect.dart";
int factoryA = 0;
int factoryB = 0;
abstract class I {
factory I(p1, p2) {
return new A.fctry(p1, p2);
}
}
class C extends A {
C(p1, p2) {}
}
class A implements I {
A() {}
factory A.fctry(p1, p2) {
Expect.equals(3, p1);
Expect.equals("ab", p2);
++factoryA;
return new C(p1, p2);
}
}
abstract class J {
factory J.name(p1, p2){
return new B.name(p1, p2);
}
}
class B implements J {
B.name(p1, p2) {
Expect.equals(10, p1);
Expect.equals(false, p2);
++factoryB;
}
}
main() {
new I(1 + 2, "a" "b");
new J.name(20/ 2, true && false);
Expect.equals(1, factoryA);
Expect.equals(1, factoryB);
}