suite "Basic Bindings", ()->
	test "Binding single prop to multiple ObjectProps", ()->
		dispatcher = 'prop':'value1'
		objectA.prop1 = objectB.prop1 = objectC.prop1 = null

		SimplyBind('prop').of(dispatcher)
			.to('multi:prop1').of([objectA, objectB, objectC])

		expect(objectA.prop1).to.equal 'value1'
		expect(objectB.prop1).to.equal 'value1'
		expect(objectC.prop1).to.equal 'value1'

		dispatcher.prop = '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", ()->
		receiver = 'prop':null
		objectA.prop1 = objectB.prop1 = objectC.prop1 = 'value1'

		SimplyBind('multi:prop1').of([objectA, objectB, objectC])
			.to('prop').of(receiver)

		expect(receiver.prop).to.equal 'value1'
		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 '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", ()->
		receiverDispatcher = 'prop':'valueP1'
		objectA.prop1 = objectB.prop1 = objectC.prop1 = 'value1'

		SimplyBind('multi:prop1').of([objectA, objectB, objectC])
			.to('prop').of(receiverDispatcher).bothWays()

		expect(receiverDispatcher.prop).to.equal 'value1'
		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 '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()
