diff --git a/test/BaseTest.hx b/test/BaseTest.hx index 2bd3480..b1787cb 100644 --- a/test/BaseTest.hx +++ b/test/BaseTest.hx @@ -252,8 +252,6 @@ class BaseTest extends BuddySuite { callNum.should.be(0); }); - it("bindx should unbind all method listeners"); - it("bindx should unbind all bindings (signal exists) (lazySignal=true/false)", { bind(b.str, function (_, _) callNum++); // create binding signal bind(b.str2, function (_, _) callNum++); diff --git a/test/TestProperty.hx b/test/TestProperty.hx index 1e5b841..feb6040 100644 --- a/test/TestProperty.hx +++ b/test/TestProperty.hx @@ -12,16 +12,249 @@ class TestProperty extends BuddySuite { describe("Bindx modify field setter", { - var p:BindableProperty; + var b:BindableProperty; + var callNum:Int; before({ - p = new BindableProperty(); + b = new BindableProperty(); + callNum = 0; }); - it("bindx should bind/unbind fields with setter (lazySignal=true)"); - it("bindx should bind/unbind fields with setter (lazySignal=false)"); - it("bindx should bind 2 objects (custom setter) (lazySignal=true)"); - it("bindx should bind 2 objects (custom setter) (lazySignal=false)"); + it ("bindx should bind/unbind fields (lazySignal=true)", { + var strFrom = b.str = "a"; + var callNum2 = 0; + + bind(b.str, function (from, to) { + from.should.be(strFrom); + to.should.be(b.str); + callNum ++; + }); + + var listener2 = function (from:String, to:String) { + from.should.be(strFrom); + to.should.be(b.str); + callNum ++; + callNum2 ++; + }; + Bind.bind(b.str, listener2); + + b.str = "b"; + callNum.should.be(2); + callNum2.should.be(1); + + Bind.unbind(b.str, listener2); + strFrom = b.str; + b.str = "c"; + + callNum.should.be(3); + callNum2.should.be(1); + }); + + it ("bindx should bind/unbind fields (lazySignal=false)", { + var strFrom = b.str2 = "a"; + var callNum2 = 0; + + bind(b.str2, function (from, to) { + from.should.be(strFrom); + to.should.be(b.str2); + callNum ++; + }); + + var listener2 = function (from:String, to:String) { + from.should.be(strFrom); + to.should.be(b.str2); + callNum ++; + callNum2 ++; + }; + Bind.bind(b.str2, listener2); + + b.str2 = "b"; + callNum.should.be(2); + callNum2.should.be(1); + + Bind.unbind(b.str2, listener2); + strFrom = b.str2; + b.str2 = "c"; + + callNum.should.be(3); + callNum2.should.be(1); + }); + + it("bindx should bind/unbind 'null' values (lazySignal=true)", { + var strFrom = b.str = null; + var callNum2 = 0; + var listener = function (from:String, to:String) { + from.should.be(strFrom); + to.should.be(b.str); + callNum ++; + } + var listener2 = function (from:String, to:String) { + from.should.be(strFrom); + to.should.be(b.str); + callNum ++; + callNum2 ++; + }; + bind(b.str, listener); //b.str == null now + bind(b.str, listener2); + + b.str = "a"; + callNum.should.be(2); + callNum2.should.be(1); + + Bind.unbind(b.str, listener2); + strFrom = b.str; + b.str = null; // b.str set null + callNum.should.be(3); + callNum2.should.be(1); + }); + + it("bindx should bind/unbind 'null' values (lazySignal=false)", { + var strFrom = b.str2 = null; + var callNum2 = 0; + var listener = function (from:String, to:String) { + from.should.be(strFrom); + to.should.be(b.str2); + callNum ++; + } + var listener2 = function (from:String, to:String) { + from.should.be(strFrom); + to.should.be(b.str2); + callNum ++; + callNum2 ++; + }; + bind(b.str2, listener); //b.str2 == null now + bind(b.str2, listener2); + + b.str2 = "a"; + callNum.should.be(2); + callNum2.should.be(1); + + Bind.unbind(b.str2, listener2); + strFrom = b.str2; + b.str2 = null; // b.str2 set null + callNum.should.be(3); + callNum2.should.be(1); + }); + + it("bindx should bind 2 objects (lazySignal=true)", { + var callNum2 = 0; + var target = {a:""}; + var s = ""; + + var unbindA = Bind.bindTo(b.str, target.a); + Bind.bindTo(b.str, s); + + var prev = b.str = "b"; + target.a.should.be(prev); + s.should.be(prev); + + unbindA(); + Bind.unbindAll(b); + + b.str = "c"; + target.a.should.be(prev); + s.should.be(prev); + }); + + it("bindx should bind 2 objects (lazySignal=false)", { + var callNum2 = 0; + var target = {a:""}; + var s = ""; + + Bind.bindTo(b.str2, target.a); + Bind.bindTo(b.str2, s); + + var prev = b.str2 = "b"; + target.a.should.be(prev); + s.should.be(prev); + + Bind.unbind(b.str2); + + b.str2 = "c"; + target.a.should.be(prev); + s.should.be(prev); + }); + + it("bindx should notify properties manual (lazySignal=true)", { + b.str = "3"; + var f = "1"; + var t = "2"; + var listener = function (from:String, to:String) { + from.should.be(f); + to.should.be(t); + callNum ++; + }; + bind(b.str, listener); + + Bind.notify(b.str, f, t); + callNum.should.be(1); + }); + + it("bindx should notify properties manual (lazySignal=false)", { + b.str2 = "3"; + var f = "1"; + var t = "2"; + var listener = function (from:String, to:String) { + from.should.be(f); + to.should.be(t); + callNum ++; + }; + bind(b.str2, listener); + + Bind.notify(b.str2, f, t); + callNum.should.be(1); + }); + + it("bindx should unbind all properties listeners (lazySignal=true)", { + bind(b.str, function (from, to) callNum++); + bind(b.str, function (from, to) callNum++); + + Bind.unbind(b.str); + b.str = b.str + "1"; + + callNum.should.be(0); + }); + + it("bindx should unbind all properties listeners (lazySignal=false)", { + bind(b.str2, function (from, to) callNum++); + bind(b.str2, function (from, to) callNum++); + + Bind.unbind(b.str2); + b.str2 = b.str2 + "1"; + + callNum.should.be(0); + }); + + it("bindx should unbind all bindings (signal exists) (lazySignal=true/false)", { + bind(b.str, function (_, _) callNum++); // create binding signal + bind(b.str2, function (_, _) callNum++); + + Bind.unbindAll(b); + + try { + b.str = b.str + "1"; + b.str2 = b.str2 + "1"; + } + catch (e:Dynamic) { + fail(); + } + + callNum.should.be(0); + }); + + it("bindx should unbind all bindings (signal expected) (lazySignal=true/false)", { + Bind.unbindAll(b); + + try { + b.str = b.str + "1"; + b.str2 = b.str2 + "1"; + } + catch (e:Dynamic) { + fail(); + } + + true.should.be(true); + }); }); }