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()

