BindingTests_DataValidation.cs 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. // Copyright (c) The Avalonia 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 System.Collections.Generic;
  5. using System.Linq;
  6. using System.Reactive.Linq;
  7. using Avalonia.Controls;
  8. using Avalonia.Data;
  9. using Avalonia.Markup.Data;
  10. using Avalonia.Markup.Xaml.Data;
  11. using Moq;
  12. using ReactiveUI;
  13. using Xunit;
  14. namespace Avalonia.Markup.Xaml.UnitTests.Data
  15. {
  16. public class BindingTests_DataValidation
  17. {
  18. [Fact]
  19. public void Initiate_Should_Not_Enable_Data_Validation_With_BindingPriority_LocalValue()
  20. {
  21. var textBlock = new TextBlock
  22. {
  23. DataContext = new Class1(),
  24. };
  25. var target = new Binding(nameof(Class1.Foo));
  26. var instanced = target.Initiate(textBlock, TextBlock.TextProperty, enableDataValidation: false);
  27. var subject = (ExpressionSubject)instanced.Subject;
  28. object result = null;
  29. subject.Subscribe(x => result = x);
  30. Assert.IsType<string>(result);
  31. }
  32. [Fact]
  33. public void Initiate_Should_Enable_Data_Validation_With_BindingPriority_LocalValue()
  34. {
  35. var textBlock = new TextBlock
  36. {
  37. DataContext = new Class1(),
  38. };
  39. var target = new Binding(nameof(Class1.Foo));
  40. var instanced = target.Initiate(textBlock, TextBlock.TextProperty, enableDataValidation: true);
  41. var subject = (ExpressionSubject)instanced.Subject;
  42. object result = null;
  43. subject.Subscribe(x => result = x);
  44. Assert.Equal(new BindingNotification("foo"), result);
  45. }
  46. [Fact]
  47. public void Initiate_Should_Not_Enable_Data_Validation_With_BindingPriority_TemplatedParent()
  48. {
  49. var textBlock = new TextBlock
  50. {
  51. DataContext = new Class1(),
  52. };
  53. var target = new Binding(nameof(Class1.Foo)) { Priority = BindingPriority.TemplatedParent };
  54. var instanced = target.Initiate(textBlock, TextBlock.TextProperty, enableDataValidation: true);
  55. var subject = (ExpressionSubject)instanced.Subject;
  56. object result = null;
  57. subject.Subscribe(x => result = x);
  58. Assert.IsType<string>(result);
  59. }
  60. private class Class1
  61. {
  62. public string Foo { get; set; } = "foo";
  63. }
  64. }
  65. }