@danielkalen/simplybind
Version:
Magically simple, framework-less one-way/two-way data binding for frontend/backend in ~5kb.
99 lines (74 loc) • 3.04 kB
text/coffeescript
suite "Condition Bindings", ()->
test "Binding single prop to multiple ObjectProps + condition", ()->
dispatcher = 'prop':'value1'
objectA.prop1 = objectB.prop1 = objectC.prop1 = null
allowUpdate = false
SimplyBind('prop', {updateOnBind:false}).of(dispatcher)
.to('multi:prop1').of([objectA, objectB, objectC])
.condition ()-> allowUpdate
expect(objectA.prop1).to.equal null
expect(objectB.prop1).to.equal null
expect(objectC.prop1).to.equal null
dispatcher.prop = 'value2'
expect(dispatcher.prop).to.equal 'value2'
expect(objectA.prop1).to.equal null
expect(objectB.prop1).to.equal null
expect(objectC.prop1).to.equal null
allowUpdate = true
dispatcher.prop = 'value3'
expect(dispatcher.prop).to.equal 'value3'
expect(objectA.prop1).to.equal 'value3'
expect(objectB.prop1).to.equal 'value3'
expect(objectC.prop1).to.equal 'value3'
restartSandbox()
test "Binding multiple ObjectProp to a single prop + condition", ()->
receiver = 'prop':null
objectA.prop1 = objectB.prop1 = objectC.prop1 = 'value1'
allowUpdate = false
SimplyBind('multi:prop1', {updateOnBind:false}).of([objectA, objectB, objectC])
.to('prop').of(receiver)
.condition ()-> allowUpdate
expect(receiver.prop).to.equal null
expect(objectA.prop1).to.equal 'value1'
expect(objectB.prop1).to.equal 'value1'
expect(objectC.prop1).to.equal 'value1'
objectA.prop1 = 'value2'
expect(receiver.prop).to.equal null
expect(objectA.prop1).to.equal 'value2'
expect(objectB.prop1).to.equal 'value1'
expect(objectC.prop1).to.equal 'value1'
allowUpdate = true
objectB.prop1 = 'value3'
expect(receiver.prop).to.equal 'value3'
expect(objectA.prop1).to.equal 'value2'
expect(objectB.prop1).to.equal 'value3'
expect(objectC.prop1).to.equal 'value1'
restartSandbox()
test "Binding multiple ObjectProp to a single prop both ways + condition", ()->
receiverDispatcher = 'prop':'valueP1'
objectA.prop1 = objectB.prop1 = objectC.prop1 = 'value1'
allowUpdate = false
SimplyBind('multi:prop1', {updateOnBind:false}).of([objectA, objectB, objectC])
.to('prop').of(receiverDispatcher).bothWays()
.condition ()-> allowUpdate
expect(receiverDispatcher.prop).to.equal 'valueP1'
expect(objectA.prop1).to.equal 'value1'
expect(objectB.prop1).to.equal 'value1'
expect(objectC.prop1).to.equal 'value1'
objectA.prop1 = 'value2'
expect(receiverDispatcher.prop).to.equal 'valueP1'
expect(objectA.prop1).to.equal 'value2'
expect(objectB.prop1).to.equal 'value1'
expect(objectC.prop1).to.equal 'value1'
allowUpdate = true
receiverDispatcher.prop = 'valueP3'
expect(receiverDispatcher.prop).to.equal 'valueP3'
expect(objectA.prop1).to.equal 'valueP3'
expect(objectB.prop1).to.equal 'valueP3'
expect(objectC.prop1).to.equal 'valueP3'
objectC.prop1 = 'value4'
expect(receiverDispatcher.prop).to.equal 'value4'
expect(objectA.prop1).to.equal 'value4'
expect(objectB.prop1).to.equal 'value4'
expect(objectC.prop1).to.equal 'value4'
restartSandbox()