UNPKG

@danielkalen/simplybind

Version:

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

189 lines (133 loc) 5.32 kB
suite "Will unBind all bindings in both directions if passed true as the second argument", ()-> suiteSetup(restartSandbox) test "ObjectProp", ()-> SimplyBind('prop1').of(objectA) .to('prop1').of(objectB).bothWays() SimplyBind('prop2').of(objectA) .to('prop2').of(objectB).bothWays() objectA.prop1 = 'objectA.prop1' expect(objectA.prop1).to.equal 'objectA.prop1' expect(objectB.prop1).to.equal 'objectA.prop1' objectB.prop2 = 'objectB.prop2' expect(objectA.prop2).to.equal 'objectB.prop2' expect(objectB.prop2).to.equal 'objectB.prop2' objectB.prop1 = 'reset' objectB.prop2 = 'reset' SimplyBind.unBindAll(objectA, true) objectA.prop1 = 'objectA.prop1' expect(objectA.prop1).to.equal 'objectA.prop1' expect(objectB.prop1).to.equal 'reset' objectA.prop2 = 'objectA.prop2' expect(objectA.prop2).to.equal 'objectA.prop2' expect(objectB.prop2).to.equal 'reset' objectB.prop2 = 'objectB.prop2' expect(objectA.prop2).to.equal 'objectA.prop2' expect(objectB.prop2).to.equal 'objectB.prop2' expect(objectA._sb_map).to.be.undefined expect(objectB._sb_map).to.be.undefined restartSandbox() test "DOMText", ()-> if not isBrowser then @skip() else SimplyBind('textContent').of(regA) .to('textContent').of(regB).bothWays() SimplyBind('textContent').of(regA).set 'regA.textContent' expect(regA.textContent).to.equal 'regA.textContent' expect(regB.textContent).to.equal 'regA.textContent' SimplyBind('textContent').of(regB).set 'reset' SimplyBind.unBindAll(regA, true) expect(regA._sb_map).to.be.undefined expect(regB._sb_map).to.be.undefined SimplyBind('textContent').of(regA).set 'regA.textContent' expect(regA.textContent).to.equal 'regA.textContent' expect(regB.textContent).to.equal 'reset' SimplyBind('textContent').of(regB).set 'regB.textContent' expect(regA.textContent).to.equal 'regA.textContent' expect(regB.textContent).to.equal 'regB.textContent' restartSandbox() test "DOMValue", ()-> if not isBrowser then @skip() else SimplyBind('value').of(inputA) .to('value').of(inputB).bothWays() inputA.value = 'inputA.value' inputA.emit 'change' expect(inputA.value).to.equal 'inputA.value' expect(inputB.value).to.equal 'inputA.value' inputB.value = 'reset' SimplyBind.unBindAll(inputA, true) inputA.value = 'inputA.value' inputA.emit 'change' expect(inputA.value).to.equal 'inputA.value' expect(inputB.value).to.equal 'reset' inputB.value = 'inputB.value' inputB.emit 'change' expect(inputA.value).to.equal 'inputA.value' expect(inputB.value).to.equal 'inputB.value' expect(inputA._sb_map).to.be.undefined expect(inputB._sb_map).to.be.undefined restartSandbox() test "Function", ()-> passedValue = null valueToPass = 1 takeFromReceiver = false fn = (fromReceiver)-> passedValue = if takeFromReceiver then fromReceiver else valueToPass invoker = 'prop':'value' receiver = 'prop':undefined SimplyBind('prop').of(invoker).to(fn) SimplyBind(fn).to('prop').of(receiver).bothWays() expect(receiver.prop).to.equal 1 expect(passedValue).to.equal 1 valueToPass = 5 invoker.prop = 'anotherValue' expect(receiver.prop).to.equal 5 expect(passedValue).to.equal 5 takeFromReceiver = true receiver.prop = 10 takeFromReceiver = false expect(passedValue).to.equal 10 SimplyBind.unBindAll(fn, true) valueToPass = 15 invoker.prop = 'newValue' expect(receiver.prop).to.equal 10 expect(passedValue).to.equal 15 takeFromReceiver = true receiver.prop = 20 takeFromReceiver = false expect(passedValue).to.equal 15 SimplyBind.unBindAll(fn, true) expect(fn._sb_ID).not.to.be.undefined SimplyBind.unBindAll(invoker, true) expect(fn._sb_ID).to.be.undefined test "Event", ()-> eventInvokeCount = 0 eventObject = null objectA.prop = objectB.prop = 'someValue' eventEmitterA.on 'someEvent', (event)-> eventObject = event or @ binding = SimplyBind('event:someEvent').of(eventEmitterA).transformSelf ()-> eventObject .to('prop').of(objectA).bothWays() .and.to('prop').of(objectB).bothWays() .and.to ()-> eventInvokeCount++ eventEmitterA.emit 'someEvent' expect(objectA.prop).to.equal eventObject expect(objectB.prop).to.equal(objectA.prop) expect(eventInvokeCount).to.equal 1 objectA.prop = 'different value' expect(objectA.prop).to.equal 'different value' # expect(objectB.prop).to.equal eventObject expect(eventInvokeCount).to.equal 2 objectB.prop = 'different value2' expect(eventInvokeCount).to.equal 3 SimplyBind.unBindAll(eventEmitterA, true) objectA.prop = 'different value' eventEmitterA.emit 'someEvent' eventEmitterA.on 'someEvent', ()-> eventInvokeCount++ expect(objectA.prop).to.equal 'different value' expect(objectB.prop).to.equal 'different value2' expect(eventInvokeCount).to.equal 3 objectA.prop = 'another value' expect(objectA.prop).to.equal 'another value' expect(objectB.prop).to.equal 'different value2' objectB.prop = 'another value2' expect(objectA.prop).to.equal 'another value' expect(objectB.prop).to.equal 'another value2' expect(eventInvokeCount).to.equal 3 expect(binding._.subs.length).to.equal 0 expect(eventEmitterA._sb_map).to.be.undefined restartSandbox()