BindingTests_DataValidation.cs 2.4 KB

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