HeaderedItemsControlTests .cs 2.3 KB

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