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; }
public void TestDefaultValueIsUsedIfConversionFails_NullableInt() { MockSourceBinding mockSource; MockTargetBinding mockTarget; var mockValueConverter = new MockValueConverter() { ThrowOnConversion = true }; var parameter = new { Ignored = 12 }; object fallback = null; var binding = TestSetupCommon(mockValueConverter, parameter, fallback, typeof(int?), out mockSource, out mockTarget); Assert.AreEqual(1, mockValueConverter.ConversionsRequested.Count); Assert.AreEqual(0, mockValueConverter.ConversionsBackRequested.Count); Assert.AreEqual(1, mockTarget.Values.Count); Assert.AreEqual(null, mockTarget.Values[0]); mockSource.TryGetValueValue = "Fred"; mockSource.FireSourceChanged(); Assert.AreEqual(2, mockValueConverter.ConversionsRequested.Count); Assert.AreEqual(0, mockValueConverter.ConversionsBackRequested.Count); Assert.AreEqual(2, mockTarget.Values.Count); Assert.AreEqual(null, mockTarget.Values[1]); mockSource.TryGetValueValue = "Betty"; mockSource.FireSourceChanged(); Assert.AreEqual(3, mockValueConverter.ConversionsRequested.Count); Assert.AreEqual(0, mockValueConverter.ConversionsBackRequested.Count); Assert.AreEqual(3, mockTarget.Values.Count); Assert.AreEqual(null, mockTarget.Values[2]); }
public void TestDefaultValueIsUsedIfSourceResolutionFails_NullableInt() { MockSourceBinding mockSource; MockTargetBinding mockTarget; var mockValueConverter = new MockValueConverter() { ConversionResult = "A test value" }; var parameter = new { Ignored = 12 }; object fallback = null; var binding = TestSetupCommon(mockValueConverter, parameter, fallback, typeof(int?), out mockSource, out mockTarget); Assert.AreEqual(1, mockValueConverter.ConversionsRequested.Count); Assert.AreEqual(0, mockValueConverter.ConversionsBackRequested.Count); Assert.AreEqual(1, mockTarget.Values.Count); Assert.AreEqual("A test value", mockTarget.Values[0]); mockSource.TryGetValueResult = false; mockSource.FireSourceChanged(); Assert.AreEqual(1, mockValueConverter.ConversionsRequested.Count); Assert.AreEqual(0, mockValueConverter.ConversionsBackRequested.Count); Assert.AreEqual(2, mockTarget.Values.Count); Assert.AreEqual(null, mockTarget.Values[1]); mockSource.TryGetValueResult = false; mockSource.FireSourceChanged(); Assert.AreEqual(1, mockValueConverter.ConversionsRequested.Count); Assert.AreEqual(0, mockValueConverter.ConversionsBackRequested.Count); Assert.AreEqual(3, mockTarget.Values.Count); Assert.AreEqual(null, mockTarget.Values[2]); mockSource.TryGetValueResult = false; mockSource.FireSourceChanged(); Assert.AreEqual(1, mockValueConverter.ConversionsRequested.Count); Assert.AreEqual(0, mockValueConverter.ConversionsBackRequested.Count); Assert.AreEqual(4, mockTarget.Values.Count); Assert.AreEqual(null, mockTarget.Values[3]); }
public void TestFallbackValueIsUsedIfConversionFails() { MockSourceBinding mockSource; MockTargetBinding mockTarget; var mockValueConverter = new MockValueConverter() { ThrowOnConversion = true }; var parameter = new { Ignored = 12 }; var fallback = new { Fred = "Not Barney" }; var binding = TestSetupCommon(mockValueConverter, parameter, fallback, typeof(object), out mockSource, out mockTarget); Assert.AreEqual(1, mockValueConverter.ConversionsRequested.Count); Assert.AreEqual(0, mockValueConverter.ConversionsBackRequested.Count); Assert.AreEqual(1, mockTarget.Values.Count); Assert.AreEqual(fallback, mockTarget.Values[0]); }
public void TestFallbackValueIsUsedIfSourceResolutionFails() { MockSourceBinding mockSource; MockTargetBinding mockTarget; var mockValueConverter = new MockValueConverter() { ConversionResult = "A test value" }; var parameter = new { Ignored = 12 }; var fallback = new { Fred = "Not Barney" }; var binding = TestSetupCommon(mockValueConverter, parameter, fallback, typeof(object), out mockSource, out mockTarget); Assert.AreEqual(1, mockValueConverter.ConversionsRequested.Count); Assert.AreEqual(0, mockValueConverter.ConversionsBackRequested.Count); Assert.AreEqual(1, mockTarget.Values.Count); Assert.AreEqual("A test value", mockTarget.Values[0]); mockSource.TryGetValueResult = false; mockSource.FireSourceChanged(); Assert.AreEqual(1, mockValueConverter.ConversionsRequested.Count); Assert.AreEqual(0, mockValueConverter.ConversionsBackRequested.Count); Assert.AreEqual(2, mockTarget.Values.Count); Assert.AreEqual(fallback, mockTarget.Values[1]); }
public void TestSourceTypeIsUsedForConvertBack() { MockSourceBinding mockSource; MockTargetBinding mockTarget; var mockValueConverter = new MockValueConverter() { }; var parameter = new { Ignored = 12 }; var binding = TestSetupCommon(mockValueConverter, parameter, typeof(object), out mockSource, out mockTarget); var aType = new { Hello = 34 }; mockSource.SourceType = aType.GetType(); mockTarget.FireValueChanged(new MvxTargetChangedEventArgs("Ignored")); Assert.AreEqual(1, mockValueConverter.ConversionBackTypes.Count); Assert.AreEqual(aType.GetType(), mockValueConverter.ConversionBackTypes[0]); }
public void TestTargetTypeIsUsedForConvert() { MockSourceBinding mockSource; MockTargetBinding mockTarget; var mockValueConverter = new MockValueConverter() { }; var parameter = new { Ignored = 12 }; var targetType = new { Foo = 23 }.GetType(); var binding = TestSetupCommon(mockValueConverter, parameter, targetType, out mockSource, out mockTarget); mockSource.TryGetValueValue = "new value"; mockSource.FireSourceChanged(); Assert.AreEqual(2, mockValueConverter.ConversionTypes.Count); Assert.AreEqual(targetType, mockValueConverter.ConversionTypes[0]); Assert.AreEqual(targetType, mockValueConverter.ConversionTypes[1]); }
public void TestConverterParameterIsUsedForConvertBack() { MockSourceBinding mockSource; MockTargetBinding mockTarget; var mockValueConverter = new MockValueConverter() { ConversionBackResult = "Test ConversionBackResult", }; var parameter = new { Ignored = 12 }; var binding = TestSetupCommon(mockValueConverter, parameter, typeof(object), out mockSource, out mockTarget); var valueChanged = new { Hello = 34 }; mockTarget.FireValueChanged(new MvxTargetChangedEventArgs(valueChanged)); Assert.AreEqual(1, mockSource.ValuesSet.Count); Assert.AreEqual("Test ConversionBackResult", mockSource.ValuesSet[0]); Assert.AreEqual(1, mockValueConverter.ConversionBackParameters.Count); Assert.AreEqual(parameter, mockValueConverter.ConversionBackParameters[0]); }
public void TestConverterParameterIsUsedForConvert() { MockSourceBinding mockSource; MockTargetBinding mockTarget; var mockValueConverter = new MockValueConverter() { ConversionResult = "Test ConversionResult", }; var parameter = new { Ignored = 12 }; var binding = TestSetupCommon(mockValueConverter, parameter, typeof(object), out mockSource, out mockTarget); Assert.AreEqual(1, mockTarget.Values.Count); Assert.AreEqual("Test ConversionResult", mockTarget.Values[0]); Assert.AreEqual(1, mockValueConverter.ConversionParameters.Count); Assert.AreEqual(parameter, mockValueConverter.ConversionParameters[0]); }
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()); }