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

