UNPKG

@danielkalen/simplybind

Version:

Magically simple, framework-less one-way/two-way data binding for frontend/backend in ~5kb.

251 lines (196 loc) 7.6 kB
suite ".disallowFrom()", ()-> test "Updates to subscribers can be prevented if the the update is coming from a specific publisher", ()-> SimplyBind.defaultOptions.updateOnBind = false SimplyBind.defaultOptions.updateEvenIfSame = true invokeCount = 0 currentValue = 1 receiver = 'value':null publisherA = 'prop':1 publisherB = 'prop':1 publisherProxy = 'prop':1 publisherMaster = 'prop':1 SimplyBind('prop').of(publisherMaster) .to('prop').of(publisherA) .and.to('prop').of(publisherB) SimplyBind('prop').of(publisherA) .to('prop').of(publisherProxy) SimplyBind('prop').of(publisherB) .to('prop').of(publisherProxy) SimplyBind('prop').of(publisherProxy) .to('value').of(receiver) .transform (value)-> invokeCount++; value .disallowFrom('prop').of(publisherB) expect(publisherMaster.prop).to.equal 1 expect(publisherA.prop).to.equal 1 expect(publisherB.prop).to.equal 1 expect(receiver.value).to.equal null expect(invokeCount).to.equal 0 publisherA.prop = ++currentValue expect(publisherMaster.prop).to.equal 1 expect(publisherA.prop).to.equal 2 expect(publisherB.prop).to.equal 1 expect(receiver.value).to.equal 2 expect(invokeCount).to.equal 1 publisherB.prop = ++currentValue expect(publisherMaster.prop).to.equal 1 expect(publisherA.prop).to.equal 2 expect(publisherB.prop).to.equal 3 expect(receiver.value).to.equal 2 expect(invokeCount).to.equal 1 publisherMaster.prop = ++currentValue expect(publisherMaster.prop).to.equal 4 expect(publisherA.prop).to.equal 4 expect(publisherB.prop).to.equal 4 expect(receiver.value).to.equal 4 expect(invokeCount).to.equal 3 publisherMaster.prop = ++currentValue expect(publisherMaster.prop).to.equal 5 expect(publisherA.prop).to.equal 5 expect(publisherB.prop).to.equal 5 expect(receiver.value).to.equal 5 expect(invokeCount).to.equal 5 SimplyBind('prop').of(publisherMaster).to('prop').of(publisherA).unBind() publisherMaster.prop = ++currentValue expect(publisherMaster.prop).to.equal 6 expect(publisherA.prop).to.equal 5 expect(publisherB.prop).to.equal 6 expect(receiver.value).to.equal 6 expect(invokeCount).to.equal 6 SimplyBind.defaultOptions.updateOnBind = true SimplyBind.defaultOptions.updateEvenIfSame = false test "Disallowing updated from an ObjectProp will only disallow updates form that prop and not any other props", ()-> SimplyBind.defaultOptions.updateOnBind = false SimplyBind.defaultOptions.updateEvenIfSame = true invokeCount = 0 currentValue = 1 receiver = 'value':null publisher = 'propA':1, 'propB':1, 'propC':1 proxy = 'prop':1 SimplyBind('propA').of(publisher).to('prop').of(proxy) SimplyBind('propB').of(publisher).to('prop').of(proxy) SimplyBind('propC').of(publisher).to('prop').of(proxy) SimplyBind('prop').of(proxy) .to('value').of(receiver) .transform (value)-> invokeCount++; value .disallowFrom('propB').of(publisher) expect(publisher.propA).to.equal 1 expect(publisher.propB).to.equal 1 expect(publisher.propC).to.equal 1 expect(proxy.prop).to.equal 1 expect(receiver.value).to.equal null expect(invokeCount).to.equal 0 publisher.propA = ++currentValue expect(publisher.propA).to.equal 2 expect(publisher.propB).to.equal 1 expect(publisher.propC).to.equal 1 expect(proxy.prop).to.equal 2 expect(receiver.value).to.equal 2 expect(invokeCount).to.equal 1 publisher.propB = ++currentValue expect(publisher.propA).to.equal 2 expect(publisher.propB).to.equal 3 expect(publisher.propC).to.equal 1 expect(proxy.prop).to.equal 3 expect(receiver.value).to.equal 2 expect(invokeCount).to.equal 1 publisher.propC = ++currentValue expect(publisher.propA).to.equal 2 expect(publisher.propB).to.equal 3 expect(publisher.propC).to.equal 4 expect(proxy.prop).to.equal 4 expect(receiver.value).to.equal 4 expect(invokeCount).to.equal 2 SimplyBind.defaultOptions.updateOnBind = true SimplyBind.defaultOptions.updateEvenIfSame = false test "Multiple disallows can be specified", ()-> SimplyBind.defaultOptions.updateOnBind = false SimplyBind.defaultOptions.updateEvenIfSame = true invokeCount = 0 currentValue = 1 receiver = 'value':null publisherA = 'propA':1, 'propB':1, 'propC':1 publisherB = 'propA':1, 'propB':1, 'propC':1 proxy = 'prop':1 SimplyBind('propA').of(publisherA).to('prop').of(proxy) SimplyBind('propB').of(publisherA).to('prop').of(proxy) SimplyBind('propC').of(publisherA).to('prop').of(proxy) SimplyBind('propA').of(publisherB).to('prop').of(proxy) SimplyBind('propB').of(publisherB).to('prop').of(proxy) SimplyBind('propC').of(publisherB).to('prop').of(proxy) SimplyBind('prop').of(proxy) .to('value').of(receiver) .transform (value)-> invokeCount++; value .disallowFrom('propB').of(publisherA) .disallowFrom('propA').of(publisherB) .disallowFrom('propC').of(publisherB) expect(publisherA.propA).to.equal 1 expect(publisherA.propB).to.equal 1 expect(publisherA.propC).to.equal 1 expect(publisherB.propA).to.equal 1 expect(publisherB.propB).to.equal 1 expect(publisherB.propC).to.equal 1 expect(proxy.prop).to.equal 1 expect(receiver.value).to.equal null expect(invokeCount).to.equal 0 publisherA.propA = ++currentValue expect(publisherA.propA).to.equal 2 expect(publisherA.propB).to.equal 1 expect(publisherA.propC).to.equal 1 expect(publisherB.propA).to.equal 1 expect(publisherB.propB).to.equal 1 expect(publisherB.propC).to.equal 1 expect(proxy.prop).to.equal 2 expect(receiver.value).to.equal 2 expect(invokeCount).to.equal 1 publisherA.propB = ++currentValue expect(publisherA.propA).to.equal 2 expect(publisherA.propB).to.equal 3 expect(publisherA.propC).to.equal 1 expect(publisherB.propA).to.equal 1 expect(publisherB.propB).to.equal 1 expect(publisherB.propC).to.equal 1 expect(proxy.prop).to.equal 3 expect(receiver.value).to.equal 2 expect(invokeCount).to.equal 1 publisherA.propC = ++currentValue expect(publisherA.propA).to.equal 2 expect(publisherA.propB).to.equal 3 expect(publisherA.propC).to.equal 4 expect(publisherB.propA).to.equal 1 expect(publisherB.propB).to.equal 1 expect(publisherB.propC).to.equal 1 expect(proxy.prop).to.equal 4 expect(receiver.value).to.equal 4 expect(invokeCount).to.equal 2 publisherB.propA = ++currentValue expect(publisherA.propA).to.equal 2 expect(publisherA.propB).to.equal 3 expect(publisherA.propC).to.equal 4 expect(publisherB.propA).to.equal 5 expect(publisherB.propB).to.equal 1 expect(publisherB.propC).to.equal 1 expect(proxy.prop).to.equal 5 expect(receiver.value).to.equal 4 expect(invokeCount).to.equal 2 publisherB.propB = ++currentValue expect(publisherA.propA).to.equal 2 expect(publisherA.propB).to.equal 3 expect(publisherA.propC).to.equal 4 expect(publisherB.propA).to.equal 5 expect(publisherB.propB).to.equal 6 expect(publisherB.propC).to.equal 1 expect(proxy.prop).to.equal 6 expect(receiver.value).to.equal 6 expect(invokeCount).to.equal 3 publisherB.propC = ++currentValue expect(publisherA.propA).to.equal 2 expect(publisherA.propB).to.equal 3 expect(publisherA.propC).to.equal 4 expect(publisherB.propA).to.equal 5 expect(publisherB.propB).to.equal 6 expect(publisherB.propC).to.equal 7 expect(proxy.prop).to.equal 7 expect(receiver.value).to.equal 6 expect(invokeCount).to.equal 3 SimplyBind.defaultOptions.updateOnBind = true SimplyBind.defaultOptions.updateEvenIfSame = false