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); }
private MvxFullBinding TestSetupCommon(IMvxValueConverter valueConverter, object converterParameter, object fallbackValue, Type targetType, out MockSourceBinding mockSource, out MockTargetBinding mockTarget) { ClearAll(); MvxBindingSingletonCache.Initialize(); var mockSourceBindingFactory = new Mock<IMvxSourceBindingFactory>(); Ioc.RegisterSingleton(mockSourceBindingFactory.Object); var mockTargetBindingFactory = new Mock<IMvxTargetBindingFactory>(); Ioc.RegisterSingleton(mockTargetBindingFactory.Object); var realSourceStepFactory = new MvxSourceStepFactory(); realSourceStepFactory.AddOrOverwrite(typeof(MvxPathSourceStepDescription), new MvxPathSourceStepFactory()); Ioc.RegisterSingleton<IMvxSourceStepFactory>(realSourceStepFactory); var sourceText = "sourceText"; var targetName = "targetName"; var source = new { Value = 1 }; var target = new { Value = 2 }; var bindingDescription = new MvxBindingDescription { Source = new MvxPathSourceStepDescription() { Converter = valueConverter, ConverterParameter = converterParameter, FallbackValue = fallbackValue, SourcePropertyPath = sourceText, }, Mode = MvxBindingMode.TwoWay, TargetName = targetName }; mockSource = new MockSourceBinding(); mockTarget = new MockTargetBinding() { TargetType = targetType }; mockTarget.DefaultMode = MvxBindingMode.TwoWay; var localSource = mockSource; mockSourceBindingFactory .Setup(x => x.CreateBinding(It.IsAny<object>(), It.Is<string>(s => s == sourceText))) .Returns((object a, string b) => localSource); var localTarget = mockTarget; mockTargetBindingFactory .Setup(x => x.CreateBinding(It.IsAny<object>(), It.Is<string>(s => s == targetName))) .Returns((object a, string b) => localTarget); mockSource.TryGetValueResult = true; mockSource.TryGetValueValue = "TryGetValueValue"; var request = new MvxBindingRequest(source, target, bindingDescription); var toTest = new MvxFullBinding(request); return toTest; }
private void TestCommon(MvxBindingMode bindingMode, bool expectSourceBinding, bool expectTargetBinding) { ClearAll(); MvxBindingSingletonCache.Initialize(); var mockSourceBindingFactory = new Mock<IMvxSourceBindingFactory>(); Ioc.RegisterSingleton(mockSourceBindingFactory.Object); var mockTargetBindingFactory = new Mock<IMvxTargetBindingFactory>(); Ioc.RegisterSingleton(mockTargetBindingFactory.Object); var realSourceStepFactory = new MvxSourceStepFactory(); realSourceStepFactory.AddOrOverwrite(typeof(MvxPathSourceStepDescription), new MvxPathSourceStepFactory()); Ioc.RegisterSingleton<IMvxSourceStepFactory>(realSourceStepFactory); var sourceText = "sourceText"; var targetName = "targetName"; var source = new { Value = 1 }; var target = new { Value = 2 }; var converterParameter = new { Value = 3 }; var fallbackValue = new { Value = 4 }; var converter = new Mock<IMvxValueConverter>(); var bindingDescription = new MvxBindingDescription { Source = new MvxPathSourceStepDescription() { Converter = converter.Object, ConverterParameter = converterParameter, FallbackValue = fallbackValue, SourcePropertyPath = sourceText, }, Mode = bindingMode, TargetName = targetName }; var mockSourceBinding = new Mock<IMvxSourceBinding>(); var mockTargetBinding = new Mock<IMvxTargetBinding>(); mockSourceBindingFactory .Setup(x => x.CreateBinding(It.Is<object>(s => s == source), It.Is<string>(s => s == sourceText))) .Returns((object a, string b) => mockSourceBinding.Object); mockTargetBindingFactory .Setup(x => x.CreateBinding(It.Is<object>(s => s == target), It.Is<string>(s => s == targetName))) .Returns((object a, string b) => mockTargetBinding.Object); var request = new MvxBindingRequest(source, target, bindingDescription); var toTest = new MvxFullBinding(request); //var sourceBindingTimes = expectSourceBinding ? Times.Once() : Times.Never(); //mockSourceBinding.Verify(x => x.Changed += It.IsAny<EventHandler<MvxSourcePropertyBindingEventArgs>>(), sourceBindingTimes); mockSourceBindingFactory .Verify(x => x.CreateBinding(It.Is<object>(s => s == source), It.Is<string>(s => s == sourceText)), Times.Once()); //var targetBindingTimes = expectSourceBinding ? Times.Once() : Times.Never(); //mockTargetBinding.Verify(x => x.ValueChanged += It.IsAny<EventHandler<MvxTargetChangedEventArgs>>(), targetBindingTimes); mockTargetBindingFactory .Verify(x => x.CreateBinding(It.Is<object>(s => s == target), It.Is<string>(s => s == targetName)), Times.Once()); }