TabStripTests.cs 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172
  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.Collections.ObjectModel;
  4. using System.Linq;
  5. using Moq;
  6. using Avalonia.Controls.Presenters;
  7. using Avalonia.Controls.Primitives;
  8. using Avalonia.Controls.Templates;
  9. using Avalonia.LogicalTree;
  10. using Xunit;
  11. namespace Avalonia.Controls.UnitTests.Primitives
  12. {
  13. public class TabStripTests
  14. {
  15. [Fact]
  16. public void Header_Of_IHeadered_Items_Should_Be_Used()
  17. {
  18. var items = new[]
  19. {
  20. #pragma warning disable CS0252 // Possible unintended reference comparison; left hand side needs cast
  21. Mock.Of<IHeadered>(x => x.Header == "foo"),
  22. Mock.Of<IHeadered>(x => x.Header == "bar"),
  23. #pragma warning restore CS0252 // Possible unintended reference comparison; left hand side needs cast
  24. };
  25. var target = new TabStrip
  26. {
  27. Template = new FuncControlTemplate<TabStrip>(CreateTabStripTemplate),
  28. Items = items,
  29. };
  30. target.ApplyTemplate();
  31. target.Presenter.ApplyTemplate();
  32. var result = target.GetLogicalChildren()
  33. .OfType<TabStripItem>()
  34. .Select(x => x.Content)
  35. .ToList();
  36. Assert.Equal(new[] { "foo", "bar" }, result);
  37. }
  38. [Fact]
  39. public void Data_Of_Non_IHeadered_Items_Should_Be_Used()
  40. {
  41. var items = new[]
  42. {
  43. "foo",
  44. "bar"
  45. };
  46. var target = new TabStrip
  47. {
  48. Template = new FuncControlTemplate<TabStrip>(CreateTabStripTemplate),
  49. Items = items,
  50. };
  51. target.ApplyTemplate();
  52. target.Presenter.ApplyTemplate();
  53. var result = target.GetLogicalChildren()
  54. .OfType<TabStripItem>()
  55. .Select(x => x.Content)
  56. .ToList();
  57. Assert.Equal(new[] { "foo", "bar" }, result);
  58. }
  59. [Fact]
  60. public void First_Tab_Should_Be_Selected_By_Default()
  61. {
  62. var items = new[]
  63. {
  64. new TabItem
  65. {
  66. Name = "first"
  67. },
  68. new TabItem
  69. {
  70. Name = "second"
  71. },
  72. };
  73. var target = new TabStrip
  74. {
  75. Template = new FuncControlTemplate<TabStrip>(CreateTabStripTemplate),
  76. Items = items,
  77. };
  78. target.ApplyTemplate();
  79. Assert.Equal(0, target.SelectedIndex);
  80. Assert.Same(items[0], target.SelectedItem);
  81. }
  82. [Fact]
  83. public void Setting_SelectedItem_Should_Set_Selection()
  84. {
  85. var items = new[]
  86. {
  87. new TabItem
  88. {
  89. Name = "first"
  90. },
  91. new TabItem
  92. {
  93. Name = "second"
  94. },
  95. };
  96. var target = new TabStrip
  97. {
  98. Template = new FuncControlTemplate<TabStrip>(CreateTabStripTemplate),
  99. Items = items,
  100. SelectedItem = items[1],
  101. };
  102. target.ApplyTemplate();
  103. Assert.Equal(1, target.SelectedIndex);
  104. Assert.Same(items[1], target.SelectedItem);
  105. }
  106. [Fact]
  107. public void Removing_Selected_Should_Select_Next()
  108. {
  109. var items = new ObservableCollection<TabItem>()
  110. {
  111. new TabItem
  112. {
  113. Name = "first"
  114. },
  115. new TabItem
  116. {
  117. Name = "second"
  118. },
  119. new TabItem
  120. {
  121. Name = "3rd"
  122. },
  123. };
  124. var target = new TabStrip
  125. {
  126. Template = new FuncControlTemplate<TabStrip>(CreateTabStripTemplate),
  127. Items = items
  128. };
  129. target.ApplyTemplate();
  130. target.SelectedItem = items[1];
  131. Assert.Same(items[1], target.SelectedItem);
  132. items.RemoveAt(1);
  133. // Assert for former element [2] now [1] == "3rd"
  134. Assert.Equal(1, target.SelectedIndex);
  135. Assert.Same(items[1], target.SelectedItem);
  136. Assert.Same("3rd", ((TabItem)target.SelectedItem).Name);
  137. }
  138. private Control CreateTabStripTemplate(TabStrip parent)
  139. {
  140. return new ItemsPresenter
  141. {
  142. Name = "itemsPresenter",
  143. [!ItemsPresenter.ItemsProperty] = parent[!ItemsControl.ItemsProperty],
  144. [!ItemsPresenter.MemberSelectorProperty] = parent[!ItemsControl.MemberSelectorProperty],
  145. };
  146. }
  147. }
  148. }