From 02f43060012c53246f0bb5cd848b96e45bdc59ef Mon Sep 17 00:00:00 2001 From: Eric Maupin Date: Mon, 17 Sep 2018 14:01:03 -0400 Subject: [Core] If unconstrained, respect ValueDescriptor The placement of this is important. Since the value type is likely an enum, it's not going to have an out of bounds default() value. So, despite only setting the ValueDescriptor, Value will still look like a valid value, so ValueDescriptor takes presedence. --- .../PredefinedValuesViewModelTests.cs | 65 +++++++++++++++++----- 1 file changed, 50 insertions(+), 15 deletions(-) (limited to 'Xamarin.PropertyEditing.Tests') diff --git a/Xamarin.PropertyEditing.Tests/PredefinedValuesViewModelTests.cs b/Xamarin.PropertyEditing.Tests/PredefinedValuesViewModelTests.cs index bb33343..f62b7d6 100644 --- a/Xamarin.PropertyEditing.Tests/PredefinedValuesViewModelTests.cs +++ b/Xamarin.PropertyEditing.Tests/PredefinedValuesViewModelTests.cs @@ -270,14 +270,38 @@ namespace Xamarin.PropertyEditing.Tests [TestFixture] internal class UnconstrainedPredefinedViewModelTests - : PredefinedValuesViewModelTests + : PredefinedValuesViewModelTests { + [Test] + public async Task ValueNameRepresentsValueDescriptor () + { + var value = GetNonDefaultRandomTestValue (); + + var property = GetPropertyMock (); + var predefined = property.As> (); + predefined.SetupGet (p => p.PredefinedValues).Returns (new Dictionary { + { "Value", 0 }, + }); + predefined.SetupGet (p => p.IsConstrainedToPredefined).Returns (false); + + var outOfBounds = "random"; + + var editor = GetBasicEditor (property.Object); + await editor.SetValueAsync (property.Object, new ValueInfo { + Source = ValueSource.Local, + ValueDescriptor = outOfBounds + }); + + var vm = GetViewModel (property.Object, new[] { editor }); + Assert.That (vm.ValueName, Is.EqualTo (outOfBounds)); + } + [Test] public void ValueDescriptorForUnconstrained () { var property = GetPropertyMock (); - var predefined = property.As> (); - predefined.SetupGet (p => p.PredefinedValues).Returns (new Dictionary { + var predefined = property.As> (); + predefined.SetupGet (p => p.PredefinedValues).Returns (new Dictionary { { "Value", GetNonDefaultRandomTestValue () }, }); predefined.SetupGet (p => p.IsConstrainedToPredefined).Returns (false); @@ -289,7 +313,7 @@ namespace Xamarin.PropertyEditing.Tests vm.ValueName = "test"; - var info = editor.values[property.Object] as ValueInfo; + var info = editor.values[property.Object] as ValueInfo; Assert.That (info, Is.Not.Null); Assert.That (info.ValueDescriptor, Is.EqualTo ("test")); Assert.That (info.Source, Is.EqualTo (ValueSource.Local)); @@ -300,8 +324,8 @@ namespace Xamarin.PropertyEditing.Tests public void ValueDescriptorEmptyNotNullUnconstrained () { var property = GetPropertyMock (); - var predefined = property.As> (); - predefined.SetupGet (p => p.PredefinedValues).Returns (new Dictionary { + var predefined = property.As> (); + predefined.SetupGet (p => p.PredefinedValues).Returns (new Dictionary { { "Value", GetNonDefaultRandomTestValue () }, }); predefined.SetupGet (p => p.IsConstrainedToPredefined).Returns (false); @@ -314,28 +338,39 @@ namespace Xamarin.PropertyEditing.Tests vm.ValueName = "test"; vm.ValueName = null; - var info = editor.values[property.Object] as ValueInfo; + var info = editor.values[property.Object] as ValueInfo; Assert.That (info, Is.Not.Null); Assert.That (info.ValueDescriptor, Is.EqualTo (String.Empty)); Assert.That (info.Source, Is.EqualTo (ValueSource.Local)); } - protected override string GetRandomTestValue (Random rand) + protected override int GetRandomTestValue (Random rand) { - string[] names = Enum.GetNames (typeof(PredefinedEnumTest)); - int index = rand.Next (0, names.Length); - return names[index]; + int[] values = (int[])Enum.GetValues (typeof(PredefinedEnumTest)); + int index = rand.Next (0, values.Length); + return values[index]; } - protected override PredefinedValuesViewModel GetViewModel (TargetPlatform platform, IPropertyInfo property, IEnumerable editors) + protected override PredefinedValuesViewModel GetViewModel (TargetPlatform platform, IPropertyInfo property, IEnumerable editors) { - return new PredefinedValuesViewModel (platform, property, editors); + return new PredefinedValuesViewModel (platform, property, editors); } protected override bool IsConstrained => false; - protected override IReadOnlyDictionary Values => - Enum.GetNames (typeof(PredefinedEnumTest)).ToDictionary (s => s, s => s); + protected override IReadOnlyDictionary Values + { + get + { + string[] names = Enum.GetNames (typeof (PredefinedEnumTest)); + int[] values = (int[])Enum.GetValues (typeof(PredefinedEnumTest)); + var dict = new Dictionary (); + for (int i = 0; i < names.Length; i++) + dict.Add (names[i], values[i]); + + return dict; + } + } } [TestFixture] -- cgit v1.2.3