DataContextChangeSynchronizerTest.cs 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. // Copyright (c) The Perspex Project. All rights reserved.
  2. // Licensed under the MIT license. See licence.md file in the project root for full license information.
  3. using System;
  4. using Perspex.Controls;
  5. using GitHubClient.ViewModels;
  6. using Perspex.Markup.Xaml.DataBinding;
  7. using Perspex.Markup.Xaml.DataBinding.ChangeTracking;
  8. using OmniXaml.Builder;
  9. using OmniXaml.TypeConversion;
  10. using OmniXaml.TypeConversion.BuiltInConverters;
  11. using Perspex.Xaml.Base.UnitTest.SampleModel;
  12. using Xunit;
  13. namespace Perspex.Xaml.Base.UnitTest
  14. {
  15. public class DataContextChangeSynchronizerTest
  16. {
  17. private readonly TypeConverterProvider _repo;
  18. private readonly SamplePerspexObject _guiObject;
  19. private readonly ViewModelMock _viewModel;
  20. public DataContextChangeSynchronizerTest()
  21. {
  22. _repo = new TypeConverterProvider();
  23. _guiObject = new SamplePerspexObject();
  24. _viewModel = new ViewModelMock();
  25. }
  26. [Fact]
  27. public void SameTypesFromUIToModel()
  28. {
  29. var synchronizer = new DataContextChangeSynchronizer(new DataContextChangeSynchronizer.BindingSource(new PropertyPath("IntProp"), _viewModel), new DataContextChangeSynchronizer.BindingTarget(_guiObject, SamplePerspexObject.IntProperty), _repo);
  30. synchronizer.StartUpdatingSourceWhenTargetChanges();
  31. const int someValue = 4;
  32. _guiObject.Int = someValue;
  33. Assert.Equal(someValue, _viewModel.IntProp);
  34. }
  35. [Fact]
  36. public void DifferentTypesFromUIToModel()
  37. {
  38. var synchronizer = new DataContextChangeSynchronizer(new DataContextChangeSynchronizer.BindingSource(new PropertyPath("IntProp"), _viewModel), new DataContextChangeSynchronizer.BindingTarget(_guiObject, SamplePerspexObject.StringProperty), _repo);
  39. synchronizer.StartUpdatingSourceWhenTargetChanges();
  40. _guiObject.String = "2";
  41. Assert.Equal(2, _viewModel.IntProp);
  42. }
  43. [Fact]
  44. public void DifferentTypesAndNonConvertibleValueFromUIToModel()
  45. {
  46. var synchronizer = new DataContextChangeSynchronizer(new DataContextChangeSynchronizer.BindingSource(new PropertyPath("IntProp"), _viewModel), new DataContextChangeSynchronizer.BindingTarget(_guiObject, SamplePerspexObject.StringProperty), _repo);
  47. synchronizer.StartUpdatingSourceWhenTargetChanges();
  48. _guiObject.String = "";
  49. Assert.Equal(default(int), _viewModel.IntProp);
  50. }
  51. [Fact]
  52. public void DifferentTypesFromModelToUI()
  53. {
  54. var synchronizer = new DataContextChangeSynchronizer(new DataContextChangeSynchronizer.BindingSource(new PropertyPath("IntProp"), _viewModel), new DataContextChangeSynchronizer.BindingTarget(_guiObject, SamplePerspexObject.StringProperty), _repo);
  55. synchronizer.StartUpdatingTargetWhenSourceChanges();
  56. _viewModel.IntProp = 2;
  57. Assert.Equal("2", _guiObject.String);
  58. }
  59. [Fact]
  60. public void SameTypesFromModelToUI()
  61. {
  62. var synchronizer = new DataContextChangeSynchronizer(new DataContextChangeSynchronizer.BindingSource(new PropertyPath("IntProp"), _viewModel), new DataContextChangeSynchronizer.BindingTarget(_guiObject, SamplePerspexObject.IntProperty), _repo);
  63. synchronizer.StartUpdatingTargetWhenSourceChanges();
  64. _viewModel.IntProp = 2;
  65. Assert.Equal(2, _guiObject.Int);
  66. }
  67. [Fact]
  68. public void GrokysTest()
  69. {
  70. var mainWindowViewModel = new MainWindowViewModel();
  71. var contentControl = new ContentControl();
  72. var synchronizer = new DataContextChangeSynchronizer(new DataContextChangeSynchronizer.BindingSource(new PropertyPath("Content"), mainWindowViewModel), new DataContextChangeSynchronizer.BindingTarget(contentControl, ContentControl.ContentProperty), _repo);
  73. synchronizer.StartUpdatingTargetWhenSourceChanges();
  74. var logInViewModel = new LogInViewModel();
  75. mainWindowViewModel.Content = logInViewModel;
  76. Assert.Equal(logInViewModel, contentControl.Content);
  77. }
  78. }
  79. }