BindingTests_TemplatedParent.cs 2.5 KB

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