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


