diff options
author | Eric Maupin <ermaup@microsoft.com> | 2018-03-23 20:18:07 +0300 |
---|---|---|
committer | Eric Maupin <ermaup@microsoft.com> | 2018-03-23 20:18:07 +0300 |
commit | c67e3f14b30d91f804937e6261ae6235b00059c9 (patch) | |
tree | 1b9982805e37846f55d11b900cfacda9d1a043e7 /Xamarin.PropertyEditing.Tests | |
parent | 1b7362132a466acd37b5841e6ce4683b1d1bc08d (diff) |
[Core/Win] Add Convert to Local Value
Diffstat (limited to 'Xamarin.PropertyEditing.Tests')
-rw-r--r-- | Xamarin.PropertyEditing.Tests/PropertyViewModelTests.cs | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/Xamarin.PropertyEditing.Tests/PropertyViewModelTests.cs b/Xamarin.PropertyEditing.Tests/PropertyViewModelTests.cs index 29c0a18..03d5507 100644 --- a/Xamarin.PropertyEditing.Tests/PropertyViewModelTests.cs +++ b/Xamarin.PropertyEditing.Tests/PropertyViewModelTests.cs @@ -427,6 +427,78 @@ namespace Xamarin.PropertyEditing.Tests } [Test] + public async Task ConvertToLocalValue () + { + var value = GetNonDefaultRandomTestValue (); + + var mockProperty = GetPropertyMock (); + + var resource = new Resource ("name"); + + var resourcesMock = new Mock<IResourceProvider> (); + resourcesMock.Setup (rp => rp.GetResourcesAsync (new object(), mockProperty.Object, It.IsAny<CancellationToken> ())).ReturnsAsync (new[] { resource }); + + var editor = new MockObjectEditor (mockProperty.Object); + await editor.SetValueAsync (mockProperty.Object, new ValueInfo<TValue> { + Source = ValueSource.Resource, + ValueDescriptor = resource, + Value = value + }); + + var vm = GetViewModel (mockProperty.Object, new[] { editor }); + vm.ResourceProvider = resourcesMock.Object; + Assume.That (vm.Value, Is.EqualTo (value)); + Assume.That (vm.ValueSource, Is.EqualTo (ValueSource.Resource)); + + Assert.That (vm.ConvertToLocalValueCommand.CanExecute (null), Is.True); + + bool changed = false; + vm.ConvertToLocalValueCommand.CanExecuteChanged += (o, e) => changed = true; + vm.ConvertToLocalValueCommand.Execute (null); + + Assert.That (vm.Value, Is.EqualTo (value)); + Assert.That (vm.ValueSource, Is.EqualTo (ValueSource.Local)); + Assert.That (changed, Is.True, "CanExecuteChanged didn't fire"); // Converitng to local should make the command unexecutable because its now already local + } + + [Test] + public async Task ConvertToLocalValueAlreadyLocal () + { + var value = GetNonDefaultRandomTestValue (); + + var mockProperty = GetPropertyMock (); + + var editor = new MockObjectEditor (mockProperty.Object); + await editor.SetValueAsync (mockProperty.Object, new ValueInfo<TValue> { + Source = ValueSource.Local, + Value = value + }); + + var vm = GetViewModel (mockProperty.Object, new[] { editor }); + Assume.That (vm.Value, Is.EqualTo (value)); + Assume.That (vm.ValueSource, Is.EqualTo (ValueSource.Local)); + + Assert.That (vm.ConvertToLocalValueCommand.CanExecute (null), Is.False); + } + + [Test] + public async Task ConvertToLocalValueUnset () + { + var mockProperty = GetPropertyMock (); + + var editor = new MockObjectEditor (mockProperty.Object); + await editor.SetValueAsync (mockProperty.Object, new ValueInfo<TValue> { + Source = ValueSource.Unset + }); + + var vm = GetViewModel (mockProperty.Object, new[] { editor }); + Assume.That (vm.Value, Is.EqualTo (default(TValue))); + Assume.That (vm.ValueSource, Is.EqualTo (ValueSource.Unset)); + + Assert.That (vm.ConvertToLocalValueCommand.CanExecute (null), Is.False); + } + + [Test] [Description ("For performance reasons, we should never raise a value change when it hasn't changed")] public async Task ValueNotChangedForSameValue () { |