BindingTests_TemplatedParent.cs 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  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 System.Reactive.Subjects;
  6. using Moq;
  7. using Avalonia.Controls;
  8. using Avalonia.Data;
  9. using Avalonia.Styling;
  10. using Xunit;
  11. using System.Reactive.Disposables;
  12. using Avalonia.UnitTests;
  13. using Avalonia.VisualTree;
  14. using System.Linq;
  15. using Avalonia.Markup.Data;
  16. namespace Avalonia.Markup.UnitTests.Data
  17. {
  18. public class BindingTests_TemplatedParent
  19. {
  20. [Fact]
  21. public void OneWay_Binding_Should_Be_Set_Up()
  22. {
  23. var target = CreateTarget();
  24. var binding = new Binding
  25. {
  26. Mode = BindingMode.OneWay,
  27. RelativeSource = new RelativeSource(RelativeSourceMode.TemplatedParent),
  28. Priority = BindingPriority.TemplatedParent,
  29. Path = "Foo",
  30. };
  31. target.Object.Bind(TextBox.TextProperty, binding);
  32. target.Verify(x => x.Bind(
  33. TextBox.TextProperty,
  34. It.IsAny<IObservable<BindingValue<object>>>(),
  35. BindingPriority.TemplatedParent));
  36. }
  37. [Fact]
  38. public void TwoWay_Binding_Should_Be_Set_Up()
  39. {
  40. var target = CreateTarget();
  41. var binding = new Binding
  42. {
  43. Mode = BindingMode.TwoWay,
  44. RelativeSource = new RelativeSource(RelativeSourceMode.TemplatedParent),
  45. Priority = BindingPriority.TemplatedParent,
  46. Path = "Foo",
  47. };
  48. target.Object.Bind(TextBox.TextProperty, binding);
  49. target.Verify(x => x.Bind(
  50. TextBox.TextProperty,
  51. It.IsAny<IObservable<BindingValue<object>>>(),
  52. BindingPriority.TemplatedParent));
  53. }
  54. private Mock<IControl> CreateTarget(
  55. ITemplatedControl templatedParent = null,
  56. string text = null)
  57. {
  58. var result = new Mock<IControl>();
  59. result.Setup(x => x.GetValue(Control.TemplatedParentProperty)).Returns(templatedParent);
  60. result.Setup(x => x.GetValue((AvaloniaProperty)Control.TemplatedParentProperty)).Returns(templatedParent);
  61. result.Setup(x => x.GetValue((AvaloniaProperty)TextBox.TextProperty)).Returns(text);
  62. result.Setup(x => x.Bind(It.IsAny<AvaloniaProperty>(), It.IsAny<IObservable<BindingValue<object>>>(), It.IsAny<BindingPriority>()))
  63. .Returns(Disposable.Empty);
  64. return result;
  65. }
  66. }
  67. }