HeaderedItemsControlTests .cs 2.3 KB

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