private static void OneTimeAssertions(MvxFullBinding binding, MockTargetBinding mockTarget, MockSourceBinding mockSource)
{
Assert.AreEqual(0, mockTarget.SubscribeToEventsCalled);
Assert.AreEqual(1, mockTarget.Values.Count);
Assert.AreEqual("TryGetValueValue", mockTarget.Values[0]);
mockSource.TryGetValueValue = "SecondValue";
mockSource.FireSourceChanged();
Assert.AreEqual(1, mockTarget.Values.Count);
mockSource.TryGetValueValue = "ThirdValue";
mockSource.FireSourceChanged();
Assert.AreEqual(1, mockTarget.Values.Count);
Assert.AreEqual(0, mockSource.ValuesSet.Count);
mockTarget.FireValueChanged(new MvxTargetChangedEventArgs("FromTarget1"));
Assert.AreEqual(0, mockSource.ValuesSet.Count);
mockTarget.FireValueChanged(new MvxTargetChangedEventArgs("FromTarget2"));
Assert.AreEqual(0, mockSource.ValuesSet.Count);
Assert.AreEqual(0, mockSource.DisposeCalled);
Assert.AreEqual(0, mockTarget.DisposeCalled);
binding.DataContext = new { ignored = 12 };
Assert.AreEqual(1, mockSource.DisposeCalled);
Assert.AreEqual(0, mockTarget.DisposeCalled);
Assert.AreEqual(2, mockTarget.Values.Count);
Assert.AreEqual("ThirdValue", mockTarget.Values[1]);
binding.DataContext = new { ignored = 13 };
Assert.AreEqual(2, mockSource.DisposeCalled);
Assert.AreEqual(0, mockTarget.DisposeCalled);
Assert.AreEqual(3, mockTarget.Values.Count);
Assert.AreEqual("ThirdValue", mockTarget.Values[2]);
mockSource.TryGetValueValue = "NewValue";
mockSource.FireSourceChanged();
Assert.AreEqual(3, mockTarget.Values.Count);
mockTarget.FireValueChanged(new MvxTargetChangedEventArgs("FromTarget1"));
Assert.AreEqual(0, mockSource.ValuesSet.Count);
mockTarget.FireValueChanged(new MvxTargetChangedEventArgs("FromTarget2"));
Assert.AreEqual(0, mockSource.ValuesSet.Count);
binding.Dispose();
Assert.AreEqual(3, mockSource.DisposeCalled);
Assert.AreEqual(1, mockTarget.DisposeCalled);
}