| // 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 A factory is a constructor prefaced by the built-in identifier |
| * factory. |
| * factoryConstructorSignature: |
| * factory identifier ('.' identifier)? formalParameterList |
| * ; |
| * @description Checks various valid factory declarations, including those |
| * referencing classes from another file. |
| * @author iefremov |
| */ |
| library test; |
| import "../../../../Utils/expect.dart"; |
| import "syntax_t01.lib.dart" as lib; |
| |
| class Iface { |
| var x; |
| var y; |
| Iface(this.x, [this.y=2]); |
| factory Iface.named() {return new C();} |
| factory Iface.named2(int i, C j, [String s = ""]) {return new C.id2(i, j, s);} |
| } |
| |
| class C extends Iface { |
| C.id(var x, [var y]): super(x,y); |
| C.id2(int i, C j, [String s = ""]): this.id(i); |
| C(): this.id(1); |
| } |
| |
| // imported interface |
| class AImpl implements lib.A { |
| int methodA() { return 1; } |
| int methodB() { return 2; } |
| } |
| |
| main() { |
| new Iface(1); |
| new Iface(1, 2); |
| new Iface.named(); |
| new Iface.named2(1, new C()); |
| new Iface.named2(1, new C(), ""); |
| |
| new C(); |
| new C.id(3); |
| |
| lib.A val = new lib.A(); |
| Expect.isTrue(val is AImpl); |
| Expect.equals(1, val.methodA()); |
| if (val is AImpl) { |
| Expect.equals(2, val.methodB()); |
| } |
| |
| val = new lib.A.named(); |
| Expect.equals(true, (val is AImpl)); |
| Expect.equals(1, val.methodA()); |
| if (val is AImpl) { |
| Expect.equals(2, val.methodB()); |
| } |
| } |