inheritance tests

This commit is contained in:
Dima Granetchi
2014-11-15 15:21:11 +02:00
parent c43e4a08a2
commit 7eba4bf7e9
3 changed files with 38 additions and 32 deletions
+7 -6
View File
@@ -32,7 +32,7 @@ class Bind {
@:noUsing macro static public function unbindAll(object:ExprOf<IBindable>):Expr { @:noUsing macro static public function unbindAll(object:ExprOf<IBindable>):Expr {
return internalUnbindAll(object); return internalUnbindAll(object);
} }
#if macro #if macro
@@ -94,13 +94,14 @@ class Bind {
} }
public static function isBindable(classType:ClassType):Bool { public static function isBindable(classType:ClassType):Bool {
if (classType.module == "bindx.IBindable" && classType.name == "IBindable")
return true;
var t = classType; var t = classType;
while (t != null) { while (t != null) {
for (it in t.interfaces) { for (it in t.interfaces)
var t = it.t.get(); if (isBindable(it.t.get()))
if (t.module == "bindx.IBindable" && t.name == "IBindable") return true;
return true;
}
t = t.superClass != null ? t.superClass.t.get() : null; t = t.superClass != null ? t.superClass.t.get() : null;
} }
return false; return false;
+29 -24
View File
@@ -11,36 +11,41 @@ class InheritanceTest extends BuddySuite {
super(); super();
describe("Using classes inheritance", { describe("Using classes inheritance", {
it("bindx should support class inheritance"); var b:BindableChild;
var bp:BindableParent;
var callNum:Int;
before({
b = new BindableChild();
bp = new BindableParent();
callNum = 0;
});
it("bindx should support class/interface inheritance", {
b.i = 1;
b.s = "a";
Bind.bind(b.i, function (_, _) callNum++);
Bind.bind(b.s, function (_, _) callNum++);
b.i = 2;
b.s = "b";
callNum.should.be(2);
bp.i = 1;
Bind.bind(bp.i, function (_, _) callNum++);
bp.i = 2;
callNum.should.be(3);
});
}); });
} }
/* }
function testChild() {
var c = new BindableChild(); interface IIBindable extends IBindable {
c.i = 0;
c.s = "0";
var iChanged = 0;
Bind.bind(c.i, function (from, to) {
assertEquals(from, 0);
assertEquals(to, 1);
iChanged ++;
});
c.i = 1;
assertEquals(iChanged, 1);
var sChanged = 0;
Bind.bind(c.s, function (from, to) {
assertEquals(from, "0");
assertEquals(to, "1");
sChanged ++;
});
c.s = "1";
assertEquals(sChanged, 1);
}*/
} }
@:bindable @:bindable
class BindableParent implements IBindable { class BindableParent implements IIBindable {
public function new() {} public function new() {}
public var i:Int; public var i:Int;
+1 -1
View File
@@ -97,7 +97,7 @@ class SignalTest extends BuddySuite {
}); });
}); });
describe("MethodSignal functionality tests", { describe("Using MethodSignal", {
var ms:MethodSignal; var ms:MethodSignal;
var callNum:Int; var callNum:Int;