blob: 76610f9892c371f705a453d505d19f7b8729440d [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 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
* @reviewer rodionov
*/
library test;
import "../../../Utils/expect.dart";
import "2_Factories_A01_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);
var val = new lib.A();
Expect.equals(true, (val is AImpl));
Expect.equals(1, val.methodA());
Expect.equals(2, val.methodB());
val = new lib.A.named();
Expect.equals(true, (val is AImpl));
Expect.equals(1, val.methodA());
Expect.equals(2, val.methodB());
}