@danielkalen/simplybind
Version:
Magically simple, framework-less one-way/two-way data binding for frontend/backend in ~5kb.
150 lines (100 loc) • 4.97 kB
text/coffeescript
suite "Settings/Binding-Options", ()->
test "SimplyBind.settings should contain the global settings list", ()->
settings = SimplyBind.settings
expect(settings.silent).not.to.be.undefined
expect(settings.placeholder).not.to.be.undefined
test "SimplyBind.defaultOptions should contain the default binding options list", ()->
options = SimplyBind.defaultOptions
expect(options.dispatchEvents).not.to.be.undefined
expect(options.updateEvenIfSame).not.to.be.undefined
expect(options.updateOnBind).not.to.be.undefined
expect(options.simpleSelector).not.to.be.undefined
expect(options.promiseTransforms).not.to.be.undefined
test "SimplyBind.settings.placeholder should only accept arrays with lengths of 2 as a new value", ()->
expect(SimplyBind.settings.placeholder).to.eql ['{{', '}}']
SimplyBind.settings.placeholder = 'na'
expect(SimplyBind.settings.placeholder).to.eql ['{{', '}}']
SimplyBind.settings.placeholder = undefined
expect(SimplyBind.settings.placeholder).to.eql ['{{', '}}']
SimplyBind.settings.placeholder = null
expect(SimplyBind.settings.placeholder).to.eql ['{{', '}}']
SimplyBind.settings.placeholder = ()->
expect(SimplyBind.settings.placeholder).to.eql ['{{', '}}']
SimplyBind.settings.placeholder = []
expect(SimplyBind.settings.placeholder).to.eql ['{{', '}}']
SimplyBind.settings.placeholder = ['{{', '{{', '}}']
expect(SimplyBind.settings.placeholder).to.eql ['{{', '}}']
SimplyBind.settings.placeholder = ['[[', ']]']
expect(SimplyBind.settings.placeholder).to.eql ['[[', ']]']
SimplyBind.settings.placeholder = ['{{', '}}']
expect(SimplyBind.settings.placeholder).to.eql ['{{', '}}']
test "A custom binding options object can be passed as SimplyBind's second argument to be used for all subscribers added to that publisher interface", ()->
expect(SimplyBind.defaultOptions.updateOnBind).to.be.true
dispatcher = value:'uniqueValue'
receiver = {1,2,3,4}
SimplyBind('value', updateOnBind:false).of(dispatcher)
.to('1').of(receiver)
.and.to('2').of(receiver)
.and.to('3').of(receiver)
expect(receiver[1]).not.to.equal 'uniqueValue'
expect(receiver[2]).not.to.equal 'uniqueValue'
expect(receiver[3]).not.to.equal 'uniqueValue'
SimplyBind('value').of(dispatcher)
.to('4').of(receiver)
expect(receiver[4]).to.equal 'uniqueValue'
expect(SimplyBind.defaultOptions.updateOnBind).to.be.true
restartSandbox()
test "A truthy value can be passed as SimplyBind's third argument to save the specified options to all subscribers and future subscribers of a publisher", ()->
expect(SimplyBind.defaultOptions.updateOnBind).to.be.true
dispatcher = value:'uniqueValue'
receiver = {1,2,3,4,5,6}
SimplyBind('value', {updateOnBind:false}, true).of(dispatcher)
.to('1').of(receiver)
.and.to('2').of(receiver)
.and.to('3').of(receiver)
expect(receiver[1]).not.to.equal 'uniqueValue'
expect(receiver[2]).not.to.equal 'uniqueValue'
expect(receiver[3]).not.to.equal 'uniqueValue'
SimplyBind('value').of(dispatcher)
.to('4').of(receiver)
expect(receiver[4]).not.to.equal 'uniqueValue'
SimplyBind('value', {updateOnBind:true}, true).of(dispatcher)
.to('5').of(receiver)
expect(receiver[5]).to.equal 'uniqueValue'
SimplyBind('value').of(dispatcher)
.to('6').of(receiver)
expect(receiver[6]).to.equal 'uniqueValue'
expect(SimplyBind.defaultOptions.updateOnBind).to.be.true
restartSandbox()
test "A custom binding options object can be used even for a cached binding/publisher", ()->
expect(SimplyBind.defaultOptions.updateOnBind).to.be.true
dispatcher = value:'uniqueValue'
receiver = {1,2,3,4}
SimplyBind('value', {updateOnBind:false}, true).of(dispatcher)
.to('1').of(receiver)
.and.to('2').of(receiver)
.and.to('3').of(receiver)
expect(receiver[1]).not.to.equal 'uniqueValue'
expect(receiver[2]).not.to.equal 'uniqueValue'
expect(receiver[3]).not.to.equal 'uniqueValue'
SimplyBind('value', updateOnBind:true).of(dispatcher)
.to('4').of(receiver)
expect(receiver[4]).to.equal 'uniqueValue'
expect(SimplyBind.defaultOptions.updateOnBind).to.be.true
restartSandbox()
test "Creating a new binding interface for a cached binding without passing an options object shouldn't overwrite existing options", ()->
expect(SimplyBind.defaultOptions.updateOnBind).to.be.true
dispatcher = value:'uniqueValue'
receiver = {1,2,3,4}
SimplyBind('value', {updateOnBind:false}, true).of(dispatcher)
.to('1').of(receiver)
.and.to('2').of(receiver)
.and.to('3').of(receiver)
expect(receiver[1]).not.to.equal 'uniqueValue'
expect(receiver[2]).not.to.equal 'uniqueValue'
expect(receiver[3]).not.to.equal 'uniqueValue'
SimplyBind('value', null, true).of(dispatcher)
.to('4').of(receiver)
expect(receiver[4]).not.to.equal 'uniqueValue'
expect(SimplyBind.defaultOptions.updateOnBind).to.be.true
restartSandbox()