@danielkalen/simplybind
Version:
Magically simple, framework-less one-way/two-way data binding for frontend/backend in ~5kb.
80 lines (58 loc) • 2.46 kB
text/coffeescript
suite "Transform Bindings", ()->
test "Binding single prop to multiple ObjectProps + transform", ()->
dispatcher = 'prop':'value1'
objectA.prop1 = objectB.prop1 = objectC.prop1 = null
SimplyBind('prop').of(dispatcher)
.to('multi:prop1').of([objectA, objectB, objectC])
.transform (value)-> value.toUpperCase()
dispatcher.prop = 'value2'
expect(dispatcher.prop).to.equal 'value2'
expect(objectA.prop1).to.equal 'VALUE2'
expect(objectB.prop1).to.equal 'VALUE2'
expect(objectC.prop1).to.equal 'VALUE2'
restartSandbox()
test "Binding multiple ObjectProp to a single prop + transform", ()->
receiver = 'prop':null
objectA.prop1 = objectB.prop1 = objectC.prop1 = 'value1'
SimplyBind('multi:prop1').of([objectA, objectB, objectC])
.to('prop').of(receiver)
.transform (value)-> value.toUpperCase()
objectA.prop1 = 'value2'
expect(receiver.prop).to.equal 'VALUE2'
expect(objectA.prop1).to.equal 'value2'
expect(objectB.prop1).to.equal 'value1'
expect(objectC.prop1).to.equal 'value1'
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'
objectC.prop1 = 'value4'
expect(receiver.prop).to.equal 'VALUE4'
expect(objectA.prop1).to.equal 'value2'
expect(objectB.prop1).to.equal 'value3'
expect(objectC.prop1).to.equal 'value4'
restartSandbox()
test "Binding multiple ObjectProp to a single prop both ways + transform", ()->
receiverDispatcher = 'prop':'valueP1'
objectA.prop1 = objectB.prop1 = objectC.prop1 = 'value1'
SimplyBind('multi:prop1').of([objectA, objectB, objectC])
.to('prop').of(receiverDispatcher).bothWays()
.transform (value)-> value.toUpperCase()
objectA.prop1 = 'value2'
expect(receiverDispatcher.prop).to.equal 'VALUE2'
expect(objectA.prop1).to.equal 'value2'
expect(objectB.prop1).to.equal 'VALUE2'
expect(objectC.prop1).to.equal 'VALUE2'
objectB.prop1 = 'value3'
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()