HeaderedItemsControlTests .cs 2.4 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 Avalonia.Controls.Presenters;
  4. using Avalonia.Controls.Primitives;
  5. using Avalonia.Controls.Templates;
  6. using Avalonia.LogicalTree;
  7. using Xunit;
  8. namespace Avalonia.Controls.UnitTests
  9. {
  10. public class HeaderedItemsControlTests
  11. {
  12. [Fact]
  13. public void Control_Header_Should_Be_Logical_Child_Before_ApplyTemplate()
  14. {
  15. var target = new HeaderedItemsControl
  16. {
  17. Template = GetTemplate(),
  18. };
  19. var child = new Control();
  20. target.Header = child;
  21. Assert.Equal(child.Parent, target);
  22. Assert.Equal(child.GetLogicalParent(), target);
  23. Assert.Equal(new[] { child }, target.GetLogicalChildren());
  24. }
  25. [Fact]
  26. public void DataTemplate_Created_Control_Should_Be_Logical_Child_After_ApplyTemplate()
  27. {
  28. var target = new HeaderedItemsControl
  29. {
  30. Template = GetTemplate(),
  31. };
  32. target.Header = "Foo";
  33. target.ApplyTemplate();
  34. ((ContentPresenter)target.HeaderPresenter).UpdateChild();
  35. var child = target.HeaderPresenter.Child;
  36. Assert.NotNull(child);
  37. Assert.Equal(target, child.Parent);
  38. Assert.Equal(target, child.GetLogicalParent());
  39. Assert.Equal(new[] { child }, target.GetLogicalChildren());
  40. }
  41. [Fact]
  42. public void Clearing_Content_Should_Clear_Logical_Child()
  43. {
  44. var target = new HeaderedItemsControl();
  45. var child = new Control();
  46. target.Header = child;
  47. target.Header = null;
  48. Assert.Null(child.Parent);
  49. Assert.Null(child.GetLogicalParent());
  50. Assert.Empty(target.GetLogicalChildren());
  51. }
  52. private FuncControlTemplate GetTemplate()
  53. {
  54. return new FuncControlTemplate<HeaderedItemsControl>(parent =>
  55. {
  56. return new Border
  57. {
  58. Child = new ContentPresenter
  59. {
  60. Name = "PART_HeaderPresenter",
  61. [~ContentPresenter.ContentProperty] = parent[~HeaderedItemsControl.HeaderProperty],
  62. }
  63. };
  64. });
  65. }
  66. }
  67. }